@bongos/core 1.23.21 → 1.23.22

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 (61) hide show
  1. package/.bongos-core.json +117 -57
  2. package/.claude/skills/goal-create/SKILL.md +5 -2
  3. package/clients/bongos-client/README.md +1 -1
  4. package/clients/bongos-client/bongos-client.global.js +4 -0
  5. package/clients/bongos-client/index.cjs +4 -0
  6. package/clients/bongos-client/index.d.ts +5 -0
  7. package/clients/bongos-client/index.mjs +4 -0
  8. package/docs/adr/0385-money-lives-with-a-processor-credits-stay-a-project-meter.md +87 -0
  9. package/docs/adr/0386-the-funding-wall-is-a-per-project-rule-claim-time-hold-by-default.md +37 -0
  10. package/docs/adr/0387-two-ledgers-credits-measure-work-money-stays-with-the-processor.md +39 -0
  11. package/docs/adr/0388-a-module-sale-is-split-by-the-project-the-buyer-pays-the-platform-fee.md +42 -0
  12. package/docs/adr/0392-ai-generation-runs-on-a-processor-held-balance-and-the-builders-own-keys.md +33 -0
  13. package/docs/adr/README.md +5 -0
  14. package/docs/api/openapi.json +59 -4
  15. package/docs/api-reference.md +7 -1
  16. package/docs/file-map.md +3 -0
  17. package/docs/module-api-changelog.md +2 -0
  18. package/docs/page-readings.json +1 -1
  19. package/modules/ai-studio/CLAUDE.md +15 -0
  20. package/modules/ai-studio/module.json +26 -0
  21. package/modules/ai-studio/routes/ai-studio.js +22 -0
  22. package/modules/government/db.js +74 -0
  23. package/modules/government/routes/government.js +28 -18
  24. package/modules/grading/grader-subagent.js +30 -11
  25. package/modules/hall-ui/public/city.html +15 -15
  26. package/modules/lifecycle/db-analytics.js +10 -3
  27. package/modules/lifecycle/db-goals.js +30 -13
  28. package/modules/lifecycle/db-shared.js +9 -0
  29. package/modules/lifecycle/db-versions.js +21 -8
  30. package/modules/lifecycle/ship-assurance.js +4 -1
  31. package/modules/lifecycle/ship-card.js +8 -2
  32. package/modules/onboarding/howto-moments.js +8 -1
  33. package/modules/provisioning/starter-bundles.js +4 -2
  34. package/package-lock.json +2 -2
  35. package/package.json +1 -1
  36. package/release-notes.json +66 -0
  37. package/scripts/bongos/publish-manifest.js +1 -0
  38. package/scripts/bongos/strand-watch.js +106 -10
  39. package/src/bongos/module-scope-map.js +4 -0
  40. package/src/module-api.js +1 -1
  41. package/src/platform-server.js +27 -1
  42. package/tests/batched_writes_parity.mjs +340 -0
  43. package/tests/conductor_main_e2e.mjs +4 -0
  44. package/tests/fixtures/per-row-loops-legacy.cjs +245 -0
  45. package/tests/goal_archive_disposition.mjs +5 -5
  46. package/tests/government_routes.mjs +145 -22
  47. package/tests/grader.mjs +31 -0
  48. package/tests/hall_city.mjs +8 -0
  49. package/tests/hook_shell_tools.mjs +8 -0
  50. package/tests/hooks_drain.mjs +1 -1
  51. package/tests/host_topology_skips.mjs +2 -0
  52. package/tests/howto_moments.mjs +17 -0
  53. package/tests/module_loader.mjs +1 -1
  54. package/tests/module_skills_hook.mjs +69 -0
  55. package/tests/public_landing_projects.mjs +37 -0
  56. package/tests/session_start_freshness.mjs +66 -1
  57. package/tests/shell_hooks.mjs +209 -0
  58. package/tests/ship_assurance.mjs +28 -0
  59. package/tests/ship_card.mjs +20 -5
  60. package/tests/strand_watch.mjs +48 -0
  61. package/tests/version_close_route.mjs +1 -1
package/.bongos-core.json CHANGED
@@ -2,22 +2,22 @@
2
2
  "artifact": "bongos-core",
3
3
  "manifest_schema": 1,
4
4
  "generator": "scripts/bongos/package-core.js",
5
- "core_version": "1.23.21",
6
- "core_contract": "1.23.21",
7
- "source_commit": "5624212239928e3e082efd5b058186e35a6cd51d",
5
+ "core_version": "1.23.22",
6
+ "core_contract": "1.23.22",
7
+ "source_commit": "6b555d48e1ba1f5b2682328924ff1a78053dbd11",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-10-29T02:04:20.723Z",
9
+ "built_at": "2026-10-29T04:05:58.381Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
- "docs_redacted": 616,
13
- "agent_docs_stubbed": 29,
14
- "functional_verbatim": 3606,
12
+ "docs_redacted": 621,
13
+ "agent_docs_stubbed": 30,
14
+ "functional_verbatim": 3612,
15
15
  "rules": 3,
16
16
  "gate_literals": 3,
17
17
  "gate": "passed"
18
18
  },
