@bongos/core 1.19.591 → 1.19.593

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 (42) hide show
  1. package/.bongos-core.json +72 -42
  2. package/.claude/skills/planning-session/SKILL.md +2 -2
  3. package/clients/bongos-client/README.md +1 -1
  4. package/clients/bongos-client/bongos-client.global.js +3 -1
  5. package/clients/bongos-client/index.cjs +3 -1
  6. package/clients/bongos-client/index.d.ts +6 -2
  7. package/clients/bongos-client/index.mjs +3 -1
  8. package/docs/adr/0157-archon-is-rank-and-identity-only.md +2 -0
  9. package/docs/api/openapi.json +103 -7
  10. package/docs/api-reference.md +4 -3
  11. package/docs/copy-inventory.md +135 -116
  12. package/docs/copy-registry.json +319 -138
  13. package/docs/module-api-changelog.md +4 -0
  14. package/migrations/core_233_versions_one_planning_idx.sql +47 -0
  15. package/modules/dev-box/app/src/vendor/bongos-client.cjs +3 -1
  16. package/modules/government/catalog.js +20 -11
  17. package/modules/government/migrations/government_012_version_create_archon.sql +45 -0
  18. package/modules/hall-ui/public/goals-render.js +182 -6
  19. package/modules/hall-ui/public/goals.css +51 -0
  20. package/modules/hall-ui/public/roadmap.css +5 -0
  21. package/modules/hall-ui/public/roadmap.js +25 -0
  22. package/modules/hall-ui/public/task-detail.js +22 -11
  23. package/modules/lifecycle/db-goals.js +34 -2
  24. package/modules/lifecycle/db-versions.js +195 -3
  25. package/modules/lifecycle/db.js +4 -1
  26. package/modules/lifecycle/routes/goals.js +15 -1
  27. package/modules/lifecycle/routes/version-route-authz.js +171 -1
  28. package/modules/lifecycle/routes/versions.js +130 -10
  29. package/package-lock.json +2 -2
  30. package/package.json +1 -1
  31. package/scripts/gds/triage.js +60 -26
  32. package/src/module-api.js +1 -1
  33. package/tests/goal_archive_hall.mjs +198 -0
  34. package/tests/government_require_permission.mjs +7 -3
  35. package/tests/government_seed.mjs +101 -9
  36. package/tests/one_planning_version.mjs +25 -8
  37. package/tests/promote_goal_id.mjs +85 -30
  38. package/tests/publish_reconciler.mjs +35 -5
  39. package/tests/task_detail_ui.mjs +36 -9
  40. package/tests/version_build_slot.mjs +157 -0
  41. package/tests/version_close_route.mjs +261 -0
  42. package/tests/version_override_visibility.mjs +176 -0
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.591",
6
- "core_contract": "1.19.591",
7
- "source_commit": "1a5d5f0eb546f0430b57a3ca5446be6ebd135fe9",
5
+ "core_version": "1.19.593",
6
+ "core_contract": "1.19.593",
7
+ "source_commit": "ea0ad212050a06465dc2c1b43a8a1a2af240498a",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-09-08T02:46:21.428Z",
9
+ "built_at": "2026-09-08T03:36:57.554Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
12
  "docs_redacted": 457,
13
13
  "agent_docs_stubbed": 24,
14
- "functional_verbatim": 2063,
14
+ "functional_verbatim": 2069,
15
15
  "rules": 3,
16
16
  "gate_literals": 3,
17
17
  "gate": "passed"
18
18
  },
