@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 CHANGED
@@ -1,5 +1,5 @@
1
1
  > [!WARNING]
2
- > **Alpha (`0.1.0-alpha.56`) — under active development. Don't use this yet.**
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.56` is that release, whole.
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 ?? "private",
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, { owner: "alice" });
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, { owner: "bob" });
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, { owner: "alice" });
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, { owner: "alice" });
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, { owner: "alice", label: "dead" });
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 nine audience \xD7 offer-scope combinations behave as specified",
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 — allowlist is empty
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
- title: "a named job runs only once the daemon's own allowlist admits it",
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: "public",
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: "public"
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, { owner: "alice" });
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, { owner: "alice" });
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, { owner: "alice" });
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, { owner: "alice" });
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, { owner: "alice" });
965
- const bob = await pairDaemon(target, { owner: "bob" });
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, { owner: "alice" });
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: "public" });
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, { owner: "alice" });
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: "public",
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: "public"
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: "public"
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: "public",
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 === "public"),
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: "public"
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, { owner: "alice", label: "laptop" });
1337
- const b = await pairDaemon(target, { owner: "alice", label: "desktop" });
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, { owner: "alice" });
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, { owner: "alice" });
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, { owner: "alice" });
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, { owner: "alice" });
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, { owner: "alice" });
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, { owner: "alice" });
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, { owner: "alice" });
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, { owner: "alice" });
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: "public" });
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: "public"
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, { owner: "alice" });
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-FCX5R4LZ.js.map
2169
+ //# sourceMappingURL=chunk-3N7FYXDP.js.map