@byollm/conformance 0.1.0-alpha.56 → 0.1.0-alpha.58
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/{chunk-FCX5R4LZ.js → chunk-3N7FYXDP.js} +129 -113
- package/dist/chunk-3N7FYXDP.js.map +1 -0
- package/dist/cli.js +1 -1
- package/dist/index.d.ts +10 -3
- package/dist/index.js +1 -1
- package/package.json +4 -4
- package/dist/chunk-FCX5R4LZ.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
> [!WARNING]
|
|
2
|
-
> **Alpha (`0.1.0-alpha.
|
|
2
|
+
> **Alpha (`0.1.0-alpha.58`) — under active development. Don't use this yet.**
|
|
3
3
|
>
|
|
4
4
|
> Install it deliberately: `npm install @byollm/conformance@alpha`.
|
|
5
5
|
>
|
|
@@ -79,7 +79,7 @@
|
|
|
79
79
|
> packages published and `@byollm/server` did not: a Sigstore
|
|
80
80
|
> transparency-log 409 on its provenance attestation. The workflow's
|
|
81
81
|
> "already published" guard correctly refuses to resume a partial publish,
|
|
82
|
-
> so `0.1.0-alpha.
|
|
82
|
+
> so `0.1.0-alpha.58` is that release, whole.
|
|
83
83
|
>
|
|
84
84
|
> If you run the Supabase adapter, `alpha.21` needs
|
|
85
85
|
> `20260819010000_completed_by_lease_id.sql`: alpha.19 shipped §3.6's
|
|
@@ -29,7 +29,6 @@ import {
|
|
|
29
29
|
signRequest
|
|
30
30
|
} from "@byollm/protocol";
|
|
31
31
|
import {
|
|
32
|
-
Allowlist,
|
|
33
32
|
Budgets,
|
|
34
33
|
IngressLog,
|
|
35
34
|
SpendLedger,
|
|
@@ -116,12 +115,10 @@ function daemonConfig(options) {
|
|
|
116
115
|
async function pairDaemon(target, options) {
|
|
117
116
|
const home = await mkdtemp(join(tmpdir(), "byollm-conformance-"));
|
|
118
117
|
const loaded = daemonConfig({
|
|
119
|
-
offer: options.offer
|
|
118
|
+
offer: options.offer,
|
|
120
119
|
subscription: options.subscription ?? false,
|
|
121
120
|
...options.metered === void 0 ? {} : { metered: options.metered }
|
|
122
121
|
});
|
|
123
|
-
const allowlist = new Allowlist(join(home, "allow.json"));
|
|
124
|
-
await allowlist.load();
|
|
125
122
|
const budgets = new Budgets(
|
|
126
123
|
join(home, "budgets.json"),
|
|
127
124
|
loaded.config.community
|
|
@@ -139,7 +136,6 @@ async function pairDaemon(target, options) {
|
|
|
139
136
|
const capabilities = loaded.routes.map((route) => ({
|
|
140
137
|
kind: route.kind,
|
|
141
138
|
service: route.service,
|
|
142
|
-
isDefault: true,
|
|
143
139
|
backendId: route.backendId,
|
|
144
140
|
backendClass: route.backendClass,
|
|
145
141
|
model: route.model,
|
|
@@ -210,7 +206,6 @@ async function pairDaemon(target, options) {
|
|
|
210
206
|
},
|
|
211
207
|
daemonVersion: "conformance",
|
|
212
208
|
loaded,
|
|
213
|
-
allowlist,
|
|
214
209
|
budgets,
|
|
215
210
|
spend,
|
|
216
211
|
ingress,
|
|
@@ -219,7 +214,6 @@ async function pairDaemon(target, options) {
|
|
|
219
214
|
return {
|
|
220
215
|
runner,
|
|
221
216
|
backend,
|
|
222
|
-
allowlist,
|
|
223
217
|
runnerId: result.pairing.runnerId,
|
|
224
218
|
owner: result.pairing.owner,
|
|
225
219
|
keys: await deviceIdentity.load(Date.now()),
|
|
@@ -509,13 +503,19 @@ var CHECKS = [
|
|
|
509
503
|
title: "a runner token is bound to exactly the approving user",
|
|
510
504
|
musts: ["PAIR_ONE_USER", "PAIR_INTERACTIVE"],
|
|
511
505
|
async run(target) {
|
|
512
|
-
const alice = await pairDaemon(target, {
|
|
506
|
+
const alice = await pairDaemon(target, {
|
|
507
|
+
owner: "alice",
|
|
508
|
+
offer: "private"
|
|
509
|
+
});
|
|
513
510
|
try {
|
|
514
511
|
assert(
|
|
515
512
|
alice.owner === await ownerIdFor(target, "alice"),
|
|
516
513
|
`runner was bound to "${alice.owner}", not to the approving user`
|
|
517
514
|
);
|
|
518
|
-
const bob = await pairDaemon(target, {
|
|
515
|
+
const bob = await pairDaemon(target, {
|
|
516
|
+
owner: "bob",
|
|
517
|
+
offer: "private"
|
|
518
|
+
});
|
|
519
519
|
assert(
|
|
520
520
|
bob.owner !== alice.owner,
|
|
521
521
|
"two different approvers produced the same runner owner"
|
|
@@ -547,7 +547,10 @@ var CHECKS = [
|
|
|
547
547
|
title: "an enqueued job runs on the owner's daemon and the result comes back",
|
|
548
548
|
musts: ["CLAIM_REQUIRES_CAPABILITY", "RESULT_IDEMPOTENT"],
|
|
549
549
|
async run(target) {
|
|
550
|
-
const daemon = await pairDaemon(target, {
|
|
550
|
+
const daemon = await pairDaemon(target, {
|
|
551
|
+
owner: "alice",
|
|
552
|
+
offer: "private"
|
|
553
|
+
});
|
|
551
554
|
try {
|
|
552
555
|
const job = await target.enqueue({
|
|
553
556
|
kind: "llm.generate",
|
|
@@ -577,7 +580,10 @@ var CHECKS = [
|
|
|
577
580
|
title: "a daemon is never handed a kind it did not advertise",
|
|
578
581
|
musts: ["KIND_TYPED_ONLY", "CLAIM_REQUIRES_CAPABILITY"],
|
|
579
582
|
async run(target) {
|
|
580
|
-
const daemon = await pairDaemon(target, {
|
|
583
|
+
const daemon = await pairDaemon(target, {
|
|
584
|
+
owner: "alice",
|
|
585
|
+
offer: "private"
|
|
586
|
+
});
|
|
581
587
|
try {
|
|
582
588
|
const job = await target.enqueue({
|
|
583
589
|
kind: "llm.chat",
|
|
@@ -605,7 +611,6 @@ var CHECKS = [
|
|
|
605
611
|
{
|
|
606
612
|
kind: "llm.generate",
|
|
607
613
|
service: "local",
|
|
608
|
-
isDefault: true,
|
|
609
614
|
backendId: "openai-http",
|
|
610
615
|
backendClass: "http",
|
|
611
616
|
model: "echo-model",
|
|
@@ -626,7 +631,11 @@ var CHECKS = [
|
|
|
626
631
|
title: "a job whose runner vanished is offered again, losing nothing",
|
|
627
632
|
musts: ["LEASE_RECLAIMABLE", "LEASE_HONORED"],
|
|
628
633
|
async run(target) {
|
|
629
|
-
const dead = await pairDaemon(target, {
|
|
634
|
+
const dead = await pairDaemon(target, {
|
|
635
|
+
owner: "alice",
|
|
636
|
+
label: "dead",
|
|
637
|
+
offer: "private"
|
|
638
|
+
});
|
|
630
639
|
const job = await target.enqueue({
|
|
631
640
|
kind: "llm.generate",
|
|
632
641
|
payload: prompt("work"),
|
|
@@ -645,7 +654,8 @@ var CHECKS = [
|
|
|
645
654
|
await advance(target, target.leaseMs + 500);
|
|
646
655
|
const alive = await pairDaemon(target, {
|
|
647
656
|
owner: "alice",
|
|
648
|
-
label: "alive"
|
|
657
|
+
label: "alive",
|
|
658
|
+
offer: "private"
|
|
649
659
|
});
|
|
650
660
|
try {
|
|
651
661
|
const reclaimed = await claimOne(target, alive);
|
|
@@ -690,21 +700,15 @@ var CHECKS = [
|
|
|
690
700
|
},
|
|
691
701
|
{
|
|
692
702
|
id: "C005_AUDIENCE_MATRIX",
|
|
693
|
-
title: "all
|
|
703
|
+
title: "all four audience x offer-scope combinations behave as specified",
|
|
694
704
|
musts: ["AUDIENCE_BOTH_SIDES", "NAMED_LOCAL_ALLOWLIST"],
|
|
695
705
|
async run(target) {
|
|
696
706
|
const expected = {
|
|
697
707
|
"private:private": false,
|
|
698
708
|
"private:team": false,
|
|
699
|
-
"private:public": false,
|
|
700
709
|
"team:private": false,
|
|
701
|
-
"team:team": false
|
|
702
|
-
// refused locally —
|
|
703
|
-
"team:public": true,
|
|
704
|
-
"public:private": false,
|
|
705
|
-
"public:team": false,
|
|
706
|
-
// refused locally — allowlist is empty
|
|
707
|
-
"public:public": true
|
|
710
|
+
"team:team": false
|
|
711
|
+
// refused locally — nothing admits alice
|
|
708
712
|
};
|
|
709
713
|
for (const audience of AUDIENCES) {
|
|
710
714
|
for (const offer of OFFER_SCOPES) {
|
|
@@ -735,7 +739,21 @@ var CHECKS = [
|
|
|
735
739
|
},
|
|
736
740
|
{
|
|
737
741
|
id: "C006_NAMED_LOCAL_ALLOWLIST",
|
|
738
|
-
|
|
742
|
+
/**
|
|
743
|
+
* Renamed with the release that made the sentence true — Amendment G, B2.
|
|
744
|
+
*
|
|
745
|
+
* The old title read "a named job runs only once the daemon's own
|
|
746
|
+
* allowlist admits it", which was true only under a generous reading of
|
|
747
|
+
* "own": the list was per-person and local, and a team member had to be
|
|
748
|
+
* enrolled on every machine by hand.
|
|
749
|
+
*
|
|
750
|
+
* The id does not change, per the id-stability law. What changes is the
|
|
751
|
+
* sentence, and it now names all three of the things a reader would
|
|
752
|
+
* otherwise take on faith — that the list is local, that its authority was
|
|
753
|
+
* established out of band, and that admission is a property of the asker
|
|
754
|
+
* rather than of the request.
|
|
755
|
+
*/
|
|
756
|
+
title: "a team job is refused by a device whose upstream cannot say who the asker is, and is not offered to it again",
|
|
739
757
|
musts: ["NAMED_LOCAL_ALLOWLIST", "REFUSAL_NOT_REOFFERED"],
|
|
740
758
|
async run(target) {
|
|
741
759
|
const bob = await pairDaemon(target, { owner: "bob", offer: "team" });
|
|
@@ -757,21 +775,6 @@ var CHECKS = [
|
|
|
757
775
|
!reoffered.some((job) => job.id === refused.id),
|
|
758
776
|
"a server re-offered a job to the runner that refused it"
|
|
759
777
|
);
|
|
760
|
-
await bob.allowlist.add(
|
|
761
|
-
{ origin: target.origin, owner: await ownerIdFor(target, "alice") },
|
|
762
|
-
Date.now()
|
|
763
|
-
);
|
|
764
|
-
const allowed = await target.enqueue({
|
|
765
|
-
kind: "llm.generate",
|
|
766
|
-
payload: prompt("after"),
|
|
767
|
-
owner: "alice",
|
|
768
|
-
audience: "team"
|
|
769
|
-
});
|
|
770
|
-
await bob.runner.tick();
|
|
771
|
-
await waitFor(
|
|
772
|
-
async () => (await target.job(allowed.id))?.state === "ok",
|
|
773
|
-
{ what: "the allowed named job to run" }
|
|
774
|
-
);
|
|
775
778
|
} finally {
|
|
776
779
|
await bob.dispose();
|
|
777
780
|
}
|
|
@@ -784,19 +787,15 @@ var CHECKS = [
|
|
|
784
787
|
async run(target) {
|
|
785
788
|
const bob = await pairDaemon(target, {
|
|
786
789
|
owner: "bob",
|
|
787
|
-
offer: "
|
|
790
|
+
offer: "team",
|
|
788
791
|
subscription: true
|
|
789
792
|
});
|
|
790
793
|
try {
|
|
791
|
-
await bob.allowlist.add(
|
|
792
|
-
{ origin: target.origin, owner: await ownerIdFor(target, "alice") },
|
|
793
|
-
Date.now()
|
|
794
|
-
);
|
|
795
794
|
const job = await target.enqueue({
|
|
796
795
|
kind: "llm.generate",
|
|
797
796
|
payload: prompt("someone else's work"),
|
|
798
797
|
owner: "alice",
|
|
799
|
-
audience: "
|
|
798
|
+
audience: "team"
|
|
800
799
|
});
|
|
801
800
|
await bob.runner.tick();
|
|
802
801
|
await sleep(80);
|
|
@@ -834,7 +833,10 @@ var CHECKS = [
|
|
|
834
833
|
// declared in a spec, absent from the registry, and tested all along.
|
|
835
834
|
musts: ["REVOCATION_HONORED", "REVOCATION_IMMEDIATE"],
|
|
836
835
|
async run(target) {
|
|
837
|
-
const daemon = await pairDaemon(target, {
|
|
836
|
+
const daemon = await pairDaemon(target, {
|
|
837
|
+
owner: "alice",
|
|
838
|
+
offer: "private"
|
|
839
|
+
});
|
|
838
840
|
try {
|
|
839
841
|
await target.revokeRunner(daemon.runnerId);
|
|
840
842
|
const job = await target.enqueue({
|
|
@@ -862,7 +864,10 @@ var CHECKS = [
|
|
|
862
864
|
title: "cancel aborts a running job's backend call",
|
|
863
865
|
musts: ["CANCEL_HONORED"],
|
|
864
866
|
async run(target) {
|
|
865
|
-
const daemon = await pairDaemon(target, {
|
|
867
|
+
const daemon = await pairDaemon(target, {
|
|
868
|
+
owner: "alice",
|
|
869
|
+
offer: "private"
|
|
870
|
+
});
|
|
866
871
|
try {
|
|
867
872
|
daemon.backend.hangMs = 3e4;
|
|
868
873
|
const job = await target.enqueue({
|
|
@@ -890,7 +895,10 @@ var CHECKS = [
|
|
|
890
895
|
title: "the first terminal outcome wins",
|
|
891
896
|
musts: ["RESULT_IDEMPOTENT"],
|
|
892
897
|
async run(target) {
|
|
893
|
-
const daemon = await pairDaemon(target, {
|
|
898
|
+
const daemon = await pairDaemon(target, {
|
|
899
|
+
owner: "alice",
|
|
900
|
+
offer: "private"
|
|
901
|
+
});
|
|
894
902
|
try {
|
|
895
903
|
const job = await target.enqueue({
|
|
896
904
|
kind: "llm.generate",
|
|
@@ -931,7 +939,10 @@ var CHECKS = [
|
|
|
931
939
|
after?.outcome?.text === "the answer that counts",
|
|
932
940
|
`a second result overwrote the first (${String(after?.outcome?.text)})`
|
|
933
941
|
);
|
|
934
|
-
const stranger = await pairDaemon(target, {
|
|
942
|
+
const stranger = await pairDaemon(target, {
|
|
943
|
+
owner: "alice",
|
|
944
|
+
offer: "private"
|
|
945
|
+
});
|
|
935
946
|
try {
|
|
936
947
|
const foreign = await postResult(target, stranger, {
|
|
937
948
|
jobId: job.id,
|
|
@@ -961,8 +972,11 @@ var CHECKS = [
|
|
|
961
972
|
title: "a dependent job waits for its dependency, across two daemons",
|
|
962
973
|
musts: ["DEPENDS_ON_GATING", "TTL_EXPIRY"],
|
|
963
974
|
async run(target) {
|
|
964
|
-
const alice = await pairDaemon(target, {
|
|
965
|
-
|
|
975
|
+
const alice = await pairDaemon(target, {
|
|
976
|
+
owner: "alice",
|
|
977
|
+
offer: "private"
|
|
978
|
+
});
|
|
979
|
+
const bob = await pairDaemon(target, { owner: "bob", offer: "private" });
|
|
966
980
|
try {
|
|
967
981
|
const first = await target.enqueue({
|
|
968
982
|
kind: "llm.generate",
|
|
@@ -1035,7 +1049,10 @@ var CHECKS = [
|
|
|
1035
1049
|
title: "a dependent job's TTL starts when it becomes claimable, not at enqueue",
|
|
1036
1050
|
musts: ["TTL_EXPIRY"],
|
|
1037
1051
|
async run(target) {
|
|
1038
|
-
const daemon = await pairDaemon(target, {
|
|
1052
|
+
const daemon = await pairDaemon(target, {
|
|
1053
|
+
owner: "alice",
|
|
1054
|
+
offer: "private"
|
|
1055
|
+
});
|
|
1039
1056
|
try {
|
|
1040
1057
|
daemon.backend.hangMs = target.ttlMs * 2;
|
|
1041
1058
|
const first = await target.enqueue({
|
|
@@ -1071,28 +1088,8 @@ var CHECKS = [
|
|
|
1071
1088
|
// the granted device is refused rather than recorded.
|
|
1072
1089
|
musts: ["PROVENANCE_NAMES_DEVICE"],
|
|
1073
1090
|
async run(target) {
|
|
1074
|
-
const bob = await pairDaemon(target, { owner: "bob", offer: "
|
|
1091
|
+
const bob = await pairDaemon(target, { owner: "bob", offer: "team" });
|
|
1075
1092
|
try {
|
|
1076
|
-
const community = await target.enqueue({
|
|
1077
|
-
kind: "llm.generate",
|
|
1078
|
-
payload: prompt("run this anywhere"),
|
|
1079
|
-
owner: "alice",
|
|
1080
|
-
audience: "public"
|
|
1081
|
-
});
|
|
1082
|
-
await bob.runner.tick();
|
|
1083
|
-
await waitFor(
|
|
1084
|
-
async () => (await target.job(community.id))?.state === "ok",
|
|
1085
|
-
{ what: "the community job to complete" }
|
|
1086
|
-
);
|
|
1087
|
-
const delivered = await target.job(community.id);
|
|
1088
|
-
assert(
|
|
1089
|
-
delivered?.provenance?.untrusted === true,
|
|
1090
|
-
"a public result was not marked untrusted"
|
|
1091
|
-
);
|
|
1092
|
-
assert(
|
|
1093
|
-
delivered.provenance.runnerOwner === "bob",
|
|
1094
|
-
"the result did not carry the runner's owner"
|
|
1095
|
-
);
|
|
1096
1093
|
const own = await target.enqueue({
|
|
1097
1094
|
kind: "llm.generate",
|
|
1098
1095
|
payload: prompt("my own"),
|
|
@@ -1117,7 +1114,10 @@ var CHECKS = [
|
|
|
1117
1114
|
title: "every executed prompt is in the ingress log before it runs",
|
|
1118
1115
|
musts: ["INGRESS_LOGGED_BEFORE_EXECUTION"],
|
|
1119
1116
|
async run(target) {
|
|
1120
|
-
const daemon = await pairDaemon(target, {
|
|
1117
|
+
const daemon = await pairDaemon(target, {
|
|
1118
|
+
owner: "alice",
|
|
1119
|
+
offer: "private"
|
|
1120
|
+
});
|
|
1121
1121
|
let ticking = Promise.resolve();
|
|
1122
1122
|
try {
|
|
1123
1123
|
daemon.backend.hangMs = 3e4;
|
|
@@ -1192,7 +1192,7 @@ var CHECKS = [
|
|
|
1192
1192
|
async run(target) {
|
|
1193
1193
|
const bob = await pairDaemon(target, {
|
|
1194
1194
|
owner: "bob",
|
|
1195
|
-
offer: "
|
|
1195
|
+
offer: "team",
|
|
1196
1196
|
// Pointed at localhost — which changes nothing, because a named
|
|
1197
1197
|
// provider's cost comes from the registry, not from an address
|
|
1198
1198
|
// ({@link MUSTS.COST_NOT_CONFIGURABLE}).
|
|
@@ -1207,15 +1207,11 @@ var CHECKS = [
|
|
|
1207
1207
|
bob.loaded.routes.every((route) => route.cost === "metered"),
|
|
1208
1208
|
"a metered provider was read as free because of its base URL"
|
|
1209
1209
|
);
|
|
1210
|
-
await bob.allowlist.add(
|
|
1211
|
-
{ origin: target.origin, owner: await ownerIdFor(target, "alice") },
|
|
1212
|
-
Date.now()
|
|
1213
|
-
);
|
|
1214
1210
|
const job = await target.enqueue({
|
|
1215
1211
|
kind: "llm.generate",
|
|
1216
1212
|
payload: prompt("spend someone else's money"),
|
|
1217
1213
|
owner: "alice",
|
|
1218
|
-
audience: "
|
|
1214
|
+
audience: "team"
|
|
1219
1215
|
});
|
|
1220
1216
|
await bob.runner.tick();
|
|
1221
1217
|
await sleep(80);
|
|
@@ -1231,7 +1227,7 @@ var CHECKS = [
|
|
|
1231
1227
|
const availability = await target.runnerAvailability({
|
|
1232
1228
|
kind: "llm.generate",
|
|
1233
1229
|
owner: "alice",
|
|
1234
|
-
audience: "
|
|
1230
|
+
audience: "team"
|
|
1235
1231
|
});
|
|
1236
1232
|
assert(
|
|
1237
1233
|
!availability.available,
|
|
@@ -1259,7 +1255,7 @@ var CHECKS = [
|
|
|
1259
1255
|
async run(target) {
|
|
1260
1256
|
const bob = await pairDaemon(target, {
|
|
1261
1257
|
owner: "bob",
|
|
1262
|
-
offer: "
|
|
1258
|
+
offer: "team",
|
|
1263
1259
|
metered: {
|
|
1264
1260
|
// The generic backend pointed at a remote address. No registry entry
|
|
1265
1261
|
// says what this costs; it is metered because of where it goes
|
|
@@ -1276,30 +1272,15 @@ var CHECKS = [
|
|
|
1276
1272
|
"a remote backend was treated as free"
|
|
1277
1273
|
);
|
|
1278
1274
|
assert(
|
|
1279
|
-
bob.loaded.routes.every((route) => route.offerScope === "
|
|
1275
|
+
bob.loaded.routes.every((route) => route.offerScope === "team"),
|
|
1280
1276
|
"a deliberately shared metered backend was narrowed anyway"
|
|
1281
1277
|
);
|
|
1282
|
-
await bob.allowlist.add(
|
|
1283
|
-
{ origin: target.origin, owner: await ownerIdFor(target, "alice") },
|
|
1284
|
-
Date.now()
|
|
1285
|
-
);
|
|
1286
|
-
const first = await target.enqueue({
|
|
1287
|
-
kind: "llm.generate",
|
|
1288
|
-
payload: prompt("work bob agreed to pay for"),
|
|
1289
|
-
owner: "alice",
|
|
1290
|
-
audience: "public"
|
|
1291
|
-
});
|
|
1292
|
-
await bob.runner.tick();
|
|
1293
|
-
await waitFor(
|
|
1294
|
-
async () => (await target.job(first.id))?.state === "ok",
|
|
1295
|
-
{ what: "a consented metered job to run" }
|
|
1296
|
-
);
|
|
1297
1278
|
await bob.spend.record("primary", 900, Date.now());
|
|
1298
1279
|
const second = await target.enqueue({
|
|
1299
1280
|
kind: "llm.generate",
|
|
1300
1281
|
payload: prompt("work past the ceiling"),
|
|
1301
1282
|
owner: "alice",
|
|
1302
|
-
audience: "
|
|
1283
|
+
audience: "team"
|
|
1303
1284
|
});
|
|
1304
1285
|
const seenBefore = bob.backend.seen.length;
|
|
1305
1286
|
await bob.runner.tick();
|
|
@@ -1333,8 +1314,16 @@ var CHECKS = [
|
|
|
1333
1314
|
title: "two runners racing one job \u2014 exactly one gets it",
|
|
1334
1315
|
musts: ["CLAIM_ATOMIC"],
|
|
1335
1316
|
async run(target) {
|
|
1336
|
-
const a = await pairDaemon(target, {
|
|
1337
|
-
|
|
1317
|
+
const a = await pairDaemon(target, {
|
|
1318
|
+
owner: "alice",
|
|
1319
|
+
label: "laptop",
|
|
1320
|
+
offer: "private"
|
|
1321
|
+
});
|
|
1322
|
+
const b = await pairDaemon(target, {
|
|
1323
|
+
owner: "alice",
|
|
1324
|
+
label: "desktop",
|
|
1325
|
+
offer: "private"
|
|
1326
|
+
});
|
|
1338
1327
|
try {
|
|
1339
1328
|
const job = await target.enqueue({
|
|
1340
1329
|
kind: "llm.generate",
|
|
@@ -1415,7 +1404,10 @@ var CHECKS = [
|
|
|
1415
1404
|
title: "a runner advertises only what is installed and healthy",
|
|
1416
1405
|
musts: ["CAPABILITY_IS_DETECTED"],
|
|
1417
1406
|
async run(target) {
|
|
1418
|
-
const daemon = await pairDaemon(target, {
|
|
1407
|
+
const daemon = await pairDaemon(target, {
|
|
1408
|
+
owner: "alice",
|
|
1409
|
+
offer: "private"
|
|
1410
|
+
});
|
|
1419
1411
|
try {
|
|
1420
1412
|
daemon.backend.healthy = false;
|
|
1421
1413
|
const advertised = await daemon.runner.detectCapabilities();
|
|
@@ -1453,7 +1445,10 @@ var CHECKS = [
|
|
|
1453
1445
|
// check does not establish.
|
|
1454
1446
|
musts: ["KIND_NO_CODE"],
|
|
1455
1447
|
async run(target) {
|
|
1456
|
-
const daemon = await pairDaemon(target, {
|
|
1448
|
+
const daemon = await pairDaemon(target, {
|
|
1449
|
+
owner: "alice",
|
|
1450
|
+
offer: "private"
|
|
1451
|
+
});
|
|
1457
1452
|
const SMUGGLED = ["command", "argv", "model", "baseUrl"];
|
|
1458
1453
|
try {
|
|
1459
1454
|
let refused = false;
|
|
@@ -1638,7 +1633,10 @@ var CHECKS = [
|
|
|
1638
1633
|
title: "authentication is a signature over the request, not a secret",
|
|
1639
1634
|
musts: ["REQUESTS_SIGNED_NOT_BEARER"],
|
|
1640
1635
|
async run(target) {
|
|
1641
|
-
const daemon = await pairDaemon(target, {
|
|
1636
|
+
const daemon = await pairDaemon(target, {
|
|
1637
|
+
owner: "alice",
|
|
1638
|
+
offer: "private"
|
|
1639
|
+
});
|
|
1642
1640
|
try {
|
|
1643
1641
|
const body = JSON.stringify({
|
|
1644
1642
|
protocolVersion: PROTOCOL_VERSION2,
|
|
@@ -1710,7 +1708,10 @@ var CHECKS = [
|
|
|
1710
1708
|
title: "a release acts on the lease it names, not whatever lease exists",
|
|
1711
1709
|
musts: ["LEASE_SCOPED_BY_GRANT"],
|
|
1712
1710
|
async run(target) {
|
|
1713
|
-
const daemon = await pairDaemon(target, {
|
|
1711
|
+
const daemon = await pairDaemon(target, {
|
|
1712
|
+
owner: "alice",
|
|
1713
|
+
offer: "private"
|
|
1714
|
+
});
|
|
1714
1715
|
try {
|
|
1715
1716
|
const job = await target.enqueue({
|
|
1716
1717
|
kind: "llm.generate",
|
|
@@ -1750,7 +1751,10 @@ var CHECKS = [
|
|
|
1750
1751
|
title: "a claim carries routing metadata and no work",
|
|
1751
1752
|
musts: ["STUB_METADATA_EXHAUSTIVE"],
|
|
1752
1753
|
async run(target) {
|
|
1753
|
-
const daemon = await pairDaemon(target, {
|
|
1754
|
+
const daemon = await pairDaemon(target, {
|
|
1755
|
+
owner: "alice",
|
|
1756
|
+
offer: "private"
|
|
1757
|
+
});
|
|
1754
1758
|
try {
|
|
1755
1759
|
await target.enqueue({
|
|
1756
1760
|
kind: "llm.generate",
|
|
@@ -1815,7 +1819,10 @@ var CHECKS = [
|
|
|
1815
1819
|
musts: ["ENVELOPE_SEALED_AND_SIGNED"],
|
|
1816
1820
|
async run(target) {
|
|
1817
1821
|
const secret = "a prompt nobody should read from storage";
|
|
1818
|
-
const daemon = await pairDaemon(target, {
|
|
1822
|
+
const daemon = await pairDaemon(target, {
|
|
1823
|
+
owner: "alice",
|
|
1824
|
+
offer: "private"
|
|
1825
|
+
});
|
|
1819
1826
|
try {
|
|
1820
1827
|
const job = await target.enqueue({
|
|
1821
1828
|
kind: "llm.generate",
|
|
@@ -1854,7 +1861,10 @@ var CHECKS = [
|
|
|
1854
1861
|
title: "a daemon refuses work not signed by the site it pinned",
|
|
1855
1862
|
musts: ["ENVELOPE_SEALED_AND_SIGNED"],
|
|
1856
1863
|
async run(target) {
|
|
1857
|
-
const daemon = await pairDaemon(target, {
|
|
1864
|
+
const daemon = await pairDaemon(target, {
|
|
1865
|
+
owner: "alice",
|
|
1866
|
+
offer: "private"
|
|
1867
|
+
});
|
|
1858
1868
|
try {
|
|
1859
1869
|
const keys = await daemon.identityKeys();
|
|
1860
1870
|
const relay = generateKeys(Date.now());
|
|
@@ -1905,7 +1915,10 @@ var CHECKS = [
|
|
|
1905
1915
|
// is not proving possession, and a forger writes whatever it likes.
|
|
1906
1916
|
musts: ["ENVELOPE_SEALED_AND_SIGNED", "PROVENANCE_NAMES_DEVICE"],
|
|
1907
1917
|
async run(target) {
|
|
1908
|
-
const daemon = await pairDaemon(target, {
|
|
1918
|
+
const daemon = await pairDaemon(target, {
|
|
1919
|
+
owner: "alice",
|
|
1920
|
+
offer: "private"
|
|
1921
|
+
});
|
|
1909
1922
|
try {
|
|
1910
1923
|
const job = await target.enqueue({
|
|
1911
1924
|
kind: "llm.generate",
|
|
@@ -1964,7 +1977,7 @@ var CHECKS = [
|
|
|
1964
1977
|
title: "a claim is not answered with work the claimer may not run",
|
|
1965
1978
|
musts: ["AUDIENCE_BOTH_SIDES"],
|
|
1966
1979
|
async run(target) {
|
|
1967
|
-
const bob = await pairDaemon(target, { owner: "bob", offer: "
|
|
1980
|
+
const bob = await pairDaemon(target, { owner: "bob", offer: "team" });
|
|
1968
1981
|
try {
|
|
1969
1982
|
const priv = await target.enqueue({
|
|
1970
1983
|
kind: "llm.generate",
|
|
@@ -1981,7 +1994,7 @@ var CHECKS = [
|
|
|
1981
1994
|
kind: "llm.generate",
|
|
1982
1995
|
payload: prompt("anyone may run this"),
|
|
1983
1996
|
owner: "alice",
|
|
1984
|
-
audience: "
|
|
1997
|
+
audience: "team"
|
|
1985
1998
|
});
|
|
1986
1999
|
const second = await claimRaw(target, bob);
|
|
1987
2000
|
assert(
|
|
@@ -1998,7 +2011,10 @@ var CHECKS = [
|
|
|
1998
2011
|
title: "a claimed stub carries no list of who may run the job",
|
|
1999
2012
|
musts: ["ROSTER_NOT_DISCLOSED"],
|
|
2000
2013
|
async run(target) {
|
|
2001
|
-
const daemon = await pairDaemon(target, {
|
|
2014
|
+
const daemon = await pairDaemon(target, {
|
|
2015
|
+
owner: "alice",
|
|
2016
|
+
offer: "private"
|
|
2017
|
+
});
|
|
2002
2018
|
try {
|
|
2003
2019
|
const job = await target.enqueue({
|
|
2004
2020
|
kind: "llm.generate",
|
|
@@ -2150,4 +2166,4 @@ export {
|
|
|
2150
2166
|
miscoveredMusts,
|
|
2151
2167
|
formatReport
|
|
2152
2168
|
};
|
|
2153
|
-
//# sourceMappingURL=chunk-
|
|
2169
|
+
//# sourceMappingURL=chunk-3N7FYXDP.js.map
|