@bongos/core 1.21.124 → 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 (44) hide show
  1. package/.bongos-core.json +91 -41
  2. package/bin/bongos.js +9 -0
  3. package/docs/api/openapi.json +4 -4
  4. package/docs/copy-inventory.md +128 -126
  5. package/docs/copy-registry.json +188 -170
  6. package/docs/module-api-changelog.md +4 -0
  7. package/docs/page-inventory.json +2 -1
  8. package/docs/page-readings.json +152 -143
  9. package/modules/hall-ui/public/goal-forest-lib.js +36 -0
  10. package/modules/hall-ui/public/goal-forest-render.js +50 -10
  11. package/modules/hall-ui/public/goals-page.js +19 -22
  12. package/modules/hall-ui/public/goals-render.js +6 -16
  13. package/modules/hall-ui/public/goals.css +13 -4
  14. package/modules/hall-ui/public/goals.html +22 -24
  15. package/modules/hall-ui/public/goals.states.json +19 -1
  16. package/modules/hall-ui/records/goal-dependency-forest.md +4 -3
  17. package/modules/onboarding/howto-guide.js +259 -0
  18. package/modules/platform-identity/invite-authz.js +1 -1
  19. package/modules/provisioning/catalog-bridge.js +1 -1
  20. package/modules/provisioning/provisioning.js +1 -1
  21. package/modules/provisioning/route-helpers.js +50 -0
  22. package/modules/provisioning/routes/disconnect.js +6 -5
  23. package/modules/provisioning/routes/env-manifest.js +11 -27
  24. package/modules/provisioning/routes/provisioning.js +58 -75
  25. package/package-lock.json +2 -2
  26. package/package.json +1 -1
  27. package/release-notes.json +24 -0
  28. package/scripts/gds/core-pin-sync.js +233 -0
  29. package/scripts/gds/module-assess-tests.js +40 -11
  30. package/scripts/gds/module-assess-version.js +10 -2
  31. package/scripts/gds/module-test-runner/README.md +44 -0
  32. package/scripts/gds/module-test-runner/module-tests.yml +87 -0
  33. package/scripts/gds/module-test-runner.js +358 -0
  34. package/src/module-api.js +1 -1
  35. package/tests/core_pin_sync.mjs +237 -0
  36. package/tests/goal_forest_lib.mjs +28 -0
  37. package/tests/goal_forest_page.mjs +106 -11
  38. package/tests/howto_guide.mjs +96 -0
  39. package/tests/module_assess_price_parity.mjs +2 -2
  40. package/tests/module_assess_score.mjs +13 -3
  41. package/tests/module_test_runner.mjs +294 -0
  42. package/tests/project_catalog_routes.mjs +1 -1
  43. package/tests/provisioning_module_selection.mjs +1 -1
  44. 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.124",
6
- "core_contract": "1.21.124",
7
- "source_commit": "695a6d5cad41a0d7a9e79cf58a7de3282b64daf3",
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-14T19:49:05.130Z",
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": 3124,
14
+ "functional_verbatim": 3133,
15
15
  "rules": 3,
16
16
  "gate_literals": 3,
17
17
  "gate": "passed"
18
18
  },
