@bongos/core 1.19.592 → 1.19.594
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.bongos-core.json +61 -41
- package/.claude/skills/planning-session/SKILL.md +2 -2
- package/clients/bongos-client/README.md +1 -1
- package/clients/bongos-client/bongos-client.global.js +3 -1
- package/clients/bongos-client/index.cjs +3 -1
- package/clients/bongos-client/index.d.ts +6 -2
- package/clients/bongos-client/index.mjs +3 -1
- package/docs/adr/0157-archon-is-rank-and-identity-only.md +2 -0
- package/docs/api/openapi.json +103 -7
- package/docs/api-reference.md +4 -3
- package/docs/copy-inventory.md +135 -116
- package/docs/copy-registry.json +319 -138
- package/docs/module-api-changelog.md +4 -0
- package/modules/dev-box/app/src/vendor/bongos-client.cjs +3 -1
- package/modules/government/catalog.js +20 -11
- package/modules/government/migrations/government_012_version_create_archon.sql +45 -0
- package/modules/hall-ui/public/goals-render.js +182 -6
- package/modules/hall-ui/public/goals.css +51 -0
- package/modules/hall-ui/public/roadmap.css +5 -0
- package/modules/hall-ui/public/roadmap.js +25 -0
- package/modules/hall-ui/public/task-detail.js +22 -11
- package/modules/lifecycle/db-goals.js +34 -2
- package/modules/lifecycle/db-versions.js +195 -3
- package/modules/lifecycle/db.js +4 -1
- package/modules/lifecycle/routes/goals.js +15 -1
- package/modules/lifecycle/routes/version-route-authz.js +131 -1
- package/modules/lifecycle/routes/versions.js +79 -1
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/scripts/gds/triage.js +60 -26
- package/src/module-api.js +1 -1
- package/tests/goal_archive_hall.mjs +198 -0
- package/tests/government_require_permission.mjs +7 -3
- package/tests/government_seed.mjs +101 -9
- package/tests/promote_goal_id.mjs +85 -30
- package/tests/publish_reconciler.mjs +35 -5
- package/tests/task_detail_ui.mjs +36 -9
- package/tests/version_close_route.mjs +261 -0
- 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.
|
|
6
|
-
"core_contract": "1.19.
|
|
7
|
-
"source_commit": "
|
|
5
|
+
"core_version": "1.19.594",
|
|
6
|
+
"core_contract": "1.19.594",
|
|
7
|
+
"source_commit": "d1c41d5b88611f4b58e5615348e3082be372705f",
|
|
8
8
|
"source_ref": "HEAD",
|
|
9
|
-
"built_at": "2026-09-
|
|
9
|
+
"built_at": "2026-09-08T03:45:14.086Z",
|
|
10
10
|
"redaction": {
|
|
11
11
|
"model": "docs-redacted+functional-verbatim",
|
|
12
12
|
"docs_redacted": 457,
|
|
13
13
|
"agent_docs_stubbed": 24,
|
|
14
|
-
"functional_verbatim":
|
|
14
|
+
"functional_verbatim": 2069,
|
|
15
15
|
"rules": 3,
|
|
16
16
|
"gate_literals": 3,
|
|
17
17
|
"gate": "passed"
|
|
18
18
|
},
|
|
19
|
-
"file_count":
|
|
20
|
-
"tree_sha256": "
|
|
19
|
+
"file_count": 2550,
|
|
20
|
+
"tree_sha256": "14bc490bf2880a28130ca038b2c83aa810253abb030e303c6d305605a7c8bd89",
|
|
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": "
|
|
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": "
|
|
375
|
+
"sha256": "7486f9978e473b0adf09f8bfcbe2a029eb2833636ae3bd55fc307ccb3e773963"
|
|
376
376
|
},
|
|
377
377
|
{
|
|
378
378
|
"path": "clients/bongos-client/bongos-client.global.js",
|
|
379
379
|
"mode": "0000644",
|
|
380
|
-
"sha256": "
|
|
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": "
|
|
390
|
+
"sha256": "a6fb1af25ba5d2ef74cee69f2e126811d535b193422d44ee6f2f4efb787d7584"
|
|
391
391
|
},
|
|
392
392
|
{
|
|
393
393
|
"path": "clients/bongos-client/index.d.ts",
|
|
394
394
|
"mode": "0000644",
|
|
395
|
-
"sha256": "
|
|
395
|
+
"sha256": "16af99cbe6df845f0f7a90f4569f77550635af0967dce552e2ef07a7b4ef0080"
|
|
396
396
|
},
|
|
397
397
|
{
|
|
398
398
|
"path": "clients/bongos-client/index.mjs",
|
|
399
399
|
"mode": "0000644",
|
|
400
|
-
"sha256": "
|
|
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": "
|
|
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": "
|
|
1850
|
+
"sha256": "b430ecad01c7458dc893c11d976d3ae35f2dd5b8310e451a38af387908f64659"
|
|
1851
1851
|
},
|
|
1852
1852
|
{
|
|
1853
1853
|
"path": "docs/api/openapi.json",
|
|
1854
1854
|
"mode": "0000644",
|
|
1855
|
-
"sha256": "
|
|
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": "
|
|
1880
|
+
"sha256": "8b804ce68d2c06220133ad408d97683211859389d73612c15a0c1818bd2333d4"
|
|
1881
1881
|
},
|
|
1882
1882
|
{
|
|
1883
1883
|
"path": "docs/copy-registry.json",
|
|
1884
1884
|
"mode": "0000644",
|
|
1885
|
-
"sha256": "
|
|
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": "
|
|
2730
|
+
"sha256": "2e50d6ff6484577699a8b749827aa4b5fc7d36a3d7f14f381f2bdc6a8532f02a"
|
|
2731
2731
|
},
|
|
2732
2732
|
{
|
|
2733
2733
|
"path": "docs/modules-contract.md",
|
|
@@ -4132,7 +4132,7 @@
|
|
|
4132
4132
|
{
|
|
4133
4133
|
"path": "modules/dev-box/app/src/vendor/bongos-client.cjs",
|
|
4134
4134
|
"mode": "0000644",
|
|
4135
|
-
"sha256": "
|
|
4135
|
+
"sha256": "a6fb1af25ba5d2ef74cee69f2e126811d535b193422d44ee6f2f4efb787d7584"
|
|
4136
4136
|
},
|
|
4137
4137
|
{
|
|
4138
4138
|
"path": "modules/dev-box/app/test/unit.mjs",
|
|
@@ -4377,7 +4377,7 @@
|
|
|
4377
4377
|
{
|
|
4378
4378
|
"path": "modules/government/catalog.js",
|
|
4379
4379
|
"mode": "0000644",
|
|
4380
|
-
"sha256": "
|
|
4380
|
+
"sha256": "3d6d6ced85b69bd6086533a0d118e4032037de66a10931cb3fc4a75bd8b6dbdc"
|
|
4381
4381
|
},
|
|
4382
4382
|
{
|
|
4383
4383
|
"path": "modules/government/config.js",
|
|
@@ -4484,6 +4484,11 @@
|
|
|
4484
4484
|
"mode": "0000644",
|
|
4485
4485
|
"sha256": "ccd2cd14103bae00957227d037d41f76adaaddc639bd09808f244b0bc514e702"
|
|
4486
4486
|
},
|
|
4487
|
+
{
|
|
4488
|
+
"path": "modules/government/migrations/government_012_version_create_archon.sql",
|
|
4489
|
+
"mode": "0000644",
|
|
4490
|
+
"sha256": "e963028286a7f8a0a55c9fae2f73f203a6ae7c7770f73a265aefdcc026829625"
|
|
4491
|
+
},
|
|
4487
4492
|
{
|
|
4488
4493
|
"path": "modules/government/module.json",
|
|
4489
4494
|
"mode": "0000644",
|
|
@@ -4857,12 +4862,12 @@
|
|
|
4857
4862
|
{
|
|
4858
4863
|
"path": "modules/hall-ui/public/goals-render.js",
|
|
4859
4864
|
"mode": "0000644",
|
|
4860
|
-
"sha256": "
|
|
4865
|
+
"sha256": "09fd6317b9a3c142ca7b51bd270631987284a96e5b89e64e58cedc3f8eec29ae"
|
|
4861
4866
|
},
|
|
4862
4867
|
{
|
|
4863
4868
|
"path": "modules/hall-ui/public/goals.css",
|
|
4864
4869
|
"mode": "0000644",
|
|
4865
|
-
"sha256": "
|
|
4870
|
+
"sha256": "d9c890274864184dd777e52ab6df12960b758eaf5e79cdc50a122bf70dd84bbc"
|
|
4866
4871
|
},
|
|
4867
4872
|
{
|
|
4868
4873
|
"path": "modules/hall-ui/public/goals.html",
|
|
@@ -5177,7 +5182,7 @@
|
|
|
5177
5182
|
{
|
|
5178
5183
|
"path": "modules/hall-ui/public/roadmap.css",
|
|
5179
5184
|
"mode": "0000644",
|
|
5180
|
-
"sha256": "
|
|
5185
|
+
"sha256": "94aa72d38991e04def83c19ec2ce232f8c2f7d4fb0f51e499c24284f28526236"
|
|
5181
5186
|
},
|
|
5182
5187
|
{
|
|
5183
5188
|
"path": "modules/hall-ui/public/roadmap.html",
|
|
@@ -5187,7 +5192,7 @@
|
|
|
5187
5192
|
{
|
|
5188
5193
|
"path": "modules/hall-ui/public/roadmap.js",
|
|
5189
5194
|
"mode": "0000644",
|
|
5190
|
-
"sha256": "
|
|
5195
|
+
"sha256": "65f39048e4fda07ddfec5bcf5262ca76ea1bd186ad8452ac6a3f0c9b1b6e1a62"
|
|
5191
5196
|
},
|
|
5192
5197
|
{
|
|
5193
5198
|
"path": "modules/hall-ui/public/roadmap.states.json",
|
|
@@ -5297,7 +5302,7 @@
|
|
|
5297
5302
|
{
|
|
5298
5303
|
"path": "modules/hall-ui/public/task-detail.js",
|
|
5299
5304
|
"mode": "0000644",
|
|
5300
|
-
"sha256": "
|
|
5305
|
+
"sha256": "2884b3c0652e4b74a680215854cf6b329f94c0dcd7bb43764de117d51f828ca3"
|
|
5301
5306
|
},
|
|
5302
5307
|
{
|
|
5303
5308
|
"path": "modules/hall-ui/public/task-lib.js",
|
|
@@ -5517,7 +5522,7 @@
|
|
|
5517
5522
|
{
|
|
5518
5523
|
"path": "modules/lifecycle/db-goals.js",
|
|
5519
5524
|
"mode": "0000644",
|
|
5520
|
-
"sha256": "
|
|
5525
|
+
"sha256": "6e8235a4025951f82644f4a058a56ee4052d33e3b8b68a7c27d8ce42a0b81b19"
|
|
5521
5526
|
},
|
|
5522
5527
|
{
|
|
5523
5528
|
"path": "modules/lifecycle/db-grade.js",
|
|
@@ -5552,12 +5557,12 @@
|
|
|
5552
5557
|
{
|
|
5553
5558
|
"path": "modules/lifecycle/db-versions.js",
|
|
5554
5559
|
"mode": "0000644",
|
|
5555
|
-
"sha256": "
|
|
5560
|
+
"sha256": "09513924d1a97c4e5c2c84c3e55bcadb91159bf309ece479555b6b7a833188c7"
|
|
5556
5561
|
},
|
|
5557
5562
|
{
|
|
5558
5563
|
"path": "modules/lifecycle/db.js",
|
|
5559
5564
|
"mode": "0000644",
|
|
5560
|
-
"sha256": "
|
|
5565
|
+
"sha256": "75a42d39fe676e0447cead0717a4f832b5296308e786037f5d44ee35593234c6"
|
|
5561
5566
|
},
|
|
5562
5567
|
{
|
|
5563
5568
|
"path": "modules/lifecycle/dead-deps.js",
|
|
@@ -5742,7 +5747,7 @@
|
|
|
5742
5747
|
{
|
|
5743
5748
|
"path": "modules/lifecycle/routes/goals.js",
|
|
5744
5749
|
"mode": "0000644",
|
|
5745
|
-
"sha256": "
|
|
5750
|
+
"sha256": "eb3137c30f6471aa0900f98f0fa45752808609e4e1e99f9ecb1f6df0d3e7c5ab"
|
|
5746
5751
|
},
|
|
5747
5752
|
{
|
|
5748
5753
|
"path": "modules/lifecycle/routes/help-requests.js",
|
|
@@ -5797,12 +5802,12 @@
|
|
|
5797
5802
|
{
|
|
5798
5803
|
"path": "modules/lifecycle/routes/version-route-authz.js",
|
|
5799
5804
|
"mode": "0000644",
|
|
5800
|
-
"sha256": "
|
|
5805
|
+
"sha256": "d4e7b2d1ecaa1f5ceaabf9b6c62e649e139b25d74a50c98e0dfc734871b86b98"
|
|
5801
5806
|
},
|
|
5802
5807
|
{
|
|
5803
5808
|
"path": "modules/lifecycle/routes/versions.js",
|
|
5804
5809
|
"mode": "0000644",
|
|
5805
|
-
"sha256": "
|
|
5810
|
+
"sha256": "e13f46e32e43c84bfb2a4d3bc46a90da191c04f516fb7493cfe0cc19d05726d7"
|
|
5806
5811
|
},
|
|
5807
5812
|
{
|
|
5808
5813
|
"path": "modules/lifecycle/routes/visuals.js",
|
|
@@ -7607,12 +7612,12 @@
|
|
|
7607
7612
|
{
|
|
7608
7613
|
"path": "package-lock.json",
|
|
7609
7614
|
"mode": "0000644",
|
|
7610
|
-
"sha256": "
|
|
7615
|
+
"sha256": "06b8564ba0e1a6cd3eae666c5d3483f2d7205d94489043b81b8f5acaed43c23d"
|
|
7611
7616
|
},
|
|
7612
7617
|
{
|
|
7613
7618
|
"path": "package.json",
|
|
7614
7619
|
"mode": "0000644",
|
|
7615
|
-
"sha256": "
|
|
7620
|
+
"sha256": "e55f4cb9511aa686e6d034728525f73b91e482f76674f69e04b8b3407cbd4418"
|
|
7616
7621
|
},
|
|
7617
7622
|
{
|
|
7618
7623
|
"path": "public-docs/index.html",
|
|
@@ -8882,7 +8887,7 @@
|
|
|
8882
8887
|
{
|
|
8883
8888
|
"path": "scripts/gds/triage.js",
|
|
8884
8889
|
"mode": "0000644",
|
|
8885
|
-
"sha256": "
|
|
8890
|
+
"sha256": "739aac4b9ec1cc413c21cc53076f66782a120173eaae5f579aa24b6936e28164"
|
|
8886
8891
|
},
|
|
8887
8892
|
{
|
|
8888
8893
|
"path": "scripts/gds/turn-end-sound.js",
|
|
@@ -9327,7 +9332,7 @@
|
|
|
9327
9332
|
{
|
|
9328
9333
|
"path": "src/module-api.js",
|
|
9329
9334
|
"mode": "0000644",
|
|
9330
|
-
"sha256": "
|
|
9335
|
+
"sha256": "73ff9e6325803d7da5a4388aae355f13a4559f98434d16967d37e4ff2bbc150d"
|
|
9331
9336
|
},
|
|
9332
9337
|
{
|
|
9333
9338
|
"path": "src/module-loader/catalog.js",
|
|
@@ -10449,6 +10454,11 @@
|
|
|
10449
10454
|
"mode": "0000644",
|
|
10450
10455
|
"sha256": "bf0baad459ee2e103079a53570ca4998bb3ba66451ad0257478dd236118c8ce6"
|
|
10451
10456
|
},
|
|
10457
|
+
{
|
|
10458
|
+
"path": "tests/goal_archive_hall.mjs",
|
|
10459
|
+
"mode": "0000644",
|
|
10460
|
+
"sha256": "993a280b9900d40145e1913a6a404a23293e241d63ddaadb605ebe27309c58c8"
|
|
10461
|
+
},
|
|
10452
10462
|
{
|
|
10453
10463
|
"path": "tests/goal_archive_route_e2e.mjs",
|
|
10454
10464
|
"mode": "0000644",
|
|
@@ -10697,7 +10707,7 @@
|
|
|
10697
10707
|
{
|
|
10698
10708
|
"path": "tests/government_require_permission.mjs",
|
|
10699
10709
|
"mode": "0000644",
|
|
10700
|
-
"sha256": "
|
|
10710
|
+
"sha256": "eff61f5299bcaaf21e19dfa84eb4ff6b92d480f708568bc243e784953d1db40a"
|
|
10701
10711
|
},
|
|
10702
10712
|
{
|
|
10703
10713
|
"path": "tests/government_resolver.mjs",
|
|
@@ -10712,7 +10722,7 @@
|
|
|
10712
10722
|
{
|
|
10713
10723
|
"path": "tests/government_seed.mjs",
|
|
10714
10724
|
"mode": "0000644",
|
|
10715
|
-
"sha256": "
|
|
10725
|
+
"sha256": "f798fe7edf69245324938587dca3682874495b7bf950f0c0e5165b2bb0eadd4e"
|
|
10716
10726
|
},
|
|
10717
10727
|
{
|
|
10718
10728
|
"path": "tests/government_session_scope.mjs",
|
|
@@ -11757,7 +11767,7 @@
|
|
|
11757
11767
|
{
|
|
11758
11768
|
"path": "tests/promote_goal_id.mjs",
|
|
11759
11769
|
"mode": "0000644",
|
|
11760
|
-
"sha256": "
|
|
11770
|
+
"sha256": "5444df365780c33d61ca9a18de08ed89ed2ff74d8af198d51edbaed19d6010c2"
|
|
11761
11771
|
},
|
|
11762
11772
|
{
|
|
11763
11773
|
"path": "tests/prose_edits.mjs",
|
|
@@ -11897,7 +11907,7 @@
|
|
|
11897
11907
|
{
|
|
11898
11908
|
"path": "tests/publish_reconciler.mjs",
|
|
11899
11909
|
"mode": "0000644",
|
|
11900
|
-
"sha256": "
|
|
11910
|
+
"sha256": "4c7c58a1fd28427fbcace0d20a9446f88c2a90cc19eb5fd4826236207732be26"
|
|
11901
11911
|
},
|
|
11902
11912
|
{
|
|
11903
11913
|
"path": "tests/push_path_brief.mjs",
|
|
@@ -12507,7 +12517,7 @@
|
|
|
12507
12517
|
{
|
|
12508
12518
|
"path": "tests/task_detail_ui.mjs",
|
|
12509
12519
|
"mode": "0000644",
|
|
12510
|
-
"sha256": "
|
|
12520
|
+
"sha256": "0bc0d93696b5ce80fb4307b7991bff640316e46fd6fcdebf0ba5a62397ffbe8f"
|
|
12511
12521
|
},
|
|
12512
12522
|
{
|
|
12513
12523
|
"path": "tests/task_goal_link.mjs",
|
|
@@ -12669,11 +12679,21 @@
|
|
|
12669
12679
|
"mode": "0000644",
|
|
12670
12680
|
"sha256": "372c80d42e122a70a4fae8fcfbaaa47459575d3e0a2b80fff8876dfc512c5aeb"
|
|
12671
12681
|
},
|
|
12682
|
+
{
|
|
12683
|
+
"path": "tests/version_close_route.mjs",
|
|
12684
|
+
"mode": "0000644",
|
|
12685
|
+
"sha256": "11c77cc535ecd86bc50ea962835b74672ff3a0d8093d8ce3007586a5873b4201"
|
|
12686
|
+
},
|
|
12672
12687
|
{
|
|
12673
12688
|
"path": "tests/version_literals.mjs",
|
|
12674
12689
|
"mode": "0000644",
|
|
12675
12690
|
"sha256": "17e872131c17bae7a061debc1fd3ee354ab704678b475edd6a8b1dfdd63ceb2f"
|
|
12676
12691
|
},
|
|
12692
|
+
{
|
|
12693
|
+
"path": "tests/version_override_visibility.mjs",
|
|
12694
|
+
"mode": "0000644",
|
|
12695
|
+
"sha256": "692261c26e3da46519757733a7fcf9a9998e0942bc5890688b66b79590d82c27"
|
|
12696
|
+
},
|
|
12677
12697
|
{
|
|
12678
12698
|
"path": "tests/versions_route.mjs",
|
|
12679
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
|
|
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`.
|
|
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
|
-
-
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
package/docs/api/openapi.json
CHANGED
|
@@ -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:** `
|
|
16029
|
-
"x-rank": "
|
|
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":
|
|
22705
|
-
"x-schema-count":
|
|
22800
|
+
"x-endpoint-count": 360,
|
|
22801
|
+
"x-schema-count": 398,
|
|
22706
22802
|
"x-undocumented-bodies": 9,
|
|
22707
|
-
"x-response-schemas":
|
|
22803
|
+
"x-response-schemas": 268,
|
|
22708
22804
|
"x-generated-by": "scripts/gds/gen-api-docs.js"
|
|
22709
22805
|
}
|
package/docs/api-reference.md
CHANGED
|
@@ -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.
|
|
5
|
+
> **Generated from the live route files** — the route file is authoritative. 360 endpoints across 58 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/<redacted>.md)): `public` < `any-builder` < `metic+archon` < `archon`.
|
|
@@ -621,12 +621,13 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
|
|
|
621
621
|
| GET | `/api/bongos/tasks/peer-votes/feed` | `any-builder` | — | GET /tasks/peer-votes/feed — recent confirmed/shipped work by OTHER builders, each with its net vote total and the caller's own current v… |
|
|
622
622
|
| POST | `/api/bongos/tasks/peer-votes/tally` | `metic+archon` | — | POST /tasks/peer-votes/tally — fold matured votes (≥7 days old, not yet counted) into karma_log, one net row per shipping builder, then m… |
|
|
623
623
|
|
|
624
|
-
## `versions` (
|
|
624
|
+
## `versions` (8)
|
|
625
625
|
|
|
626
626
|
| Method | Path | Rank | Body | Description |
|
|
627
627
|
|---|---|---|---|---|
|
|
628
628
|
| GET | `/api/bongos/versions` | `public` | — | read-only version list; mirrors /public/versions. |
|
|
629
|
-
| POST | `/api/bongos/versions` | `
|
|
629
|
+
| POST | `/api/bongos/versions` | `archon` | `id`, `name`, `status`, `track`, `done_when`, `scope_doc_path`, `criteria` | POST /versions — create a version + its done-when criteria in one call. |
|
|
630
|
+
| POST | `/api/bongos/versions/:id/close` | `archon` | `reason`, `dispositions` | POST /versions/:id/close — the move a version has never had (BV1.R12, task 1003599, goal 1000086, ADR 0250 D5, ADR 0263 §5). |
|
|
630
631
|
| GET | `/api/bongos/versions/:id/done-when` | `public` | — | Public: the status dashboard (status.<apex>) fetches this every 60s alongside other public/* surfaces. |
|
|
631
632
|
| POST | `/api/bongos/versions/:id/done-when` | `metic+archon` | `criterion_id`, `criterion_md`, `goal_id`, `sort_order` | Auth (Metic+, then the goal's own authority): create a done-when criterion at RUNTIME. |
|
|
632
633
|
| GET | `/api/bongos/versions/:id/progress` | `public` | — | Per-criterion progress rollup: each done-when criterion → the tasks that gate it (task_criteria, migration 055) → live statuses → what re… |
|