19
- "file_count": 4252,
20
- "tree_sha256": "74b0778836bfca86383004de0425bcf0d9cf92a310070c7d2d704786a2110c70",
19
+ "file_count": 4264,
20
+ "tree_sha256": "58e349f7fccbf570f17ea77d8c70a2bb15273b6ba023bd7f769677822db5e6c7",
21
21
  "files": [
22
22
  {
23
23
  "path": ".claude/skills/ask-for-help/SKILL.md",
@@ -152,7 +152,7 @@
152
152
  {
153
153
  "path": ".claude/skills/goal-create/SKILL.md",
154
154
  "mode": "0000644",
155
- "sha256": "32f89c0a6134b33367c3c4a1934ae27b1d2dee25bf55337c95b000ce5c971153"
155
+ "sha256": "bae85ef84051fe05b84f023465c677220150dcace94f6c832f2c46f01e6d98e0"
156
156
  },
157
157
  {
158
158
  "path": ".claude/skills/goal-review/SKILL.md",
@@ -317,12 +317,12 @@
317
317
  {
318
318
  "path": "clients/bongos-client/README.md",
319
319
  "mode": "0000644",
320
- "sha256": "c553b1c956c0f219fe449b6912b22c71e1a9cd1df509e9af864b0a75ed0486ce"
320
+ "sha256": "a00d3cbcdd655e2c0d61c229168ae1f66653440ea8cf7e09559772fc1a0ff1e2"
321
321
  },
322
322
  {
323
323
  "path": "clients/bongos-client/bongos-client.global.js",
324
324
  "mode": "0000644",
325
- "sha256": "b94b02a1d400f527561322c0bdcd5ab92bf88c7ec699a9fef611647aeb0cd054"
325
+ "sha256": "7dcbd8caaa0af50f819e12c9d769b007c780b633f3b38497833514fad4e5dfea"
326
326
  },
327
327
  {
328
328
  "path": "clients/bongos-client/examples/hello-world.mjs",
@@ -332,17 +332,17 @@
332
332
  {
333
333
  "path": "clients/bongos-client/index.cjs",
334
334
  "mode": "0000644",
335
- "sha256": "4a90c632dc0c88b7ff8e6f5af70d224aa3aa064e3460aae71e2038407fbeeeeb"
335
+ "sha256": "bd6480c70b45a373205cf2d4af1cee5048edbcd794dfb1eadbc5fe09f3c75b43"
336
336
  },
337
337
  {
338
338
  "path": "clients/bongos-client/index.d.ts",
339
339
  "mode": "0000644",
340
- "sha256": "dd0d70bdbf656bfb3cfcc09b138399a6404a01b00dd1ba4c113158f766244c7a"
340
+ "sha256": "0f6eac3c6039c5c46a9634188b19242fa3c263310b658261e2ddbef9e4901bae"
341
341
  },
342
342
  {
343
343
  "path": "clients/bongos-client/index.mjs",
344
344
  "mode": "0000644",
345
- "sha256": "f09a596f9af8baf1846089c0dacd48a990f5f3f3f678e7fc63cb822e803b96c1"
345
+ "sha256": "46739baf3bd7875517f929a785c7f0f65bd5abba50449ec79d8e76b858439bf5"
346
346
  },
347
347
  {
348
348
  "path": "clients/bongos-client/package.json",
@@ -2384,20 +2384,45 @@
2384
2384
  "mode": "0000644",
2385
2385
  "sha256": "480214a7b9536280175d6afbcef5afd2db3938951a333b5c351f713750195b0f"
2386
2386
  },
2387
+ {
2388
+ "path": "docs/adr/0385-money-lives-with-a-processor-credits-stay-a-project-meter.md",
2389
+ "mode": "0000644",
2390
+ "sha256": "990e06619c229f34a79c21abce9dd7301080aac89208e8eca48683d7f39c8c55"
2391
+ },
2392
+ {
2393
+ "path": "docs/adr/0386-the-funding-wall-is-a-per-project-rule-claim-time-hold-by-default.md",
2394
+ "mode": "0000644",
2395
+ "sha256": "aed8ffbd37c4915faae12b6c07222b149ac2f030a2923febc6ec5d53ab9d9258"
2396
+ },
2397
+ {
2398
+ "path": "docs/adr/0387-two-ledgers-credits-measure-work-money-stays-with-the-processor.md",
2399
+ "mode": "0000644",
2400
+ "sha256": "2f0f94aa7e5642ad01a435ee4904333f76516c276f8d2516ddf614917f22a0a3"
2401
+ },
2402
+ {
2403
+ "path": "docs/adr/0388-a-module-sale-is-split-by-the-project-the-buyer-pays-the-platform-fee.md",
2404
+ "mode": "0000644",
2405
+ "sha256": "0364c2a14afb1633c1dfe39290d6aceadcc36d108fc0b37749f63de0f9981921"
2406
+ },
2407
+ {
2408
+ "path": "docs/adr/0392-ai-generation-runs-on-a-processor-held-balance-and-the-builders-own-keys.md",
2409
+ "mode": "0000644",
2410
+ "sha256": "73d879a7dbdec6097f34277b5f04f02e07fdfeb2c07bbf8510e76056f1868ec9"
2411
+ },
2387
2412
  {
2388
2413
  "path": "docs/adr/README.md",
2389
2414
  "mode": "0000644",
2390
- "sha256": "55118cb44c176575bf60a2dea0edba109eb1b429b4670bd6155fefeef4930191"
2415
+ "sha256": "b99307056cc461e669b3e0632a2b41130cb18d7ab439766cb61bc2615f92a735"
2391
2416
  },
2392
2417
  {
2393
2418
  "path": "docs/api-reference.md",
2394
2419
  "mode": "0000644",
2395
- "sha256": "3a556001ba1219ca7636291d229a599059afec988ab35e81659cd3fa390248d7"
2420
+ "sha256": "002d6589c1c9d13ad6f987f5e8253fe5534bae7b7a5838f880aa50912f625266"
2396
2421
  },
2397
2422
  {
2398
2423
  "path": "docs/api/openapi.json",
2399
2424
  "mode": "0000644",
2400
- "sha256": "012489f4fca5a867137eb43ba6b29cb69e36716ea8801ffe496c1c21e9fc5da2"
2425
+ "sha256": "d475567feeb9247061be4d91b1de512e6c4aec704615d3561135e997de3e1f13"
2401
2426
  },
2402
2427
  {
2403
2428
  "path": "docs/architecture.md",
@@ -2927,7 +2952,7 @@
2927
2952
  {
2928
2953
  "path": "docs/file-map.md",
2929
2954
  "mode": "0000644",
2930
- "sha256": "584d78e2f7b7297e4e302a1d0b1dc343f392a818e72fee0ea1062ba97e155a45"
2955
+ "sha256": "9aa13b9f83073c934370231dcbb63bfd5d68d14719a1dfbfbd04465cfc45d805"
2931
2956
  },
2932
2957
  {
2933
2958
  "path": "docs/handoff-template.md",
@@ -2937,7 +2962,7 @@
2937
2962
  {
2938
2963
  "path": "docs/module-api-changelog.md",
2939
2964
  "mode": "0000644",
2940
- "sha256": "7cca771f6d0fc816d449fa7478f5b01c9d5f25ec21bef1db28338c7f2f4e38e0"
2965
+ "sha256": "fd71f473ac9a7a0fbd35c7677380231561156415b9f9cec559442043cba6a853"
2941
2966
  },
2942
2967
  {
2943
2968
  "path": "docs/modules-contract.md",
@@ -3027,7 +3052,7 @@
3027
3052
  {
3028
3053
  "path": "docs/page-readings.json",
3029
3054
  "mode": "0000644",
3030
- "sha256": "822cc37477432eff75a58c6467780b0be56e447fd2dce420f8a6ae01e9887351"
3055
+ "sha256": "108ea1dfd2fab03ec9f1a13c40508c0c161f4bdde7b83d390091ac2a71f105cc"
3031
3056
  },
3032
3057
  {
3033
3058
  "path": "docs/project-context.template.md",
@@ -4279,6 +4304,21 @@
4279
4304
  "mode": "0000644",
4280
4305
  "sha256": "4e5e9ac97bd443d4091d8a6e4e246e080a2fe67793a77f4c4139b19019e37005"
4281
4306
  },
4307
+ {
4308
+ "path": "modules/ai-studio/CLAUDE.md",
4309
+ "mode": "0000644",
4310
+ "sha256": "7cb9dac9cb87b679e1ae50e4112b3a7928a38ebb9902c8947a74d17bec4d9009"
4311
+ },
4312
+ {
4313
+ "path": "modules/ai-studio/module.json",
4314
+ "mode": "0000644",
4315
+ "sha256": "9b697a9d70885bde63ae6ef2d8c80a5add2ebe56c390a9d9e628ff2069c33684"
4316
+ },
4317
+ {
4318
+ "path": "modules/ai-studio/routes/ai-studio.js",
4319
+ "mode": "0000644",
4320
+ "sha256": "ed9007470d361125cf52ed6658e035c7e293e9d231de7d980e2518f2c0322b08"
4321
+ },
4282
4322
  {
4283
4323
  "path": "modules/autonomy/CLAUDE.md",
4284
4324
  "mode": "0000644",
@@ -5142,7 +5182,7 @@
5142
5182
  {
5143
5183
  "path": "modules/government/db.js",
5144
5184
  "mode": "0000644",
5145
- "sha256": "f92ebfd4df5a881b43e4c6929c48fbd1fd09bae9a76b5049c347442a48208351"
5185
+ "sha256": "f3337a4718251d7634dc53dca137519126db2402a3456268e1fb656858a37faf"
5146
5186
  },
5147
5187
  {
5148
5188
  "path": "modules/government/decision-board.js",
@@ -5442,7 +5482,7 @@
5442
5482
  {
5443
5483
  "path": "modules/government/routes/government.js",
5444
5484
  "mode": "0000644",
5445
- "sha256": "3a719a9d8a432cf3197a3ccd27e1a3293cf6a817fec2a3bf177fee9e2eae6be2"
5485
+ "sha256": "ba6ddb8d4e97ee117bfc6d31f460c5e5d562bcc3ca987b5329c2b84f1e34a9fd"
5446
5486
  },
5447
5487
  {
5448
5488
  "path": "modules/government/routes/rank-sync.js",
@@ -5537,7 +5577,7 @@
5537
5577
  {
5538
5578
  "path": "modules/grading/grader-subagent.js",
5539
5579
  "mode": "0000644",
5540
- "sha256": "fb6845bbc6d94a14dee3e36ab999a71e7709ae1454f572602db4e987920255fe"
5580
+ "sha256": "d5af3ffea09183e2173c63a473c06b48be30f346cede693a31c3cb9edd125703"
5541
5581
  },
5542
5582
  {
5543
5583
  "path": "modules/grading/grader-workers/efficiency.js",
@@ -5757,7 +5797,7 @@
5757
5797
  {
5758
5798
  "path": "modules/hall-ui/public/city.html",
5759
5799
  "mode": "0000644",
5760
- "sha256": "726a5882415a024b8e5d4a034715a6c716445bab3426ed5ab143ce69bf4d1798"
5800
+ "sha256": "e92cf9d1df7de278a465485d630a5c549991bbf1235c4aa0347f34aae9c81367"
5761
5801
  },
5762
5802
  {
5763
5803
  "path": "modules/hall-ui/public/city.js",
@@ -7387,7 +7427,7 @@
7387
7427
  {
7388
7428
  "path": "modules/lifecycle/db-analytics.js",
7389
7429
  "mode": "0000644",
7390
- "sha256": "b0c99fd4791e13a2d225404bae84eea7fa18fdca1120452c1e74b4d00b405675"
7430
+ "sha256": "4f6262946f714507e58c529d610e816457a2e19b55b72cdc75058bcb89611314"
7391
7431
  },
7392
7432
  {
7393
7433
  "path": "modules/lifecycle/db-claim-reads.js",
@@ -7412,7 +7452,7 @@
7412
7452
  {
7413
7453
  "path": "modules/lifecycle/db-goals.js",
7414
7454
  "mode": "0000644",
7415
- "sha256": "062bfd34829de884511622316fb733744998342a83c654a6a505e55d0d23725d"
7455
+ "sha256": "06bd03d0a53b0168813fce816d50df7d171dbb218c97f19644fd4a34ec61dcc5"
7416
7456
  },
7417
7457
  {
7418
7458
  "path": "modules/lifecycle/db-grade.js",
@@ -7437,7 +7477,7 @@
7437
7477
  {
7438
7478
  "path": "modules/lifecycle/db-shared.js",
7439
7479
  "mode": "0000644",
7440
- "sha256": "17a6ddfb4a9415c67dfbd06b052a3a7686df7a55287aa78ff2b55c6a2ca3d954"
7480
+ "sha256": "503ae4e0e3b39f85b8298c149e1c129750b55a4aba51238e79c08d08a83b3da1"
7441
7481
  },
7442
7482
  {
7443
7483
  "path": "modules/lifecycle/db-ship.js",
@@ -7452,7 +7492,7 @@
7452
7492
  {
7453
7493
  "path": "modules/lifecycle/db-versions.js",
7454
7494
  "mode": "0000644",
7455
- "sha256": "c1d6b391f2f8e14246640ec932b37aea6cb9d09a9b823bc3d8079f77baf2296c"
7495
+ "sha256": "5491418fae3bd53959722e9e685fcbd55f665d1fe0f5fa0b9b24458f1e6f8b38"
7456
7496
  },
7457
7497
  {
7458
7498
  "path": "modules/lifecycle/db.js",
@@ -7942,12 +7982,12 @@
7942
7982
  {
7943
7983
  "path": "modules/lifecycle/ship-assurance.js",
7944
7984
  "mode": "0000644",
7945
- "sha256": "c4dd044485e664528c01caea0500dd6fe9d8ee9d2319385000d1cee26e32102e"
7985
+ "sha256": "46a4a821035a4b4e5e35bad5c173812cbbb18e9e330ca2768d7f91fe03dd8c71"
7946
7986
  },
7947
7987
  {
7948
7988
  "path": "modules/lifecycle/ship-card.js",
7949
7989
  "mode": "0000644",
7950
- "sha256": "963159a45b1ddce7fc3063e4fe71ffa9a16f3ac266bb5eee7efbc7041d667f41"
7990
+ "sha256": "b0ff1255ee9e567c0aa0405530ad369b0e9e40f17f545d95daeed0eb96d4d0cb"
7951
7991
  },
7952
7992
  {
7953
7993
  "path": "modules/lifecycle/ship-files.js",
@@ -8197,7 +8237,7 @@
8197
8237
  {
8198
8238
  "path": "modules/onboarding/howto-moments.js",
8199
8239
  "mode": "0000644",
8200
- "sha256": "5bced66d3574323fd3662eff98a9e70394cf2830acae11b1950f5c168d8d7ea6"
8240
+ "sha256": "8e4924c7cd2c2c65d73526e1edc2bae451b8f4174adcda18196c0c2439e65586"
8201
8241
  },
8202
8242
  {
8203
8243
  "path": "modules/onboarding/howto-state.js",
@@ -9207,7 +9247,7 @@
9207
9247
  {
9208
9248
  "path": "modules/provisioning/starter-bundles.js",
9209
9249
  "mode": "0000644",
9210
- "sha256": "976f2ce71f80d586e412fdb7c88b21004ff968d0de69f281e9e8ff34ae0baf35"
9250
+ "sha256": "6653157ce000866f3a2dccd6ef2d01a897446ee5ba776087537a77b9dac31fc0"
9211
9251
  },
9212
9252
  {
9213
9253
  "path": "modules/provisioning/terms-ack.js",
@@ -11032,12 +11072,12 @@
11032
11072
  {
11033
11073
  "path": "package-lock.json",
11034
11074
  "mode": "0000644",
11035
- "sha256": "3e38ce5d5f5522e4d6479a3430df28858f36be6e79d2cd11808ed7e128fc4f3b"
11075
+ "sha256": "36c70553ce0423e1448a13c3fc107b75bc48b4bfbbd86da86cf50a35bbc73d5e"
11036
11076
  },
11037
11077
  {
11038
11078
  "path": "package.json",
11039
11079
  "mode": "0000644",
11040
- "sha256": "2b11d8a46c71afe00d28af274de396b51a4d9b02c69bdd8b94cd2a1a42245495"
11080
+ "sha256": "b541486f65db13ab2f9e085ac9691c42e0fbb0481cf52916f1d78c874affcc58"
11041
11081
  },
11042
11082
  {
11043
11083
  "path": "public-docs/index.html",
@@ -11057,7 +11097,7 @@
11057
11097
  {
11058
11098
  "path": "release-notes.json",
11059
11099
  "mode": "0000644",
11060
- "sha256": "bac27f8f10894962e543895c14c9288b5bf5b950189c0fd57b97fec57c776cac"
11100
+ "sha256": "f6ee82f0aee9d367ceb900a2412ecf39c55dc1eda630060e1e7534d7e58a0336"
11061
11101
  },
11062
11102
  {
11063
11103
  "path": "scripts/bongos/CLAUDE.md",
@@ -12177,7 +12217,7 @@
12177
12217
  {
12178
12218
  "path": "scripts/bongos/publish-manifest.js",
12179
12219
  "mode": "0000644",
12180
- "sha256": "cc8cf27893ea078da01e1a9857629ddb62e9062900101008d44a60b0c56987cd"
12220
+ "sha256": "a4a7e204811600df8ef459fd14d210cf2712ee56a77b160e1f71341a11029994"
12181
12221
  },
12182
12222
  {
12183
12223
  "path": "scripts/bongos/publish-watch.js",
@@ -12617,7 +12657,7 @@
12617
12657
  {
12618
12658
  "path": "scripts/bongos/strand-watch.js",
12619
12659
  "mode": "0000644",
12620
- "sha256": "87b2ec3155ac165a6de8d65ee47e4e2c56455a84c2e468a0520462f5dde4df9b"
12660
+ "sha256": "e8a080a0109f039de364375e9027282bffc7cb6cd9ac25643db413963fe1ad46"
12621
12661
  },
12622
12662
  {
12623
12663
  "path": "scripts/bongos/stranded-rows.js",
@@ -14667,7 +14707,7 @@
14667
14707
  {
14668
14708
  "path": "src/bongos/module-scope-map.js",
14669
14709
  "mode": "0000644",
14670
- "sha256": "108a3adcad69231b7b5d89c476ff24a17a5e1c52f82dd7f635f7da65be6c542b"
14710
+ "sha256": "3b2817f0073ec20bbc1ee4cf8d6e9ad49f2f4d36fe5451d512612179f27f3c4e"
14671
14711
  },
14672
14712
  {
14673
14713
  "path": "src/bongos/module-store.js",
@@ -14932,7 +14972,7 @@
14932
14972
  {
14933
14973
  "path": "src/module-api.js",
14934
14974
  "mode": "0000644",
14935
- "sha256": "292f7c0252f9ce177228d2e07178fb0d0aadb70a21bb228c33209fb0501d491e"
14975
+ "sha256": "a3b5a87ea6e2460bf7ce3301beffa4de79e456a6939e098103144121645a168a"
14936
14976
  },
14937
14977
  {
14938
14978
  "path": "src/module-loader/catalog.js",
@@ -14982,7 +15022,7 @@
14982
15022
  {
14983
15023
  "path": "src/platform-server.js",
14984
15024
  "mode": "0000644",
14985
- "sha256": "1d47f2451ca14f78d576e8fa310feb799287e7b29a6936513c637ea68d1da530"
15025
+ "sha256": "7d3aa8fb655d00824068d218f61e99f47d5ebc232a5e82a8d51ac86eab8fc21e"
14986
15026
  },
14987
15027
  {
14988
15028
  "path": "src/role-responsibilities.js",
@@ -15544,6 +15584,11 @@
15544
15584
  "mode": "0000644",
15545
15585
  "sha256": "c824ccf242b556394c0fc935d49b8cbefedf139ebe6525ac76941c36437cf870"
15546
15586
  },
15587
+ {
15588
+ "path": "tests/batched_writes_parity.mjs",
15589
+ "mode": "0000644",
15590
+ "sha256": "11acbec0efeca58d5509742ded734809dfcb752c40cacd5bd932ebe78f108755"
15591
+ },
15547
15592
  {
15548
15593
  "path": "tests/bfg.mjs",
15549
15594
  "mode": "0000644",
@@ -15902,7 +15947,7 @@
15902
15947
  {
15903
15948
  "path": "tests/conductor_main_e2e.mjs",
15904
15949
  "mode": "0000644",
15905
- "sha256": "5d825f686bbe5351def658bf6e2f011e3ca351312f04009500ee65c8a195914d"
15950
+ "sha256": "8a2feb1301f7891d535e124df4f7b5df8fd0335967bcff69515eb57e316d7999"
15906
15951
  },
15907
15952
  {
15908
15953
  "path": "tests/confirm_attribution.mjs",
@@ -16614,6 +16659,11 @@
16614
16659
  "mode": "0000644",
16615
16660
  "sha256": "30f6ed17fee386c26312f26c2af7be6b10528f6f46deac43c549453ea53bc622"
16616
16661
  },
16662
+ {
16663
+ "path": "tests/fixtures/per-row-loops-legacy.cjs",
16664
+ "mode": "0000644",
16665
+ "sha256": "a86b984c420c260c5298b1fd15c48533a27a4ead3ad63543bdfa63ecd6b37949"
16666
+ },
16617
16667
  {
16618
16668
  "path": "tests/fixtures/session-506-digest.json",
16619
16669
  "mode": "0000644",
@@ -16787,7 +16837,7 @@
16787
16837
  {
16788
16838
  "path": "tests/goal_archive_disposition.mjs",
16789
16839
  "mode": "0000644",
16790
- "sha256": "de5b561ffe78ead5f6a1ad08066aaa2672627f441f8602fd46e1fdac453512e0"
16840
+ "sha256": "f4210536e3b01302723eabab4e3a60807e3d044e3f4b6cf1c76c7abff91737ab"
16791
16841
  },
16792
16842
  {
16793
16843
  "path": "tests/goal_archive_hall.mjs",
@@ -17237,7 +17287,7 @@
17237
17287
  {
17238
17288
  "path": "tests/government_routes.mjs",
17239
17289
  "mode": "0000644",
17240
- "sha256": "09c36e1dccea230795f01339ead8369989aafb38797db266d285786e0bd3051b"
17290
+ "sha256": "8d6ead16f2e895d0804549bd089c6f157f0a92e89528cc7ece27c88f67d011bf"
17241
17291
  },
17242
17292
  {
17243
17293
  "path": "tests/government_routing.mjs",
@@ -17352,7 +17402,7 @@
17352
17402
  {
17353
17403
  "path": "tests/grader.mjs",
17354
17404
  "mode": "0000644",
17355
- "sha256": "8bf32b974c79b229db501091a746a4adf02b8c52d0eff55daa3a8a47bc0e2769"
17405
+ "sha256": "a294b328e93dcced178c8fc99d6f6af466f1d9d9ac8ac3746b7b36a3f3dd0c3c"
17356
17406
  },
17357
17407
  {
17358
17408
  "path": "tests/grader_bypass.mjs",
@@ -17507,7 +17557,7 @@
17507
17557
  {
17508
17558
  "path": "tests/hall_city.mjs",
17509
17559
  "mode": "0000644",
17510
- "sha256": "0808195def515b95e20412095f38723086af8de826d3094445f782665531b900"
17560
+ "sha256": "9936c8fb77e7fa8a4c883914b8602d6717d4276f09c71c2de7f374765a7416db"
17511
17561
  },
17512
17562
  {
17513
17563
  "path": "tests/hall_city_card_words.mjs",
@@ -17822,7 +17872,7 @@
17822
17872
  {
17823
17873
  "path": "tests/hook_shell_tools.mjs",
17824
17874
  "mode": "0000644",
17825
- "sha256": "e5254db414d825fdc4a8a16d71f7e9bcf923235859ce9dae3dad8cb041ac62bd"
17875
+ "sha256": "c65fae96840a0de874ed9c93509959e7a2e182f4108714c4d8ed9b68f209f95f"
17826
17876
  },
17827
17877
  {
17828
17878
  "path": "tests/hook_user_agents.mjs",
@@ -17832,12 +17882,12 @@
17832
17882
  {
17833
17883
  "path": "tests/hooks_drain.mjs",
17834
17884
  "mode": "0000644",
17835
- "sha256": "10bf6ee70cefa9a7d8c63e2c44d61b9eabb009672ade6490c4765e1bf5370fdd"
17885
+ "sha256": "6b2ba4f2b7e7c310a738d6d006fb671b9a0ecb1537d7f007c6551a62fbafe6be"
17836
17886
  },
17837
17887
  {
17838
17888
  "path": "tests/host_topology_skips.mjs",
17839
17889
  "mode": "0000644",
17840
- "sha256": "2725d906cf238e17f005a3f74139dd3d87658cb1d21302c6279602ee81430a55"
17890
+ "sha256": "306ac95d23d5990803ed78ae8ad3c9148b546f89e39b0bdae74263857c94efd9"
17841
17891
  },
17842
17892
  {
17843
17893
  "path": "tests/howto_guide.mjs",
@@ -17847,7 +17897,7 @@
17847
17897
  {
17848
17898
  "path": "tests/howto_moments.mjs",
17849
17899
  "mode": "0000644",
17850
- "sha256": "a69d0dfe82003136de36663bb798a93508f9105245f2e6ecccff03be88793cff"
17900
+ "sha256": "04e246a3967b1282ee9d634340b0f2833f05b0a605cc9c727b54fd774fabc826"
17851
17901
  },
17852
17902
  {
17853
17903
  "path": "tests/howto_state.mjs",
@@ -18702,7 +18752,7 @@
18702
18752
  {
18703
18753
  "path": "tests/module_loader.mjs",
18704
18754
  "mode": "0000644",
18705
- "sha256": "9a7322dd82ecee73e28bd415380b1d89a56beee96214e6886adde5baf20717a5"
18755
+ "sha256": "686a208f7af861a5445067dfe7714a9971ab44b12bddeb77a0c8f125c34b42ef"
18706
18756
  },
18707
18757
  {
18708
18758
  "path": "tests/module_manifest.mjs",
@@ -18744,6 +18794,11 @@
18744
18794
  "mode": "0000644",
18745
18795
  "sha256": "ba4233ed072c87df9dbc5c75af10655ad8eaaf9d8ccbe69df146052467a1279e"
18746
18796
  },
18797
+ {
18798
+ "path": "tests/module_skills_hook.mjs",
18799
+ "mode": "0000644",
18800
+ "sha256": "c90dae7d87913331517a693607758f5ce0c76fdb47e71bf173e7fade8ecae4ab"
18801
+ },
18747
18802
  {
18748
18803
  "path": "tests/module_store_cli.mjs",
18749
18804
  "mode": "0000644",
@@ -19717,7 +19772,7 @@
19717
19772
  {
19718
19773
  "path": "tests/public_landing_projects.mjs",
19719
19774
  "mode": "0000644",
19720
- "sha256": "8de910362919966f8439acaf7fc43a9e9a5e85b37600dc427306bdafee84b852"
19775
+ "sha256": "5c4afce4ed9e455816aa72bb307751e393dc483de21e9fde4624e7788c0a40fa"
19721
19776
  },
19722
19777
  {
19723
19778
  "path": "tests/public_mirror_export.mjs",
@@ -20247,7 +20302,7 @@
20247
20302
  {
20248
20303
  "path": "tests/session_start_freshness.mjs",
20249
20304
  "mode": "0000644",
20250
- "sha256": "054d6c210a5506be5b89d88ffd9b536aa392596094d73c8882b4737bb19933f2"
20305
+ "sha256": "d4c03dfb66690da1d870668e7b68c3bd0a35dc1a8a90986c6aad9586138ed1e1"
20251
20306
  },
20252
20307
  {
20253
20308
  "path": "tests/session_token_hash.mjs",
@@ -20304,6 +20359,11 @@
20304
20359
  "mode": "0000644",
20305
20360
  "sha256": "60c916b45238363dfdf05d0e782e8bbf2aa9f12ace0b66614e883cfae10bc7f8"
20306
20361
  },
20362
+ {
20363
+ "path": "tests/shell_hooks.mjs",
20364
+ "mode": "0000644",
20365
+ "sha256": "3105a2a2c7a911e1993efd83af537fb2294b332cd5262ab83b41cc720e98a3da"
20366
+ },
20307
20367
  {
20308
20368
  "path": "tests/shell_stat_portability.mjs",
20309
20369
  "mode": "0000644",
@@ -20312,7 +20372,7 @@
20312
20372
  {
20313
20373
  "path": "tests/ship_assurance.mjs",
20314
20374
  "mode": "0000644",
20315
- "sha256": "be68b8dbf514937f581dfa3a892958fd4f16e20dd319d0ed70bf08811a3451e3"
20375
+ "sha256": "29a1db18cd389c51a15a10c1164ab44ae55ad2de95865f8dcfdb0a663b7e555e"
20316
20376
  },
20317
20377
  {
20318
20378
  "path": "tests/ship_autolinkify.mjs",
@@ -20352,7 +20412,7 @@
20352
20412
  {
20353
20413
  "path": "tests/ship_card.mjs",
20354
20414
  "mode": "0000644",
20355
- "sha256": "44eedcaa68ea63b3c24807cb85004287a49125cc3ba0e74adde8d48c2fc1ce6d"
20415
+ "sha256": "cd7e72fa94b3b262b2a3ababb811593fa0295817dbc916c111c1fd69f5481d14"
20356
20416
  },
20357
20417
  {
20358
20418
  "path": "tests/ship_card_injection.mjs",
@@ -20722,7 +20782,7 @@
20722
20782
  {
20723
20783
  "path": "tests/strand_watch.mjs",
20724
20784
  "mode": "0000644",
20725
- "sha256": "84751cd41a446629db9dbbd38c5bb878998289e815520420e5f8ec3a0f66fbf3"
20785
+ "sha256": "5fe3b1c8501ef03f01fafbe290fb465c3db476bdf254206ca2594142834a02a4"
20726
20786
  },
20727
20787
  {
20728
20788
  "path": "tests/stranded_rows.mjs",
@@ -21092,7 +21152,7 @@
21092
21152
  {
21093
21153
  "path": "tests/version_close_route.mjs",
21094
21154
  "mode": "0000644",
21095
- "sha256": "ce1b1ee359ba8104012b679f1bb1a7df5d2db4d14dd9608ea780a7db86a5c666"
21155
+ "sha256": "d533052b79f4b21c7367d92ed4683da5c12ca2d5d49b55a89e78afb160d154dd"
21096
21156
  },
21097
21157
  {
21098
21158
  "path": "tests/version_first_goal.mjs",
@@ -73,7 +73,7 @@ Everything here is your call. It is presented in Phase 4 as a proposal, not as q
73
73
  - **`category_id`** — the goal's HUMAN category (task 1003277; ADR 0192 — advisory, it gates nothing). Read the live set with `GET /api/bongos/work-categories` (never hard-code the labels), infer the best fit from the goal's outcome and its `scope_modules`, and state your pick in the Phase-4 approval round like every other drafted field. **When nothing in the set fits, that is a designed prompt, not an error**: do NOT silently pick the nearest, and do NOT leave it null and move on — surface the gap in the gray-area round and offer to create a new category (`POST /api/bongos/work-categories` with `{"label":"..."}`; a duplicate slug converges on the existing row), then use it. Creating uncategorised stays legal — if the user declines to name one, POST the goal without `category_id` and note that the 201 body will carry a `category_advisory` reminding whoever looks next.
74
74
  - **`succeeds_goal_id`** — set it when carrying an achieved goal forward. `POST /goals` validates the predecessor exists *before* creating, so a bad ref can't orphan a goal; it then stamps the predecessor's `succeeded_by_goal_id`. Archiving the predecessor is a **separate** call.
75
75
  - **Criteria — 2 to 4.** A goal's criteria are narrower than a version's: each should plausibly anchor 2–5 tasks. Draft `criterion_id` as a stable kebab slug (position-independent, and what `criterion_ids` on `POST /tasks` should reference); `criterion_md` is the outcome prose.
76
- - **Seed tasks — 3 to 8.** Per criterion, with `kind`, a one-line done-when, `criterion_ids: ["<slug>"]`, and dependency edges. Omit `touches[]` (advisory, ADR 0049 — backfilled from the real diff at ship). Never hand-set `requires_rank`: it auto-derives (ADR 0084) from `needs_migration` and the goal's own scope wall, neither of which needs a prediction (ADR 0270). **Do set `needs_migration: true` on any task that will alter the live database** — it is the input that floors such a task at Metic, and omitting it is how a schema change lands in the open queue. Proof tasks use `kind='verify'`; exploration uses `kind='spike'` (and spikes are deliberately left in backlog).
76
+ - **Seed tasks — 3 to 8.** Per criterion, with `kind`, a one-line done-when, `criterion_ids: ["<slug>"]`, and dependency edges. Omit `touches[]` (advisory, ADR 0049 — backfilled from the real diff at ship). Never hand-set `requires_rank`: it auto-derives (ADR 0084) from `needs_migration` and the goal's own scope wall, neither of which needs a prediction (ADR 0270). **Make sure `needs_migration` is true on any task that will alter the live database** — it is the input that floors such a task at Metic, and leaving it false is how a schema change lands in the open queue. `POST /tasks` does **not** accept the field (400 `unknown_field`): it infers it from the title and description, so say "migration" or "schema" there, then re-read the created task and, if the guess missed, set it with `PATCH /tasks/<id> {"needs_migration": true}`. **Give every seed task a `discipline`** (`engineer | artist | ideator | ui`): when it is omitted the route infers it from the text, and a task it cannot place is refused 400 `bad_discipline`. Proof tasks use `kind='verify'`; exploration uses `kind='spike'` (and spikes are deliberately left in backlog).
77
77
 
78
78
  ## Phase 4 — Ask, then get sign-off
79
79
 
@@ -114,8 +114,11 @@ node scripts/bongos/api.js POST /api/bongos/versions/<ver>/done-when --body-file
114
114
  # 5c — the seed tasks, one call each. --body-file avoids shell-quoting description/arrays.
115
115
  node scripts/bongos/api.js POST /api/bongos/tasks --body-file <path-to-task.json>
116
116
  # {"version_id":"<ver>","goal_id":<gid>,"title":"...","description":"...",
117
- # "kind":"feature|refactor|infra|spike|verify|decision","priority":N,"est_minutes":N,
117
+ # "kind":"feature|refactor|infra|spike|verify|decision","discipline":"engineer|artist|ideator|ui",
118
+ # "priority":N,"est_minutes":N,
118
119
  # "criterion_ids":["<slug>"],"source":"goal-create","source_ref":"goal-<gid>-R##"}
120
+ # No needs_migration here — the create rejects it as unknown; PATCH it afterwards if the
121
+ # inference from the text missed a schema change (see Seed tasks above).
119
122
  # criterion_ids takes a SLUG (preferred), a "Cn" position, or a numeric id; an
120
123
  # unresolvable ref is 400 bad_criterion_ref and NOTHING is created. source_ref makes a
121
124
  # re-run idempotent (a repeat returns the original task with "idempotent": true).
@@ -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
- - 587 operations across 76 resource groups
8
+ - 588 operations across 77 resource groups
9
9
 
10
10
  ## Use it from your project
11
11
 
@@ -124,6 +124,10 @@ function createClient(opts = {}) {
124
124
  // POST /agents/{name}/invoke — rank: any-builder — POST /agents/:name/invoke
125
125
  postAgentsNameInvoke: (args) => request("POST", "/agents/{name}/invoke", { hasBody: true }, args),
126
126
  },
127
+ "aiStudio": {
128
+ // GET /ai-studio/status — rank: any-builder — GET /ai-studio/status
129
+ getAiStudioStatus: (args) => request("GET", "/ai-studio/status", { hasBody: false }, args),
130
+ },
127
131
  "analytics": {
128
132
  // GET /analytics/builder/{id} — rank: any-builder — GET /analytics/builder/:id
129
133
  getAnalyticsBuilderId: (args) => request("GET", "/analytics/builder/{id}", { hasBody: false }, args),
@@ -123,6 +123,10 @@ function createClient(opts = {}) {
123
123
  // POST /agents/{name}/invoke — rank: any-builder — POST /agents/:name/invoke
124
124
  postAgentsNameInvoke: (args) => request("POST", "/agents/{name}/invoke", { hasBody: true }, args),
125
125
  },
126
+ "aiStudio": {
127
+ // GET /ai-studio/status — rank: any-builder — GET /ai-studio/status
128
+ getAiStudioStatus: (args) => request("GET", "/ai-studio/status", { hasBody: false }, args),
129
+ },
126
130
  "analytics": {
127
131
  // GET /analytics/builder/{id} — rank: any-builder — GET /analytics/builder/:id
128
132
  getAnalyticsBuilderId: (args) => request("GET", "/analytics/builder/{id}", { hasBody: false }, args),
@@ -33,6 +33,7 @@ export interface GetAchievementsResponse { achievements: unknown }
33
33
  export interface GetAgentRunsIdResponse { ok: boolean; run: unknown }
34
34
  export interface GetAgentsNameResponse { ok: boolean; agent: unknown }
35
35
  export interface GetAgentsResponse { ok: boolean; agents: unknown; counts: unknown; vocabulary: unknown }
36
+ export interface GetAiStudioStatusResponse { ok: boolean; module: unknown }
36
37
  export interface GetArtistGateResponse { ok: boolean; mode: unknown; since: unknown; holds: boolean; truncated: unknown; reviews: unknown; halt: unknown }
37
38
  export interface GetAuditLogResponse { rows: unknown; page: unknown }
38
39
  export interface GetAuthWebAdmissionStatusResponse { admitted: boolean }
@@ -685,6 +686,10 @@ export interface BongosClient {
685
686
  /** POST /agents/{name}/invoke — rank: any-builder */
686
687
  postAgentsNameInvoke(args?: RequestArgs & { body?: PostAgentsNameInvokeRequest }): Promise<PostAgentsNameInvokeResponse>;
687
688
  };
689
+ "aiStudio": {
690
+ /** GET /ai-studio/status — rank: any-builder */
691
+ getAiStudioStatus(args?: RequestArgs): Promise<GetAiStudioStatusResponse>;
692
+ };
688
693
  "analytics": {
689
694
  /** GET /analytics/builder/{id} — rank: any-builder */
690
695
  getAnalyticsBuilderId(args?: RequestArgs): Promise<ApiResponse>;
@@ -120,6 +120,10 @@ export function createClient(opts = {}) {
120
120
  // POST /agents/{name}/invoke — rank: any-builder — POST /agents/:name/invoke
121
121
  postAgentsNameInvoke: (args) => request("POST", "/agents/{name}/invoke", { hasBody: true }, args),
122
122
  },
123
+ "aiStudio": {
124
+ // GET /ai-studio/status — rank: any-builder — GET /ai-studio/status
125
+ getAiStudioStatus: (args) => request("GET", "/ai-studio/status", { hasBody: false }, args),
126
+ },
123
127
  "analytics": {
124
128
  // GET /analytics/builder/{id} — rank: any-builder — GET /analytics/builder/:id
125
129
  getAnalyticsBuilderId: (args) => request("GET", "/analytics/builder/{id}", { hasBody: false }, args),