@bongos/core 1.21.125 → 1.21.126

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 (39) hide show
  1. package/.bongos-core.json +70 -40
  2. package/docs/api/openapi.json +4 -4
  3. package/docs/copy-inventory.md +128 -126
  4. package/docs/copy-registry.json +188 -170
  5. package/docs/module-api-changelog.md +3 -1
  6. package/docs/page-inventory.json +2 -1
  7. package/docs/page-readings.json +152 -143
  8. package/modules/hall-ui/public/goal-forest-lib.js +36 -0
  9. package/modules/hall-ui/public/goal-forest-render.js +50 -10
  10. package/modules/hall-ui/public/goals-page.js +19 -22
  11. package/modules/hall-ui/public/goals-render.js +6 -16
  12. package/modules/hall-ui/public/goals.css +13 -4
  13. package/modules/hall-ui/public/goals.html +22 -24
  14. package/modules/hall-ui/public/goals.states.json +19 -1
  15. package/modules/hall-ui/records/goal-dependency-forest.md +4 -3
  16. package/modules/platform-identity/invite-authz.js +1 -1
  17. package/modules/provisioning/catalog-bridge.js +1 -1
  18. package/modules/provisioning/provisioning.js +1 -1
  19. package/modules/provisioning/route-helpers.js +50 -0
  20. package/modules/provisioning/routes/disconnect.js +6 -5
  21. package/modules/provisioning/routes/env-manifest.js +11 -27
  22. package/modules/provisioning/routes/provisioning.js +58 -75
  23. package/package-lock.json +2 -2
  24. package/package.json +1 -1
  25. package/release-notes.json +14 -0
  26. package/scripts/gds/module-assess-tests.js +40 -11
  27. package/scripts/gds/module-assess-version.js +10 -2
  28. package/scripts/gds/module-test-runner/README.md +44 -0
  29. package/scripts/gds/module-test-runner/module-tests.yml +87 -0
  30. package/scripts/gds/module-test-runner.js +358 -0
  31. package/src/module-api.js +1 -1
  32. package/tests/goal_forest_lib.mjs +28 -0
  33. package/tests/goal_forest_page.mjs +106 -11
  34. package/tests/module_assess_price_parity.mjs +2 -2
  35. package/tests/module_assess_score.mjs +13 -3
  36. package/tests/module_test_runner.mjs +294 -0
  37. package/tests/project_catalog_routes.mjs +1 -1
  38. package/tests/provisioning_module_selection.mjs +1 -1
  39. package/tests/provisioning_project_owner_gate.mjs +271 -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.21.125",
6
- "core_contract": "1.21.125",
7
- "source_commit": "6537f85e10dcb60107037c138237fe4e5d855500",
5
+ "core_version": "1.21.126",
6
+ "core_contract": "1.21.126",
7
+ "source_commit": "94a48727259da5ad6269d8e1982648c5a263116b",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-10-15T15:06:45.205Z",
9
+ "built_at": "2026-10-15T15:32:06.327Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
- "docs_redacted": 605,
12
+ "docs_redacted": 606,
13
13
  "agent_docs_stubbed": 28,
14
- "functional_verbatim": 3128,
14
+ "functional_verbatim": 3133,
15
15
  "rules": 3,
16
16
  "gate_literals": 3,
17
17
  "gate": "passed"
18
18
  },