19
- "file_count": 3758,
20
- "tree_sha256": "97c9a1a6dc5c913bdacb02a6bbef3bef853e5babbbd971cd4f097403aa754be9",
19
+ "file_count": 3768,
20
+ "tree_sha256": "aaa23a52f299e82601309b1dc11007fe842e9686674c9c5cc96991f5412286e3",
21
21
  "files": [
22
22
  {
23
23
  "path": ".claude/skills/ask-for-help/SKILL.md",
@@ -312,7 +312,7 @@
312
312
  {
313
313
  "path": "bin/bongos.js",
314
314
  "mode": "0000755",
315
- "sha256": "20794ff2c632668d2a65ab1ca1a0e6d5b240c19769dbabf6999c7347d41f54e6"
315
+ "sha256": "f2a64dc742bb1f13938840c9f294ea7a60f1895dc9366200e33d53891e5e0fe5"
316
316
  },
317
317
  {
318
318
  "path": "clients/bongos-client/README.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": "1ead6d6c8697d53d3f324f3d5c1523f5c590ebcce268abcb2b29a367d6c34f17"
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",
@@ -7929,6 +7929,11 @@
7929
7929
  "mode": "0000644",
7930
7930
  "sha256": "22904d8c06daabb634b55f240b895c906e90ba4c6ed81e7a41cdbbb78635ace8"
7931
7931
  },
7932
+ {
7933
+ "path": "modules/onboarding/howto-guide.js",
7934
+ "mode": "0000644",
7935
+ "sha256": "18984c946d746da66ff7678379e9f49c9cfdcdb8f70d2acd852ab29c820baad0"
7936
+ },
7932
7937
  {
7933
7938
  "path": "modules/onboarding/module.json",
7934
7939
  "mode": "0000644",
@@ -8132,7 +8137,7 @@
8132
8137
  {
8133
8138
  "path": "modules/platform-identity/invite-authz.js",
8134
8139
  "mode": "0000644",
8135
- "sha256": "2eb5577450d3bc1d67b7eab9a13256889aca945c6ac6a6a0ca919e195952b7a1"
8140
+ "sha256": "dd54f1456e383de90c7440dbddeb3919718588bd4fb43621f1d192ae16061db5"
8136
8141
  },
8137
8142
  {
8138
8143
  "path": "modules/platform-identity/invite-notices.js",
@@ -8482,7 +8487,7 @@
8482
8487
  {
8483
8488
  "path": "modules/provisioning/catalog-bridge.js",
8484
8489
  "mode": "0000644",
8485
- "sha256": "6978ddde30cb0b378a2decbe18c2824817d8d57a941a8de6230483453e99acd7"
8490
+ "sha256": "ddc1228706e8f8342bbbd7705acae6a99f1e65e700e72c701c8afe62cd67d732"
8486
8491
  },
8487
8492
  {
8488
8493
  "path": "modules/provisioning/control-plane-guard.js",
@@ -8787,7 +8792,7 @@
8787
8792
  {
8788
8793
  "path": "modules/provisioning/provisioning.js",
8789
8794
  "mode": "0000644",
8790
- "sha256": "c99cfa7d071ece3f6d821709a8610baa25bb0323f7219016ac53d7e8ebb5e197"
8795
+ "sha256": "29ce4dc7dacfa6b9bdddf35ab80fd4b226c96ebcf9a4235297619defe0174119"
8791
8796
  },
8792
8797
  {
8793
8798
  "path": "modules/provisioning/public-refusal.js",
@@ -8819,6 +8824,11 @@
8819
8824
  "mode": "0000644",
8820
8825
  "sha256": "aa3e794ed904157f8549d6ab8ce28ae4a9fa3c2235758b59fc4bd3a66a3b7049"
8821
8826
  },
8827
+ {
8828
+ "path": "modules/provisioning/route-helpers.js",
8829
+ "mode": "0000644",
8830
+ "sha256": "8a4b7f5d8696a1f3e8c80f01e51663a98f14c6115fb76610b66d65e98e68545d"
8831
+ },
8822
8832
  {
8823
8833
  "path": "modules/provisioning/routes/body-validators.js",
8824
8834
  "mode": "0000644",
@@ -8842,12 +8852,12 @@
8842
8852
  {
8843
8853
  "path": "modules/provisioning/routes/disconnect.js",
8844
8854
  "mode": "0000644",
8845
- "sha256": "e817af6b207a45a61fe8b80e00328537bfeb629d0164a6125af1f8e459bc700f"
8855
+ "sha256": "eae0b840da488f3a9a9a1c0a4eb1de5a0f4fb72ec7120041af9101957e5661c0"
8846
8856
  },
8847
8857
  {
8848
8858
  "path": "modules/provisioning/routes/env-manifest.js",
8849
8859
  "mode": "0000644",
8850
- "sha256": "dbc156fa4cb2c74132a8034c481ec676f818f4f19139cb10d7d5d669e2e4bbd9"
8860
+ "sha256": "53778501a1265d9e43d49281052e6dbc52730a8fb06fb644ff7c20745d086a6e"
8851
8861
  },
8852
8862
  {
8853
8863
  "path": "modules/provisioning/routes/github-setup.js",
@@ -8862,7 +8872,7 @@
8862
8872
  {
8863
8873
  "path": "modules/provisioning/routes/provisioning.js",
8864
8874
  "mode": "0000644",
8865
- "sha256": "336ac83ef1fcdc91416bd6ca4d0cd040a2b926e0b695a9fbd528a5ab262a4974"
8875
+ "sha256": "55e3e478e7a1978e1e12c5d5fc551fa9b58d51e6d0e920a4d71ef02618e7b78f"
8866
8876
  },
8867
8877
  {
8868
8878
  "path": "modules/provisioning/routes/render-standup.js",
@@ -10472,12 +10482,12 @@
10472
10482
  {
10473
10483
  "path": "package-lock.json",
10474
10484
  "mode": "0000644",
10475
- "sha256": "31a3c967bca985d1dc5007279f9ed7e9352b0466128af6edd9debbf4e7b592bb"
10485
+ "sha256": "341426e0e35db5113dd017485f4479dc0674db124643388aeec9d883e113f7e3"
10476
10486
  },
10477
10487
  {
10478
10488
  "path": "package.json",
10479
10489
  "mode": "0000644",
10480
- "sha256": "4714b7161307f36c4ae4322e72f3670f6d958b1ab3b19f728a3f05f880898771"
10490
+ "sha256": "f5522e5c98564bbf8ffd3a4817e094732239f369a1850e1b743030a4b03d00b2"
10481
10491
  },
10482
10492
  {
10483
10493
  "path": "public-docs/index.html",
@@ -10497,7 +10507,7 @@
10497
10507
  {
10498
10508
  "path": "release-notes.json",
10499
10509
  "mode": "0000644",
10500
- "sha256": "aeb72646e01f775fe09e570e0f5e8dccf9733fc59cb79d5a67e6315f2195d88c"
10510
+ "sha256": "4fbea8b3dd2714eb5ec49751e18f66a0b995e94d64163edfbbf5fa837b196d81"
10501
10511
  },
10502
10512
  {
10503
10513
  "path": "scripts/cron/style_guide_audit.sh",
@@ -10874,6 +10884,11 @@
10874
10884
  "mode": "0000644",
10875
10885
  "sha256": "9dd80d2c37602c59cb75db0be02cfadc737fc64891a81d03f5be5f0ea5e35a27"
10876
10886
  },
10887
+ {
10888
+ "path": "scripts/gds/core-pin-sync.js",
10889
+ "mode": "0000644",
10890
+ "sha256": "f8a3a0ee2c0f4dbc2583603cd6e7b547140a5f8dc286b7c5f0b6dadd6096a002"
10891
+ },
10877
10892
  {
10878
10893
  "path": "scripts/gds/coreB-carve-proof.sh",
10879
10894
  "mode": "0000644",
@@ -11382,12 +11397,27 @@
11382
11397
  {
11383
11398
  "path": "scripts/gds/module-assess-tests.js",
11384
11399
  "mode": "0000644",
11385
- "sha256": "83dc9529be926f8e10043ab78d644d1a72096d02000623035798bd420b2b3261"
11400
+ "sha256": "802ee523248df153dace07e364b29516f6c6dcfcf8eaa301aa97bb723c135983"
11386
11401
  },
11387
11402
  {
11388
11403
  "path": "scripts/gds/module-assess-version.js",
11389
11404
  "mode": "0000644",
11390
- "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"
11391
11421
  },
11392
11422
  {
11393
11423
  "path": "scripts/gds/module.js",
@@ -12817,7 +12847,7 @@
12817
12847
  {
12818
12848
  "path": "src/module-api.js",
12819
12849
  "mode": "0000644",
12820
- "sha256": "792dad669f6c0d0b86433d206c837ca7ffcbf6a8b5b7c02bda8707c3dd3f7099"
12850
+ "sha256": "05cbabab7a15ea12d403cdce32d0e9accfb56fe1dc44c691dc5e8920933edaf0"
12821
12851
  },
12822
12852
  {
12823
12853
  "path": "src/module-loader/catalog.js",
@@ -13829,6 +13859,11 @@
13829
13859
  "mode": "0000644",
13830
13860
  "sha256": "a3cf352d5dc340b453b22513c28d8c0a439526862535f51f84b7aea2161c734f"
13831
13861
  },
13862
+ {
13863
+ "path": "tests/core_pin_sync.mjs",
13864
+ "mode": "0000644",
13865
+ "sha256": "ac3714b1b089ba2450f1125c74cbe5491deb4ddec1eec77c4c83a8a635a84d93"
13866
+ },
13832
13867
  {
13833
13868
  "path": "tests/core_update_banner.mjs",
13834
13869
  "mode": "0000644",
@@ -14652,12 +14687,12 @@
14652
14687
  {
14653
14688
  "path": "tests/goal_forest_lib.mjs",
14654
14689
  "mode": "0000644",
14655
- "sha256": "3b309358c195469bee0ab1ce95242914fbc0b1b3def0bb7de3d51dc09dd29c6a"
14690
+ "sha256": "a647398539783aed52b9cf7e5026ae6ab1e9f7337c5e7920d57c9cc106fd9581"
14656
14691
  },
14657
14692
  {
14658
14693
  "path": "tests/goal_forest_page.mjs",
14659
14694
  "mode": "0000644",
14660
- "sha256": "fdad13a1d265a3506229712816e244ebe026f449beabe3f98a5d652b36d01365"
14695
+ "sha256": "143033e1a1d6178a6d7da40be7b649f61c48997327a34d53d0f32d5e0df08e3a"
14661
14696
  },
14662
14697
  {
14663
14698
  "path": "tests/goal_graph.mjs",
@@ -15584,6 +15619,11 @@
15584
15619
  "mode": "0000644",
15585
15620
  "sha256": "7cd031d48b41424a654ddc66404cf112a21ecc7d558256ac27ec9357401f112c"
15586
15621
  },
15622
+ {
15623
+ "path": "tests/howto_guide.mjs",
15624
+ "mode": "0000644",
15625
+ "sha256": "8e9b206fdde738f289bc11e204852595e9128b523cfc20cd67e3e83fb60a2fac"
15626
+ },
15587
15627
  {
15588
15628
  "path": "tests/html_comment_nesting.mjs",
15589
15629
  "mode": "0000644",
@@ -16322,12 +16362,12 @@
16322
16362
  {
16323
16363
  "path": "tests/module_assess_price_parity.mjs",
16324
16364
  "mode": "0000644",
16325
- "sha256": "78f36a8bbbd948c4485dfd80df55e1ee053af1b510b4d98607c0d2545bcfa66c"
16365
+ "sha256": "b0cbedfe78c04c5e7ec55d1d50e607c8730784d1e820a2ec64ace05689968c2a"
16326
16366
  },
16327
16367
  {
16328
16368
  "path": "tests/module_assess_score.mjs",
16329
16369
  "mode": "0000644",
16330
- "sha256": "5255bc0c4e721190d588d5d6c812a8814788598929d38d3bbd87480371ee0b05"
16370
+ "sha256": "5e80628e696af499d95e7d59cc8c655902b9d3bdbe63473f68e573c0acaa2dd3"
16331
16371
  },
16332
16372
  {
16333
16373
  "path": "tests/module_assess_security.mjs",
@@ -16454,6 +16494,11 @@
16454
16494
  "mode": "0000644",
16455
16495
  "sha256": "0db12d802203780f489e9a6d7abf970dfcde9099ac7011fcaaa6c575336804cd"
16456
16496
  },
16497
+ {
16498
+ "path": "tests/module_test_runner.mjs",
16499
+ "mode": "0000644",
16500
+ "sha256": "e6fbb32fd8f43c748d89aca5a9025872582d1628e47de12c4ce4bca834c8be88"
16501
+ },
16457
16502
  {
16458
16503
  "path": "tests/module_toggle_restart.mjs",
16459
16504
  "mode": "0000644",
@@ -16937,7 +16982,7 @@
16937
16982
  {
16938
16983
  "path": "tests/project_catalog_routes.mjs",
16939
16984
  "mode": "0000644",
16940
- "sha256": "e19d61fb2734092104276d1f74f1cbdf691bfe4f920414c543a1c07e839725e6"
16985
+ "sha256": "52bb32c6e47676407b96e447969cd09cecf12d040d5aa0aef71d5f017b4b0a12"
16941
16986
  },
16942
16987
  {
16943
16988
  "path": "tests/project_door_ui.mjs",
@@ -17217,7 +17262,7 @@
17217
17262
  {
17218
17263
  "path": "tests/provisioning_module_selection.mjs",
17219
17264
  "mode": "0000644",
17220
- "sha256": "3be5d5409c5ffc223ac0ad9aad885fe63d4c8ffe0b11c3aa409d42bee5286932"
17265
+ "sha256": "6aa80d1dd73c9437429b37d8b8af375383a992d4fc8e68909c8346987f2ebc06"
17221
17266
  },
17222
17267
  {
17223
17268
  "path": "tests/provisioning_onboard_mode.mjs",
@@ -17234,6 +17279,11 @@
17234
17279
  "mode": "0000644",
17235
17280
  "sha256": "2a7769c430da7f81509659eb592c16abe7f95b2b3a3a447dac85fd10f0c780ee"
17236
17281
  },
17282
+ {
17283
+ "path": "tests/provisioning_project_owner_gate.mjs",
17284
+ "mode": "0000644",
17285
+ "sha256": "c632c7fd2b797f40cfda0e62be35f10769c836bc13164ecbc10cb28ab63f8320"
17286
+ },
17237
17287
  {
17238
17288
  "path": "tests/provisioning_public_refusal.mjs",
17239
17289
  "mode": "0000644",
package/bin/bongos.js CHANGED
@@ -190,6 +190,15 @@ function main(argv) {
190
190
  return 0;
191
191
  }
192
192
 
193
+ // Run the core the checkout PINS (task 1004632). A task worktree has no node_modules
194
+ // of its own, so after a core update lands it resolves the main checkout's older core
195
+ // and the ship fails on a bug the pin already fixed. `ship` installs the pinned core
196
+ // into the checkout and re-runs under it; scripts/gds/core-pin-sync.js.
197
+ if (!COMPILED && verb === 'ship') {
198
+ const synced = require('../scripts/gds/core-pin-sync.js').ensurePinnedCore({ coreRoot: REPO_ROOT, argv });
199
+ if (synced != null) return synced;
200
+ }
201
+
193
202
  // `bongos exec <relpath> [args]` — run a core script by its package-relative path (see above).
194
203
  if (verb === 'exec') {
195
204
  if (COMPILED) {
@@ -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": [