@bongos/core 1.19.1039 → 1.19.1041

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.
Files changed (40) hide show
  1. package/.bongos-core.json +86 -36
  2. package/clients/bongos-client/README.md +1 -1
  3. package/clients/bongos-client/bongos-client.global.js +4 -0
  4. package/clients/bongos-client/index.cjs +4 -0
  5. package/clients/bongos-client/index.d.ts +4 -0
  6. package/clients/bongos-client/index.mjs +4 -0
  7. package/docs/api/openapi.json +39 -1
  8. package/docs/api-reference.md +7 -1
  9. package/docs/copy-inventory.md +2 -2
  10. package/docs/copy-registry.json +2 -2
  11. package/docs/file-map.md +1 -0
  12. package/docs/module-api-changelog.md +4 -0
  13. package/modules/grading/grader-subagent.js +7 -0
  14. package/modules/hall-ui/public/deploy.html +9 -0
  15. package/modules/hall-ui/public/deploy.js +14 -1
  16. package/modules/hall-ui/public/deploy.states.json +14 -0
  17. package/modules/lifecycle/conflict-resolve.js +9 -1
  18. package/modules/npm-release/module.json +19 -0
  19. package/modules/npm-release/public/work.css +8 -0
  20. package/modules/npm-release/public/work.js +261 -0
  21. package/modules/npm-release/registry.js +271 -0
  22. package/modules/npm-release/routes/work.js +46 -0
  23. package/modules/npm-release/work.js +252 -0
  24. package/modules/provisioning/starter-bundles.js +6 -2
  25. package/package-lock.json +2 -2
  26. package/package.json +1 -1
  27. package/release-notes.json +20 -0
  28. package/scripts/gds/exec-path-guard.js +1 -1
  29. package/scripts/gds/install-git-hooks.js +18 -2
  30. package/scripts/gds/publish-manifest.js +1 -0
  31. package/src/bongos/module-scope-map.js +5 -0
  32. package/src/module-api.js +1 -1
  33. package/tests/conflict_resolve.mjs +15 -1
  34. package/tests/grade_model_provider.mjs +1 -1
  35. package/tests/grader_reviewer_isolation.mjs +68 -0
  36. package/tests/merge_driver_register.mjs +28 -0
  37. package/tests/module_loader.mjs +1 -1
  38. package/tests/npm_release_page.mjs +173 -0
  39. package/tests/npm_release_work.mjs +350 -0
  40. package/tests/render_check.mjs +3 -2
package/.bongos-core.json CHANGED
@@ -2,22 +2,22 @@
2
2
  "artifact": "bongos-core",
3
3
  "manifest_schema": 1,
4
4
  "generator": "scripts/gds/package-core.js",
5
- "core_version": "1.19.1039",
6
- "core_contract": "1.19.1039",
7
- "source_commit": "dc9e168d73f9ec605af32419b0b638cca7539418",
5
+ "core_version": "1.19.1041",
6
+ "core_contract": "1.19.1041",
7
+ "source_commit": "781aa748b3e03ade6ce8a871f235a3c9b2807f0a",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-09-26T08:16:22.165Z",
9
+ "built_at": "2026-09-26T16:00:35.772Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
12
  "docs_redacted": 542,
13
13
  "agent_docs_stubbed": 26,
14
- "functional_verbatim": 2496,
14
+ "functional_verbatim": 2506,
15
15
  "rules": 3,
16
16
  "gate_literals": 3,
17
17
  "gate": "passed"
18
18
  },
