@bongos/core 1.21.120 → 1.21.122
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 +54 -39
- package/.claude/skills/builder-ship/SKILL.md +2 -0
- package/clients/bongos-client/index.d.ts +2 -2
- package/docs/adr/0199-restart-an-unreachable-active-project.md +4 -0
- package/docs/adr/0369-ship-mode-decides-who-starts-a-ship-not-how-it-lands.md +1 -1
- package/docs/api/openapi.json +7 -3
- package/docs/copy-inventory.md +13 -11
- package/docs/copy-registry.json +30 -12
- package/docs/module-api-changelog.md +4 -0
- package/docs/page-readings.json +3 -3
- package/modules/government/protected-surfaces.json +2 -0
- package/modules/hall-ui/public/modules.js +29 -3
- package/modules/lifecycle/routes/project-settings.js +22 -1
- package/modules/provisioning/provisioning.js +5 -3
- package/modules/public-landing/public/projects.html +4 -2
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/release-notes.json +12 -0
- package/scripts/gds/exec-path-guard.js +2 -2
- package/scripts/gds/provision.js +4 -2
- package/scripts/gds/ship-flow.js +22 -2
- package/scripts/gds/ship-mode-ask.js +138 -0
- package/scripts/gds/ship.js +6 -0
- package/src/bongos/module-scope-map.js +3 -1
- package/src/bongos/routes/modules.js +22 -3
- package/src/module-api.js +1 -1
- package/src/module-loader/loader.js +42 -2
- package/tests/government_protected_surfaces.mjs +9 -1
- package/tests/hall_catalog_world.mjs +1 -1
- package/tests/module_loader.mjs +31 -0
- package/tests/module_toggle_restart.mjs +73 -0
- package/tests/projects_hub_pre_uat.mjs +4 -1
- package/tests/provision_restart.mjs +3 -2
- package/tests/provisioning_restart.mjs +6 -3
- package/tests/provisioning_settings_apply.mjs +2 -2
- package/tests/ship_mode_first_ship.mjs +219 -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.
|
|
6
|
-
"core_contract": "1.21.
|
|
7
|
-
"source_commit": "
|
|
5
|
+
"core_version": "1.21.122",
|
|
6
|
+
"core_contract": "1.21.122",
|
|
7
|
+
"source_commit": "1744caf4412e029c7cf9b465a9fae581bc2deea7",
|
|
8
8
|
"source_ref": "HEAD",
|
|
9
|
-
"built_at": "2026-10-
|
|
9
|
+
"built_at": "2026-10-14T19:02:19.295Z",
|
|
10
10
|
"redaction": {
|
|
11
11
|
"model": "docs-redacted+functional-verbatim",
|
|
12
12
|
"docs_redacted": 605,
|
|
13
13
|
"agent_docs_stubbed": 28,
|
|
14
|
-
"functional_verbatim":
|
|
14
|
+
"functional_verbatim": 3120,
|
|
15
15
|
"rules": 3,
|
|
16
16
|
"gate_literals": 3,
|
|
17
17
|
"gate": "passed"
|
|
18
18
|
},
|
|
19
|
-
"file_count":
|
|
20
|
-
"tree_sha256": "
|
|
19
|
+
"file_count": 3754,
|
|
20
|
+
"tree_sha256": "df175c2d7b99fee7204cf032575b41a9fa13988b1a3635717568822cf1d84d6b",
|
|
21
21
|
"files": [
|
|
22
22
|
{
|
|
23
23
|
"path": ".claude/skills/ask-for-help/SKILL.md",
|
|
@@ -107,7 +107,7 @@
|
|
|
107
107
|
{
|
|
108
108
|
"path": ".claude/skills/builder-ship/SKILL.md",
|
|
109
109
|
"mode": "0000644",
|
|
110
|
-
"sha256": "
|
|
110
|
+
"sha256": "1053b6160f72c6f78d9608b8431ba59b707fb310493fdb24ea52efd52f1ef825"
|
|
111
111
|
},
|
|
112
112
|
{
|
|
113
113
|
"path": ".claude/skills/builder-stage/SKILL.md",
|
|
@@ -337,7 +337,7 @@
|
|
|
337
337
|
{
|
|
338
338
|
"path": "clients/bongos-client/index.d.ts",
|
|
339
339
|
"mode": "0000644",
|
|
340
|
-
"sha256": "
|
|
340
|
+
"sha256": "c13884fb0bd175f8bc9745150b2ca5ed254dd0ad14bcaa63511cf892cdbaec36"
|
|
341
341
|
},
|
|
342
342
|
{
|
|
343
343
|
"path": "clients/bongos-client/index.mjs",
|
|
@@ -1462,7 +1462,7 @@
|
|
|
1462
1462
|
{
|
|
1463
1463
|
"path": "docs/adr/0199-restart-an-unreachable-active-project.md",
|
|
1464
1464
|
"mode": "0000644",
|
|
1465
|
-
"sha256": "
|
|
1465
|
+
"sha256": "a1dae8f4126ab9cfff7390bbde17a501ec0fe0b17f5c49ce2d0b4bd4e7735d9b"
|
|
1466
1466
|
},
|
|
1467
1467
|
{
|
|
1468
1468
|
"path": "docs/adr/0200-re-point-a-bring-your-own-domain.md",
|
|
@@ -2307,7 +2307,7 @@
|
|
|
2307
2307
|
{
|
|
2308
2308
|
"path": "docs/adr/0369-ship-mode-decides-who-starts-a-ship-not-how-it-lands.md",
|
|
2309
2309
|
"mode": "0000644",
|
|
2310
|
-
"sha256": "
|
|
2310
|
+
"sha256": "a0dba98c2dfe34ed6110f2d813fef346ad8adf7430f2b7ab4da38be72c37f7c8"
|
|
2311
2311
|
},
|
|
2312
2312
|
{
|
|
2313
2313
|
"path": "docs/adr/0370-a-repo-we-create-is-private.md",
|
|
@@ -2382,7 +2382,7 @@
|
|
|
2382
2382
|
{
|
|
2383
2383
|
"path": "docs/api/openapi.json",
|
|
2384
2384
|
"mode": "0000644",
|
|
2385
|
-
"sha256": "
|
|
2385
|
+
"sha256": "b8d8cae75596996b38203b5b73b8fc4f5cfc4afa8fa6a170541131fdfed924ea"
|
|
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": "
|
|
2410
|
+
"sha256": "2f6c0fff979e7a52a1dff20184291da110751084197f9619497bc5a8668c2c0f"
|
|
2411
2411
|
},
|
|
2412
2412
|
{
|
|
2413
2413
|
"path": "docs/copy-registry.json",
|
|
2414
2414
|
"mode": "0000644",
|
|
2415
|
-
"sha256": "
|
|
2415
|
+
"sha256": "2fa52a4d4411a29e5aadeb0a03898a32144834527c7e84804f4c9df5f584cab6"
|
|
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": "
|
|
2925
|
+
"sha256": "05a2ac9355a782e35f6af18287d0395ece73a55b0541f680106c250d1f604b63"
|
|
2926
2926
|
},
|
|
2927
2927
|
{
|
|
2928
2928
|
"path": "docs/modules-contract.md",
|
|
@@ -3012,7 +3012,7 @@
|
|
|
3012
3012
|
{
|
|
3013
3013
|
"path": "docs/page-readings.json",
|
|
3014
3014
|
"mode": "0000644",
|
|
3015
|
-
"sha256": "
|
|
3015
|
+
"sha256": "d59a98a2c166e276275156dfb13887c9147f1596ca65fb777c97e988dd23bf25"
|
|
3016
3016
|
},
|
|
3017
3017
|
{
|
|
3018
3018
|
"path": "docs/project-context.template.md",
|
|
@@ -5297,7 +5297,7 @@
|
|
|
5297
5297
|
{
|
|
5298
5298
|
"path": "modules/government/protected-surfaces.json",
|
|
5299
5299
|
"mode": "0000644",
|
|
5300
|
-
"sha256": "
|
|
5300
|
+
"sha256": "9aedf10b3cb611343baf96662e6f79d45ed2218b83abfb3ad8c03536c722d37c"
|
|
5301
5301
|
},
|
|
5302
5302
|
{
|
|
5303
5303
|
"path": "modules/government/ranks.js",
|
|
@@ -6132,7 +6132,7 @@
|
|
|
6132
6132
|
{
|
|
6133
6133
|
"path": "modules/hall-ui/public/modules.js",
|
|
6134
6134
|
"mode": "0000644",
|
|
6135
|
-
"sha256": "
|
|
6135
|
+
"sha256": "a42b39265d8cfc1a191fe203c6d48c7da111e231ae33da731ebe5a9aa7cd656c"
|
|
6136
6136
|
},
|
|
6137
6137
|
{
|
|
6138
6138
|
"path": "modules/hall-ui/public/modules.states.json",
|
|
@@ -7622,7 +7622,7 @@
|
|
|
7622
7622
|
{
|
|
7623
7623
|
"path": "modules/lifecycle/routes/project-settings.js",
|
|
7624
7624
|
"mode": "0000644",
|
|
7625
|
-
"sha256": "
|
|
7625
|
+
"sha256": "67d28a56701e45e176236fc0eae3ece9e349cc5c7b61cf6e7b8267afe304ade5"
|
|
7626
7626
|
},
|
|
7627
7627
|
{
|
|
7628
7628
|
"path": "modules/lifecycle/routes/recommendations.js",
|
|
@@ -8782,7 +8782,7 @@
|
|
|
8782
8782
|
{
|
|
8783
8783
|
"path": "modules/provisioning/provisioning.js",
|
|
8784
8784
|
"mode": "0000644",
|
|
8785
|
-
"sha256": "
|
|
8785
|
+
"sha256": "c99cfa7d071ece3f6d821709a8610baa25bb0323f7219016ac53d7e8ebb5e197"
|
|
8786
8786
|
},
|
|
8787
8787
|
{
|
|
8788
8788
|
"path": "modules/provisioning/public-refusal.js",
|
|
@@ -9667,7 +9667,7 @@
|
|
|
9667
9667
|
{
|
|
9668
9668
|
"path": "modules/public-landing/public/projects.html",
|
|
9669
9669
|
"mode": "0000644",
|
|
9670
|
-
"sha256": "
|
|
9670
|
+
"sha256": "ead1660e07f5bd8cf34008318e1c729ce39f5f4717e104be4cd2e64942a6b264"
|
|
9671
9671
|
},
|
|
9672
9672
|
{
|
|
9673
9673
|
"path": "modules/public-landing/public/projects.probes.json",
|
|
@@ -10467,12 +10467,12 @@
|
|
|
10467
10467
|
{
|
|
10468
10468
|
"path": "package-lock.json",
|
|
10469
10469
|
"mode": "0000644",
|
|
10470
|
-
"sha256": "
|
|
10470
|
+
"sha256": "0698dfed8aaee5032ad705115bcbc515cc7328a78c31a30018a2e2f5df0cf1ca"
|
|
10471
10471
|
},
|
|
10472
10472
|
{
|
|
10473
10473
|
"path": "package.json",
|
|
10474
10474
|
"mode": "0000644",
|
|
10475
|
-
"sha256": "
|
|
10475
|
+
"sha256": "aefc81df15571d208d96577a7ade7189f1d1e064ae9a1af132b0725f871fcb40"
|
|
10476
10476
|
},
|
|
10477
10477
|
{
|
|
10478
10478
|
"path": "public-docs/index.html",
|
|
@@ -10492,7 +10492,7 @@
|
|
|
10492
10492
|
{
|
|
10493
10493
|
"path": "release-notes.json",
|
|
10494
10494
|
"mode": "0000644",
|
|
10495
|
-
"sha256": "
|
|
10495
|
+
"sha256": "43b16f9fbd2c3834c02bd141ce4b9e737003d1c42112e6cb607e7a118e29e7dd"
|
|
10496
10496
|
},
|
|
10497
10497
|
{
|
|
10498
10498
|
"path": "scripts/cron/style_guide_audit.sh",
|
|
@@ -11002,7 +11002,7 @@
|
|
|
11002
11002
|
{
|
|
11003
11003
|
"path": "scripts/gds/exec-path-guard.js",
|
|
11004
11004
|
"mode": "0000644",
|
|
11005
|
-
"sha256": "
|
|
11005
|
+
"sha256": "cda9e125cfb2cb354c7d4e20065c36712a75955d3981203012c2334d0ce637ae"
|
|
11006
11006
|
},
|
|
11007
11007
|
{
|
|
11008
11008
|
"path": "scripts/gds/feedback-send.js",
|
|
@@ -11587,7 +11587,7 @@
|
|
|
11587
11587
|
{
|
|
11588
11588
|
"path": "scripts/gds/provision.js",
|
|
11589
11589
|
"mode": "0000644",
|
|
11590
|
-
"sha256": "
|
|
11590
|
+
"sha256": "ea11cc49dbc298c8b3ed4ad88e25a3acfbba65fcd65727c9b47c43ee41e24437"
|
|
11591
11591
|
},
|
|
11592
11592
|
{
|
|
11593
11593
|
"path": "scripts/gds/publish-credential-check.js",
|
|
@@ -11997,7 +11997,7 @@
|
|
|
11997
11997
|
{
|
|
11998
11998
|
"path": "scripts/gds/ship-flow.js",
|
|
11999
11999
|
"mode": "0000644",
|
|
12000
|
-
"sha256": "
|
|
12000
|
+
"sha256": "bb8edf9166b1c452b87d75e009d7404758bcba6ea58aa9011848ec44e761bb52"
|
|
12001
12001
|
},
|
|
12002
12002
|
{
|
|
12003
12003
|
"path": "scripts/gds/ship-git.js",
|
|
@@ -12044,6 +12044,11 @@
|
|
|
12044
12044
|
"mode": "0000644",
|
|
12045
12045
|
"sha256": "8d37d5c6cbaa1ca0e8363fab6c34159d1e16922fdae11d4ffc17b4d9e2c7f795"
|
|
12046
12046
|
},
|
|
12047
|
+
{
|
|
12048
|
+
"path": "scripts/gds/ship-mode-ask.js",
|
|
12049
|
+
"mode": "0000644",
|
|
12050
|
+
"sha256": "7a489ea223b4fa1d7a3b4ee1076c9a0cb65d6d929e9a5a6e0b8e403e15266afc"
|
|
12051
|
+
},
|
|
12047
12052
|
{
|
|
12048
12053
|
"path": "scripts/gds/ship-preflight-steps.js",
|
|
12049
12054
|
"mode": "0000644",
|
|
@@ -12082,7 +12087,7 @@
|
|
|
12082
12087
|
{
|
|
12083
12088
|
"path": "scripts/gds/ship.js",
|
|
12084
12089
|
"mode": "0000644",
|
|
12085
|
-
"sha256": "
|
|
12090
|
+
"sha256": "9f00804212ef485fd8cfd02be19cddb4be2570a34aa2a284f237940aff17753e"
|
|
12086
12091
|
},
|
|
12087
12092
|
{
|
|
12088
12093
|
"path": "scripts/gds/shipping-mode.js",
|
|
@@ -12562,7 +12567,7 @@
|
|
|
12562
12567
|
{
|
|
12563
12568
|
"path": "src/bongos/module-scope-map.js",
|
|
12564
12569
|
"mode": "0000644",
|
|
12565
|
-
"sha256": "
|
|
12570
|
+
"sha256": "1b0cec97fbdf2c14f48354741f5537a7db3dbc947e7b7182eb2aa9173cfa00dc"
|
|
12566
12571
|
},
|
|
12567
12572
|
{
|
|
12568
12573
|
"path": "src/bongos/module-store.js",
|
|
@@ -12722,7 +12727,7 @@
|
|
|
12722
12727
|
{
|
|
12723
12728
|
"path": "src/bongos/routes/modules.js",
|
|
12724
12729
|
"mode": "0000644",
|
|
12725
|
-
"sha256": "
|
|
12730
|
+
"sha256": "e6b1b25371695b4aa959f5fdcece31869e827221f0205d1797c8332628d7b6a2"
|
|
12726
12731
|
},
|
|
12727
12732
|
{
|
|
12728
12733
|
"path": "src/bongos/routes/my-sessions.js",
|
|
@@ -12802,7 +12807,7 @@
|
|
|
12802
12807
|
{
|
|
12803
12808
|
"path": "src/module-api.js",
|
|
12804
12809
|
"mode": "0000644",
|
|
12805
|
-
"sha256": "
|
|
12810
|
+
"sha256": "d49bdec14177f77cd4e6dd63ac2532a095565373c0948d9d7b91c809e4e3e6f3"
|
|
12806
12811
|
},
|
|
12807
12812
|
{
|
|
12808
12813
|
"path": "src/module-loader/catalog.js",
|
|
@@ -12812,7 +12817,7 @@
|
|
|
12812
12817
|
{
|
|
12813
12818
|
"path": "src/module-loader/loader.js",
|
|
12814
12819
|
"mode": "0000644",
|
|
12815
|
-
"sha256": "
|
|
12820
|
+
"sha256": "04458c645d876011324e5ae11011774699c06e39ff2fa1ba1cf58a2d2775f887"
|
|
12816
12821
|
},
|
|
12817
12822
|
{
|
|
12818
12823
|
"path": "src/module-loader/manifest-schema.js",
|
|
@@ -14992,7 +14997,7 @@
|
|
|
14992
14997
|
{
|
|
14993
14998
|
"path": "tests/government_protected_surfaces.mjs",
|
|
14994
14999
|
"mode": "0000644",
|
|
14995
|
-
"sha256": "
|
|
15000
|
+
"sha256": "3518806d6b065029677e77a242604b6dc85bfd28537c2d109dacaedd29ac6d49"
|
|
14996
15001
|
},
|
|
14997
15002
|
{
|
|
14998
15003
|
"path": "tests/government_rank_sync.mjs",
|
|
@@ -15267,7 +15272,7 @@
|
|
|
15267
15272
|
{
|
|
15268
15273
|
"path": "tests/hall_catalog_world.mjs",
|
|
15269
15274
|
"mode": "0000644",
|
|
15270
|
-
"sha256": "
|
|
15275
|
+
"sha256": "8aad2dd0521d212dfdb21a4fe4d2c341ddc94796bd4bc9b871ac1b5b25cc596d"
|
|
15271
15276
|
},
|
|
15272
15277
|
{
|
|
15273
15278
|
"path": "tests/hall_city.mjs",
|
|
@@ -16362,7 +16367,7 @@
|
|
|
16362
16367
|
{
|
|
16363
16368
|
"path": "tests/module_loader.mjs",
|
|
16364
16369
|
"mode": "0000644",
|
|
16365
|
-
"sha256": "
|
|
16370
|
+
"sha256": "a2a029afd86336a83deeb79f0856473470024fa94da01e1c556094b8e6d042d5"
|
|
16366
16371
|
},
|
|
16367
16372
|
{
|
|
16368
16373
|
"path": "tests/module_manifest.mjs",
|
|
@@ -16434,6 +16439,11 @@
|
|
|
16434
16439
|
"mode": "0000644",
|
|
16435
16440
|
"sha256": "0db12d802203780f489e9a6d7abf970dfcde9099ac7011fcaaa6c575336804cd"
|
|
16436
16441
|
},
|
|
16442
|
+
{
|
|
16443
|
+
"path": "tests/module_toggle_restart.mjs",
|
|
16444
|
+
"mode": "0000644",
|
|
16445
|
+
"sha256": "31b96e448b751a6f81891286e0dee96eb13e543d029787c5520f785fe2f45291"
|
|
16446
|
+
},
|
|
16437
16447
|
{
|
|
16438
16448
|
"path": "tests/module_update.mjs",
|
|
16439
16449
|
"mode": "0000644",
|
|
@@ -17017,7 +17027,7 @@
|
|
|
17017
17027
|
{
|
|
17018
17028
|
"path": "tests/projects_hub_pre_uat.mjs",
|
|
17019
17029
|
"mode": "0000644",
|
|
17020
|
-
"sha256": "
|
|
17030
|
+
"sha256": "d18b4f99bb89f935d594020df107c7e7a4db3ea1075a4b48dce33b7312412bb8"
|
|
17021
17031
|
},
|
|
17022
17032
|
{
|
|
17023
17033
|
"path": "tests/projects_hub_render_connect.mjs",
|
|
@@ -17102,7 +17112,7 @@
|
|
|
17102
17112
|
{
|
|
17103
17113
|
"path": "tests/provision_restart.mjs",
|
|
17104
17114
|
"mode": "0000644",
|
|
17105
|
-
"sha256": "
|
|
17115
|
+
"sha256": "deb9ee70fd9fdc70b25a5dd97ed76200ab10daa7eef3f6ea61bb6d5b7bb50494"
|
|
17106
17116
|
},
|
|
17107
17117
|
{
|
|
17108
17118
|
"path": "tests/provision_settings_apply.mjs",
|
|
@@ -17232,7 +17242,7 @@
|
|
|
17232
17242
|
{
|
|
17233
17243
|
"path": "tests/provisioning_restart.mjs",
|
|
17234
17244
|
"mode": "0000644",
|
|
17235
|
-
"sha256": "
|
|
17245
|
+
"sha256": "5cd2eda5b5e7dd09e96694f7973672c557daa8c8c5197e4dc2ee90eaa30dff21"
|
|
17236
17246
|
},
|
|
17237
17247
|
{
|
|
17238
17248
|
"path": "tests/provisioning_runner_drift_notice.mjs",
|
|
@@ -17247,7 +17257,7 @@
|
|
|
17247
17257
|
{
|
|
17248
17258
|
"path": "tests/provisioning_settings_apply.mjs",
|
|
17249
17259
|
"mode": "0000644",
|
|
17250
|
-
"sha256": "
|
|
17260
|
+
"sha256": "2a5645624375b0d4386e12af1e437bdefc41b60d0d3f0b7b2c1a6c53f6a2e06f"
|
|
17251
17261
|
},
|
|
17252
17262
|
{
|
|
17253
17263
|
"path": "tests/provisioning_settings_env.mjs",
|
|
@@ -17934,6 +17944,11 @@
|
|
|
17934
17944
|
"mode": "0000644",
|
|
17935
17945
|
"sha256": "aee20a5f6e2998d18f605b91d1eb1019e8ada824135759b29633caa3153d9255"
|
|
17936
17946
|
},
|
|
17947
|
+
{
|
|
17948
|
+
"path": "tests/ship_mode_first_ship.mjs",
|
|
17949
|
+
"mode": "0000644",
|
|
17950
|
+
"sha256": "361d6c7a364c0c1f6fb8266f887fe25fc357250e4585b438fdbf3fb3fafa6849"
|
|
17951
|
+
},
|
|
17937
17952
|
{
|
|
17938
17953
|
"path": "tests/ship_post_land_verify.mjs",
|
|
17939
17954
|
"mode": "0000644",
|
|
@@ -83,6 +83,8 @@ The CLI drives a **three-state lifecycle** with a subagent grader between states
|
|
|
83
83
|
`--notes-file` is refused rather than resolved by precedence, so nothing you
|
|
84
84
|
wrote is dropped without a word.
|
|
85
85
|
|
|
86
|
+
**If the ship stops with `[otb-ask-ship-mode]` (exit 5), ask the person, once** (task 1004630, [ADR 0369](../../../docs/adr/0369-ship-mode-decides-who-starts-a-ship-not-how-it-lands.md)). The project never chose who starts a ship, so its first ship asks. Nothing has resolved and the claim is still active. Put the question to the person with your question tool if you have one — two options, **Auto (recommended)** first, then **Manual**, each with the one-line meaning the ship printed — and re-run the exact command it printed with `--ship-mode auto` or `--ship-mode manual`. That saves the answer for the whole project and the ship carries on; it never asks again. Never answer it yourself: the choice is the owner's. An unattended run is never asked (it ships on the default, Auto).
|
|
87
|
+
|
|
86
88
|
**Never merge a task branch to main before running `ship.js`.** `ship.js` diffs the claim branch against `main`; an already-merged branch yields an empty diff, and the only exits are `--allow-empty` (dead-ends the task at `completed`, requiring an Archon-only confirm) or reverting the merge. Ship from the branch, then let `ship.js` land it. (This trap was hit on tasks 1002417 and 1002419, producing blockers 1000081/1000082 and an ~8.5-hour stall.)
|
|
87
89
|
|
|
88
90
|
5. **Render the completion card — it IS the summary; do NOT write a prose recap (task 1270).**
|
|
@@ -129,7 +129,7 @@ export interface GetPageNotesSiteResponse { notes: unknown }
|
|
|
129
129
|
export interface GetProfilesHandleResponse { account: unknown; cross_project: unknown }
|
|
130
130
|
export interface GetProjectManageLinkResponse { ok: boolean; link: unknown }
|
|
131
131
|
export interface GetProjectSettingsResponse { rows: unknown }
|
|
132
|
-
export interface GetProjectSettingsShipModeResponse { mode: unknown; chosen: unknown; source: unknown; sentence: unknown; choices: unknown }
|
|
132
|
+
export interface GetProjectSettingsShipModeResponse { mode: unknown; chosen: unknown; source: unknown; sentence: unknown; choices: unknown; can_change: unknown }
|
|
133
133
|
export interface GetProjectsFeaturedResponse { projects: unknown; page: PageInfo }
|
|
134
134
|
export interface GetProjectsResponse { projects: unknown }
|
|
135
135
|
export interface GetProvisioningFleetResponse { instances: unknown; capacity: unknown }
|
|
@@ -440,7 +440,7 @@ export interface PostMinglePairsIdDecideResponse { pair: unknown }
|
|
|
440
440
|
export interface PostMingleRoundRequest { limit?: number }
|
|
441
441
|
export interface PostMingleRoundResponse { paired: unknown; count: unknown; skipped: unknown }
|
|
442
442
|
export interface PostModulesKeyEnableRequest { enabled?: unknown }
|
|
443
|
-
export interface PostModulesKeyEnableResponse { ok: boolean; key: unknown; enabled: unknown; effective: unknown; source: unknown; note: unknown }
|
|
443
|
+
export interface PostModulesKeyEnableResponse { ok: boolean; key: unknown; enabled: unknown; effective: unknown; source: unknown; restart_pending: unknown; note: unknown }
|
|
444
444
|
export interface PostModulesKeySubmitRequest { signed_by?: string }
|
|
445
445
|
export interface PostModulesKeySubmitResponse { ok: boolean; submission: unknown }
|
|
446
446
|
export interface PostMyProjectsClientIdLeaveResponse { ok: boolean; left: unknown }
|
|
@@ -47,3 +47,7 @@ None of them came with an action. The pre-UAT hub review (2026-08-24) recorded w
|
|
|
47
47
|
- **Reporting `healthy:true` as "answering again" on a domained instance** — the loopback probe cannot see what the sweep sees; the card would still say unreachable and the event would read as a lie.
|
|
48
48
|
- **Retrying a restart that left the project down** — restarting a broken instance four more times fixes nothing and ends by overwriting the owner's action with an `error_note`.
|
|
49
49
|
- **Showing the door on every active card** — an always-available Restart invites downtime on projects that are fine, and there is no reading behind it to act on.
|
|
50
|
+
|
|
51
|
+
## Amendment (task 1004463, 2026-10-14)
|
|
52
|
+
|
|
53
|
+
The platform's own row (`control-plane`) joins `RESTART_SHAPES`, and decision 7's door shows on it whenever it is `active` with nothing in flight, healthy or not. It is the one exception to "no Restart door on every active card": a module switched on or off in that hall mounts its routes and starts its pollers only at the next restart (the Modules toggle now says so, `restartPendingFor` in `src/module-loader/loader.js`), and the owner's only other way to restart the control plane was a shell on the box. `control-plane-guard.js` already allowed `restart` on that row; the runner routes it to the control-plane executor as it does `settings-apply`.
|
|
@@ -33,7 +33,7 @@ It lives in `project_settings` (migration `core_231`), so it needs no migration.
|
|
|
33
33
|
|
|
34
34
|
- This task adds the setting only. Behaviour follows in the dependent tasks:
|
|
35
35
|
- the creation wizard asks for it (task 1004629);
|
|
36
|
-
- the first ship asks once if nobody has chosen (task 1004630);
|
|
36
|
+
- the first ship asks once if nobody has chosen (task 1004630). The ship stops before anything resolves and exits 5 with an `[otb-ask-ship-mode]` ask; the AI puts the two choices to the person and re-runs with `--ship-mode auto|manual`, which saves the answer. It never asks a caller who cannot change settings (`can_change` on the read), an unattended run, or when the mode cannot be read; those ship on the default;
|
|
37
37
|
- the AI obeys it (task 1004631).
|
|
38
38
|
- **How the wizard's answer reaches the project (task 1004629).** The wizard runs on the platform, and the new project's database is out of its reach. So the answer travels the way the founding marker does: the platform keeps it on the new project's record, sends it to the project at startup, and the project reads it as a *chosen* mode (`source: 'wizard'`) only while its own setting is unset. The settings page and the CLI write that setting, so a later change always wins. Nothing is written into the project's database on its behalf.
|
|
39
39
|
- A database read failure answers Auto rather than blocking a ship. That matches the setting's default, and blocking would be the worse outcome for a person mid-task.
|
package/docs/api/openapi.json
CHANGED
|
@@ -16489,7 +16489,7 @@
|
|
|
16489
16489
|
"project-settings"
|
|
16490
16490
|
],
|
|
16491
16491
|
"summary": "GET /project-settings/ship-mode",
|
|
16492
|
-
"description": "GET /project-settings/ship-mode — the ship mode alone, for the CLI and the AI. rank: any signed-in builder. Unlike the full settings read this carries no reward internals or file paths an agent could not already read, and every builder's AI session must know whether to ship on its own or stop and ask — gating it Metic+ would leave a newcomer's session guessing.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
16492
|
+
"description": "GET /project-settings/ship-mode — the ship mode alone, for the CLI and the AI. rank: any signed-in builder. Unlike the full settings read this carries no reward internals or file paths an agent could not already read, and every builder's AI session must know whether to ship on its own or stop and ask — gating it Metic+ would leave a newcomer's session guessing. can_change (task 1004630): whether THIS caller holds project.settings.manage, so the first-ship question is put only to someone who can answer it. null when authority could not be established; the CLI then asks, and a refused save lets the ship go on. Cosmetic only — the PATCH below keeps its own gate (ADR 0016).\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
16493
16493
|
"x-rank": "any-builder",
|
|
16494
16494
|
"x-source": "modules/lifecycle/routes/project-settings.js",
|
|
16495
16495
|
"responses": {
|
|
@@ -27665,14 +27665,16 @@
|
|
|
27665
27665
|
"chosen": {},
|
|
27666
27666
|
"source": {},
|
|
27667
27667
|
"sentence": {},
|
|
27668
|
-
"choices": {}
|
|
27668
|
+
"choices": {},
|
|
27669
|
+
"can_change": {}
|
|
27669
27670
|
},
|
|
27670
27671
|
"required": [
|
|
27671
27672
|
"mode",
|
|
27672
27673
|
"chosen",
|
|
27673
27674
|
"source",
|
|
27674
27675
|
"sentence",
|
|
27675
|
-
"choices"
|
|
27676
|
+
"choices",
|
|
27677
|
+
"can_change"
|
|
27676
27678
|
]
|
|
27677
27679
|
},
|
|
27678
27680
|
"GetProjectsFeaturedResponse": {
|
|
@@ -32561,6 +32563,7 @@
|
|
|
32561
32563
|
"enabled": {},
|
|
32562
32564
|
"effective": {},
|
|
32563
32565
|
"source": {},
|
|
32566
|
+
"restart_pending": {},
|
|
32564
32567
|
"note": {}
|
|
32565
32568
|
},
|
|
32566
32569
|
"required": [
|
|
@@ -32569,6 +32572,7 @@
|
|
|
32569
32572
|
"enabled",
|
|
32570
32573
|
"effective",
|
|
32571
32574
|
"source",
|
|
32575
|
+
"restart_pending",
|
|
32572
32576
|
"note"
|
|
32573
32577
|
]
|
|
32574
32578
|
},
|
package/docs/copy-inventory.md
CHANGED
|
@@ -4,13 +4,13 @@
|
|
|
4
4
|
> Deterministic on a given tree — regenerate and commit rather than hand-editing.
|
|
5
5
|
> Machine-readable twin: [`copy-registry.json`](copy-registry.json).
|
|
6
6
|
|
|
7
|
-
**
|
|
7
|
+
**2722 strings** across 3 surfaces · 2302 distinct pieces of copy · 2722 certain, 0 heuristic · 240 shown in more than one place.
|
|
8
8
|
|
|
9
9
|
## Surfaces
|
|
10
10
|
|
|
11
11
|
| surface | lives at | files | strings |
|
|
12
12
|
|---|---|---|---|
|
|
13
|
-
| `builders-hall` | `modules/hall-ui/public` | 143 |
|
|
13
|
+
| `builders-hall` | `modules/hall-ui/public` | 143 | 1914 |
|
|
14
14
|
| `status-dashboard` | `modules/status-ui/public` | 4 | 100 |
|
|
15
15
|
| `landing` | `modules/public-landing/public` | 9 | 708 |
|
|
16
16
|
|
|
@@ -78,7 +78,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
78
78
|
| `8226c979db4d` | 3x | Not now | modules/hall-ui/public/collab.js:668, modules/hall-ui/public/paintbrush.js:119, modules/hall-ui/public/paintbrush.js:183 |
|
|
79
79
|
| … | | _200 more in the JSON registry_ | |
|
|
80
80
|
|
|
81
|
-
## `builders-hall` —
|
|
81
|
+
## `builders-hall` — 1914 strings
|
|
82
82
|
|
|
83
83
|
| id | conf | text | where |
|
|
84
84
|
|---|---|---|---|
|
|
@@ -356,7 +356,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
356
356
|
| `90691bceaf68` | certain | Could not load | `modules/hall-ui/public/project-settings.js:284` |
|
|
357
357
|
| `90691bceaf68` | certain | Could not load | `modules/hall-ui/public/task.js:1022` |
|
|
358
358
|
| `589a4cfc5442` | certain | Could not load idea {…}. | `modules/hall-ui/public/ideas.js:1018` |
|
|
359
|
-
| `192c893fc64e` | certain | Could not load modules. | `modules/hall-ui/public/modules.js:
|
|
359
|
+
| `192c893fc64e` | certain | Could not load modules. | `modules/hall-ui/public/modules.js:361` |
|
|
360
360
|
| `9912c3835136` | certain | Could not load requests — reload to try again. | `modules/hall-ui/public/collab.js:845` |
|
|
361
361
|
| `7775fec0fa85` | certain | Could not load sessions. | `modules/hall-ui/public/sessions.js:504` |
|
|
362
362
|
| `7775fec0fa85` | certain | Could not load sessions. | `modules/hall-ui/public/sessions.js:542` |
|
|
@@ -376,7 +376,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
376
376
|
| `64f9d51f0fa2` | certain | Could not load your settings. | `modules/hall-ui/public/settings.js:1199` |
|
|
377
377
|
| `de244c45d916` | certain | Could not load {…} | `modules/hall-ui/public/task.js:1015` |
|
|
378
378
|
| `2366356926b4` | certain | Could not mark the primer just now. Try again. | `modules/hall-ui/public/primer.js:259` |
|
|
379
|
-
| `753987b5da13` | certain | Could not reach the submit endpoint. | `modules/hall-ui/public/modules.js:
|
|
379
|
+
| `753987b5da13` | certain | Could not reach the submit endpoint. | `modules/hall-ui/public/modules.js:340` |
|
|
380
380
|
| `6f500726f0ac` | certain | Could not read the report: {…} | `modules/hall-ui/public/watch.js:768` |
|
|
381
381
|
| `21c2f33168a3` | certain | Could not read this project's deploy state: {…} | `modules/hall-ui/public/deploy.js:624` |
|
|
382
382
|
| `21a782f1af26` | certain | Could not read what this would bring in: {…}. The check below still applies. | `modules/hall-ui/public/deploy.js:542` |
|
|
@@ -877,7 +877,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
877
877
|
| `43626cff7071` | certain | Nothing of that kind in your sky. | `modules/hall-ui/public/sky-panel.js:123` |
|
|
878
878
|
| `b05a5f8cb074` | certain | Nothing personal is sent. | `modules/hall-ui/public/my-agents.js:429` |
|
|
879
879
|
| `ad9a17a8a5eb` | certain | Nothing shipped yet. | `modules/hall-ui/public/profile.js:297` |
|
|
880
|
-
| `f326632f2013` | certain | Nothing to submit — every module here ships with the core. | `modules/hall-ui/public/modules.js:
|
|
880
|
+
| `f326632f2013` | certain | Nothing to submit — every module here ships with the core. | `modules/hall-ui/public/modules.js:301` |
|
|
881
881
|
| `27c0d872db2d` | certain | Nothing you have typed above is lost by opening this. | `modules/hall-ui/public/ideas.html:155` |
|
|
882
882
|
| `26a07b64f49d` | certain | Now running core {…} | `modules/hall-ui/public/deploy.js:400` |
|
|
883
883
|
| `21cb60a8a96a` | certain | Now running core {…} — but GitHub was not updated. | `modules/hall-ui/public/deploy.js:390` |
|
|
@@ -1761,6 +1761,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
1761
1761
|
| `9eca058c6ad2` | certain | release a thought — one line | `modules/hall-ui/public/goal-map.html:90` |
|
|
1762
1762
|
| `9eca058c6ad2` | certain | release a thought — one line | `modules/hall-ui/public/thinking.html:98` |
|
|
1763
1763
|
| `d4bb81532896` | certain | repro steps, context, anything that helps… | `modules/hall-ui/public/ideas.html:80` |
|
|
1764
|
+
| `299dd9d33f53` | certain | restart it | `modules/hall-ui/public/modules.js:129` |
|
|
1764
1765
|
| `58b4e7a48d86` | certain | reviews from before Tweak Mode | `modules/hall-ui/public/studio.html:143` |
|
|
1765
1766
|
| `0d677ab4868a` | certain | reviews written on the live site | `modules/hall-ui/public/studio.html:138` |
|
|
1766
1767
|
| `f37f5043f81b` | certain | ring {…} of {…} · {…} | `modules/hall-ui/public/sky-interaction.js:34` |
|
|
@@ -1784,7 +1785,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
1784
1785
|
| `c8c2551006dc` | certain | skip the tour | `modules/hall-ui/public/goal-map.html:121` |
|
|
1785
1786
|
| `c8c2551006dc` | certain | skip the tour | `modules/hall-ui/public/thinking.html:122` |
|
|
1786
1787
|
| `1e737a57eb20` | certain | start governing | `modules/hall-ui/public/city.html:99` |
|
|
1787
|
-
| `0215b2cdca8c` | certain | submit for review | `modules/hall-ui/public/modules.js:
|
|
1788
|
+
| `0215b2cdca8c` | certain | submit for review | `modules/hall-ui/public/modules.js:175` |
|
|
1788
1789
|
| `43e6f1592ae3` | certain | submit it in the editor | `modules/hall-ui/public/studio.js:829` |
|
|
1789
1790
|
| `9ec19e32f86f` | certain | submit page | `modules/hall-ui/public/tweak-editor.html:68` |
|
|
1790
1791
|
| `da30b952a60b` | certain | system / unattributed | `modules/hall-ui/public/goals-page.js:284` |
|
|
@@ -1852,6 +1853,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
1852
1853
|
| `8cd3cc4005fc` | certain | via goal | `modules/hall-ui/public/dom-utils.js:441` |
|
|
1853
1854
|
| `007b28a56031` | certain | view diff | `modules/hall-ui/public/gate.js:160` |
|
|
1854
1855
|
| `18cf722bdd7e` | certain | waiting · | `modules/hall-ui/public/sky-interaction.js:128` |
|
|
1856
|
+
| `354861d3c2ce` | certain | waits for a restart | `modules/hall-ui/public/modules.js:127` |
|
|
1855
1857
|
| `35be9e0923da` | certain | walks the whole path in plain language. | `modules/hall-ui/public/hall-render.js:837` |
|
|
1856
1858
|
| `db42054582ed` | certain | wells · | `modules/hall-ui/public/sky-interaction.js:129` |
|
|
1857
1859
|
| `17705daf7b85` | certain | what counts as passing | `modules/hall-ui/public/government.html:55` |
|
|
@@ -1886,7 +1888,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
1886
1888
|
| `6c08bfe92e2b` | certain | {…} This project is invite-only: the {…} invites each builder, and there is nothing to apply for here. | `modules/hall-ui/public/hall-render.js:292` |
|
|
1887
1889
|
| `c5623d60015d` | certain | {…} Your standing is {…}. | `modules/hall-ui/public/hall-render.js:850` |
|
|
1888
1890
|
| `a91e1e702d4d` | certain | {…} achieved, {…} in progress, {…} not started of {…} goals | `modules/hall-ui/public/roadmap.js:73` |
|
|
1889
|
-
| `a65d371b5cb3` | certain | {…} and above can enable or disable a module | `modules/hall-ui/public/modules.js:
|
|
1891
|
+
| `a65d371b5cb3` | certain | {…} and above can enable or disable a module | `modules/hall-ui/public/modules.js:173` |
|
|
1890
1892
|
| `98b1c674fc37` | certain | {…} and up | `modules/hall-ui/public/sessions.js:289` |
|
|
1891
1893
|
| `111b71a9acaf` | certain | {…} and up. | `modules/hall-ui/public/sessions.js:287` |
|
|
1892
1894
|
| `56b00d773232` | certain | {…} and {…} | `modules/hall-ui/public/profile-nudge.js:77` |
|
|
@@ -1924,7 +1926,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
1924
1926
|
| `1a8a6267e490` | certain | {…} unfinished task{…} — say what happens to each | `modules/hall-ui/public/goals-render.js:1042` |
|
|
1925
1927
|
| `2f75f69cdb2f` | certain | {…} {…} changed | `modules/hall-ui/public/profile-crafts.js:218` |
|
|
1926
1928
|
| `8186b562553a` | certain | {…} {…} waiting | `modules/hall-ui/public/work.js:420` |
|
|
1927
|
-
| `a9216af9b05e` | certain | {…} {…} — how-to | `modules/hall-ui/public/modules.js:
|
|
1929
|
+
| `a9216af9b05e` | certain | {…} {…} — how-to | `modules/hall-ui/public/modules.js:416` |
|
|
1928
1930
|
| `0d4016a5531c` | certain | {…} {…}{…} | `modules/hall-ui/public/watch.js:514` |
|
|
1929
1931
|
| `0d4016a5531c` | certain | {…} {…}{…} | `modules/hall-ui/public/work.js:265` |
|
|
1930
1932
|
| `b3757ba3bb46` | certain | {…} · Stored encrypted; never shown again after saving. | `modules/hall-ui/public/settings.js:873` |
|
|
@@ -1932,7 +1934,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
1932
1934
|
| `d73256fbc395` | certain | {…} · who votes, and how it {…} | `modules/hall-ui/public/board-room.js:460` |
|
|
1933
1935
|
| `cab2a4296aec` | certain | {…} · {…} · {…}{…} | `modules/hall-ui/public/goal-inbox.js:458` |
|
|
1934
1936
|
| `1ac723849449` | certain | {…} · {…}{…} | `modules/hall-ui/public/sky-interaction.js:33` |
|
|
1935
|
-
| `ddd2bfc1fb60` | certain | {…} — how to use it | `modules/hall-ui/public/modules.js:
|
|
1937
|
+
| `ddd2bfc1fb60` | certain | {…} — how to use it | `modules/hall-ui/public/modules.js:418` |
|
|
1936
1938
|
| `085f93f3f775` | certain | {…} — see all standings | `modules/hall-ui/public/hall-render.js:80` |
|
|
1937
1939
|
| `2a2728a4ec4f` | certain | {…}% of tasks complete | `modules/hall-ui/public/roadmap.js:63` |
|
|
1938
1940
|
| `15e545eb3ce2` | certain | {…}, no such task | `modules/hall-ui/public/task.js:1002` |
|
|
@@ -1947,7 +1949,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
1947
1949
|
| `97e27ab169ae` | certain | {…}{…} session{…} across {…} builder{…}. | `modules/hall-ui/public/sessions.js:443` |
|
|
1948
1950
|
| `3d74668f69e5` | certain | {…}{…} · {…} | `modules/hall-ui/public/task.js:639` |
|
|
1949
1951
|
| `7f79bedecf60` | certain | {…}{…} — open it to see what went | `modules/hall-ui/public/goal-inbox.js:374` |
|
|
1950
|
-
| `1026fd5f68b7` | certain | · version | `modules/hall-ui/public/modules.js:
|
|
1952
|
+
| `1026fd5f68b7` | certain | · version | `modules/hall-ui/public/modules.js:421` |
|
|
1951
1953
|
| `4a5ff4f662df` | certain | — ${…} of ${…} this month ({…}%). {…} | `modules/hall-ui/public/hall-render.js:523` |
|
|
1952
1954
|
| `a6ae9cbdee30` | certain | — all builders — | `modules/hall-ui/public/builders.js:711` |
|
|
1953
1955
|
| `729d4ce22b99` | certain | — any — | `modules/hall-ui/public/hall-widgets.js:163` |
|