19
- "file_count": 2544,
20
- "tree_sha256": "8c944ccd379b18b96ad8d347ecc09ae1d5a3d163d40ca3c446e9bce07f86a002",
19
+ "file_count": 2550,
20
+ "tree_sha256": "0e4a8cf83cd59f8a25dbc37a5e8382998f3b2c20793ad712b851687be1ef4e81",
21
21
  "files": [
22
22
  {
23
23
  "path": ".claude/skills/blocker-review/SKILL.md",
@@ -232,7 +232,7 @@
232
232
  {
233
233
  "path": ".claude/skills/planning-session/SKILL.md",
234
234
  "mode": "0000644",
235
- "sha256": "02aea92c35c8ae64eff029bb3dc9579a871cb47321a058693c71206af993132e"
235
+ "sha256": "4213c550b3a05adbecdd65542d7615f9f8c90756d91fd1ee6b9f03c8c046e478"
236
236
  },
237
237
  {
238
238
  "path": ".claude/skills/priority-session/SKILL.md",
@@ -372,12 +372,12 @@
372
372
  {
373
373
  "path": "clients/bongos-client/README.md",
374
374
  "mode": "0000644",
375
- "sha256": "48a76d533215b8c0885fa77f59fc0e8915262db6b57029f6850692882e6e7455"
375
+ "sha256": "7486f9978e473b0adf09f8bfcbe2a029eb2833636ae3bd55fc307ccb3e773963"
376
376
  },
377
377
  {
378
378
  "path": "clients/bongos-client/bongos-client.global.js",
379
379
  "mode": "0000644",
380
- "sha256": "c7fe87ceb18e7e1c10e629d002fb6f322ee540606c3ec9f6d38741dac7a55e0f"
380
+ "sha256": "ea404e8d932d396796888692651965072cb8d828b3d6e9ebb93bc205fb00f7b9"
381
381
  },
382
382
  {
383
383
  "path": "clients/bongos-client/examples/hello-world.mjs",
@@ -387,17 +387,17 @@
387
387
  {
388
388
  "path": "clients/bongos-client/index.cjs",
389
389
  "mode": "0000644",
390
- "sha256": "d80b05be7a602fa825f5f45e5b7f2bc002473a4731e2530df19fa3043f0c07fc"
390
+ "sha256": "a6fb1af25ba5d2ef74cee69f2e126811d535b193422d44ee6f2f4efb787d7584"
391
391
  },
392
392
  {
393
393
  "path": "clients/bongos-client/index.d.ts",
394
394
  "mode": "0000644",
395
- "sha256": "3865a914bd9e50df23960dbad5783bd1584157ff2b2bfcd2b8e597a620e81c01"
395
+ "sha256": "16af99cbe6df845f0f7a90f4569f77550635af0967dce552e2ef07a7b4ef0080"
396
396
  },
397
397
  {
398
398
  "path": "clients/bongos-client/index.mjs",
399
399
  "mode": "0000644",
400
- "sha256": "47ae66627693378c276031754aca717ecc01e8e5038c4cf98ed844e5c03ee524"
400
+ "sha256": "0b96a51d69f2aeb6485eea84d80254ee1a4f90a8292c6b33e9bb89075f8cc187"
401
401
  },
402
402
  {
403
403
  "path": "clients/bongos-client/package.json",
@@ -1282,7 +1282,7 @@
1282
1282
  {
1283
1283
  "path": "docs/adr/0157-archon-is-rank-and-identity-only.md",
1284
1284
  "mode": "0000644",
1285
- "sha256": "157988982ea304d6147e62960f9bb6ebf7f99291d8a5d1ce51d1c8473a8ee8bc"
1285
+ "sha256": "5320037ffa19c48b548c4d199af684640657f28d80aa3c7a991450ad68dee9c3"
1286
1286
  },
1287
1287
  {
1288
1288
  "path": "docs/adr/0158-choke-point-verdict-taxonomy.md",
@@ -1847,12 +1847,12 @@
1847
1847
  {
1848
1848
  "path": "docs/api-reference.md",
1849
1849
  "mode": "0000644",
1850
- "sha256": "5e2031bf695567cb4318ef792395150b7032604e0e4cd7cafee99f05e1d3cb01"
1850
+ "sha256": "b430ecad01c7458dc893c11d976d3ae35f2dd5b8310e451a38af387908f64659"
1851
1851
  },
1852
1852
  {
1853
1853
  "path": "docs/api/openapi.json",
1854
1854
  "mode": "0000644",
1855
- "sha256": "597f489b67a88154ee771baa8b378bf681594534cf7690c2ffd9c109cb26092d"
1855
+ "sha256": "f2433a337aed6aa2f0f1a1c2d61b17103b493a028fa03c2944b92b5f3bb5e609"
1856
1856
  },
1857
1857
  {
1858
1858
  "path": "docs/architecture.md",
@@ -1877,12 +1877,12 @@
1877
1877
  {
1878
1878
  "path": "docs/copy-inventory.md",
1879
1879
  "mode": "0000644",
1880
- "sha256": "9357061e4e1046ee48fc227ed0b837fc32d950f7ceb5fccb4a549d310c19e5ee"
1880
+ "sha256": "8b804ce68d2c06220133ad408d97683211859389d73612c15a0c1818bd2333d4"
1881
1881
  },
1882
1882
  {
1883
1883
  "path": "docs/copy-registry.json",
1884
1884
  "mode": "0000644",
1885
- "sha256": "34c8e1786455cbf5c76dc5ad2fffb407d4d51e4009d5455545571c415d83afaa"
1885
+ "sha256": "ecaec2aa40662c54a136bcf8c41b95b45a497d02265ca2f229f9cfa440a39f44"
1886
1886
  },
1887
1887
  {
1888
1888
  "path": "docs/design/apex-pass-2-direction.md",
@@ -2727,7 +2727,7 @@
2727
2727
  {
2728
2728
  "path": "docs/module-api-changelog.md",
2729
2729
  "mode": "0000644",
2730
- "sha256": "32f8765fbbc0999a25b5abfc0f58a5dc5980db09c03ff4ee127b6774387c865a"
2730
+ "sha256": "bf5970e301d96ec4fd5c7a449da179edb4fb509f6430dec81d19b9680eaabe4c"
2731
2731
  },
2732
2732
  {
2733
2733
  "path": "docs/modules-contract.md",
@@ -3729,6 +3729,11 @@
3729
3729
  "mode": "0000644",
3730
3730
  "sha256": "5ed2ff8117e6650de621a1576062b27f2d6e84faf8860f9cb2aed45323a85aa6"
3731
3731
  },
3732
+ {
3733
+ "path": "migrations/core_233_versions_one_planning_idx.sql",
3734
+ "mode": "0000644",
3735
+ "sha256": "ca03e583bc418f600c1b1ba464bcaf4e380916033ec06cd68990cf153184d883"
3736
+ },
3732
3737
  {
3733
3738
  "path": "modules/agents/lib/validate.js",
3734
3739
  "mode": "0000644",
@@ -4127,7 +4132,7 @@
4127
4132
  {
4128
4133
  "path": "modules/dev-box/app/src/vendor/bongos-client.cjs",
4129
4134
  "mode": "0000644",
4130
- "sha256": "d80b05be7a602fa825f5f45e5b7f2bc002473a4731e2530df19fa3043f0c07fc"
4135
+ "sha256": "a6fb1af25ba5d2ef74cee69f2e126811d535b193422d44ee6f2f4efb787d7584"
4131
4136
  },
4132
4137
  {
4133
4138
  "path": "modules/dev-box/app/test/unit.mjs",
@@ -4372,7 +4377,7 @@
4372
4377
  {
4373
4378
  "path": "modules/government/catalog.js",
4374
4379
  "mode": "0000644",
4375
- "sha256": "e2d8d2a3187598fe0c647d30cd333627feeb1aa5352fac8bafc922cf40750e12"
4380
+ "sha256": "3d6d6ced85b69bd6086533a0d118e4032037de66a10931cb3fc4a75bd8b6dbdc"
4376
4381
  },
4377
4382
  {
4378
4383
  "path": "modules/government/config.js",
@@ -4479,6 +4484,11 @@
4479
4484
  "mode": "0000644",
4480
4485
  "sha256": "ccd2cd14103bae00957227d037d41f76adaaddc639bd09808f244b0bc514e702"
4481
4486
  },
4487
+ {
4488
+ "path": "modules/government/migrations/government_012_version_create_archon.sql",
4489
+ "mode": "0000644",
4490
+ "sha256": "e963028286a7f8a0a55c9fae2f73f203a6ae7c7770f73a265aefdcc026829625"
4491
+ },
4482
4492
  {
4483
4493
  "path": "modules/government/module.json",
4484
4494
  "mode": "0000644",
@@ -4852,12 +4862,12 @@
4852
4862
  {
4853
4863
  "path": "modules/hall-ui/public/goals-render.js",
4854
4864
  "mode": "0000644",
4855
- "sha256": "b494bec38dc6eaa4812a59b6405e7bfd2cc58688d3725b095956a4e1f7e0b4b7"
4865
+ "sha256": "09fd6317b9a3c142ca7b51bd270631987284a96e5b89e64e58cedc3f8eec29ae"
4856
4866
  },
4857
4867
  {
4858
4868
  "path": "modules/hall-ui/public/goals.css",
4859
4869
  "mode": "0000644",
4860
- "sha256": "cdf23538a1fcd121af3159bdd928c6823aa02f10912143a5af64327724eaff58"
4870
+ "sha256": "d9c890274864184dd777e52ab6df12960b758eaf5e79cdc50a122bf70dd84bbc"
4861
4871
  },
4862
4872
  {
4863
4873
  "path": "modules/hall-ui/public/goals.html",
@@ -5172,7 +5182,7 @@
5172
5182
  {
5173
5183
  "path": "modules/hall-ui/public/roadmap.css",
5174
5184
  "mode": "0000644",
5175
- "sha256": "ad9786e7fb4aafc2dfa4e62f79a630c4d29bdac8d8410e11b2bd9e879294efd0"
5185
+ "sha256": "94aa72d38991e04def83c19ec2ce232f8c2f7d4fb0f51e499c24284f28526236"
5176
5186
  },
5177
5187
  {
5178
5188
  "path": "modules/hall-ui/public/roadmap.html",
@@ -5182,7 +5192,7 @@
5182
5192
  {
5183
5193
  "path": "modules/hall-ui/public/roadmap.js",
5184
5194
  "mode": "0000644",
5185
- "sha256": "2c4503bba23e3673eaeda8fa1f06cbee6ed6803ba74a5bb1feb0b47cd49509b4"
5195
+ "sha256": "65f39048e4fda07ddfec5bcf5262ca76ea1bd186ad8452ac6a3f0c9b1b6e1a62"
5186
5196
  },
5187
5197
  {
5188
5198
  "path": "modules/hall-ui/public/roadmap.states.json",
@@ -5292,7 +5302,7 @@
5292
5302
  {
5293
5303
  "path": "modules/hall-ui/public/task-detail.js",
5294
5304
  "mode": "0000644",
5295
- "sha256": "5a88cd76fb6da7058ba109c3467f11c20c973daff8b03f4ed1b4be67b8807a87"
5305
+ "sha256": "2884b3c0652e4b74a680215854cf6b329f94c0dcd7bb43764de117d51f828ca3"
5296
5306
  },
5297
5307
  {
5298
5308
  "path": "modules/hall-ui/public/task-lib.js",
@@ -5512,7 +5522,7 @@
5512
5522
  {
5513
5523
  "path": "modules/lifecycle/db-goals.js",
5514
5524
  "mode": "0000644",
5515
- "sha256": "392970a48349421c000de9581cfcc63969152179feb3406f1057571d9b68c0ee"
5525
+ "sha256": "6e8235a4025951f82644f4a058a56ee4052d33e3b8b68a7c27d8ce42a0b81b19"
5516
5526
  },
5517
5527
  {
5518
5528
  "path": "modules/lifecycle/db-grade.js",
@@ -5547,12 +5557,12 @@
5547
5557
  {
5548
5558
  "path": "modules/lifecycle/db-versions.js",
5549
5559
  "mode": "0000644",
5550
- "sha256": "8214d4a7c2e97b12e8cd9ba866b6560ac6e67446af5dcf28a0055838e32897f5"
5560
+ "sha256": "09513924d1a97c4e5c2c84c3e55bcadb91159bf309ece479555b6b7a833188c7"
5551
5561
  },
5552
5562
  {
5553
5563
  "path": "modules/lifecycle/db.js",
5554
5564
  "mode": "0000644",
5555
- "sha256": "c3318a8473ccc9b41bff5eb94fe4096032c2d5c5a7819d0777c4d41db0e4d695"
5565
+ "sha256": "75a42d39fe676e0447cead0717a4f832b5296308e786037f5d44ee35593234c6"
5556
5566
  },
5557
5567
  {
5558
5568
  "path": "modules/lifecycle/dead-deps.js",
@@ -5737,7 +5747,7 @@
5737
5747
  {
5738
5748
  "path": "modules/lifecycle/routes/goals.js",
5739
5749
  "mode": "0000644",
5740
- "sha256": "28874a1b4d3e748866fa59d510c3c62656ad48039dae8ca7ce5b0ca5d47b357d"
5750
+ "sha256": "eb3137c30f6471aa0900f98f0fa45752808609e4e1e99f9ecb1f6df0d3e7c5ab"
5741
5751
  },
5742
5752
  {
5743
5753
  "path": "modules/lifecycle/routes/help-requests.js",
@@ -5792,12 +5802,12 @@
5792
5802
  {
5793
5803
  "path": "modules/lifecycle/routes/version-route-authz.js",
5794
5804
  "mode": "0000644",
5795
- "sha256": "5db4f94ca52f634f41cdb489572e43eb6785744220d2565a716cff47bfa72b30"
5805
+ "sha256": "d4e7b2d1ecaa1f5ceaabf9b6c62e649e139b25d74a50c98e0dfc734871b86b98"
5796
5806
  },
5797
5807
  {
5798
5808
  "path": "modules/lifecycle/routes/versions.js",
5799
5809
  "mode": "0000644",
5800
- "sha256": "5efe819220f9128844793a0c068babcd402860b434aab322fd9a99f8d2d26167"
5810
+ "sha256": "e13f46e32e43c84bfb2a4d3bc46a90da191c04f516fb7493cfe0cc19d05726d7"
5801
5811
  },
5802
5812
  {
5803
5813
  "path": "modules/lifecycle/routes/visuals.js",
@@ -7602,12 +7612,12 @@
7602
7612
  {
7603
7613
  "path": "package-lock.json",
7604
7614
  "mode": "0000644",
7605
- "sha256": "b89e31e9693695643d5effcfe1386164ec4b8759e50fec6d86fe4edf19f09cb6"
7615
+ "sha256": "be3914ecf700403c201cc59bfc3eda9bc1494e12a5b44b04fec6e97892e4f05f"
7606
7616
  },
7607
7617
  {
7608
7618
  "path": "package.json",
7609
7619
  "mode": "0000644",
7610
- "sha256": "09428614577361d939096da4a4a91a0f742a0504d97168cdea6d169ccb8931be"
7620
+ "sha256": "560bc9c97a89ffd8c58c70da7a39467537a678525dfe2ebb8bfbc2d5c1cb0c17"
7611
7621
  },
7612
7622
  {
7613
7623
  "path": "public-docs/index.html",
@@ -8877,7 +8887,7 @@
8877
8887
  {
8878
8888
  "path": "scripts/gds/triage.js",
8879
8889
  "mode": "0000644",
8880
- "sha256": "dc494030979bf60de1d1423c68a07e36667e816d7e2a1652960cfbd17be4bfcc"
8890
+ "sha256": "739aac4b9ec1cc413c21cc53076f66782a120173eaae5f579aa24b6936e28164"
8881
8891
  },
8882
8892
  {
8883
8893
  "path": "scripts/gds/turn-end-sound.js",
@@ -9322,7 +9332,7 @@
9322
9332
  {
9323
9333
  "path": "src/module-api.js",
9324
9334
  "mode": "0000644",
9325
- "sha256": "5c9d16a923a0cb30e18960d8714e1e8454940d1c4d6cef4d22fa8096a98237ab"
9335
+ "sha256": "5a2a37804d21f51fb5a4433b4f2c39ecdb91f6fe29de0d0802902bf38f981217"
9326
9336
  },
9327
9337
  {
9328
9338
  "path": "src/module-loader/catalog.js",
@@ -10444,6 +10454,11 @@
10444
10454
  "mode": "0000644",
10445
10455
  "sha256": "bf0baad459ee2e103079a53570ca4998bb3ba66451ad0257478dd236118c8ce6"
10446
10456
  },
10457
+ {
10458
+ "path": "tests/goal_archive_hall.mjs",
10459
+ "mode": "0000644",
10460
+ "sha256": "993a280b9900d40145e1913a6a404a23293e241d63ddaadb605ebe27309c58c8"
10461
+ },
10447
10462
  {
10448
10463
  "path": "tests/goal_archive_route_e2e.mjs",
10449
10464
  "mode": "0000644",
@@ -10692,7 +10707,7 @@
10692
10707
  {
10693
10708
  "path": "tests/government_require_permission.mjs",
10694
10709
  "mode": "0000644",
10695
- "sha256": "a2711b93fcb7e6a602d22fbc864676f5dfdc6c503cc6551badc32e36facb723c"
10710
+ "sha256": "eff61f5299bcaaf21e19dfa84eb4ff6b92d480f708568bc243e784953d1db40a"
10696
10711
  },
10697
10712
  {
10698
10713
  "path": "tests/government_resolver.mjs",
@@ -10707,7 +10722,7 @@
10707
10722
  {
10708
10723
  "path": "tests/government_seed.mjs",
10709
10724
  "mode": "0000644",
10710
- "sha256": "ab6404171b072748798728cba7c5b1a6f759170996d8fea8be5ab26a033b7ac1"
10725
+ "sha256": "f798fe7edf69245324938587dca3682874495b7bf950f0c0e5165b2bb0eadd4e"
10711
10726
  },
10712
10727
  {
10713
10728
  "path": "tests/government_session_scope.mjs",
@@ -11517,7 +11532,7 @@
11517
11532
  {
11518
11533
  "path": "tests/one_planning_version.mjs",
11519
11534
  "mode": "0000644",
11520
- "sha256": "1f8c6924dac2c922a1f88c22693b4386ec16d5f0ae346609b3d1dc0003308a70"
11535
+ "sha256": "347d8856d88246e08abcdfcaf744b491821f95f0daaab0291c4f9bb2a427ed6b"
11521
11536
  },
11522
11537
  {
11523
11538
  "path": "tests/origin_containment.mjs",
@@ -11752,7 +11767,7 @@
11752
11767
  {
11753
11768
  "path": "tests/promote_goal_id.mjs",
11754
11769
  "mode": "0000644",
11755
- "sha256": "29d69119eb019e74e5f5407855080c908820f06fca70b93146694d4b57d1e25d"
11770
+ "sha256": "5444df365780c33d61ca9a18de08ed89ed2ff74d8af198d51edbaed19d6010c2"
11756
11771
  },
11757
11772
  {
11758
11773
  "path": "tests/prose_edits.mjs",
@@ -11892,7 +11907,7 @@
11892
11907
  {
11893
11908
  "path": "tests/publish_reconciler.mjs",
11894
11909
  "mode": "0000644",
11895
- "sha256": "5a9ea0bf7b4d776a6f9036b8bd060fef76335533274ed748e9b9d742da6960d3"
11910
+ "sha256": "4c7c58a1fd28427fbcace0d20a9446f88c2a90cc19eb5fd4826236207732be26"
11896
11911
  },
11897
11912
  {
11898
11913
  "path": "tests/push_path_brief.mjs",
@@ -12502,7 +12517,7 @@
12502
12517
  {
12503
12518
  "path": "tests/task_detail_ui.mjs",
12504
12519
  "mode": "0000644",
12505
- "sha256": "d7b12d56b50a0412d50f3558065c681d92c0c631edfef5553164e646979e6fa5"
12520
+ "sha256": "0bc0d93696b5ce80fb4307b7991bff640316e46fd6fcdebf0ba5a62397ffbe8f"
12506
12521
  },
12507
12522
  {
12508
12523
  "path": "tests/task_goal_link.mjs",
@@ -12654,16 +12669,31 @@
12654
12669
  "mode": "0000644",
12655
12670
  "sha256": "808a5fb2e14fb03ded6ed5ea0b3c0a0a7f53bfb885e853acb225f7b439a06ac3"
12656
12671
  },
12672
+ {
12673
+ "path": "tests/version_build_slot.mjs",
12674
+ "mode": "0000644",
12675
+ "sha256": "795946106f5e562a55f0ad04f3226884ee7815a86f8c20b94220e8069e192c41"
12676
+ },
12657
12677
  {
12658
12678
  "path": "tests/version_close.mjs",
12659
12679
  "mode": "0000644",
12660
12680
  "sha256": "372c80d42e122a70a4fae8fcfbaaa47459575d3e0a2b80fff8876dfc512c5aeb"
12661
12681
  },
12682
+ {
12683
+ "path": "tests/version_close_route.mjs",
12684
+ "mode": "0000644",
12685
+ "sha256": "11c77cc535ecd86bc50ea962835b74672ff3a0d8093d8ce3007586a5873b4201"
12686
+ },
12662
12687
  {
12663
12688
  "path": "tests/version_literals.mjs",
12664
12689
  "mode": "0000644",
12665
12690
  "sha256": "17e872131c17bae7a061debc1fd3ee354ab704678b475edd6a8b1dfdd63ceb2f"
12666
12691
  },
12692
+ {
12693
+ "path": "tests/version_override_visibility.mjs",
12694
+ "mode": "0000644",
12695
+ "sha256": "692261c26e3da46519757733a7fcf9a9998e0942bc5890688b66b79590d82c27"
12696
+ },
12667
12697
  {
12668
12698
  "path": "tests/versions_route.mjs",
12669
12699
  "mode": "0000644",
@@ -30,7 +30,7 @@ This mirrors GDS-V3 criterion C2 (`three-ranks-gate-everything`) and matches the
30
30
 
31
31
  1. Call `GET /api/gds/me` and read `builder.rank`. Compare case-insensitively (lowercase it before testing).
32
32
  2. **If `rank` is present and lowercases to `xenos`** → stop immediately. Tell the builder: *"Planning sessions set the scope-truth of a version — they're a Metic+ operation. You're currently Xenos. You can still **file** a criterion proposal or task idea via `POST /api/gds/inbox` (which lands in idea_inbox for a Metic+ builder to ratify at the next planning session); ask an Archon for promotion if you need to run sessions directly."* Do not pull state, do not present criteria, do not propose tasks.
33
- 3. **If `rank` lowercases to `metic`** → proceed in **Metic-mode**: run the five-phase structure below conversationally, but in Phase 5 write proposals to `idea_inbox` (kind=`criterion-proposal` for criteria, kind=`feature` for tasks) tagged with the target version. Any Metic+ builder ratifies them (`idea.ratify`, metic-floored since ADR 0157) — typically at the next planning session. Since [ADR 0090](../../../docs/adr/<redacted>.md) a Metic MAY `POST /tasks` directly, since [ADR 0154](../../../docs/adr/<redacted>.md) a Metic MAY write a `done_when_criteria` row for a goal they own or manage, and since ADR 0157 a Metic MAY create a version (`version.create`, `POST /versions`). What still needs an Archon is a VERSION-level criterion (no `goal_id`) and one in a goal you don't hold. The spec-draft (Phase 3) and the in-depth interview (Phase 4) run identically in Metic-mode — the only difference is the Phase-5 write (you file proposals, you don't seed tasks directly).
33
+ 3. **If `rank` lowercases to `metic`** → proceed in **Metic-mode**: run the five-phase structure below conversationally, but in Phase 5 write proposals to `idea_inbox` (kind=`criterion-proposal` for criteria, kind=`feature` for tasks) tagged with the target version. Any Metic+ builder ratifies them (`idea.ratify`, metic-floored since ADR 0157) — typically at the next planning session. Since [ADR 0090](../../../docs/adr/<redacted>.md) a Metic MAY `POST /tasks` directly, and since [ADR 0154](../../../docs/adr/<redacted>.md) a Metic MAY write a `done_when_criteria` row for a goal they own or manage. What needs an Archon is a VERSION-level criterion (no `goal_id`), one in a goal you don't hold, and — since [ADR 0250](../../../docs/adr/<redacted>.md) §6 (task 1003608) — **creating a version at all**: `version.create` returned to the Archon floor, because once the version boundary carries the scope gate, cutting a version is the way around it rather than authoring. ADR 0157 had briefly delegated it to Metic; it no longer is. The spec-draft (Phase 3) and the in-depth interview (Phase 4) run identically in Metic-mode — the only difference is the Phase-5 write (you file proposals, you don't seed tasks directly).
34
34
 
35
35
  **For each criterion proposal**, write `body_md` as a JSON object with this exact shape so the `POST /api/gds/inbox/:id/ratify` endpoint (V3.R31 / #252) can parse it cleanly:
36
36
 
@@ -44,7 +44,7 @@ This mirrors GDS-V3 criterion C2 (`three-ranks-gate-everything`) and matches the
44
44
 
45
45
  `target_version` is required and must match an existing `versions.id`. `criterion_md` is required and is the user-visible criterion text. `sort_order_hint` is optional — omit or pass `null` to let the ratify endpoint default it to `max(existing sort_order) + 1` on the target version. On ratify, the proposer earns +5 karma (`reason='proposal_ratified'`) and the audit row in `criterion_proposal_audit` captures the full provenance.
46
46
 
47
- **Net-new version (idea 425).** The Metic-mode path above assumes the target version *already exists* — its criterion proposals carry `suggested_version` (an FK to a `versions` row) and a `target_version` that must match `versions.id`. Since ADR 0157 `version.create` is **metic-floored** (`POST /versions`), so a Metic planning a *brand-new* version normally just creates the version row first and proceeds against it. Against a deployment that predates that delegation (`POST /versions` `403`), the Metic has no valid FK to point at, so the normal proposal can't land. When that's the case, run the session in Metic-mode as usual through Phases 1–4, then in Phase 5 file the proposals like this instead:
47
+ **Net-new version (idea 425).** The Metic-mode path above assumes the target version *already exists* — its criterion proposals carry `suggested_version` (an FK to a `versions` row) and a `target_version` that must match `versions.id`. **A Metic cannot create one:** `version.create` is **Archon-floored** ([ADR 0250](../../../docs/adr/<redacted>.md) §6, task 1003608 ADR 0157 had briefly lowered it to Metic and that is reversed). So `POST /versions` returns `403` and the Metic has no valid FK to point at. Ask an Archon to cut the version or, when that is not available, run the session in Metic-mode as usual through Phases 1–4 and in Phase 5 file the proposals like this instead:
48
48
 
49
49
  1. **OMIT `suggested_version` on every proposal row.** It is an FK to a version row that doesn't exist yet; leaving it set would fail the constraint (or worse, attach the proposal to the wrong existing version). Leave it `null`/absent.
50
50
  2. **Keep `target_version` INSIDE the criterion-proposal `body_md` JSON as plain text** (the version's intended id/slug, e.g. `"V4"`). It is *not* validated as an FK there — it's a label the Archon reads at ratify time. Once the Archon creates the real version row, the proposal is ratifiable as-is: `POST /api/gds/inbox/:id/ratify` resolves `target_version` against the now-existing `versions.id`.
@@ -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
- - 359 operations across 55 resource groups
8
+ - 360 operations across 55 resource groups
9
9
 
10
10
  ## Install
11
11
 
@@ -891,8 +891,10 @@ function createClient(opts = {}) {
891
891
  "versions": {
892
892
  // GET /versions — rank: public — GET /versions
893
893
  getVersions: (args) => request("GET", "/versions", { hasBody: false }, args),
894
- // POST /versions — rank: metic+archon — POST /versions
894
+ // POST /versions — rank: archon — POST /versions
895
895
  postVersions: (args) => request("POST", "/versions", { hasBody: true }, args),
896
+ // POST /versions/{id}/close — rank: archon — POST /versions/:id/close
897
+ postVersionsIdClose: (args) => request("POST", "/versions/{id}/close", { hasBody: true }, args),
896
898
  // GET /versions/{id}/done-when — rank: public — GET /versions/:id/done-when
897
899
  getVersionsIdDoneWhen: (args) => request("GET", "/versions/{id}/done-when", { hasBody: false }, args),
898
900
  // POST /versions/{id}/done-when — rank: metic+archon — POST /versions/:id/done-when
@@ -890,8 +890,10 @@ function createClient(opts = {}) {
890
890
  "versions": {
891
891
  // GET /versions — rank: public — GET /versions
892
892
  getVersions: (args) => request("GET", "/versions", { hasBody: false }, args),
893
- // POST /versions — rank: metic+archon — POST /versions
893
+ // POST /versions — rank: archon — POST /versions
894
894
  postVersions: (args) => request("POST", "/versions", { hasBody: true }, args),
895
+ // POST /versions/{id}/close — rank: archon — POST /versions/:id/close
896
+ postVersionsIdClose: (args) => request("POST", "/versions/{id}/close", { hasBody: true }, args),
895
897
  // GET /versions/{id}/done-when — rank: public — GET /versions/:id/done-when
896
898
  getVersionsIdDoneWhen: (args) => request("GET", "/versions/{id}/done-when", { hasBody: false }, args),
897
899
  // POST /versions/{id}/done-when — rank: metic+archon — POST /versions/:id/done-when
@@ -49,7 +49,7 @@ export interface GetGithubRepoResponse { ok: boolean; repo: unknown; private_dep
49
49
  export interface GetGithubReposResponse { repos: unknown }
50
50
  export interface GetGoalsIdConflictsResponse { ok: boolean; goal_id: unknown; conflicts: unknown; cross_goals_considered: unknown }
51
51
  export interface GetGoalsIdRequestsResponse { requests: unknown }
52
- export interface GetGoalsIdResponse { goal: unknown; members: unknown; criteria: unknown; dependencies: unknown; criterionless_task_count: unknown; admitted: unknown }
52
+ export interface GetGoalsIdResponse { goal: unknown; members: unknown; criteria: unknown; dependencies: unknown; criterionless_task_count: unknown; admitted: unknown; open_tasks: unknown }
53
53
  export interface GetGoalsResponse { goals: unknown }
54
54
  export interface GetGoalsRollupsResponse { rollups: unknown }
55
55
  export interface GetGovernmentAssignmentsResponse { assignments: unknown }
@@ -389,6 +389,8 @@ export interface PostTasksIdVoteResponse { ok: boolean; task_id: unknown; my_vot
389
389
  export interface PostTasksNewcomerRestockResponse { ok: boolean; stamped: unknown; results: unknown }
390
390
  export interface PostTasksRequest { version_id: string; title: string; description?: string; status?: string; touches?: string[]; est_minutes?: number; est_cost_usd?: number; manual_degree?: number; priority?: number; automation_tag?: string; credits_reward?: number; source?: string; source_ref?: string; value_summary?: string; kind?: string; discipline?: string; parallel_safe?: unknown; newcomer_friendly?: boolean; security_sensitive?: boolean; requires_rank?: string; auto_detect_touches?: boolean; criterion_ids?: unknown[]; module_key?: string; goal_id?: number }
391
391
  export interface PostTasksResponse { task: unknown; needs_migration: unknown; criteria: unknown; idempotent: boolean }
392
+ export interface PostVersionsIdCloseRequest { reason?: string; dispositions?: Record<string, unknown> }
393
+ export interface PostVersionsIdCloseResponse { ok: boolean; version: unknown; applied: unknown }
392
394
  export interface PostVersionsIdDoneWhenRequest { criterion_id: string; criterion_md: string; goal_id?: number; sort_order?: number }
393
395
  export interface PostVersionsIdDoneWhenResponse { ok: boolean; criterion: unknown }
394
396
  export interface PostVersionsRequest { id: string; name: string; status?: string; track?: string; done_when?: string; scope_doc_path?: string; criteria?: unknown[] }
@@ -1220,8 +1222,10 @@ export interface BongosClient {
1220
1222
  "versions": {
1221
1223
  /** GET /versions — rank: public */
1222
1224
  getVersions(args?: RequestArgs): Promise<GetVersionsResponse>;
1223
- /** POST /versions — rank: metic+archon */
1225
+ /** POST /versions — rank: archon */
1224
1226
  postVersions(args: RequestArgs & { body: PostVersionsRequest }): Promise<PostVersionsResponse>;
1227
+ /** POST /versions/{id}/close — rank: archon */
1228
+ postVersionsIdClose(args?: RequestArgs & { body?: PostVersionsIdCloseRequest }): Promise<PostVersionsIdCloseResponse>;
1225
1229
  /** GET /versions/{id}/done-when — rank: public */
1226
1230
  getVersionsIdDoneWhen(args?: RequestArgs): Promise<GetVersionsIdDoneWhenResponse>;
1227
1231
  /** POST /versions/{id}/done-when — rank: metic+archon */
@@ -887,8 +887,10 @@ export function createClient(opts = {}) {
887
887
  "versions": {
888
888
  // GET /versions — rank: public — GET /versions
889
889
  getVersions: (args) => request("GET", "/versions", { hasBody: false }, args),
890
- // POST /versions — rank: metic+archon — POST /versions
890
+ // POST /versions — rank: archon — POST /versions
891
891
  postVersions: (args) => request("POST", "/versions", { hasBody: true }, args),
892
+ // POST /versions/{id}/close — rank: archon — POST /versions/:id/close
893
+ postVersionsIdClose: (args) => request("POST", "/versions/{id}/close", { hasBody: true }, args),
892
894
  // GET /versions/{id}/done-when — rank: public — GET /versions/:id/done-when
893
895
  getVersionsIdDoneWhen: (args) => request("GET", "/versions/{id}/done-when", { hasBody: false }, args),
894
896
  // POST /versions/{id}/done-when — rank: metic+archon — POST /versions/:id/done-when
@@ -8,6 +8,8 @@
8
8
 
9
9
  **Track:** `internal` (GDS / methodology). Task [1002584](https://cloudbongos.com/builders#/task/1002584).
10
10
 
11
+ > **Amended by [ADR 0250](<redacted>.md) §6 for exactly one key** (2026-09-07, task [1003608](https://cloudbongos.com/builders#/task/1003608)): **`version.create` returns to the Archon floor.** The argument below — *authoring delegates, disposition does not* — was right about what a version **was**. ADR 0250 D1 makes the version boundary the scope gate, and once it does, cutting a new version is no longer authoring: it is the way **around** the gate, because a builder refused a goal on a building version need only cut a fresh version to put it somewhere. Create therefore joins `version.close` as a disposition over scope. **Every other key in this ADR stands.**
12
+
11
13
  ---
12
14
 
13
15
  ## Context
@@ -16025,8 +16025,8 @@
16025
16025
  "versions"
16026
16026
  ],
16027
16027
  "summary": "POST /versions",
16028
- "description": "POST /versions — create a version + its done-when criteria in one call. The seed primitive `bongos init` (task 1204 / R65) uses so a fresh instance needs no hand-written seed-*.js script. Archon-only: creating a version is a plan/scope mutation, same gate as POST /tasks (ADR 0016). rank: archon — creates a version + its done-when criteria.\n\n**Rank:** `metic+archon` — Metic or Archon rank (review/triage powers).\n\n**Permissions:** `version.create` (all required).",
16029
- "x-rank": "metic+archon",
16028
+ "description": "POST /versions — create a version + its done-when criteria in one call. The seed primitive `bongos init` (task 1204 / R65) uses so a fresh instance needs no hand-written seed-*.js script. Archon-only: creating a version is a plan/scope mutation, same gate as POST /tasks (ADR 0016). rank: archon — creates a version + its done-when criteria.\n\n**Rank:** `archon` — Archon only (rank and identity management + the escalation keys — the trust boundary).\n\n**Permissions:** `version.create` (all required).",
16029
+ "x-rank": "archon",
16030
16030
  "x-source": "modules/lifecycle/routes/versions.js",
16031
16031
  "x-permissions": [
16032
16032
  "version.create"
@@ -16126,6 +16126,72 @@
16126
16126
  "security": []
16127
16127
  }
16128
16128
  },
16129
+ "/versions/{id}/close": {
16130
+ "post": {
16131
+ "operationId": "post_versions_id_close",
16132
+ "tags": [
16133
+ "versions"
16134
+ ],
16135
+ "summary": "POST /versions/:id/close",
16136
+ "description": "POST /versions/:id/close — the move a version has never had (BV1.R12, task 1003599, goal 1000086, ADR 0250 D5, ADR 0263 §5). The hierarchy had a bottom and no top: tasks close, criteria close, goals close, and a version only ever moved by hand-run SQL on the droplet — `scripts/gds/version-close.js` still PRINTS that the API cannot do this (task 1003610, R23, points it here). A thing with no closing move does not close, which is how two versions ended up building at once. Archon-only, behind the `version.close` permission that has existed at that floor since BV1.R105 and that, until now, NOTHING referenced. THE TWO-STEP IS R14's ARCHIVE, in spirit and in shape: call it bare and a version holding open goals refuses with the GOALS ATTACHED; re-submit with a total `dispositions` map and it closes. Agents already know that interaction, and a second idiom for the same thing is how two surfaces drift apart. Auto-close (task 1003603, R16) reaches `db.closeVersion` with an EMPTY plan and never touches this route: by construction it fires only when the last non-maintenance goal achieved, so nothing is left to disposition (ADR 0263 §3). rank: archon — the disposition that finalises a version's scope-truth.\n\n**Rank:** `archon` — Archon only (rank and identity management + the escalation keys — the trust boundary).\n\n**Permissions:** `version.close` (all required).",
16137
+ "x-rank": "archon",
16138
+ "x-source": "modules/lifecycle/routes/versions.js",
16139
+ "x-permissions": [
16140
+ "version.close"
16141
+ ],
16142
+ "parameters": [
16143
+ {
16144
+ "name": "id",
16145
+ "in": "path",
16146
+ "required": true,
16147
+ "schema": {
16148
+ "type": "string"
16149
+ },
16150
+ "description": "Path parameter `id`."
16151
+ }
16152
+ ],
16153
+ "requestBody": {
16154
+ "required": false,
16155
+ "content": {
16156
+ "application/json": {
16157
+ "schema": {
16158
+ "$ref": "#/components/schemas/PostVersionsIdCloseRequest"
16159
+ }
16160
+ }
16161
+ },
16162
+ "x-validated": true
16163
+ },
16164
+ "responses": {
16165
+ "200": {
16166
+ "description": "Success.",
16167
+ "content": {
16168
+ "application/json": {
16169
+ "schema": {
16170
+ "$ref": "#/components/schemas/PostVersionsIdCloseResponse"
16171
+ }
16172
+ }
16173
+ }
16174
+ },
16175
+ "400": {
16176
+ "$ref": "#/components/responses/ValidationFailed"
16177
+ },
16178
+ "401": {
16179
+ "$ref": "#/components/responses/Unauthorized"
16180
+ },
16181
+ "403": {
16182
+ "$ref": "#/components/responses/Forbidden"
16183
+ },
16184
+ "404": {
16185
+ "$ref": "#/components/responses/NotFound"
16186
+ }
16187
+ },
16188
+ "security": [
16189
+ {
16190
+ "builderSession": []
16191
+ }
16192
+ ]
16193
+ }
16194
+ },
16129
16195
  "/versions/{id}/done-when": {
16130
16196
  "get": {
16131
16197
  "operationId": "get_versions_id_done_when",
@@ -17006,7 +17072,8 @@
17006
17072
  "criteria": {},
17007
17073
  "dependencies": {},
17008
17074
  "criterionless_task_count": {},
17009
- "admitted": {}
17075
+ "admitted": {},
17076
+ "open_tasks": {}
17010
17077
  },
17011
17078
  "required": [
17012
17079
  "goal",
@@ -17014,7 +17081,8 @@
17014
17081
  "criteria",
17015
17082
  "dependencies",
17016
17083
  "criterionless_task_count",
17017
- "admitted"
17084
+ "admitted",
17085
+ "open_tasks"
17018
17086
  ]
17019
17087
  },
17020
17088
  "GetGoalsResponse": {
@@ -22406,6 +22474,34 @@
22406
22474
  "idempotent"
22407
22475
  ]
22408
22476
  },
22477
+ "PostVersionsIdCloseRequest": {
22478
+ "type": "object",
22479
+ "properties": {
22480
+ "reason": {
22481
+ "type": "string",
22482
+ "maxLength": 2000
22483
+ },
22484
+ "dispositions": {
22485
+ "type": "object"
22486
+ }
22487
+ },
22488
+ "additionalProperties": false
22489
+ },
22490
+ "PostVersionsIdCloseResponse": {
22491
+ "type": "object",
22492
+ "properties": {
22493
+ "ok": {
22494
+ "type": "boolean"
22495
+ },
22496
+ "version": {},
22497
+ "applied": {}
22498
+ },
22499
+ "required": [
22500
+ "ok",
22501
+ "version",
22502
+ "applied"
22503
+ ]
22504
+ },
22409
22505
  "PostVersionsIdDoneWhenRequest": {
22410
22506
  "type": "object",
22411
22507
  "properties": {
@@ -22701,9 +22797,9 @@
22701
22797
  "description": "A required dependency/feature is not configured or is temporarily down."
22702
22798
  }
22703
22799
  },
22704
- "x-endpoint-count": 359,
22705
- "x-schema-count": 396,
22800
+ "x-endpoint-count": 360,
22801
+ "x-schema-count": 398,
22706
22802
  "x-undocumented-bodies": 9,
22707
- "x-response-schemas": 267,
22803
+ "x-response-schemas": 268,
22708
22804
  "x-generated-by": "scripts/gds/gen-api-docs.js"
22709
22805
  }