19
- "file_count": 3065,
20
- "tree_sha256": "e4228541e27d69f8e2578edadb43181228ced5f21cc7b6dbe0102de50c3917be",
19
+ "file_count": 3075,
20
+ "tree_sha256": "ecbc8d868250fced6eeba4366b6b3f8dcd1a71502be7e3ec23650aa23f615da7",
21
21
  "files": [
22
22
  {
23
23
  "path": ".claude/skills/ask-for-help/SKILL.md",
@@ -352,12 +352,12 @@
352
352
  {
353
353
  "path": "clients/bongos-client/README.md",
354
354
  "mode": "0000644",
355
- "sha256": "e5aa86f924b3c8f3b216daa93f707a583a74e82ad3cb6162288ec987ac70bc24"
355
+ "sha256": "313943caf3bc117539688dafeecb7a3bc1746c3038d68e471e652e303bad53d7"
356
356
  },
357
357
  {
358
358
  "path": "clients/bongos-client/bongos-client.global.js",
359
359
  "mode": "0000644",
360
- "sha256": "bafe28d4273b7c1959fe9737bdd17a02cea669fea51495393863570030b605f9"
360
+ "sha256": "b8972ecc571abd7e67151dceaea762241533a96e2281c1bd42562416b370a649"
361
361
  },
362
362
  {
363
363
  "path": "clients/bongos-client/examples/hello-world.mjs",
@@ -367,17 +367,17 @@
367
367
  {
368
368
  "path": "clients/bongos-client/index.cjs",
369
369
  "mode": "0000644",
370
- "sha256": "2a53db773795e45a22fad49b6483613219ca7a6d230965ae8974ece117b7ea78"
370
+ "sha256": "77be4a5c54473480d9d207196f89563cf2919b9e9b05abb5769e2b5d98f1fd43"
371
371
  },
372
372
  {
373
373
  "path": "clients/bongos-client/index.d.ts",
374
374
  "mode": "0000644",
375
- "sha256": "9f07e5e4cc88e90ec9f7ced7c258890724f9457bb3412eccad177c14805c29dd"
375
+ "sha256": "bf10bd20b8e9c2f9d2413cffb5f7e94b9bab9086856e019305e2a1cae62a1963"
376
376
  },
377
377
  {
378
378
  "path": "clients/bongos-client/index.mjs",
379
379
  "mode": "0000644",
380
- "sha256": "4eb0b66ce4a75e30a6013a2f03fcc65775d2fa6e0b9caed2d630f1b89418f0da"
380
+ "sha256": "4b3bcb695919ecd21808b8b106bcceda7beab220212680f4c08ec89d493b3d27"
381
381
  },
382
382
  {
383
383
  "path": "clients/bongos-client/package.json",
@@ -2202,12 +2202,12 @@
2202
2202
  {
2203
2203
  "path": "docs/api-reference.md",
2204
2204
  "mode": "0000644",
2205
- "sha256": "39a0682dabb9b1d64c1b8641963e04e1a22ead6bdb29a51ed4d516609f287e4d"
2205
+ "sha256": "7a11df448a86acf04143ae17c6a741119b51f2f62278fe7eae195dd2a09fb846"
2206
2206
  },
2207
2207
  {
2208
2208
  "path": "docs/api/openapi.json",
2209
2209
  "mode": "0000644",
2210
- "sha256": "9ba85d53f945f62060b03de6a7638d025edd5c3a83942404876fb618c96f36da"
2210
+ "sha256": "f152200f08b6783021523222a58efcaf32a927cefca1e8a71cc32684d88c0bda"
2211
2211
  },
2212
2212
  {
2213
2213
  "path": "docs/architecture.md",
@@ -2232,12 +2232,12 @@
2232
2232
  {
2233
2233
  "path": "docs/copy-inventory.md",
2234
2234
  "mode": "0000644",
2235
- "sha256": "9256c15d5c0e1227d33babd5b036e3d15af58d52a4a7204eb016a9f435e4de0b"
2235
+ "sha256": "6f6e42a31cc92468b5a97dcae218c38e3e9df372a20151ffebd73216c91a6b63"
2236
2236
  },
2237
2237
  {
2238
2238
  "path": "docs/copy-registry.json",
2239
2239
  "mode": "0000644",
2240
- "sha256": "5bbc6bda98aead6a950661199dd0547b06e6b6d8555a4576339a9795dad9ac61"
2240
+ "sha256": "db41770b13c6825c74fe130cfd3de8c96eaf73596c2b26a31470d8e3c6b7e47c"
2241
2241
  },
2242
2242
  {
2243
2243
  "path": "docs/design/apex-pass-2-direction.md",
@@ -2757,7 +2757,7 @@
2757
2757
  {
2758
2758
  "path": "docs/file-map.md",
2759
2759
  "mode": "0000644",
2760
- "sha256": "f2d5d90c71f92f4f20e78375fd75b8df59c084a795ff6c1e9a5aea5c385b160d"
2760
+ "sha256": "530aabbf1f0d3f5ba938dbfa5d6df1755c288d15fe5eb076b6c94fd89098a1d2"
2761
2761
  },
2762
2762
  {
2763
2763
  "path": "docs/handoff-template.md",
@@ -2767,7 +2767,7 @@
2767
2767
  {
2768
2768
  "path": "docs/module-api-changelog.md",
2769
2769
  "mode": "0000644",
2770
- "sha256": "3d636e0870231f27697b67900e7feedff8e82b751cdd9771509cfe792d7157d6"
2770
+ "sha256": "54fe0dfc62e378fa8e590fbdce05a0094885cccae13b665007d96e7797f66d6e"
2771
2771
  },
2772
2772
  {
2773
2773
  "path": "docs/modules-contract.md",
@@ -4692,7 +4692,7 @@
4692
4692
  {
4693
4693
  "path": "modules/grading/grader-subagent.js",
4694
4694
  "mode": "0000644",
4695
- "sha256": "a7e7c0cd702ff1a6b83d12ce0310de72ed601c6a4b8e886f1a873eeaeaaecadd"
4695
+ "sha256": "ab47b186029c899a4e6ab43b3b5850dece658737ad08bdeec25a2653b6af62c0"
4696
4696
  },
4697
4697
  {
4698
4698
  "path": "modules/grading/grader-workers/efficiency.js",
@@ -4932,12 +4932,17 @@
4932
4932
  {
4933
4933
  "path": "modules/hall-ui/public/deploy.html",
4934
4934
  "mode": "0000644",
4935
- "sha256": "77173078fe8aa93fa9bf9ad98ca7bc1c5698999c2f837b0ae9d0c38be12fd2b2"
4935
+ "sha256": "1b4e38bbd7abc278fe9578c96095d67d1ff46916b30387a315a46ab2167b613a"
4936
4936
  },
4937
4937
  {
4938
4938
  "path": "modules/hall-ui/public/deploy.js",
4939
4939
  "mode": "0000644",
4940
- "sha256": "a6fd24a634a64deb3515993609457313a176e42e66214d6a32f70c28b53e3cdc"
4940
+ "sha256": "bf526004ab0a5bab8005a6e9854d9bcbec28661285d39c95641bc9682688c96b"
4941
+ },
4942
+ {
4943
+ "path": "modules/hall-ui/public/deploy.states.json",
4944
+ "mode": "0000644",
4945
+ "sha256": "b8818dd51e671769cb84a85d288674571f278a6b6736353288d206156f4fd4c3"
4941
4946
  },
4942
4947
  {
4943
4948
  "path": "modules/hall-ui/public/diagram-viewer.css",
@@ -5922,7 +5927,7 @@
5922
5927
  {
5923
5928
  "path": "modules/lifecycle/conflict-resolve.js",
5924
5929
  "mode": "0000644",
5925
- "sha256": "107dec0deb790b7439da27761235631ab79a29a6cfcea58db9a57460e04df1bd"
5930
+ "sha256": "81d5ad21661d08403cb008c6ae8b92cd5e142b552a00f6a5a39423cf7eb3042e"
5926
5931
  },
5927
5932
  {
5928
5933
  "path": "modules/lifecycle/criterion-ref.js",
@@ -6469,6 +6474,36 @@
6469
6474
  "mode": "0000644",
6470
6475
  "sha256": "43ede2e90d0124c42f6f9dfc3695898b83c8e876c01f70b0ae6e9d2f61d41085"
6471
6476
  },
6477
+ {
6478
+ "path": "modules/npm-release/module.json",
6479
+ "mode": "0000644",
6480
+ "sha256": "aa8289ee59e7d526263aed9500a54a9f8abbdc57220059a710170578c89d3704"
6481
+ },
6482
+ {
6483
+ "path": "modules/npm-release/public/work.css",
6484
+ "mode": "0000644",
6485
+ "sha256": "d0625e8cd454c7f58f86048bf243232ee368f6b667969b366fbb8e59d9a06c9c"
6486
+ },
6487
+ {
6488
+ "path": "modules/npm-release/public/work.js",
6489
+ "mode": "0000644",
6490
+ "sha256": "f71f7c17e834fc7b38874370519bd358ba4b38ace480a4e7ef752b6862795fb6"
6491
+ },
6492
+ {
6493
+ "path": "modules/npm-release/registry.js",
6494
+ "mode": "0000644",
6495
+ "sha256": "246b9dfd4e6db04573747e2fa6f75a3f101250d002702e3007a20aa81c240f37"
6496
+ },
6497
+ {
6498
+ "path": "modules/npm-release/routes/work.js",
6499
+ "mode": "0000644",
6500
+ "sha256": "ed549b53d9954f198b265c88ac1978dd4da0bf30a4ebb060f720eceb3d4e6394"
6501
+ },
6502
+ {
6503
+ "path": "modules/npm-release/work.js",
6504
+ "mode": "0000644",
6505
+ "sha256": "04297befb32b79a5ae88e1d44a8cc903b355bbcd6fe7935d64c2b560c10f15d2"
6506
+ },
6472
6507
  {
6473
6508
  "path": "modules/onboarding/CLAUDE.md",
6474
6509
  "mode": "0000644",
@@ -7162,7 +7197,7 @@
7162
7197
  {
7163
7198
  "path": "modules/provisioning/starter-bundles.js",
7164
7199
  "mode": "0000644",
7165
- "sha256": "afb39d1642004ff98d3b722436e789542b87f0b4929f7d85826e8e07ebbd2570"
7200
+ "sha256": "cca574f26ccc944f6e95a9644415d4d89c7239499bf6f79bae36869b69b6f992"
7166
7201
  },
7167
7202
  {
7168
7203
  "path": "modules/provisioning/tests/liveness-notify.mjs",
@@ -8452,12 +8487,12 @@
8452
8487
  {
8453
8488
  "path": "package-lock.json",
8454
8489
  "mode": "0000644",
8455
- "sha256": "3a6d785e2391594909ba62c1e5dcf1c250096d802da67b1033353c8ced7bfac8"
8490
+ "sha256": "c414fedc98910e53cb9b9e41f6f5bbf1d0c446e112bc79bbedb0417ca21f3d7d"
8456
8491
  },
8457
8492
  {
8458
8493
  "path": "package.json",
8459
8494
  "mode": "0000644",
8460
- "sha256": "9ef9e201b3c2d1326f37ecd30eb7ed0ebbb56f8360608128e4b04974798cf4d0"
8495
+ "sha256": "f7f732d65454317018b4df384ee3623df53b288846eff4bb5eecb251c2c8f50e"
8461
8496
  },
8462
8497
  {
8463
8498
  "path": "public-docs/index.html",
@@ -8477,7 +8512,7 @@
8477
8512
  {
8478
8513
  "path": "release-notes.json",
8479
8514
  "mode": "0000644",
8480
- "sha256": "d39efdd82af8f39bf10ff6b145838d57dd6ab9eea277836ff1b7bd67a06f61ca"
8515
+ "sha256": "2299f29e67b632093950b98bbe95449c68f020a202b46c3b2de3e722373005fe"
8481
8516
  },
8482
8517
  {
8483
8518
  "path": "scripts/bongos-mcp.js",
@@ -8982,7 +9017,7 @@
8982
9017
  {
8983
9018
  "path": "scripts/gds/exec-path-guard.js",
8984
9019
  "mode": "0000644",
8985
- "sha256": "176e26885f96247bbeec1b04d3a668bbc2fac2d944fc1f1028781241a45d613c"
9020
+ "sha256": "254c0ff06409c015e2a821ddc59a2e9ad438a4107c2dca8cff2403e99b8417bc"
8986
9021
  },
8987
9022
  {
8988
9023
  "path": "scripts/gds/feedback-latest.js",
@@ -9207,7 +9242,7 @@
9207
9242
  {
9208
9243
  "path": "scripts/gds/install-git-hooks.js",
9209
9244
  "mode": "0000644",
9210
- "sha256": "6234ca799f99e5a16622043b0f43d42624efe5fb6862d74e4b8c2b7603cf8bef"
9245
+ "sha256": "67ee7468f68a48794ab1eac0cfe336996aa6d31d82ba0663883805004536a7fb"
9211
9246
  },
9212
9247
  {
9213
9248
  "path": "scripts/gds/instance-apex.js",
@@ -9487,7 +9522,7 @@
9487
9522
  {
9488
9523
  "path": "scripts/gds/publish-manifest.js",
9489
9524
  "mode": "0000644",
9490
- "sha256": "da74b7bf9aa1453eb56f922f3733aa06ac2d00216f668a06dc134934f1d4fde7"
9525
+ "sha256": "dc5845faf4042a4272b2fbc72d8d62bb6f95b9f860d9501d3f5e710e47e910e3"
9491
9526
  },
9492
9527
  {
9493
9528
  "path": "scripts/gds/publish-watch.js",
@@ -10342,7 +10377,7 @@
10342
10377
  {
10343
10378
  "path": "src/bongos/module-scope-map.js",
10344
10379
  "mode": "0000644",
10345
- "sha256": "6a0ba1ebba51ecbce958e2b2d97d244f589108592647be0261ae556aee078680"
10380
+ "sha256": "a5510df1cd4704db5d7c0a3c381ecdf591c9fa7b6ed6bd4fddcfd002611e288c"
10346
10381
  },
10347
10382
  {
10348
10383
  "path": "src/bongos/module-submissions.js",
@@ -10537,7 +10572,7 @@
10537
10572
  {
10538
10573
  "path": "src/module-api.js",
10539
10574
  "mode": "0000644",
10540
- "sha256": "ef1f931d2bcea8854e341858cc0b0d7d347ede63bcc77377c71695f6600852fa"
10575
+ "sha256": "111153edb1c12f70dc1803c615be20ed3364ffb7971ff08cfc7b34a3eefee224"
10541
10576
  },
10542
10577
  {
10543
10578
  "path": "src/module-loader/catalog.js",
@@ -11442,7 +11477,7 @@
11442
11477
  {
11443
11478
  "path": "tests/conflict_resolve.mjs",
11444
11479
  "mode": "0000644",
11445
- "sha256": "da8182c4235c7735bdee351cfa7dc1146f7ded33b9d594dc0ba498a3b5206d83"
11480
+ "sha256": "9714c6bc9e363f847469a93e42958dae25f3abc9266c7adf937cde0aa2439f9c"
11446
11481
  },
11447
11482
  {
11448
11483
  "path": "tests/connection_suggestions.mjs",
@@ -12457,7 +12492,7 @@
12457
12492
  {
12458
12493
  "path": "tests/grade_model_provider.mjs",
12459
12494
  "mode": "0000644",
12460
- "sha256": "11cfa2deade2db1f88f643d9aa310d34bdd0f37423944db4a68fa0ea2b2eba77"
12495
+ "sha256": "ecc16c3daa0d5d8e47af493433f39a62882571949686d20e1b3bde9eef9e1ff7"
12461
12496
  },
12462
12497
  {
12463
12498
  "path": "tests/grade_server_authoritative.mjs",
@@ -12519,6 +12554,11 @@
12519
12554
  "mode": "0000644",
12520
12555
  "sha256": "50a785eb6e2c71d5a043c2ec2c37a835777da6397dac3ffc2542acdde14b57a8"
12521
12556
  },
12557
+ {
12558
+ "path": "tests/grader_reviewer_isolation.mjs",
12559
+ "mode": "0000644",
12560
+ "sha256": "ee95ed46c2593541105e9fc42a21fe7e4a6a19f8ba54156856df1d8e8c06021f"
12561
+ },
12522
12562
  {
12523
12563
  "path": "tests/grader_root_outage.mjs",
12524
12564
  "mode": "0000644",
@@ -13272,7 +13312,7 @@
13272
13312
  {
13273
13313
  "path": "tests/merge_driver_register.mjs",
13274
13314
  "mode": "0000644",
13275
- "sha256": "c75880064b52b6edb2689232eb1e6401567618f46b16581140685ccceee2d41c"
13315
+ "sha256": "cb17d06221d770ba7dca2eba4616ce67c14dba2152c4c37c9bed08d2931297d3"
13276
13316
  },
13277
13317
  {
13278
13318
  "path": "tests/merge_lease.mjs",
@@ -13392,7 +13432,7 @@
13392
13432
  {
13393
13433
  "path": "tests/module_loader.mjs",
13394
13434
  "mode": "0000644",
13395
- "sha256": "c76510c090ff1162ed88bc753c2ae90842e48f234e050036e6c558a7d8681c2e"
13435
+ "sha256": "41fac167f1c2e1377e692193f752c370081cedc5e3497b228a6f5e4117139ac1"
13396
13436
  },
13397
13437
  {
13398
13438
  "path": "tests/module_manifest.mjs",
@@ -13479,6 +13519,16 @@
13479
13519
  "mode": "0000644",
13480
13520
  "sha256": "f1523ee48247d18c7326b9aa0b442ca2c9fab8bd41dbe9f23a4cb89e1986bee0"
13481
13521
  },
13522
+ {
13523
+ "path": "tests/npm_release_page.mjs",
13524
+ "mode": "0000644",
13525
+ "sha256": "ea16fe71cc4a97555334ca939b29d3227ee067fdea4dd50adaa072f6ebcd08b7"
13526
+ },
13527
+ {
13528
+ "path": "tests/npm_release_work.mjs",
13529
+ "mode": "0000644",
13530
+ "sha256": "373c47030bd02333008a7fec237ae8eb0bfad48574558b0362632b01d5c466f4"
13531
+ },
13482
13532
  {
13483
13533
  "path": "tests/oauth_secret.mjs",
13484
13534
  "mode": "0000644",
@@ -14217,7 +14267,7 @@
14217
14267
  {
14218
14268
  "path": "tests/render_check.mjs",
14219
14269
  "mode": "0000644",
14220
- "sha256": "88d6f0edf277344787be817885a6c78a811f01a300d94accbe1e16ed8d6230c3"
14270
+ "sha256": "677679afe67e0c4ef56827f7a3c7a37cc63475bf67ee0ba31644dc872baf3d16"
14221
14271
  },
14222
14272
  {
14223
14273
  "path": "tests/render_prefs.mjs",
@@ -5,7 +5,7 @@ A **generated**, zero-dependency typed client for the Bongos API — produced fr
5
5
  by hand; it regenerates when the spec changes, so it can never drift from the routes.
6
6
 
7
7
  - API version: **v1** (served at `/api/bongos/v1`)
8
- - 439 operations across 66 resource groups
8
+ - 440 operations across 67 resource groups
9
9
 
10
10
  ## Use it from your project
11
11
 
@@ -744,6 +744,10 @@ function createClient(opts = {}) {
744
744
  // POST /my-projects/join — rank: any-builder — POST /my-projects/join
745
745
  postMyProjectsJoin: (args) => request("POST", "/my-projects/join", { hasBody: true }, args),
746
746
  },
747
+ "npmRelease": {
748
+ // GET /npm-release/work — rank: archon — GET /npm-release/work
749
+ getNpmReleaseWork: (args) => request("GET", "/npm-release/work", { hasBody: false }, args),
750
+ },
747
751
  "overrideRequests": {
748
752
  // GET /override-requests — rank: metic+archon — GET /override-requests
749
753
  getOverrideRequests: (args) => request("GET", "/override-requests", { hasBody: false }, args),
@@ -743,6 +743,10 @@ function createClient(opts = {}) {
743
743
  // POST /my-projects/join — rank: any-builder — POST /my-projects/join
744
744
  postMyProjectsJoin: (args) => request("POST", "/my-projects/join", { hasBody: true }, args),
745
745
  },
746
+ "npmRelease": {
747
+ // GET /npm-release/work — rank: archon — GET /npm-release/work
748
+ getNpmReleaseWork: (args) => request("GET", "/npm-release/work", { hasBody: false }, args),
749
+ },
746
750
  "overrideRequests": {
747
751
  // GET /override-requests — rank: metic+archon — GET /override-requests
748
752
  getOverrideRequests: (args) => request("GET", "/override-requests", { hasBody: false }, args),
@@ -1158,6 +1158,10 @@ export interface BongosClient {
1158
1158
  /** POST /my-projects/join — rank: any-builder */
1159
1159
  postMyProjectsJoin(args: RequestArgs & { body: PostMyProjectsJoinRequest }): Promise<PostMyProjectsJoinResponse>;
1160
1160
  };
1161
+ "npmRelease": {
1162
+ /** GET /npm-release/work — rank: archon */
1163
+ getNpmReleaseWork(args?: RequestArgs): Promise<ApiResponse>;
1164
+ };
1161
1165
  "overrideRequests": {
1162
1166
  /** GET /override-requests — rank: metic+archon */
1163
1167
  getOverrideRequests(args?: RequestArgs): Promise<GetOverrideRequestsResponse>;
@@ -740,6 +740,10 @@ export function createClient(opts = {}) {
740
740
  // POST /my-projects/join — rank: any-builder — POST /my-projects/join
741
741
  postMyProjectsJoin: (args) => request("POST", "/my-projects/join", { hasBody: true }, args),
742
742
  },
743
+ "npmRelease": {
744
+ // GET /npm-release/work — rank: archon — GET /npm-release/work
745
+ getNpmReleaseWork: (args) => request("GET", "/npm-release/work", { hasBody: false }, args),
746
+ },
743
747
  "overrideRequests": {
744
748
  // GET /override-requests — rank: metic+archon — GET /override-requests
745
749
  getOverrideRequests: (args) => request("GET", "/override-requests", { hasBody: false }, args),
@@ -205,6 +205,10 @@
205
205
  "name": "my-projects",
206
206
  "description": "Endpoints under `/api/bongos/my-projects`."
207
207
  },
208
+ {
209
+ "name": "npm-release",
210
+ "description": "Endpoints under `/api/bongos/npm-release`."
211
+ },
208
212
  {
209
213
  "name": "override-requests",
210
214
  "description": "Endpoints under `/api/bongos/override-requests`."
@@ -13314,6 +13318,40 @@
13314
13318
  ]
13315
13319
  }
13316
13320
  },
13321
+ "/npm-release/work": {
13322
+ "get": {
13323
+ "operationId": "get_npm_release_work",
13324
+ "tags": [
13325
+ "npm-release"
13326
+ ],
13327
+ "summary": "GET /npm-release/work",
13328
+ "description": "Query: days (ledger window, default 14, max 60), before + limit (history paging). Read by hand rather than through validateOrRespond: every field is optional and clamped, so there is nothing to refuse.\n\n**Rank:** `archon` — Archon only (rank and identity management + the escalation keys — the trust boundary).\n\n**Permissions:** `core.pin.move` (all required).",
13329
+ "x-rank": "archon",
13330
+ "x-source": "modules/npm-release/routes/work.js",
13331
+ "x-permissions": [
13332
+ "core.pin.move"
13333
+ ],
13334
+ "responses": {
13335
+ "200": {
13336
+ "description": "Success."
13337
+ },
13338
+ "400": {
13339
+ "$ref": "#/components/responses/BadRequest"
13340
+ },
13341
+ "401": {
13342
+ "$ref": "#/components/responses/Unauthorized"
13343
+ },
13344
+ "403": {
13345
+ "$ref": "#/components/responses/Forbidden"
13346
+ }
13347
+ },
13348
+ "security": [
13349
+ {
13350
+ "builderSession": []
13351
+ }
13352
+ ]
13353
+ }
13354
+ },
13317
13355
  "/override-requests": {
13318
13356
  "get": {
13319
13357
  "operationId": "get_override_requests",
@@ -27900,7 +27938,7 @@
27900
27938
  "description": "A required dependency/feature is not configured or is temporarily down."
27901
27939
  }
27902
27940
  },
27903
- "x-endpoint-count": 439,
27941
+ "x-endpoint-count": 440,
27904
27942
  "x-schema-count": 481,
27905
27943
  "x-undocumented-bodies": 9,
27906
27944
  "x-response-schemas": 329,
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Bongos API reference
4
4
 
5
- > **Generated from the live route files** — the route file is authoritative. 439 endpoints across 74 route files.
5
+ > **Generated from the live route files** — the route file is authoritative. 440 endpoints across 75 route files.
6
6
  > Machine-readable spec: [`docs/api/openapi.json`](api/openapi.json) (OpenAPI 3.1). Rendered docs site: **`/docs`** (e.g. `cloudbongos.com/docs`).
7
7
 
8
8
  Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust-boundary-server-enforced-permissions.md)): `public` < `any-builder` < `metic+archon` < `archon`.
@@ -521,6 +521,12 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust
521
521
  | POST | `/api/bongos/my-projects/invites/:clientId/decline` | `any-builder` | — | decline an invite (delete the pending row) for the caller's OWN account. |
522
522
  | POST | `/api/bongos/my-projects/join` | `any-builder` | `origin`, `note` | request to join a project. |
523
523
 
524
+ ## `npm-release` (1)
525
+
526
+ | Method | Path | Rank | Body | Description |
527
+ |---|---|---|---|---|
528
+ | GET | `/api/bongos/npm-release/work` | `archon` | — | Query: days (ledger window, default 14, max 60), before + limit (history paging). |
529
+
524
530
  ## `override-requests` (2)
525
531
 
526
532
  | Method | Path | Rank | Body | Description |
@@ -653,7 +653,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
653
653
  | `df335a1224ae` | certain | Member since {…} | `modules/hall-ui/public/hall-render.js:563` |
654
654
  | `df335a1224ae` | certain | Member since {…} | `modules/hall-ui/public/profile.js:94` |
655
655
  | `c7a670e9552d` | certain | Merged into | `modules/hall-ui/public/profile.js:489` |
656
- | `f3ba5b1b7849` | certain | Merging work does not put it in front of anyone. This is the step that does: it moves this project onto a newe | `modules/hall-ui/public/deploy.html:42` |
656
+ | `f3ba5b1b7849` | certain | Merging work does not put it in front of anyone. This is the step that does: it moves this project onto a newe | `modules/hall-ui/public/deploy.html:49` |
657
657
  | `7637613c231b` | certain | Metic rank and above may vote | `modules/hall-ui/public/builders.js:781` |
658
658
  | `91328a97fe68` | certain | Mingle pairs you with someone from another role. Saying no costs nothing. | `modules/hall-ui/public/collab.html:96` |
659
659
  | `d7ce4a3bb745` | certain | Minimize the welcome panel | `modules/hall-ui/public/hall-widgets.js:52` |
@@ -1208,7 +1208,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1208
1208
  | `5a58392783fd` | certain | What this brings in | `modules/hall-ui/public/deploy.js:384` |
1209
1209
  | `a444ad812e4f` | certain | What this builder has done, seen one role at a time. | `modules/hall-ui/public/profile.html:134` |
1210
1210
  | `32d675a2b022` | certain | What this rank is for (optional) | `modules/hall-ui/public/government.html:90` |
1211
- | `04b3ff4c4f4c` | certain | What users can see | `modules/hall-ui/public/deploy.html:35` |
1211
+ | `04b3ff4c4f4c` | certain | What users can see | `modules/hall-ui/public/deploy.html:42` |
1212
1212
  | `1d5bfd09068c` | certain | What you saw | `modules/hall-ui/public/studio.js:162` |
1213
1213
  | `b8743d16eab8` | certain | What {…} unlocks | `modules/hall-ui/public/hall-render.js:82` |
1214
1214
  | `ecfd34bf5e6f` | certain | What’s stuck (optional) | `modules/hall-ui/public/blockers.js:308` |
@@ -7381,7 +7381,7 @@
7381
7381
  "surface": "builders-hall",
7382
7382
  "text": "Merging work does not put it in front of anyone. This is the step that does: it moves this project onto a newer core, waits for its box to answer, and puts it back if it does not. Every project has this control in its own hall, this platform included — so what you see below is one project, the one whose hall you are in.",
7383
7383
  "file": "modules/hall-ui/public/deploy.html",
7384
- "line": 42,
7384
+ "line": 49,
7385
7385
  "origin": "html-text",
7386
7386
  "confidence": "certain"
7387
7387
  },
@@ -12376,7 +12376,7 @@
12376
12376
  "surface": "builders-hall",
12377
12377
  "text": "What users can see",
12378
12378
  "file": "modules/hall-ui/public/deploy.html",
12379
- "line": 35,
12379
+ "line": 42,
12380
12380
  "origin": "html-text",
12381
12381
  "confidence": "certain"
12382
12382
  },
package/docs/file-map.md CHANGED
@@ -137,6 +137,7 @@
137
137
  │ ├── hall-ui/ ← CORE-DOMAIN WEB-SURFACE carve (BV1.R85, default-on): the authenticated builders' hall at builders.<apex>, moved from public-builders/ (~13k LOC, the largest). NO routes/db/port — declares contributes.webSurfaces:[{host:"builders.",dir:"public"}] for discovery, but UNLIKE status-ui keeps its DEDICATED serving block in serve-internal (the /builders shim + canonical redirects + citizen/Archon page gates + asset-stamping + hall-widget injection), partitioned out of the generic web-surface loop and served from BUILDERS_DIR. CLAUDE.md, module.json, records/ (one file per page family — what each family's redesign settled; CLAUDE.md points at them, and a new record is a new file there so concurrent hall tasks stop colliding on one insertion point, task 1003499), public/{index.html,builders.js,style.css,work,watch,gate,settings,ranks,sessions,primer,diagrams,atlas,...}.{html,js},cursors/,chime.wav. Four ARCHETYPE sheets sit beside the per-page ones: `record.css` (the task + idea records, task 1003305), `room.css` (the READING ROOMS — the primer + the diagrams index, task 1003306: the reading measure and rhythm, the table of contents, the progress hairline and the framed figure diagram-viewer.js upgrades on both pages), `oversight.css` (the OVERSIGHT family — government, watch, gate, task 1003469 (harbor was its fourth until task 1003890 removed the dev box): the row, the figure band inside a panel, the group head, the inline form, the grant toggle and the shared confirm modal; named oversight because the vocabulary wall bans "governance" on the government surface) and `panel.css` (the PANEL family — settings, profile, task 1003308 (pair was its third until task 1003890 removed the dev box): the row, the switch, the field with its label above, the chip control, the four voices and the sign-in gate; the hall's my-projects page was DELETED in the same task — "my projects" is the hub's user-level page, and the hall keeps no link or redirect; the family's fourth page `not-ready.html` was deleted by task 1003450, along with the emptied `requireNonXenosPage` gate that was the only thing redirecting to it). A page sheet then holds only what one page has and the others do not — `primer.css` the acknowledge gate, `diagrams.css` the legend strip, `gate.css` the hold reasons and file chips, `watch.css` the severities, the report reader and the grade trend, `settings.css` the rail layout, the group head, the token ladder and the voices grid, `profile.css` the identity band and the shelf, `people.css` the directory's identity cell (task 1003470 made the legacy door `/scouting` ship the same body and script as `/people`; task 1003440 then deleted the door — `scouting.html` and `scouting.states.json` are gone and the URL 301s to `/people`), `thinking.css` THE SKY's one sheet (task 1004231 / sky part 3 — `thinking.html` at `/thinking` is the prototype the owner adopted as the design of record, `docs/design/mocks/sky/`, built over `GET /sky` + `GET /sky/mine`; its script is the seven `sky-*.js` files on one shared `window.OTBSky`; it replaced THE ROOM of task 1004098, which survives as the list drawer, and the old `/sky` page, whose URL 301s here; `idea-objects.js` beside it is the shared five-object vocabulary).
138
138
  │ ├── lifecycle/ ← CORE-DOMAIN carve (BV1.R86, default-on): the build state machine — tasks · claims · versions · done-when · goals · dependencies · claim→ship→grade→credit · github-push + merge-lock + conflict-resolve + publish-reconciler. The LAST, most-coupled carve; registers the `lifecycle` kernel port (createTask, classifyTaskKind, tallyPeerVotes, work-tracking reads). CLAUDE.md, module.json, routes/{tasks,claims,versions,done-when,goals,dependencies,gate-approvals,analytics}.js, lifecycle.js, github-push.js, merge-lock.js, conflict-resolve.js, publish-reconciler.js, task-visuals.js + task-visual-db.js + routes/visuals.js (the optional ship-time visual, task 1003109 — the route file is NOT named task-*.js on purpose; see the module CLAUDE.md).
139
139
  │ ├── copy-desk/ ← CORE-DOMAIN module (task 1003113 / R02 of goal 1000074, default-on): the COPY half of the design contract — ADR 0081 gave design TOKENS a repo-owned source of truth, text had none. Owns the FLAG (anyone in any role marks a string or a whole surface as needing an artist's attention, with a reason required in BOTH the route and a CHECK constraint) and the QUEUE an artist reads it from. READS R01's committed registry (docs/copy-registry.json, generated by scripts/gds/copy-inventory.js) and never writes it. NO LIVE CMS is the hard non-goal: no column here could hold replacement text, and copy_no_cms.mjs pins that. Key is `copy-desk`, not `copy` — the branding contract already owns a `copy` block, so the bare word reds the "core carries no module code" fitness check. R03 (task 1003114, ADR 0233) added the PROPOSAL: an artist writes the replacement wording and it becomes a Bongos task carrying a fenced copy-proposal patch — no row, NO second migration (a proposals table is the forbidden column with extra steps), and scripts/gds/copy-apply.js lands it as a real diff under a claim. CLAUDE.md, module.json, registry.js, flags.js, proposals.js, routes/copy-desk.js, migrations/copy_desk_001_flags.sql, tests/{copy_flags,copy_queue,copy_no_cms,copy_proposals}.mjs. Its hall surface lives with hall-ui (public/copy-desk.{html,js,css}), per the one-key-per-web-surface precedent.
140
+ │ ├── npm-release/ ← the deploy page for a project that publishes an npm package from GitHub (task 1002622, default-OFF — on only in the Bongos hall, which publishes @bongos/core). "Where the work is": every task finished in the last 14 days, placed in the stage it has actually reached (not merged · merged, no version yet · published, not running here · running here, not released · released · in no version), plus the version history — each version's tasks. The version↔task join reads the release-notes.json the package itself carries (scripts/gds/release-notes.js writes it at pack time), streamed out of the NEWEST version's npm tarball in-process (no child process, no sync call) when the running core's own copy stops short. module.json, work.js (the reading + the stage placement), registry.js (packument + tarball stream + a small tar reader, cached), routes/work.js (GET /npm-release/work, gated core.pin.move like the page), public/work.{js,css} (the two sections /deploy lends it: #nr-work, #nr-versions). Tests sit at the repo root — tests/npm_release_{work,page}.mjs — because a default-off module's own tests/ is skipped by the unit runner.
140
141
  │ ├── ui-design/ ← CORE-DOMAIN module (task 1003324 / ADR 0197, default-on): the design capability every builder on every instance gets — ships METHOD, never a world. Absorbs ADR 0081's layer: adapters/{claude-design,figma}/index.js (moved from src/ui/adapters/), scripts/{design-sync,figma-design-sync,validate-design}.js (moved from scripts/gds/, which keeps thin shims), docs/design-contract.md (moved from docs/). Declaration-only: contributes.skills design (the /design playbook, new) + design-sync + figma-design-sync; no routes/port/migrations, so disabling it touches no served surface. CLAUDE.md separates the platform FLOORS (the Fifteen Rule, the dark twins, no page :root, the 24px floor, AA in both modes, the kill switch) from the instance's WORLD (its packs + DESIGN.md). kit/ (task 1003320) is the look-before-you-ship kit: lib.js (the floors, the states/probes contracts, the action + expectation vocabularies, the WCAG maths, the stub spawner), serve.js (any surface through the doorway's real transforms + fixtures/), render.js (states × 1440/390/320 × dark/light, audited), probe.js (PASS/FAIL contracts), check-mock.js (platform rules + the instance's DESIGN.md taste bans, then the detector), tells.js (task 1003329 / ADR 0223: the anti-pattern detector as two tiers — floors FAIL, craft tells WARN, kit-ignore waivers per file; the rendered twins live in lib.js factsInPage), contrast.js + png.js; a page's <page>.states.json / <page>.probes.json sit BESIDE the surface (modules/public-landing/public/, modules/hall-ui/public/). Recipe: docs/recipes/ui-look-before-you-ship.md. skills/ (task 1003321 / ADR 0198) is the vendoring policy: policy.json (licence allowlist, verdicts that may land, sidecar fields, preamble markers), PREAMBLE.md (the platform preamble every vendored SKILL.md opens with), README.md (the roster — both origins scanned dangerous on 2026-08-28, landed as rebuild specs; nothing vendored — and the landing recipe); a landable copy goes under skills/vendor/<name>/ with PROVENANCE.md + LICENSE and is materialised into an instance's .claude/skills/ by claude-materialize.js step 1b. skills/<name>/ (task 1003325 / ADR 0220) are the in-house rebuilds from the specs, first-party and counted: design-taste-frontend (the default taste skill), design-taste-frontend-v1 (the earlier generation, kept distinct), high-end-visual-design (the polish pass), redesign-existing-projects (the in-place upgrade); each opens with the same preamble and carries a "Rebuilt from" section instead of a sidecar. impeccable/ (task 1003326 / ADR 0221) is the design-craft method as ONE skill with sub-commands: SKILL.md (the router, the menu, the craft floor, the bounded finish) + reference/<sub-command>.md (eighteen playbooks, one loaded per request); no hooks, no bypass agent, no telemetry, no live server. minimalist-ui/, industrial-brutalist-ui/, gpt-taste/, stitch-design-taste/ (task 1003327 / ADR 0230) are the four looks, composition grammars with no colours of their own: the palette is the instance's pack and the texture is a named entry in styles/; a substrate is an archetype that still ships both modes, gpt-taste's selection is derived from the route rather than rolled, and stitch-design-taste writes a DESIGN.md-shaped contract document whose thirteen are transcribed from the pack. image-to-code/, imagegen-frontend-web/, imagegen-frontend-mobile/, brandkit/ (task 1003328 / ADR 0222) are the image family under the hero-only rule: plates and hero objects only, the pair (JPEG dark plate + WebP alpha cutout) with a <file>.json sidecar beside each, through the instance's art pipeline key; the grove specimen's styles/grove/assets/ is the worked example. style/ (task 1003475 / ADR 0231) is the module's first FIRST-PARTY skill (no upstream, so a `## First party` section instead of `## Rebuilt from`): the /style session in which an owner authors their own look in four bounded steps, rendering the nearest library entries before asking, drafting inside the contract, retuning by measurement, and handing over the one-step adoption without ever writing config/branding.json. styles/ (task 1003323 / ADR 0219) is the style library: <name>/pack.json (the theme.ui overlay, exactly the fifteen) + DESIGN.md (the look's derived recipes, thirteen in lockstep with the pack) + mock.html (the specimen); chrome-world (pinned to the neutral pack), expedition, grove, blueprint (the first cool look, authored through /style at task 1003475); STYLE=<name> on the kit lays a look over the instance's pack through GDS_BRANDING_FILE; tests/ui_design_styles.mjs runs the world/cosmos/hall token suites once per alternate (UI_DESIGN_PACK). config/design-tokens.* + design-sources.json STAY in config/ as the host boundary; public-landing keeps its own key (first customer, not owner).
141
142
  │ ├── character-anim/ ← consistent-character generative animation (ADR 0088) — graded painterly frame sets + manifest, the otb-character-review skill. CLAUDE.md, module.json.
142
143
  │ ├── provisioning/ ← stands up + operates a Cloud Bongos instance's own infra (server/DB/domain/DNS/TLS) via the API (ADR 0111); web-tier request+state only, no cloud tokens — a separate control-plane runner drains the intents. Distinct from the `hosting` module (ADR 0092), which brokers compute workloads. CLAUDE.md, module.json.
@@ -2557,5 +2557,9 @@ is load-bearing: the script throws rather than guess if it is missing, and
2557
2557
  landed since 1.19.1037 with no explicit bump. run 36228854271. (task 1002620)
2558
2558
  1.19.1039 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
2559
2559
  landed since 1.19.1038 with no explicit bump. run 36229255566. (task 1002620)
2560
+ 1.19.1040 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
2561
+ landed since 1.19.1039 with no explicit bump. run 36251192410. (task 1002620)
2562
+ 1.19.1041 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
2563
+ landed since 1.19.1040 with no explicit bump. run 36253865251. (task 1002620)
2560
2564
  ---------------------------------------------------------------------------
2561
2565
  ```
@@ -47,12 +47,19 @@ function runClaudeCli({ prompt, opts = {} }) {
47
47
  const isRoot = typeof process.getuid === 'function' && process.getuid() === 0;
48
48
  const permissionMode = isRoot ? 'acceptEdits' : 'bypassPermissions';
49
49
 
50
+ // NO MCP SERVERS (task 1000380). `--tools Read` limits the BUILT-IN tools only;
51
+ // MCP servers are a separate list, so without `--strict-mcp-config` every worker
52
+ // inherited the host's configured servers and claude.ai connectors — measured at
53
+ // 21 extra tools on the owner's Mac, a docs connector that can delete documents
54
+ // among them — inside a session with no permission prompts, reading a diff
55
+ // someone else wrote. Strict mode with no `--mcp-config` loads zero servers.
50
56
  const args = [
51
57
  '-p',
52
58
  '--print',
53
59
  '--model', model,
54
60
  '--output-format', 'json',
55
61
  '--tools', 'Read',
62
+ '--strict-mcp-config',
56
63
  '--disable-slash-commands',
57
64
  '--permission-mode', permissionMode,
58
65
  ];
@@ -31,6 +31,13 @@
31
31
  <p class="scroll__lede" id="dp-sealed-body">This page opens at a higher rank.</p>
32
32
  </section>
33
33
 
34
+ <!-- The npm-release module's two sections (task 1002622): where every recent task
35
+ has got to, and what each version carried. Empty and hidden here; the
36
+ module's own script fills them, and only where the module is on. The work
37
+ leads the page because it is what the reader did. The owner, 2026-09-26:
38
+ "it's not showing anything that's been done." -->
39
+ <section class="scroll" id="nr-work" aria-labelledby="nr-work-h" hidden></section>
40
+
34
41
  <section class="scroll" id="dp-body" aria-labelledby="dp-body-h" hidden>
35
42
  <h2 class="scroll__h" id="dp-body-h">What users can see</h2>
36
43
  <!-- The honest framing, and the one thing a reader must not misread:
@@ -51,6 +58,8 @@
51
58
  took, carrying the time it took it. -->
52
59
  <div id="dp-panel"><span class="kit-skel"></span></div>
53
60
  </section>
61
+
62
+ <section class="scroll" id="nr-versions" aria-labelledby="nr-versions-h" hidden></section>
54
63
  </main>
55
64
 
56
65
  <footer class="app-foot" id="app-foot"></footer>
@@ -643,5 +643,18 @@
643
643
  }
644
644
  }
645
645
 
646
- document.addEventListener('DOMContentLoaded', load);
646
+ // THE MODULE'S SECTIONS (task 1002622). The npm-release module owns "where is the work"
647
+ // and the version history; this page only lends them a place (#nr-work, #nr-versions).
648
+ // Loaded for the hall's OWN view alone — a ?project= view is about another project's
649
+ // box, and the work list is about the package this hall publishes — and only when the
650
+ // module is on, so a hall without it never asks for a script that would 404.
651
+ function loadModuleSections() {
652
+ const mods = window.__MODULES__;
653
+ if (scopeSlug() || !(mods && mods.enabled && mods.enabled['npm-release'])) return;
654
+ const s = document.createElement('script');
655
+ s.src = '/modules/npm-release/public/work.js';
656
+ document.body.appendChild(s);
657
+ }
658
+
659
+ document.addEventListener('DOMContentLoaded', () => { load(); loadModuleSections(); });
647
660
  })();
@@ -0,0 +1,14 @@
1
+ {
2
+ "_": "DEPLOY (task 1003159, ADR 0293; the npm-release module's sections, task 1002622) through modules/ui-design/kit/render.js. The page reads authenticated routes gated on core.pin.move, so against the kit's own stub it renders its restricted or failed-read state. To look at the populated page — the deploy door AND the module's 'where the work is' + version history, from a fixture taken off the live registry and ledger — run the hall-preview harness with the module on:\n\n BONGOS_MODULE_NPM_RELEASE=1 node scripts/hall-preview/server.js --port 4602 --rank archon --fixture-me --modules-on npm-release,provisioning\n node modules/ui-design/kit/render.js --states modules/hall-ui/public/deploy.states.json --base-in http://localhost:4602 --base-out http://localhost:4602",
3
+ "page": "/builders/deploy",
4
+ "surface": "hall-ui",
5
+ "stub": { "prefix": "/builders/" },
6
+ "modeQuery": false,
7
+ "ignoreRequests": ["/api/(gds|bongos)/"],
8
+ "ignoreConsole": ["/api/(gds|bongos)/", "\\b401\\b", "\\b403\\b", "\\b404\\b", "Unauthorized", "Forbidden", "Not Found", "load failed"],
9
+ "states": {
10
+ "work": { "auth": true, "actions": [["wait", 1200]], "expect": { "visible": ["#dp-body"] } },
11
+ "out": { "auth": false, "actions": [["wait", 600]] }
12
+ },
13
+ "reducedMotion": { "auth": true, "actions": [["wait", 1200]] }
14
+ }