@bongos/core 1.21.73 → 1.21.75
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 +59 -34
- package/bin/bongos.js +1 -0
- package/clients/bongos-client/README.md +1 -1
- package/clients/bongos-client/bongos-client.global.js +6 -0
- package/clients/bongos-client/index.cjs +6 -0
- package/clients/bongos-client/index.d.ts +9 -0
- package/clients/bongos-client/index.mjs +6 -0
- package/docs/adr/0343-a-module-score-is-a-security-gate-then-an-average-of-visible-parts.md +12 -0
- package/docs/adr/0369-ship-mode-decides-who-starts-a-ship-not-how-it-lands.md +44 -0
- package/docs/adr/README.md +1 -0
- package/docs/api/openapi.json +170 -3
- package/docs/api-reference.md +6 -3
- package/docs/copy-inventory.md +18 -14
- package/docs/copy-registry.json +72 -26
- package/docs/module-api-changelog.md +4 -0
- package/docs/modules-contract.md +1 -0
- package/docs/page-readings.json +8 -8
- package/modules/hall-ui/public/project-settings.css +15 -0
- package/modules/hall-ui/public/project-settings.html +4 -4
- package/modules/hall-ui/public/project-settings.js +42 -0
- package/modules/lifecycle/routes/project-settings.js +65 -0
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/release-notes.json +12 -0
- package/scripts/gds/shipping-mode.js +71 -0
- package/src/bongos/module-listing.js +85 -0
- package/src/bongos/project-settings.js +67 -0
- package/src/bongos/routes/modules.js +15 -0
- package/src/module-api.js +7 -1
- package/tests/module_store_listing.mjs +156 -0
- package/tests/project_settings_page.mjs +8 -5
- package/tests/ship_mode.mjs +171 -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.75",
|
|
6
|
+
"core_contract": "1.21.75",
|
|
7
|
+
"source_commit": "fdb1b2948dda051d6bd0b5b5e79a1382a7e93f63",
|
|
8
8
|
"source_ref": "HEAD",
|
|
9
|
-
"built_at": "2026-10-
|
|
9
|
+
"built_at": "2026-10-08T17:33:55.022Z",
|
|
10
10
|
"redaction": {
|
|
11
11
|
"model": "docs-redacted+functional-verbatim",
|
|
12
|
-
"docs_redacted":
|
|
12
|
+
"docs_redacted": 589,
|
|
13
13
|
"agent_docs_stubbed": 28,
|
|
14
|
-
"functional_verbatim":
|
|
14
|
+
"functional_verbatim": 2982,
|
|
15
15
|
"rules": 3,
|
|
16
16
|
"gate_literals": 3,
|
|
17
17
|
"gate": "passed"
|
|
18
18
|
},
|
|
19
|
-
"file_count":
|
|
20
|
-
"tree_sha256": "
|
|
19
|
+
"file_count": 3600,
|
|
20
|
+
"tree_sha256": "9485028ef2ecfaf25ef937e1315cca15d5526ff1d11ed8a280e78a28177fd26e",
|
|
21
21
|
"files": [
|
|
22
22
|
{
|
|
23
23
|
"path": ".claude/skills/ask-for-help/SKILL.md",
|
|
@@ -307,17 +307,17 @@
|
|
|
307
307
|
{
|
|
308
308
|
"path": "bin/bongos.js",
|
|
309
309
|
"mode": "0000755",
|
|
310
|
-
"sha256": "
|
|
310
|
+
"sha256": "20794ff2c632668d2a65ab1ca1a0e6d5b240c19769dbabf6999c7347d41f54e6"
|
|
311
311
|
},
|
|
312
312
|
{
|
|
313
313
|
"path": "clients/bongos-client/README.md",
|
|
314
314
|
"mode": "0000644",
|
|
315
|
-
"sha256": "
|
|
315
|
+
"sha256": "cdea685186e07a106fcd43e603d006648d5d681f68895989915f3a38a54f3073"
|
|
316
316
|
},
|
|
317
317
|
{
|
|
318
318
|
"path": "clients/bongos-client/bongos-client.global.js",
|
|
319
319
|
"mode": "0000644",
|
|
320
|
-
"sha256": "
|
|
320
|
+
"sha256": "d244bccc1ec1ced97ebdc3219dbe130d9a615d12be060e8479e46368a95862bc"
|
|
321
321
|
},
|
|
322
322
|
{
|
|
323
323
|
"path": "clients/bongos-client/examples/hello-world.mjs",
|
|
@@ -327,17 +327,17 @@
|
|
|
327
327
|
{
|
|
328
328
|
"path": "clients/bongos-client/index.cjs",
|
|
329
329
|
"mode": "0000644",
|
|
330
|
-
"sha256": "
|
|
330
|
+
"sha256": "17bbcc0e24a99a7e8e6cba5f04db7fc210baf2fc119863c51698f69fd04771c4"
|
|
331
331
|
},
|
|
332
332
|
{
|
|
333
333
|
"path": "clients/bongos-client/index.d.ts",
|
|
334
334
|
"mode": "0000644",
|
|
335
|
-
"sha256": "
|
|
335
|
+
"sha256": "88bcc5e74a08fb574b1f1a81d40355a69ffd8271a75e9fdd25038c60a67b6ff3"
|
|
336
336
|
},
|
|
337
337
|
{
|
|
338
338
|
"path": "clients/bongos-client/index.mjs",
|
|
339
339
|
"mode": "0000644",
|
|
340
|
-
"sha256": "
|
|
340
|
+
"sha256": "042c25ee1600192bdaa6c7c817ff94558a884a428a7ab5b06dbf2b665fc89101"
|
|
341
341
|
},
|
|
342
342
|
{
|
|
343
343
|
"path": "clients/bongos-client/package.json",
|
|
@@ -2172,7 +2172,7 @@
|
|
|
2172
2172
|
{
|
|
2173
2173
|
"path": "docs/adr/0343-a-module-score-is-a-security-gate-then-an-average-of-visible-parts.md",
|
|
2174
2174
|
"mode": "0000644",
|
|
2175
|
-
"sha256": "
|
|
2175
|
+
"sha256": "db41e62093dd09e5ed3f9bb4628c98ea0255b487bb5b94191bbb4adc0651636b"
|
|
2176
2176
|
},
|
|
2177
2177
|
{
|
|
2178
2178
|
"path": "docs/adr/0344-a-tester-is-a-project-that-opts-in-once.md",
|
|
@@ -2299,20 +2299,25 @@
|
|
|
2299
2299
|
"mode": "0000644",
|
|
2300
2300
|
"sha256": "9269694c53caf6a7d00ab86908503ff2719bc6cb35e7305ab6993668fe7f2234"
|
|
2301
2301
|
},
|
|
2302
|
+
{
|
|
2303
|
+
"path": "docs/adr/0369-ship-mode-decides-who-starts-a-ship-not-how-it-lands.md",
|
|
2304
|
+
"mode": "0000644",
|
|
2305
|
+
"sha256": "10d2509453f6ab9c511adb9ca2e01927fdfbcb5d854830c66774cd07bc340a7c"
|
|
2306
|
+
},
|
|
2302
2307
|
{
|
|
2303
2308
|
"path": "docs/adr/README.md",
|
|
2304
2309
|
"mode": "0000644",
|
|
2305
|
-
"sha256": "
|
|
2310
|
+
"sha256": "84f7c062a62513d4e241b76d537708460e95da9a9caadc9c9f406632af828050"
|
|
2306
2311
|
},
|
|
2307
2312
|
{
|
|
2308
2313
|
"path": "docs/api-reference.md",
|
|
2309
2314
|
"mode": "0000644",
|
|
2310
|
-
"sha256": "
|
|
2315
|
+
"sha256": "9d29a5b16d79cbf4da889fd3d58c7164a8f70f511fd9de75b94f321ce7e01f1c"
|
|
2311
2316
|
},
|
|
2312
2317
|
{
|
|
2313
2318
|
"path": "docs/api/openapi.json",
|
|
2314
2319
|
"mode": "0000644",
|
|
2315
|
-
"sha256": "
|
|
2320
|
+
"sha256": "2f5f417f06c5b9e99e02b830fe9309c55a901cff059be909a18078a4b3ad0dee"
|
|
2316
2321
|
},
|
|
2317
2322
|
{
|
|
2318
2323
|
"path": "docs/architecture.md",
|
|
@@ -2337,12 +2342,12 @@
|
|
|
2337
2342
|
{
|
|
2338
2343
|
"path": "docs/copy-inventory.md",
|
|
2339
2344
|
"mode": "0000644",
|
|
2340
|
-
"sha256": "
|
|
2345
|
+
"sha256": "6b9b8e7d611dd3a8785b752670304ce584bba798f45c905e76b220900bf88664"
|
|
2341
2346
|
},
|
|
2342
2347
|
{
|
|
2343
2348
|
"path": "docs/copy-registry.json",
|
|
2344
2349
|
"mode": "0000644",
|
|
2345
|
-
"sha256": "
|
|
2350
|
+
"sha256": "259281afa0ea0362844df697c796adab5287a13caee6aa8e87c3a99850992d61"
|
|
2346
2351
|
},
|
|
2347
2352
|
{
|
|
2348
2353
|
"path": "docs/design/apex-pass-2-direction.md",
|
|
@@ -2852,12 +2857,12 @@
|
|
|
2852
2857
|
{
|
|
2853
2858
|
"path": "docs/module-api-changelog.md",
|
|
2854
2859
|
"mode": "0000644",
|
|
2855
|
-
"sha256": "
|
|
2860
|
+
"sha256": "244e5150f6cb37861f017cf08c10d4396d641be31e7c27836ff278045b8c7365"
|
|
2856
2861
|
},
|
|
2857
2862
|
{
|
|
2858
2863
|
"path": "docs/modules-contract.md",
|
|
2859
2864
|
"mode": "0000644",
|
|
2860
|
-
"sha256": "
|
|
2865
|
+
"sha256": "55a964846d438df4265777244e046b5b86deaebda3a6081c6f10a4a5a7a0dbf3"
|
|
2861
2866
|
},
|
|
2862
2867
|
{
|
|
2863
2868
|
"path": "docs/onboarding/diagrams/01-task-lifecycle.mmd",
|
|
@@ -2942,7 +2947,7 @@
|
|
|
2942
2947
|
{
|
|
2943
2948
|
"path": "docs/page-readings.json",
|
|
2944
2949
|
"mode": "0000644",
|
|
2945
|
-
"sha256": "
|
|
2950
|
+
"sha256": "3850e40624d9840ed56e9572fe99210c0f864d6a176abb99b45244cd4a89b195"
|
|
2946
2951
|
},
|
|
2947
2952
|
{
|
|
2948
2953
|
"path": "docs/project-context.template.md",
|
|
@@ -6017,17 +6022,17 @@
|
|
|
6017
6022
|
{
|
|
6018
6023
|
"path": "modules/hall-ui/public/project-settings.css",
|
|
6019
6024
|
"mode": "0000644",
|
|
6020
|
-
"sha256": "
|
|
6025
|
+
"sha256": "d554081a9d5d8c702a00e3f305b9927a3e9b72c1c34757876e874f0ab6ed61f4"
|
|
6021
6026
|
},
|
|
6022
6027
|
{
|
|
6023
6028
|
"path": "modules/hall-ui/public/project-settings.html",
|
|
6024
6029
|
"mode": "0000644",
|
|
6025
|
-
"sha256": "
|
|
6030
|
+
"sha256": "5e83d5bc721a92f2dc9d9382bbdcccc759d6d3dbbedfbba9eafbf447bc6e1561"
|
|
6026
6031
|
},
|
|
6027
6032
|
{
|
|
6028
6033
|
"path": "modules/hall-ui/public/project-settings.js",
|
|
6029
6034
|
"mode": "0000644",
|
|
6030
|
-
"sha256": "
|
|
6035
|
+
"sha256": "960cf27bc5c9a45f7d1c321755935264957d86dac4f51cb4729c2770ae3b65f0"
|
|
6031
6036
|
},
|
|
6032
6037
|
{
|
|
6033
6038
|
"path": "modules/hall-ui/public/ranks-founding.states.json",
|
|
@@ -7317,7 +7322,7 @@
|
|
|
7317
7322
|
{
|
|
7318
7323
|
"path": "modules/lifecycle/routes/project-settings.js",
|
|
7319
7324
|
"mode": "0000644",
|
|
7320
|
-
"sha256": "
|
|
7325
|
+
"sha256": "069f431d53ff1219d15e81dbf6c6a0e58413b97ba0b116f6113f6e41755b2aca"
|
|
7321
7326
|
},
|
|
7322
7327
|
{
|
|
7323
7328
|
"path": "modules/lifecycle/routes/recommendations.js",
|
|
@@ -10052,12 +10057,12 @@
|
|
|
10052
10057
|
{
|
|
10053
10058
|
"path": "package-lock.json",
|
|
10054
10059
|
"mode": "0000644",
|
|
10055
|
-
"sha256": "
|
|
10060
|
+
"sha256": "b55138ff35c924085a5d9b12fa4651c403dea3a2f1c4d3ee9e2d1a5fcb931314"
|
|
10056
10061
|
},
|
|
10057
10062
|
{
|
|
10058
10063
|
"path": "package.json",
|
|
10059
10064
|
"mode": "0000644",
|
|
10060
|
-
"sha256": "
|
|
10065
|
+
"sha256": "e99024f875cb0765bdf60139021c5bf984d616c954eec42444666a0b79395c94"
|
|
10061
10066
|
},
|
|
10062
10067
|
{
|
|
10063
10068
|
"path": "public-docs/index.html",
|
|
@@ -10077,7 +10082,7 @@
|
|
|
10077
10082
|
{
|
|
10078
10083
|
"path": "release-notes.json",
|
|
10079
10084
|
"mode": "0000644",
|
|
10080
|
-
"sha256": "
|
|
10085
|
+
"sha256": "c545e162df4719ea3f8712009774705b406674c314973d49487b2d31b71185dd"
|
|
10081
10086
|
},
|
|
10082
10087
|
{
|
|
10083
10088
|
"path": "scripts/cron/style_guide_audit.sh",
|
|
@@ -11624,6 +11629,11 @@
|
|
|
11624
11629
|
"mode": "0000644",
|
|
11625
11630
|
"sha256": "96bda284d66eb2428bbd05d359143fb6090fe6ce51bc2deca0a47590a8f392ca"
|
|
11626
11631
|
},
|
|
11632
|
+
{
|
|
11633
|
+
"path": "scripts/gds/shipping-mode.js",
|
|
11634
|
+
"mode": "0000644",
|
|
11635
|
+
"sha256": "64870b1536fe874a9866b49a51bc47f9c5074ad364e5af0dcce4594e1269de75"
|
|
11636
|
+
},
|
|
11627
11637
|
{
|
|
11628
11638
|
"path": "scripts/gds/skill-lint.js",
|
|
11629
11639
|
"mode": "0000644",
|
|
@@ -12059,6 +12069,11 @@
|
|
|
12059
12069
|
"mode": "0000644",
|
|
12060
12070
|
"sha256": "917f364b804f25437dea7fe507abe50e9b64cac79b6cc29ac786de0e24350d33"
|
|
12061
12071
|
},
|
|
12072
|
+
{
|
|
12073
|
+
"path": "src/bongos/module-listing.js",
|
|
12074
|
+
"mode": "0000644",
|
|
12075
|
+
"sha256": "15047b229ce7c3633d74597fb8f971db00fac2ddae5fb0038666fa0896b25574"
|
|
12076
|
+
},
|
|
12062
12077
|
{
|
|
12063
12078
|
"path": "src/bongos/module-overrides.js",
|
|
12064
12079
|
"mode": "0000644",
|
|
@@ -12127,7 +12142,7 @@
|
|
|
12127
12142
|
{
|
|
12128
12143
|
"path": "src/bongos/project-settings.js",
|
|
12129
12144
|
"mode": "0000644",
|
|
12130
|
-
"sha256": "
|
|
12145
|
+
"sha256": "9fed7bf82adcac7c19b4b1849987c273d4dc995598cfb8f1760367858786d009"
|
|
12131
12146
|
},
|
|
12132
12147
|
{
|
|
12133
12148
|
"path": "src/bongos/repo-info.js",
|
|
@@ -12227,7 +12242,7 @@
|
|
|
12227
12242
|
{
|
|
12228
12243
|
"path": "src/bongos/routes/modules.js",
|
|
12229
12244
|
"mode": "0000644",
|
|
12230
|
-
"sha256": "
|
|
12245
|
+
"sha256": "6c20741df0b1395355abf58146ad6753197dcfde928e532b43f69ecf1ce7a325"
|
|
12231
12246
|
},
|
|
12232
12247
|
{
|
|
12233
12248
|
"path": "src/bongos/routes/my-sessions.js",
|
|
@@ -12307,7 +12322,7 @@
|
|
|
12307
12322
|
{
|
|
12308
12323
|
"path": "src/module-api.js",
|
|
12309
12324
|
"mode": "0000644",
|
|
12310
|
-
"sha256": "
|
|
12325
|
+
"sha256": "e2dc4fbb86019edff6c023c9b78afdd70fa04010249e28eee821da8383b2252e"
|
|
12311
12326
|
},
|
|
12312
12327
|
{
|
|
12313
12328
|
"path": "src/module-loader/catalog.js",
|
|
@@ -15664,6 +15679,11 @@
|
|
|
15664
15679
|
"mode": "0000644",
|
|
15665
15680
|
"sha256": "43828c1a95652180d558e7676cc2053d0599a61c0edf4cd1ab100820fc7de493"
|
|
15666
15681
|
},
|
|
15682
|
+
{
|
|
15683
|
+
"path": "tests/module_store_listing.mjs",
|
|
15684
|
+
"mode": "0000644",
|
|
15685
|
+
"sha256": "289478dfc8666527e919a28db3127807aefe87c19849001f133780bb8a8ac816"
|
|
15686
|
+
},
|
|
15667
15687
|
{
|
|
15668
15688
|
"path": "tests/module_store_publish.mjs",
|
|
15669
15689
|
"mode": "0000644",
|
|
@@ -16202,7 +16222,7 @@
|
|
|
16202
16222
|
{
|
|
16203
16223
|
"path": "tests/project_settings_page.mjs",
|
|
16204
16224
|
"mode": "0000644",
|
|
16205
|
-
"sha256": "
|
|
16225
|
+
"sha256": "e6b41d59daccc5516b97164ad311fe0b69feecbefed0ca7237c2a7d2229801ec"
|
|
16206
16226
|
},
|
|
16207
16227
|
{
|
|
16208
16228
|
"path": "tests/project_stats.mjs",
|
|
@@ -17169,6 +17189,11 @@
|
|
|
17169
17189
|
"mode": "0000644",
|
|
17170
17190
|
"sha256": "28ad67a5ee8be6807f8d16149ea42cb837b7bc4e4084068b74d8e944db09d291"
|
|
17171
17191
|
},
|
|
17192
|
+
{
|
|
17193
|
+
"path": "tests/ship_mode.mjs",
|
|
17194
|
+
"mode": "0000644",
|
|
17195
|
+
"sha256": "b545f8efbf7ae42b5db2b22e275fac2de65a268e46331bd018b515c69b274f25"
|
|
17196
|
+
},
|
|
17172
17197
|
{
|
|
17173
17198
|
"path": "tests/ship_post_land_verify.mjs",
|
|
17174
17199
|
"mode": "0000644",
|
package/bin/bongos.js
CHANGED
|
@@ -78,6 +78,7 @@ const VERBS = {
|
|
|
78
78
|
claim: { script: 'claim.js', group: 'work', summary: 'Claim a task by id (bongos claim 1246)' },
|
|
79
79
|
ship: { script: 'ship.js', group: 'work', summary: 'Grade, merge, and deploy your claimed task' },
|
|
80
80
|
release: { script: 'release.js', group: 'work', summary: 'Cancel a claim — task returns to ready (no credits)' },
|
|
81
|
+
'ship-mode': { script: 'shipping-mode.js', group: 'work', summary: 'Show or set who starts a ship (bongos ship-mode auto|manual)' },
|
|
81
82
|
status: { script: 'status.js', group: 'work', summary: 'Version / criterion progress (bongos status C8)', selfHelp: true },
|
|
82
83
|
recall: { script: 'recall.js', group: 'work', summary: 'Search the docs + project knowledge (bongos recall "x")' },
|
|
83
84
|
cost: { script: 'cost.js', group: 'work', summary: 'Log a cost entry' },
|
|
@@ -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
|
+
- 526 operations across 75 resource groups
|
|
9
9
|
|
|
10
10
|
## Use it from your project
|
|
11
11
|
|
|
@@ -855,6 +855,10 @@ function createClient(opts = {}) {
|
|
|
855
855
|
getProjectSettings: (args) => request("GET", "/project-settings", { hasBody: false }, args),
|
|
856
856
|
// PATCH /project-settings/rot-days — rank: metic+archon — PATCH /project-settings/rot-days
|
|
857
857
|
patchProjectSettingsRotDays: (args) => request("PATCH", "/project-settings/rot-days", { hasBody: true }, args),
|
|
858
|
+
// GET /project-settings/ship-mode — rank: any-builder — GET /project-settings/ship-mode
|
|
859
|
+
getProjectSettingsShipMode: (args) => request("GET", "/project-settings/ship-mode", { hasBody: false }, args),
|
|
860
|
+
// PATCH /project-settings/ship-mode — rank: metic+archon — PATCH /project-settings/ship-mode
|
|
861
|
+
patchProjectSettingsShipMode: (args) => request("PATCH", "/project-settings/ship-mode", { hasBody: true }, args),
|
|
858
862
|
},
|
|
859
863
|
"projects": {
|
|
860
864
|
// GET /projects — rank: metic+archon — GET /projects
|
|
@@ -1145,6 +1149,8 @@ function createClient(opts = {}) {
|
|
|
1145
1149
|
"store": {
|
|
1146
1150
|
// GET /store/entitlements — rank: any-builder — GET /store/entitlements
|
|
1147
1151
|
getStoreEntitlements: (args) => request("GET", "/store/entitlements", { hasBody: false }, args),
|
|
1152
|
+
// GET /store/modules — rank: any-builder — GET /store/modules
|
|
1153
|
+
getStoreModules: (args) => request("GET", "/store/modules", { hasBody: false }, args),
|
|
1148
1154
|
// POST /store/modules/{key}/acquire — rank: any-builder — POST /store/modules/:key/acquire
|
|
1149
1155
|
postStoreModulesKeyAcquire: (args) => request("POST", "/store/modules/{key}/acquire", { hasBody: true }, args),
|
|
1150
1156
|
// POST /store/modules/{key}/acquired — rank: any-builder — POST /store/modules/:key/acquired
|
|
@@ -854,6 +854,10 @@ function createClient(opts = {}) {
|
|
|
854
854
|
getProjectSettings: (args) => request("GET", "/project-settings", { hasBody: false }, args),
|
|
855
855
|
// PATCH /project-settings/rot-days — rank: metic+archon — PATCH /project-settings/rot-days
|
|
856
856
|
patchProjectSettingsRotDays: (args) => request("PATCH", "/project-settings/rot-days", { hasBody: true }, args),
|
|
857
|
+
// GET /project-settings/ship-mode — rank: any-builder — GET /project-settings/ship-mode
|
|
858
|
+
getProjectSettingsShipMode: (args) => request("GET", "/project-settings/ship-mode", { hasBody: false }, args),
|
|
859
|
+
// PATCH /project-settings/ship-mode — rank: metic+archon — PATCH /project-settings/ship-mode
|
|
860
|
+
patchProjectSettingsShipMode: (args) => request("PATCH", "/project-settings/ship-mode", { hasBody: true }, args),
|
|
857
861
|
},
|
|
858
862
|
"projects": {
|
|
859
863
|
// GET /projects — rank: metic+archon — GET /projects
|
|
@@ -1144,6 +1148,8 @@ function createClient(opts = {}) {
|
|
|
1144
1148
|
"store": {
|
|
1145
1149
|
// GET /store/entitlements — rank: any-builder — GET /store/entitlements
|
|
1146
1150
|
getStoreEntitlements: (args) => request("GET", "/store/entitlements", { hasBody: false }, args),
|
|
1151
|
+
// GET /store/modules — rank: any-builder — GET /store/modules
|
|
1152
|
+
getStoreModules: (args) => request("GET", "/store/modules", { hasBody: false }, args),
|
|
1147
1153
|
// POST /store/modules/{key}/acquire — rank: any-builder — POST /store/modules/:key/acquire
|
|
1148
1154
|
postStoreModulesKeyAcquire: (args) => request("POST", "/store/modules/{key}/acquire", { hasBody: true }, args),
|
|
1149
1155
|
// POST /store/modules/{key}/acquired — rank: any-builder — POST /store/modules/:key/acquired
|
|
@@ -126,6 +126,7 @@ export interface GetPageNotesResponse { page_id: unknown; notes: unknown }
|
|
|
126
126
|
export interface GetProfilesHandleResponse { account: unknown; cross_project: unknown }
|
|
127
127
|
export interface GetProjectManageLinkResponse { ok: boolean; link: unknown }
|
|
128
128
|
export interface GetProjectSettingsResponse { rows: unknown }
|
|
129
|
+
export interface GetProjectSettingsShipModeResponse { mode: unknown; chosen: unknown; source: unknown; sentence: unknown; choices: unknown }
|
|
129
130
|
export interface GetProjectsFeaturedResponse { projects: unknown; page: PageInfo }
|
|
130
131
|
export interface GetProjectsResponse { projects: unknown }
|
|
131
132
|
export interface GetProvisioningFleetResponse { instances: unknown; capacity: unknown }
|
|
@@ -233,6 +234,8 @@ export interface PatchPageNotesIdRequest { body_md: string }
|
|
|
233
234
|
export interface PatchPageNotesIdResponse { ok: boolean; updated_at: unknown }
|
|
234
235
|
export interface PatchProjectSettingsRotDaysRequest { days: number }
|
|
235
236
|
export interface PatchProjectSettingsRotDaysResponse { ok: boolean; rot_days: unknown; source: unknown; describe: unknown }
|
|
237
|
+
export interface PatchProjectSettingsShipModeRequest { mode: string }
|
|
238
|
+
export interface PatchProjectSettingsShipModeResponse { ok: boolean; mode: unknown; chosen: unknown; source: unknown; sentence: unknown }
|
|
236
239
|
export interface PatchProjectsIdFeaturedRequest { featured: boolean }
|
|
237
240
|
export interface PatchProjectsIdFeaturedResponse { project: unknown }
|
|
238
241
|
export interface PatchProjectsIdStatusRequest { status: string }
|
|
@@ -1352,6 +1355,10 @@ export interface BongosClient {
|
|
|
1352
1355
|
getProjectSettings(args?: RequestArgs): Promise<GetProjectSettingsResponse>;
|
|
1353
1356
|
/** PATCH /project-settings/rot-days — rank: metic+archon */
|
|
1354
1357
|
patchProjectSettingsRotDays(args: RequestArgs & { body: PatchProjectSettingsRotDaysRequest }): Promise<PatchProjectSettingsRotDaysResponse>;
|
|
1358
|
+
/** GET /project-settings/ship-mode — rank: any-builder */
|
|
1359
|
+
getProjectSettingsShipMode(args?: RequestArgs): Promise<GetProjectSettingsShipModeResponse>;
|
|
1360
|
+
/** PATCH /project-settings/ship-mode — rank: metic+archon */
|
|
1361
|
+
patchProjectSettingsShipMode(args: RequestArgs & { body: PatchProjectSettingsShipModeRequest }): Promise<PatchProjectSettingsShipModeResponse>;
|
|
1355
1362
|
};
|
|
1356
1363
|
"projects": {
|
|
1357
1364
|
/** GET /projects — rank: metic+archon */
|
|
@@ -1642,6 +1649,8 @@ export interface BongosClient {
|
|
|
1642
1649
|
"store": {
|
|
1643
1650
|
/** GET /store/entitlements — rank: any-builder */
|
|
1644
1651
|
getStoreEntitlements(args?: RequestArgs): Promise<GetStoreEntitlementsResponse>;
|
|
1652
|
+
/** GET /store/modules — rank: any-builder */
|
|
1653
|
+
getStoreModules(args?: RequestArgs): Promise<ApiResponse>;
|
|
1645
1654
|
/** POST /store/modules/{key}/acquire — rank: any-builder */
|
|
1646
1655
|
postStoreModulesKeyAcquire(args?: RequestArgs & { body?: PostStoreModulesKeyAcquireRequest }): Promise<PostStoreModulesKeyAcquireResponse>;
|
|
1647
1656
|
/** POST /store/modules/{key}/acquired — rank: any-builder */
|
|
@@ -851,6 +851,10 @@ export function createClient(opts = {}) {
|
|
|
851
851
|
getProjectSettings: (args) => request("GET", "/project-settings", { hasBody: false }, args),
|
|
852
852
|
// PATCH /project-settings/rot-days — rank: metic+archon — PATCH /project-settings/rot-days
|
|
853
853
|
patchProjectSettingsRotDays: (args) => request("PATCH", "/project-settings/rot-days", { hasBody: true }, args),
|
|
854
|
+
// GET /project-settings/ship-mode — rank: any-builder — GET /project-settings/ship-mode
|
|
855
|
+
getProjectSettingsShipMode: (args) => request("GET", "/project-settings/ship-mode", { hasBody: false }, args),
|
|
856
|
+
// PATCH /project-settings/ship-mode — rank: metic+archon — PATCH /project-settings/ship-mode
|
|
857
|
+
patchProjectSettingsShipMode: (args) => request("PATCH", "/project-settings/ship-mode", { hasBody: true }, args),
|
|
854
858
|
},
|
|
855
859
|
"projects": {
|
|
856
860
|
// GET /projects — rank: metic+archon — GET /projects
|
|
@@ -1141,6 +1145,8 @@ export function createClient(opts = {}) {
|
|
|
1141
1145
|
"store": {
|
|
1142
1146
|
// GET /store/entitlements — rank: any-builder — GET /store/entitlements
|
|
1143
1147
|
getStoreEntitlements: (args) => request("GET", "/store/entitlements", { hasBody: false }, args),
|
|
1148
|
+
// GET /store/modules — rank: any-builder — GET /store/modules
|
|
1149
|
+
getStoreModules: (args) => request("GET", "/store/modules", { hasBody: false }, args),
|
|
1144
1150
|
// POST /store/modules/{key}/acquire — rank: any-builder — POST /store/modules/:key/acquire
|
|
1145
1151
|
postStoreModulesKeyAcquire: (args) => request("POST", "/store/modules/{key}/acquire", { hasBody: true }, args),
|
|
1146
1152
|
// POST /store/modules/{key}/acquired — rank: any-builder — POST /store/modules/:key/acquired
|
|
@@ -66,6 +66,18 @@ couldn't have yet. The floor and the ranking decide how New modules are placed (
|
|
|
66
66
|
Price is never an input. The Metic+ override (task 1003796) and delist (task 1003797) sit on
|
|
67
67
|
top of the computed score and never replace how it is computed. Every override is recorded.
|
|
68
68
|
|
|
69
|
+
## Implementation note — the floor (task 1003807, 2026-10-03)
|
|
70
|
+
|
|
71
|
+
The owner set the floor on 2026-10-01: **50 out of 100**, fixed in Bongos itself
|
|
72
|
+
(`QUALITY_FLOOR` in `src/bongos/module-listing.js`). It is not a live setting and no new
|
|
73
|
+
permission moves it; changing it is an owner-approved, reviewed task, so no author can
|
|
74
|
+
move it. `GET /store/modules` lists each listed module's newest version by its current
|
|
75
|
+
score: the Security gate must have passed (failed or not yet run means not listed); a
|
|
76
|
+
version still labelled New (D5) is listed under "new", never ranked, and the floor does
|
|
77
|
+
not apply to it until it has a real score; any other version is listed only at or above
|
|
78
|
+
the floor. Below the bar is not listed at all. Authors read the rule in
|
|
79
|
+
`docs/modules-contract.md` ("Getting listed").
|
|
80
|
+
|
|
69
81
|
## Consequences
|
|
70
82
|
|
|
71
83
|
- **Day one, only Tests counts toward the overall score**, behind the Security gate. The number
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# ADR 0369 — Ship mode decides who starts a ship, not how it lands
|
|
2
|
+
|
|
3
|
+
- **Status:** accepted
|
|
4
|
+
- **Date:** 2026-10-08
|
|
5
|
+
- **Task:** [task 1004628](https://cloudbongos.com/builders#/task/1004628) (goal 1000106, BONGOS-V2)
|
|
6
|
+
- **Builds on:** [ADR 0226](0226-one-stale-timer-reporting-degrades-enforcement-refuses.md) (a live knob lives in `project_settings` and is read through one resolver that reports where its value came from)
|
|
7
|
+
- **Decided with:** the owner, 2026-10-08, after using Bongos on their own project. New projects default to Auto. The owner picks it when creating a project and can change it later.
|
|
8
|
+
|
|
9
|
+
## Context
|
|
10
|
+
|
|
11
|
+
Shipping at the start of a project was the owner's worst experience. The AI finished a task, then handed back terminal commands (`cd …`, `npx bongos ship 49`) and said it was not allowed to ship. To someone new, a project that answers every finished task with commands to copy reads as broken.
|
|
12
|
+
|
|
13
|
+
Bongos had no setting for this. The nearest switch was the **deploy mode** in `config/deploy.json` (`ci` or `laptop`, resolved in `scripts/gds/ship-deploy-target.js`). That switch decides the mechanics of landing once a ship has started: a pull request with auto-merge, or a direct merge. It is committed config and nobody can change it from a page.
|
|
14
|
+
|
|
15
|
+
## Decision
|
|
16
|
+
|
|
17
|
+
**D1 — A new project setting, `ship.mode`, with two values.**
|
|
18
|
+
- `auto`: when the AI finishes a task it ships and lands it, with no commands from the person.
|
|
19
|
+
- `manual`: the AI stops before shipping, and a person approves each ship.
|
|
20
|
+
|
|
21
|
+
It lives in `project_settings` (migration `core_231`), so it needs no migration. It is read through `resolveShipMode()` in `src/bongos/project-settings.js`, which follows the rot timer's pattern: a value plus its source, and an unusable stored value is reported rather than thrown.
|
|
22
|
+
|
|
23
|
+
**D2 — Auto is the default.** A project nobody has configured ships automatically. The resolver also reports `chosen`, because "never chosen" and "chose Auto" are different answers. The first-ship prompt (task 1004630) asks only when nobody has chosen.
|
|
24
|
+
|
|
25
|
+
**D3 — Ship mode and deploy mode are separate settings.** Ship mode answers *who presses go*. Deploy mode answers *how the land happens*. Either combination is valid, and neither setting reads the other. Merging them would make a person's choice about being asked rewrite the committed landing mechanics of a repository.
|
|
26
|
+
|
|
27
|
+
**D4 — Everyone can read it, only settings managers can write it.**
|
|
28
|
+
- `GET /project-settings/ship-mode` is open to any signed-in builder, because every AI session has to know whether to ship on its own.
|
|
29
|
+
- `PATCH /project-settings/ship-mode` needs `project.settings.manage`, the same permission as the page's other settings.
|
|
30
|
+
- The mode is also on the project settings page, and `bongos ship-mode [auto|manual]` reads or sets it from a terminal.
|
|
31
|
+
|
|
32
|
+
## Consequences
|
|
33
|
+
|
|
34
|
+
- This task adds the setting only. Behaviour follows in the dependent tasks:
|
|
35
|
+
- the creation wizard asks for it (task 1004629);
|
|
36
|
+
- the first ship asks once if nobody has chosen (task 1004630);
|
|
37
|
+
- the AI obeys it (task 1004631).
|
|
38
|
+
- 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.
|
|
39
|
+
|
|
40
|
+
## Rejected
|
|
41
|
+
|
|
42
|
+
- **Reusing deploy mode.** It answers a different question, and it is committed config that cannot be edited from a page.
|
|
43
|
+
- **A per-builder setting.** The project owner decides how the project's work lands. One teammate's preference should not change that for everyone.
|
|
44
|
+
- **Defaulting to Manual.** That keeps the exact experience the owner reported as the problem.
|
package/docs/adr/README.md
CHANGED
|
@@ -487,3 +487,4 @@ These 20 numbers are each shared by exactly two files. They are **accepted histo
|
|
|
487
487
|
| 0366 | [**Hall planning is forms; a goal made there carries its own spec task, and the interviews stay in the CLI** ([task 1003461](https://cloudbongos.com/builders#/task/1003461), goal 1000089). Spike answer. **D1:** form-shaped, build in the hall: create a task under a goal, create a goal (name + subtitle, version, category, no scope field), attach a criterion to a goal you hold; every server refusal rendered as copy. **D2:** interview-shaped, deliberately absent from the hall: version planning, scope inference, drafting criteria and seed tasks, reuse-vs-create judgement, carry-forward. **D3 (owner):** a hall-made goal is created with a "Spec goal N" task (`POST /goals` `spec_task: true`, `source_ref goal-<id>-spec`) and every task in the goal depends on it until it ships; no new permission, no migration. **D4:** an optional "Plan with Claude" hand-off button.](0366-hall-planning-is-forms-and-a-goal-made-there-carries-its-own-spec-task.md) | lifecycle / planning |
|
|
488
488
|
| 0367 | [**The Discord support bot answers from public docs only, under a monthly cap that fails closed** ([task 1002534](https://cloudbongos.com/builders#/task/1002534), goal 1000110). **D1:** one pinned channel, only when @-mentioned; the first gateway reply. **D2:** the corpus is an allowlist (`README.md`, `docs/onboarding/`, `docs/api-reference.md`) served by a new `memory.searchPublicDocs` port whose scope (doc, xenos, no owner, allowlisted ref) is fixed in SQL; the asker is never looked up. **D3:** no writes but the reply and one `audit_log` row per answer, which is also the spend ledger, so no migration. **D4:** a nonce-fenced prompt, no tools, mentions disabled. **D5:** `claude-haiku-4-5`, `DISCORD_SUPPORT_MONTHLY_CAP_USD` default $5, fail closed, with in-flight answers reserved at worst case. **D6:** off by default; its own switch and an env-only, namespaced key. **D7:** the channel's humans review wrong answers; the fix is the doc.](0367-the-support-bot-answers-from-public-docs-only.md) | discord / support / spend |
|
|
489
489
|
| 0368 | [**Red and blue teams practise on a range, never on live** (goal 1000094 — *Working area 10, Security*; proposed). **D2:** the range is its own small server, rebuilt from the candidate the owner marks "stage for attack". **D3:** it shares no identity hub, secret or data with live. **D5:** red is AI plus Metic+, with one side at a time and a 30-day switch. **D6:** attacks run on subscriptions, never the metered API. **D7:** 3 runs on the newest model with 0 high+ breaks, advisory until an outside tenant exists. **D8:** points only, no credits yet. **D9:** three live signals to `#security-alerts`.](0368-red-and-blue-teams-practice-on-a-range-never-on-live.md) | security / red-team / range |
|
|
490
|
+
| 0369 | [**Ship mode decides who starts a ship, not how it lands** ([task 1004628](https://cloudbongos.com/builders#/task/1004628), goal 1000106). **D1:** a `ship.mode` project setting, `auto` (the AI ships and lands a finished task with no commands) or `manual` (a person approves each ship), in `project_settings` with no migration. **D2:** Auto is the default, and the resolver reports whether anyone has chosen. **D3:** it is separate from deploy mode (`config/deploy.json`), which decides how a land happens. **D4:** any builder can read it (the AI must know), and `project.settings.manage` writes it, from the settings page or `bongos ship-mode`.](0369-ship-mode-decides-who-starts-a-ship-not-how-it-lands.md) | lifecycle / shipping / project settings |
|