19
- "file_count": 3762,
20
- "tree_sha256": "7fb72ed794b2cdaa7f0fe66ffdccb7b56f5c18a9d4d66f18b4767254072e1827",
19
+ "file_count": 3768,
20
+ "tree_sha256": "aaa23a52f299e82601309b1dc11007fe842e9686674c9c5cc96991f5412286e3",
21
21
  "files": [
22
22
  {
23
23
  "path": ".claude/skills/ask-for-help/SKILL.md",
@@ -2382,7 +2382,7 @@
2382
2382
  {
2383
2383
  "path": "docs/api/openapi.json",
2384
2384
  "mode": "0000644",
2385
- "sha256": "b8d8cae75596996b38203b5b73b8fc4f5cfc4afa8fa6a170541131fdfed924ea"
2385
+ "sha256": "cd89b6776167172503ef68a77b1cfa68a00bf886d8f586c456f67e3cfef84fba"
2386
2386
  },
2387
2387
  {
2388
2388
  "path": "docs/architecture.md",
@@ -2407,12 +2407,12 @@
2407
2407
  {
2408
2408
  "path": "docs/copy-inventory.md",
2409
2409
  "mode": "0000644",
2410
- "sha256": "2f6c0fff979e7a52a1dff20184291da110751084197f9619497bc5a8668c2c0f"
2410
+ "sha256": "24ace5710d2fd5823ec9f1c030570e53b48ccdff5b356b193e5d055fe9209d9f"
2411
2411
  },
2412
2412
  {
2413
2413
  "path": "docs/copy-registry.json",
2414
2414
  "mode": "0000644",
2415
- "sha256": "2fa52a4d4411a29e5aadeb0a03898a32144834527c7e84804f4c9df5f584cab6"
2415
+ "sha256": "d1bf2d46cc50c80729a6b705eef2313753ea48b56eed76bb365b8bda635ca68f"
2416
2416
  },
2417
2417
  {
2418
2418
  "path": "docs/design/apex-pass-2-direction.md",
@@ -2922,7 +2922,7 @@
2922
2922
  {
2923
2923
  "path": "docs/module-api-changelog.md",
2924
2924
  "mode": "0000644",
2925
- "sha256": "a1ec4ace0bc91b34031c59bb4fd08263af542f5ddd1284204bfd821cf843b527"
2925
+ "sha256": "8b70cfa6cac3da1e08d0f969f6d2a3f0c43ca0533b28d7e8a58ca12044165c26"
2926
2926
  },
2927
2927
  {
2928
2928
  "path": "docs/modules-contract.md",
@@ -3007,12 +3007,12 @@
3007
3007
  {
3008
3008
  "path": "docs/page-inventory.json",
3009
3009
  "mode": "0000644",
3010
- "sha256": "b9608b2d132b5fff25d2d7baac59e2d25b565414a63fba1372a436e328d302cd"
3010
+ "sha256": "688c15d7b79c60a561be7fca61931627898d1544d52dd912a79ff3fa6c160876"
3011
3011
  },
3012
3012
  {
3013
3013
  "path": "docs/page-readings.json",
3014
3014
  "mode": "0000644",
3015
- "sha256": "d59a98a2c166e276275156dfb13887c9147f1596ca65fb777c97e988dd23bf25"
3015
+ "sha256": "2ade456b9e5e4e51e4c4e541f3336360d694022bd43b6ea5da77ae63367bd809"
3016
3016
  },
3017
3017
  {
3018
3018
  "path": "docs/project-context.template.md",
@@ -5917,12 +5917,12 @@
5917
5917
  {
5918
5918
  "path": "modules/hall-ui/public/goal-forest-lib.js",
5919
5919
  "mode": "0000644",
5920
- "sha256": "f4eef6f9ec782aa76369b98cbbd95152ab0e11858a4bb9d2c2f9839a1d71a08c"
5920
+ "sha256": "84ea32523a9bc1fdd34e00cd28f75b52189d18bd72491739dafd2b08b40be39e"
5921
5921
  },
5922
5922
  {
5923
5923
  "path": "modules/hall-ui/public/goal-forest-render.js",
5924
5924
  "mode": "0000644",
5925
- "sha256": "9edf4cf99fe2726e75b4ac21b6f41a5e51ecc1b933659ac0f9c7d98c3de217b1"
5925
+ "sha256": "19df08dd72ce42827c825c6ee32233a6bb51f534e060c33d42552aff6e39a8ba"
5926
5926
  },
5927
5927
  {
5928
5928
  "path": "modules/hall-ui/public/goal-inbox.js",
@@ -5947,22 +5947,22 @@
5947
5947
  {
5948
5948
  "path": "modules/hall-ui/public/goals-page.js",
5949
5949
  "mode": "0000644",
5950
- "sha256": "9f5944388fa573d7c483a6a690d0de53527a407facc13a9a00b01b06c5772047"
5950
+ "sha256": "3836cafa9edc429cdcd847f48f324f7f3aa412ca42b847ed1622126525e67c9a"
5951
5951
  },
5952
5952
  {
5953
5953
  "path": "modules/hall-ui/public/goals-render.js",
5954
5954
  "mode": "0000644",
5955
- "sha256": "82bbcc5d2b7c098dbf228b30cdccadca6fbb7d3b3a73189f6298b0697c56f110"
5955
+ "sha256": "d7cbd599a69f43851bf6af8be33166cc4ddc949d22f28f36bf2282def0cfc6ba"
5956
5956
  },
5957
5957
  {
5958
5958
  "path": "modules/hall-ui/public/goals.css",
5959
5959
  "mode": "0000644",
5960
- "sha256": "d5257a3e4f755d17300490eeb8dce9bd91d9c1b8faa31f6a4d6f6d3a79e232a9"
5960
+ "sha256": "6042df284acac7f5af12688651aad7e8d0cf38829a9395a1e28e0e0ded7b8bf3"
5961
5961
  },
5962
5962
  {
5963
5963
  "path": "modules/hall-ui/public/goals.html",
5964
5964
  "mode": "0000644",
5965
- "sha256": "2f9fe0010658b8aac1a3942bd1e8804c60f99438d789ff52b4fb1d18a2b1fd1d"
5965
+ "sha256": "11b681a246ba5a6a662e6fb0b0eae795460bd1f8cdf251f8cd0e2e52c4869756"
5966
5966
  },
5967
5967
  {
5968
5968
  "path": "modules/hall-ui/public/goals.js",
@@ -5972,7 +5972,7 @@
5972
5972
  {
5973
5973
  "path": "modules/hall-ui/public/goals.states.json",
5974
5974
  "mode": "0000644",
5975
- "sha256": "36c7b1b130b6255a35494600ecb3e2136a16eab26407b6f14cdd572a794484ab"
5975
+ "sha256": "8b458aa1afaaf9e122217d912bcf15390550cf75953414a94c6bd912c98574e5"
5976
5976
  },
5977
5977
  {
5978
5978
  "path": "modules/hall-ui/public/gov-feeds.js",
@@ -6757,7 +6757,7 @@
6757
6757
  {
6758
6758
  "path": "modules/hall-ui/records/goal-dependency-forest.md",
6759
6759
  "mode": "0000644",
6760
- "sha256": "dde9b115c2db984ddd86c7dbf3e9e8164f5ae9d3bf09638702bd5206f68f2d04"
6760
+ "sha256": "32d57c27724e1c6e263762a7b150a1db4fbe849f7e3ac3e05ee3af4edb0493d5"
6761
6761
  },
6762
6762
  {
6763
6763
  "path": "modules/hall-ui/records/governor-street.md",
@@ -8137,7 +8137,7 @@
8137
8137
  {
8138
8138
  "path": "modules/platform-identity/invite-authz.js",
8139
8139
  "mode": "0000644",
8140
- "sha256": "2eb5577450d3bc1d67b7eab9a13256889aca945c6ac6a6a0ca919e195952b7a1"
8140
+ "sha256": "dd54f1456e383de90c7440dbddeb3919718588bd4fb43621f1d192ae16061db5"
8141
8141
  },
8142
8142
  {
8143
8143
  "path": "modules/platform-identity/invite-notices.js",
@@ -8487,7 +8487,7 @@
8487
8487
  {
8488
8488
  "path": "modules/provisioning/catalog-bridge.js",
8489
8489
  "mode": "0000644",
8490
- "sha256": "6978ddde30cb0b378a2decbe18c2824817d8d57a941a8de6230483453e99acd7"
8490
+ "sha256": "ddc1228706e8f8342bbbd7705acae6a99f1e65e700e72c701c8afe62cd67d732"
8491
8491
  },
8492
8492
  {
8493
8493
  "path": "modules/provisioning/control-plane-guard.js",
@@ -8792,7 +8792,7 @@
8792
8792
  {
8793
8793
  "path": "modules/provisioning/provisioning.js",
8794
8794
  "mode": "0000644",
8795
- "sha256": "c99cfa7d071ece3f6d821709a8610baa25bb0323f7219016ac53d7e8ebb5e197"
8795
+ "sha256": "29ce4dc7dacfa6b9bdddf35ab80fd4b226c96ebcf9a4235297619defe0174119"
8796
8796
  },
8797
8797
  {
8798
8798
  "path": "modules/provisioning/public-refusal.js",
@@ -8824,6 +8824,11 @@
8824
8824
  "mode": "0000644",
8825
8825
  "sha256": "aa3e794ed904157f8549d6ab8ce28ae4a9fa3c2235758b59fc4bd3a66a3b7049"
8826
8826
  },
8827
+ {
8828
+ "path": "modules/provisioning/route-helpers.js",
8829
+ "mode": "0000644",
8830
+ "sha256": "8a4b7f5d8696a1f3e8c80f01e51663a98f14c6115fb76610b66d65e98e68545d"
8831
+ },
8827
8832
  {
8828
8833
  "path": "modules/provisioning/routes/body-validators.js",
8829
8834
  "mode": "0000644",
@@ -8847,12 +8852,12 @@
8847
8852
  {
8848
8853
  "path": "modules/provisioning/routes/disconnect.js",
8849
8854
  "mode": "0000644",
8850
- "sha256": "e817af6b207a45a61fe8b80e00328537bfeb629d0164a6125af1f8e459bc700f"
8855
+ "sha256": "eae0b840da488f3a9a9a1c0a4eb1de5a0f4fb72ec7120041af9101957e5661c0"
8851
8856
  },
8852
8857
  {
8853
8858
  "path": "modules/provisioning/routes/env-manifest.js",
8854
8859
  "mode": "0000644",
8855
- "sha256": "dbc156fa4cb2c74132a8034c481ec676f818f4f19139cb10d7d5d669e2e4bbd9"
8860
+ "sha256": "53778501a1265d9e43d49281052e6dbc52730a8fb06fb644ff7c20745d086a6e"
8856
8861
  },
8857
8862
  {
8858
8863
  "path": "modules/provisioning/routes/github-setup.js",
@@ -8867,7 +8872,7 @@
8867
8872
  {
8868
8873
  "path": "modules/provisioning/routes/provisioning.js",
8869
8874
  "mode": "0000644",
8870
- "sha256": "336ac83ef1fcdc91416bd6ca4d0cd040a2b926e0b695a9fbd528a5ab262a4974"
8875
+ "sha256": "55e3e478e7a1978e1e12c5d5fc551fa9b58d51e6d0e920a4d71ef02618e7b78f"
8871
8876
  },
8872
8877
  {
8873
8878
  "path": "modules/provisioning/routes/render-standup.js",
@@ -10477,12 +10482,12 @@
10477
10482
  {
10478
10483
  "path": "package-lock.json",
10479
10484
  "mode": "0000644",
10480
- "sha256": "cb1fe1a974c6063f91ae16893f1daddb028647374dc13d9df725ea4be5074d9a"
10485
+ "sha256": "341426e0e35db5113dd017485f4479dc0674db124643388aeec9d883e113f7e3"
10481
10486
  },
10482
10487
  {
10483
10488
  "path": "package.json",
10484
10489
  "mode": "0000644",
10485
- "sha256": "e92ae06c5b33aa14e3ec516f009526f335ebec59b5e03b4e774a4a48c252d087"
10490
+ "sha256": "f5522e5c98564bbf8ffd3a4817e094732239f369a1850e1b743030a4b03d00b2"
10486
10491
  },
10487
10492
  {
10488
10493
  "path": "public-docs/index.html",
@@ -10502,7 +10507,7 @@
10502
10507
  {
10503
10508
  "path": "release-notes.json",
10504
10509
  "mode": "0000644",
10505
- "sha256": "415b376c73ce06c6803897093c02aa9157378d55487a0f84dd8387dc749a75a0"
10510
+ "sha256": "4fbea8b3dd2714eb5ec49751e18f66a0b995e94d64163edfbbf5fa837b196d81"
10506
10511
  },
10507
10512
  {
10508
10513
  "path": "scripts/cron/style_guide_audit.sh",
@@ -11392,12 +11397,27 @@
11392
11397
  {
11393
11398
  "path": "scripts/gds/module-assess-tests.js",
11394
11399
  "mode": "0000644",
11395
- "sha256": "83dc9529be926f8e10043ab78d644d1a72096d02000623035798bd420b2b3261"
11400
+ "sha256": "802ee523248df153dace07e364b29516f6c6dcfcf8eaa301aa97bb723c135983"
11396
11401
  },
11397
11402
  {
11398
11403
  "path": "scripts/gds/module-assess-version.js",
11399
11404
  "mode": "0000644",
11400
- "sha256": "d240e15768b1cd5869c52ef2c93656cdcdd870554893dd58031b12c78f212e36"
11405
+ "sha256": "b21c85714a8b93e43857c26237eec9dca9830abb53f44146957525f262fb8e7b"
11406
+ },
11407
+ {
11408
+ "path": "scripts/gds/module-test-runner.js",
11409
+ "mode": "0000644",
11410
+ "sha256": "00c844922f5b465485847e45782c71c3103fe9d6aa0e09d4908121769aecbe78"
11411
+ },
11412
+ {
11413
+ "path": "scripts/gds/module-test-runner/README.md",
11414
+ "mode": "0000644",
11415
+ "sha256": "e6253ef4056f35355d5c19af247de840b0f925f7a2b8ead8f2598227be9e6d38"
11416
+ },
11417
+ {
11418
+ "path": "scripts/gds/module-test-runner/module-tests.yml",
11419
+ "mode": "0000644",
11420
+ "sha256": "d721ad7959afb899877aafd31c6a22287d6e479e0fb4fb4f600d12ce5e12a2fd"
11401
11421
  },
11402
11422
  {
11403
11423
  "path": "scripts/gds/module.js",
@@ -12827,7 +12847,7 @@
12827
12847
  {
12828
12848
  "path": "src/module-api.js",
12829
12849
  "mode": "0000644",
12830
- "sha256": "81694f072dbbb4e64a286a4f5157d07a8e1105ae8a94d800f09eba00f30848e6"
12850
+ "sha256": "05cbabab7a15ea12d403cdce32d0e9accfb56fe1dc44c691dc5e8920933edaf0"
12831
12851
  },
12832
12852
  {
12833
12853
  "path": "src/module-loader/catalog.js",
@@ -14667,12 +14687,12 @@
14667
14687
  {
14668
14688
  "path": "tests/goal_forest_lib.mjs",
14669
14689
  "mode": "0000644",
14670
- "sha256": "3b309358c195469bee0ab1ce95242914fbc0b1b3def0bb7de3d51dc09dd29c6a"
14690
+ "sha256": "a647398539783aed52b9cf7e5026ae6ab1e9f7337c5e7920d57c9cc106fd9581"
14671
14691
  },
14672
14692
  {
14673
14693
  "path": "tests/goal_forest_page.mjs",
14674
14694
  "mode": "0000644",
14675
- "sha256": "fdad13a1d265a3506229712816e244ebe026f449beabe3f98a5d652b36d01365"
14695
+ "sha256": "143033e1a1d6178a6d7da40be7b649f61c48997327a34d53d0f32d5e0df08e3a"
14676
14696
  },
14677
14697
  {
14678
14698
  "path": "tests/goal_graph.mjs",
@@ -16342,12 +16362,12 @@
16342
16362
  {
16343
16363
  "path": "tests/module_assess_price_parity.mjs",
16344
16364
  "mode": "0000644",
16345
- "sha256": "78f36a8bbbd948c4485dfd80df55e1ee053af1b510b4d98607c0d2545bcfa66c"
16365
+ "sha256": "b0cbedfe78c04c5e7ec55d1d50e607c8730784d1e820a2ec64ace05689968c2a"
16346
16366
  },
16347
16367
  {
16348
16368
  "path": "tests/module_assess_score.mjs",
16349
16369
  "mode": "0000644",
16350
- "sha256": "5255bc0c4e721190d588d5d6c812a8814788598929d38d3bbd87480371ee0b05"
16370
+ "sha256": "5e80628e696af499d95e7d59cc8c655902b9d3bdbe63473f68e573c0acaa2dd3"
16351
16371
  },
16352
16372
  {
16353
16373
  "path": "tests/module_assess_security.mjs",
@@ -16474,6 +16494,11 @@
16474
16494
  "mode": "0000644",
16475
16495
  "sha256": "0db12d802203780f489e9a6d7abf970dfcde9099ac7011fcaaa6c575336804cd"
16476
16496
  },
16497
+ {
16498
+ "path": "tests/module_test_runner.mjs",
16499
+ "mode": "0000644",
16500
+ "sha256": "e6fbb32fd8f43c748d89aca5a9025872582d1628e47de12c4ce4bca834c8be88"
16501
+ },
16477
16502
  {
16478
16503
  "path": "tests/module_toggle_restart.mjs",
16479
16504
  "mode": "0000644",
@@ -16957,7 +16982,7 @@
16957
16982
  {
16958
16983
  "path": "tests/project_catalog_routes.mjs",
16959
16984
  "mode": "0000644",
16960
- "sha256": "e19d61fb2734092104276d1f74f1cbdf691bfe4f920414c543a1c07e839725e6"
16985
+ "sha256": "52bb32c6e47676407b96e447969cd09cecf12d040d5aa0aef71d5f017b4b0a12"
16961
16986
  },
16962
16987
  {
16963
16988
  "path": "tests/project_door_ui.mjs",
@@ -17237,7 +17262,7 @@
17237
17262
  {
17238
17263
  "path": "tests/provisioning_module_selection.mjs",
17239
17264
  "mode": "0000644",
17240
- "sha256": "3be5d5409c5ffc223ac0ad9aad885fe63d4c8ffe0b11c3aa409d42bee5286932"
17265
+ "sha256": "6aa80d1dd73c9437429b37d8b8af375383a992d4fc8e68909c8346987f2ebc06"
17241
17266
  },
17242
17267
  {
17243
17268
  "path": "tests/provisioning_onboard_mode.mjs",
@@ -17254,6 +17279,11 @@
17254
17279
  "mode": "0000644",
17255
17280
  "sha256": "2a7769c430da7f81509659eb592c16abe7f95b2b3a3a447dac85fd10f0c780ee"
17256
17281
  },
17282
+ {
17283
+ "path": "tests/provisioning_project_owner_gate.mjs",
17284
+ "mode": "0000644",
17285
+ "sha256": "c632c7fd2b797f40cfda0e62be35f10769c836bc13164ecbc10cb28ab63f8320"
17286
+ },
17257
17287
  {
17258
17288
  "path": "tests/provisioning_public_refusal.mjs",
17259
17289
  "mode": "0000644",
@@ -17838,7 +17838,7 @@
17838
17838
  "provisioning"
17839
17839
  ],
17840
17840
  "summary": "POST /provisioning/instances/:id/domain",
17841
- "description": "POST /provisioning/instances/:id/domain — give the caller's OWN instance its address (task 1002692, gap 5: no path existed to add a domain after creation). Validates + records the domain; for an already-ACTIVE instance it also enqueues a 'domain-attach' intent the control-plane runner drains (web tier holds no cloud tokens — ADR 0111 §2). A requested/error instance only records it: the (re)provision run wires the domain itself. A bring-your-own address may be RE-POINTED (task 1003237, ADR 0200): the same guards the first attach applies decide it, and the address it moved off is queued for release. Body: { domain (required) }.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
17841
+ "description": "POST /provisioning/instances/:id/domain — give the caller's OWN instance its address (task 1002692, gap 5: no path existed to add a domain after creation). Validates + records the domain; for an already-ACTIVE instance it also enqueues a 'domain-attach' intent the control-plane runner drains (web tier holds no cloud tokens — ADR 0111 §2). A requested/error instance only records it: the (re)provision run wires the domain itself. A bring-your-own address may be RE-POINTED (task 1003237, ADR 0200): the same guards the first attach applies decide it, and the address it moved off is queued for release. Body: { domain (required) }. An archon may set any project's address; the override is audited via the actor.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
17842
17842
  "x-rank": "any-builder",
17843
17843
  "x-source": "modules/provisioning/routes/provisioning.js",
17844
17844
  "parameters": [
@@ -18193,7 +18193,7 @@
18193
18193
  "provisioning"
18194
18194
  ],
18195
18195
  "summary": "POST /provisioning/instances/:id/github-app",
18196
- "description": "POST /provisioning/instances/:id/github-app — mint a GitHub-App-Manifest onboarding link for the caller's OWN instance (task 2080, ADR 0133). rank: any authenticated builder (own resource). Returns the pre-filled manifest + the GitHub form-POST target (personal + org variants) + a one-time `state`; the browser POSTs the manifest to GitHub, the owner approves, and GitHub redirects back to the public callback below. The web tier only RECORDS the attempt (state token) — the control-plane runner does the token exchange + cred placement (trust boundary intact, ADR 0111 §2). Body: { account? ('personal'|'org'), org? (a GitHub organisation login) }. A personal or an organisation account (task 1004651): account 'org' makes the app on the organisation the founder chose on the page (`org`), else on the repo's owner. The org name is checked against GitHub's login rules here, never trusted from the page; whether the founder may make an app there is GitHub's to enforce on its own page (this module holds no GitHub token to ask with, ADR 0111 §2). Anything other than account 'org' is the founder's personal account, exactly as before.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
18196
+ "description": "POST /provisioning/instances/:id/github-app — mint a GitHub-App-Manifest onboarding link for the caller's OWN instance (task 2080, ADR 0133). rank: any authenticated builder (own resource; archon may mint for any — audited via the actor). Returns the pre-filled manifest + the GitHub form-POST target (personal + org variants) + a one-time `state`; the browser POSTs the manifest to GitHub, the owner approves, and GitHub redirects back to the public callback below. The web tier only RECORDS the attempt (state token) — the control-plane runner does the token exchange + cred placement (trust boundary intact, ADR 0111 §2). Body: { account? ('personal'|'org'), org? (a GitHub organisation login) }. A personal or an organisation account (task 1004651): account 'org' makes the app on the organisation the founder chose on the page (`org`), else on the repo's owner. The org name is checked against GitHub's login rules here, never trusted from the page; whether the founder may make an app there is GitHub's to enforce on its own page (this module holds no GitHub token to ask with, ADR 0111 §2). Anything other than account 'org' is the founder's personal account, exactly as before.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
18197
18197
  "x-rank": "any-builder",
18198
18198
  "x-source": "modules/provisioning/routes/provisioning.js",
18199
18199
  "parameters": [
@@ -18301,7 +18301,7 @@
18301
18301
  "provisioning"
18302
18302
  ],
18303
18303
  "summary": "GET /provisioning/instances/:id/invite-suggestions",
18304
- "description": "── Who is worth inviting (BV1.R28, task 1002347, goal 1000046 C6) ──────── GET /provisioning/instances/:id/invite-suggestions — turn the engine's `invites.seeking` into NAMES. ADR 0239 §6 left `invites.suggested` empty on purpose: ranking builders is a directory read the pure engine may not run. This is the resolution, and ADR 0251 is why it looks like this. rank: any authenticated builder, own resource — `instanceAccessDenied`, the same gate and the same 404 as the manage read above. That is deliberate and not a new authorization idea: REACHING this route IS the ownership answer (ADR 0249 §4), so the surface never re-derives \"is this theirs\" and can never become a weaker second copy of a server rule (ADR 0016). It also 404s rather than 403s, so it leaks no more instance existence than the read beside it. `seeking: null` COSTS NOTHING AND ASKS NOBODY. A solo owner is suggested nobody on purpose (ADR 0239 §6), which is a different statement from an empty list nobody filled — so that answer returns its own reason and never touches the directory at all.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
18304
+ "description": "── Who is worth inviting (BV1.R28, task 1002347, goal 1000046 C6) ──────── GET /provisioning/instances/:id/invite-suggestions — turn the engine's `invites.seeking` into NAMES. ADR 0239 §6 left `invites.suggested` empty on purpose: ranking builders is a directory read the pure engine may not run. This is the resolution, and ADR 0251 is why it looks like this. rank: any authenticated builder, own resource — `requireProjectOwner`, the same gate and the same 404 as the manage read above. That is deliberate and not a new authorization idea: REACHING this route IS the ownership answer (ADR 0249 §4), so the surface never re-derives \"is this theirs\" and can never become a weaker second copy of a server rule (ADR 0016). It also 404s rather than 403s, so it leaks no more instance existence than the read beside it. `seeking: null` COSTS NOTHING AND ASKS NOBODY. A solo owner is suggested nobody on purpose (ADR 0239 §6), which is a different statement from an empty list nobody filled — so that answer returns its own reason and never touches the directory at all.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
18305
18305
  "x-rank": "any-builder",
18306
18306
  "x-source": "modules/provisioning/routes/provisioning.js",
18307
18307
  "parameters": [
@@ -18913,7 +18913,7 @@
18913
18913
  "provisioning"
18914
18914
  ],
18915
18915
  "summary": "POST /provisioning/instances/:id/teardown",
18916
- "description": "POST /provisioning/instances/:id/teardown — request teardown of the caller's OWN instance. rank: any authenticated builder (own resource). Enqueues a 'teardown' intent; the runner executes it (web tier holds no tokens). 404 when the id isn't the caller's; 409 when the instance isn't in a teardownable state.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
18916
+ "description": "POST /provisioning/instances/:id/teardown — request teardown of the caller's OWN instance. rank: any authenticated builder (own resource; archon may tear down any — the override is audited via the actor). Enqueues a 'teardown' intent; the runner executes it (web tier holds no tokens). 404 when the id isn't the caller's; 409 when the instance isn't in a teardownable state.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
18917
18917
  "x-rank": "any-builder",
18918
18918
  "x-source": "modules/provisioning/routes/provisioning.js",
18919
18919
  "parameters": [