@bongos/core 1.21.60 → 1.21.62
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 -39
- package/clients/bongos-client/README.md +1 -1
- package/clients/bongos-client/bongos-client.global.js +4 -0
- package/clients/bongos-client/index.cjs +4 -0
- package/clients/bongos-client/index.d.ts +5 -0
- package/clients/bongos-client/index.mjs +4 -0
- package/docs/adr/0366-hall-planning-is-forms-and-a-goal-made-there-carries-its-own-spec-task.md +85 -0
- package/docs/adr/README.md +1 -0
- package/docs/api/openapi.json +58 -3
- package/docs/api-reference.md +7 -1
- package/docs/copy-inventory.md +10 -3
- package/docs/copy-registry.json +67 -4
- package/docs/module-api-changelog.md +4 -0
- package/docs/onboarding/diagrams/assertions.json +1 -1
- package/docs/page-readings.json +222 -215
- package/modules/hall-ui/public/project-settings.css +5 -0
- package/modules/hall-ui/public/project-settings.html +12 -0
- package/modules/hall-ui/public/project-settings.js +20 -0
- package/modules/hall-ui/records/project-danger-zone.md +10 -0
- package/modules/lifecycle/merge-lock.js +53 -9
- package/modules/lifecycle/ship-preflight.js +40 -22
- package/modules/public-landing/public/projects.html +30 -3
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/release-notes.json +16 -0
- package/scripts/gds/ship-grade.js +13 -6
- package/scripts/gds/ship-merge-gate.js +26 -0
- package/scripts/gds/ship-merge.js +12 -3
- package/scripts/gds/ship-state.js +42 -5
- package/src/bongos/routes/core-update.js +33 -0
- package/src/module-api.js +1 -1
- package/tests/merge_lock.mjs +58 -0
- package/tests/project_manage_link.mjs +111 -0
- package/tests/ship_merge_gate.mjs +63 -0
- package/tests/ship_preflight.mjs +46 -1
- package/tests/ship_vendored_instance.mjs +259 -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.62",
|
|
6
|
+
"core_contract": "1.21.62",
|
|
7
|
+
"source_commit": "105061dd47a96f0d628fd6ef926fd3f325d76ac3",
|
|
8
8
|
"source_ref": "HEAD",
|
|
9
|
-
"built_at": "2026-10-
|
|
9
|
+
"built_at": "2026-10-05T21:53:01.352Z",
|
|
10
10
|
"redaction": {
|
|
11
11
|
"model": "docs-redacted+functional-verbatim",
|
|
12
|
-
"docs_redacted":
|
|
12
|
+
"docs_redacted": 586,
|
|
13
13
|
"agent_docs_stubbed": 28,
|
|
14
|
-
"functional_verbatim":
|
|
14
|
+
"functional_verbatim": 2949,
|
|
15
15
|
"rules": 3,
|
|
16
16
|
"gate_literals": 3,
|
|
17
17
|
"gate": "passed"
|
|
18
18
|
},
|
|
19
|
-
"file_count":
|
|
20
|
-
"tree_sha256": "
|
|
19
|
+
"file_count": 3564,
|
|
20
|
+
"tree_sha256": "293671547d32416cc06202a1b95675be164a603b599e65c19cc5df0e8d577288",
|
|
21
21
|
"files": [
|
|
22
22
|
{
|
|
23
23
|
"path": ".claude/skills/ask-for-help/SKILL.md",
|
|
@@ -312,12 +312,12 @@
|
|
|
312
312
|
{
|
|
313
313
|
"path": "clients/bongos-client/README.md",
|
|
314
314
|
"mode": "0000644",
|
|
315
|
-
"sha256": "
|
|
315
|
+
"sha256": "64898ab4e4c50f816f893db4d935ac04bee0e674129b10840d0ac88b5fe6ce0b"
|
|
316
316
|
},
|
|
317
317
|
{
|
|
318
318
|
"path": "clients/bongos-client/bongos-client.global.js",
|
|
319
319
|
"mode": "0000644",
|
|
320
|
-
"sha256": "
|
|
320
|
+
"sha256": "71502f60514d4e9dfc93a8c812302423d776db48d8035ca9e0ce0ef0a5bb2dce"
|
|
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": "ca9bacfcb336995f72080cc7d6574c7a6a6a22ae38f5c3ae226299471551f60d"
|
|
331
331
|
},
|
|
332
332
|
{
|
|
333
333
|
"path": "clients/bongos-client/index.d.ts",
|
|
334
334
|
"mode": "0000644",
|
|
335
|
-
"sha256": "
|
|
335
|
+
"sha256": "2e250be34d7de5f2b98a835d054ec301c88bac96538509f51074c9c5382b781d"
|
|
336
336
|
},
|
|
337
337
|
{
|
|
338
338
|
"path": "clients/bongos-client/index.mjs",
|
|
339
339
|
"mode": "0000644",
|
|
340
|
-
"sha256": "
|
|
340
|
+
"sha256": "968533c3b36431c47ff8dc6a0b0f8719e10fd24f979d54531227195535d95d56"
|
|
341
341
|
},
|
|
342
342
|
{
|
|
343
343
|
"path": "clients/bongos-client/package.json",
|
|
@@ -2284,20 +2284,25 @@
|
|
|
2284
2284
|
"mode": "0000644",
|
|
2285
2285
|
"sha256": "93c863a7f961cd91c052eee2188b16b9f360cec26478dde6225b304ee0e59f7d"
|
|
2286
2286
|
},
|
|
2287
|
+
{
|
|
2288
|
+
"path": "docs/adr/0366-hall-planning-is-forms-and-a-goal-made-there-carries-its-own-spec-task.md",
|
|
2289
|
+
"mode": "0000644",
|
|
2290
|
+
"sha256": "29c841d193efa7b6f6479e14a6056057138574fcd7b526f667da6f219dece5a7"
|
|
2291
|
+
},
|
|
2287
2292
|
{
|
|
2288
2293
|
"path": "docs/adr/README.md",
|
|
2289
2294
|
"mode": "0000644",
|
|
2290
|
-
"sha256": "
|
|
2295
|
+
"sha256": "08f66fecefc58d9c09e45841dd9d47514e807934cfcd4621a8bfeaa390afb334"
|
|
2291
2296
|
},
|
|
2292
2297
|
{
|
|
2293
2298
|
"path": "docs/api-reference.md",
|
|
2294
2299
|
"mode": "0000644",
|
|
2295
|
-
"sha256": "
|
|
2300
|
+
"sha256": "3943fbe1d9661c16ee6f4f455312312359fe4b1e59da88b37858e76e302aae45"
|
|
2296
2301
|
},
|
|
2297
2302
|
{
|
|
2298
2303
|
"path": "docs/api/openapi.json",
|
|
2299
2304
|
"mode": "0000644",
|
|
2300
|
-
"sha256": "
|
|
2305
|
+
"sha256": "f0d70cbc5227c426ffa47c245ac281575459943e9fef2c196d325620574a91bb"
|
|
2301
2306
|
},
|
|
2302
2307
|
{
|
|
2303
2308
|
"path": "docs/architecture.md",
|
|
@@ -2322,12 +2327,12 @@
|
|
|
2322
2327
|
{
|
|
2323
2328
|
"path": "docs/copy-inventory.md",
|
|
2324
2329
|
"mode": "0000644",
|
|
2325
|
-
"sha256": "
|
|
2330
|
+
"sha256": "38102e6280c4560deab4ec5c65e5bfba0f423a9bb71a9a101a3a41246a5a7078"
|
|
2326
2331
|
},
|
|
2327
2332
|
{
|
|
2328
2333
|
"path": "docs/copy-registry.json",
|
|
2329
2334
|
"mode": "0000644",
|
|
2330
|
-
"sha256": "
|
|
2335
|
+
"sha256": "d843d30609d3e1391b89702e79e3bc9dc765f5ed332b1861a918a7179671e2f1"
|
|
2331
2336
|
},
|
|
2332
2337
|
{
|
|
2333
2338
|
"path": "docs/design/apex-pass-2-direction.md",
|
|
@@ -2837,7 +2842,7 @@
|
|
|
2837
2842
|
{
|
|
2838
2843
|
"path": "docs/module-api-changelog.md",
|
|
2839
2844
|
"mode": "0000644",
|
|
2840
|
-
"sha256": "
|
|
2845
|
+
"sha256": "469982519512666ef5e4f36e65446397b1305c6367446c2fd177c2942d70e334"
|
|
2841
2846
|
},
|
|
2842
2847
|
{
|
|
2843
2848
|
"path": "docs/modules-contract.md",
|
|
@@ -2877,7 +2882,7 @@
|
|
|
2877
2882
|
{
|
|
2878
2883
|
"path": "docs/onboarding/diagrams/assertions.json",
|
|
2879
2884
|
"mode": "0000644",
|
|
2880
|
-
"sha256": "
|
|
2885
|
+
"sha256": "1cda1da05b0a74bc5532e478acbf3d625c49d1a1fac3b75ed967626d95a022bc"
|
|
2881
2886
|
},
|
|
2882
2887
|
{
|
|
2883
2888
|
"path": "docs/onboarding/diagrams/puppeteer-config.json",
|
|
@@ -2927,7 +2932,7 @@
|
|
|
2927
2932
|
{
|
|
2928
2933
|
"path": "docs/page-readings.json",
|
|
2929
2934
|
"mode": "0000644",
|
|
2930
|
-
"sha256": "
|
|
2935
|
+
"sha256": "db5cba7d0748f9a961561190f819ef6f23b55b2ddab6fdd86522be37dbd67ceb"
|
|
2931
2936
|
},
|
|
2932
2937
|
{
|
|
2933
2938
|
"path": "docs/project-context.template.md",
|
|
@@ -6002,17 +6007,17 @@
|
|
|
6002
6007
|
{
|
|
6003
6008
|
"path": "modules/hall-ui/public/project-settings.css",
|
|
6004
6009
|
"mode": "0000644",
|
|
6005
|
-
"sha256": "
|
|
6010
|
+
"sha256": "bc2d2bcf19334eff2232e716ca9c7961dbe84502a935238d4808dabd1d9e8454"
|
|
6006
6011
|
},
|
|
6007
6012
|
{
|
|
6008
6013
|
"path": "modules/hall-ui/public/project-settings.html",
|
|
6009
6014
|
"mode": "0000644",
|
|
6010
|
-
"sha256": "
|
|
6015
|
+
"sha256": "3fbb0181a5d4b8e947970f42983a0334526030cea636a6195a20570ce8ac5ebe"
|
|
6011
6016
|
},
|
|
6012
6017
|
{
|
|
6013
6018
|
"path": "modules/hall-ui/public/project-settings.js",
|
|
6014
6019
|
"mode": "0000644",
|
|
6015
|
-
"sha256": "
|
|
6020
|
+
"sha256": "6b814a44f884b4ae4fca13336cf9caf83da8c21a2317ea09b24d02f514cfb6fa"
|
|
6016
6021
|
},
|
|
6017
6022
|
{
|
|
6018
6023
|
"path": "modules/hall-ui/public/ranks-founding.states.json",
|
|
@@ -6509,6 +6514,11 @@
|
|
|
6509
6514
|
"mode": "0000644",
|
|
6510
6515
|
"sha256": "c28b5b3917a951c5ff3e4247283f91f500971988d297f172a1ed74af65d86777"
|
|
6511
6516
|
},
|
|
6517
|
+
{
|
|
6518
|
+
"path": "modules/hall-ui/records/project-danger-zone.md",
|
|
6519
|
+
"mode": "0000644",
|
|
6520
|
+
"sha256": "e10d215a458ba2347be709e9abbd50ac15c1755474b7ac37a0f70f51f678c14f"
|
|
6521
|
+
},
|
|
6512
6522
|
{
|
|
6513
6523
|
"path": "modules/hall-ui/records/reading-rooms.md",
|
|
6514
6524
|
"mode": "0000644",
|
|
@@ -7042,7 +7052,7 @@
|
|
|
7042
7052
|
{
|
|
7043
7053
|
"path": "modules/lifecycle/merge-lock.js",
|
|
7044
7054
|
"mode": "0000644",
|
|
7045
|
-
"sha256": "
|
|
7055
|
+
"sha256": "16667b27f462627277da092dd0cf8905cf7144f1a959fdaf3174a9fb41a91da4"
|
|
7046
7056
|
},
|
|
7047
7057
|
{
|
|
7048
7058
|
"path": "modules/lifecycle/migrations/lifecycle_001_goal_first_leads.sql",
|
|
@@ -7362,7 +7372,7 @@
|
|
|
7362
7372
|
{
|
|
7363
7373
|
"path": "modules/lifecycle/ship-preflight.js",
|
|
7364
7374
|
"mode": "0000644",
|
|
7365
|
-
"sha256": "
|
|
7375
|
+
"sha256": "99de217d003dd0a837e8604a7a6fedc28be8e5e589c0e4d70b7f46eca1b4432e"
|
|
7366
7376
|
},
|
|
7367
7377
|
{
|
|
7368
7378
|
"path": "modules/lifecycle/sky.js",
|
|
@@ -9212,7 +9222,7 @@
|
|
|
9212
9222
|
{
|
|
9213
9223
|
"path": "modules/public-landing/public/projects.html",
|
|
9214
9224
|
"mode": "0000644",
|
|
9215
|
-
"sha256": "
|
|
9225
|
+
"sha256": "bef16bab1080297b50cf1783bd3df23fe0310aabca2b4376b502256f5d4fe436"
|
|
9216
9226
|
},
|
|
9217
9227
|
{
|
|
9218
9228
|
"path": "modules/public-landing/public/projects.probes.json",
|
|
@@ -9952,12 +9962,12 @@
|
|
|
9952
9962
|
{
|
|
9953
9963
|
"path": "package-lock.json",
|
|
9954
9964
|
"mode": "0000644",
|
|
9955
|
-
"sha256": "
|
|
9965
|
+
"sha256": "32077bf55d5b87cb987c0d64e579df513a72248dc79d719f878d1cfb41f4090d"
|
|
9956
9966
|
},
|
|
9957
9967
|
{
|
|
9958
9968
|
"path": "package.json",
|
|
9959
9969
|
"mode": "0000644",
|
|
9960
|
-
"sha256": "
|
|
9970
|
+
"sha256": "a33111b7630688dd0840cf123940fc0c7efdb751056b554d6cf439831f9813c9"
|
|
9961
9971
|
},
|
|
9962
9972
|
{
|
|
9963
9973
|
"path": "public-docs/index.html",
|
|
@@ -9977,7 +9987,7 @@
|
|
|
9977
9987
|
{
|
|
9978
9988
|
"path": "release-notes.json",
|
|
9979
9989
|
"mode": "0000644",
|
|
9980
|
-
"sha256": "
|
|
9990
|
+
"sha256": "68623d6dac838274578a99dd42d1a684e1a6369e2fd7bcb53a2af3778f3b2b68"
|
|
9981
9991
|
},
|
|
9982
9992
|
{
|
|
9983
9993
|
"path": "scripts/cron/style_guide_audit.sh",
|
|
@@ -11452,7 +11462,7 @@
|
|
|
11452
11462
|
{
|
|
11453
11463
|
"path": "scripts/gds/ship-grade.js",
|
|
11454
11464
|
"mode": "0000644",
|
|
11455
|
-
"sha256": "
|
|
11465
|
+
"sha256": "5fd40df43c942eb3fcbd24a22c22743e63d2b32efba3c612c7e2fa791ad0f087"
|
|
11456
11466
|
},
|
|
11457
11467
|
{
|
|
11458
11468
|
"path": "scripts/gds/ship-honesty.js",
|
|
@@ -11477,12 +11487,12 @@
|
|
|
11477
11487
|
{
|
|
11478
11488
|
"path": "scripts/gds/ship-merge-gate.js",
|
|
11479
11489
|
"mode": "0000644",
|
|
11480
|
-
"sha256": "
|
|
11490
|
+
"sha256": "fba341724c94b1ab9a56b1b43cda608eaa477f50c6f8e65ec287632367d603a9"
|
|
11481
11491
|
},
|
|
11482
11492
|
{
|
|
11483
11493
|
"path": "scripts/gds/ship-merge.js",
|
|
11484
11494
|
"mode": "0000644",
|
|
11485
|
-
"sha256": "
|
|
11495
|
+
"sha256": "8d37d5c6cbaa1ca0e8363fab6c34159d1e16922fdae11d4ffc17b4d9e2c7f795"
|
|
11486
11496
|
},
|
|
11487
11497
|
{
|
|
11488
11498
|
"path": "scripts/gds/ship-preflight-steps.js",
|
|
@@ -11507,7 +11517,7 @@
|
|
|
11507
11517
|
{
|
|
11508
11518
|
"path": "scripts/gds/ship-state.js",
|
|
11509
11519
|
"mode": "0000644",
|
|
11510
|
-
"sha256": "
|
|
11520
|
+
"sha256": "e465cb391d4518258290d6f53be3a31353e701fb21935f8e1f9ff7b4f38e00a6"
|
|
11511
11521
|
},
|
|
11512
11522
|
{
|
|
11513
11523
|
"path": "scripts/gds/ship-surprise.js",
|
|
@@ -12082,7 +12092,7 @@
|
|
|
12082
12092
|
{
|
|
12083
12093
|
"path": "src/bongos/routes/core-update.js",
|
|
12084
12094
|
"mode": "0000644",
|
|
12085
|
-
"sha256": "
|
|
12095
|
+
"sha256": "cc6bb5e7a69278083d834af70c1963c1d535bf1dc9321b543e3440609cd24502"
|
|
12086
12096
|
},
|
|
12087
12097
|
{
|
|
12088
12098
|
"path": "src/bongos/routes/feedback.js",
|
|
@@ -12197,7 +12207,7 @@
|
|
|
12197
12207
|
{
|
|
12198
12208
|
"path": "src/module-api.js",
|
|
12199
12209
|
"mode": "0000644",
|
|
12200
|
-
"sha256": "
|
|
12210
|
+
"sha256": "b5dc083bafe5265707463d0de6a151f21dd83a2849d7e8eeded08215ddce59cb"
|
|
12201
12211
|
},
|
|
12202
12212
|
{
|
|
12203
12213
|
"path": "src/module-loader/catalog.js",
|
|
@@ -15327,7 +15337,7 @@
|
|
|
15327
15337
|
{
|
|
15328
15338
|
"path": "tests/merge_lock.mjs",
|
|
15329
15339
|
"mode": "0000644",
|
|
15330
|
-
"sha256": "
|
|
15340
|
+
"sha256": "03888ba034c0af2af764575b4b6c2b37e1f1eb54c7dc02b39ce4590e5a4b5451"
|
|
15331
15341
|
},
|
|
15332
15342
|
{
|
|
15333
15343
|
"path": "tests/metrics.mjs",
|
|
@@ -16044,6 +16054,11 @@
|
|
|
16044
16054
|
"mode": "0000644",
|
|
16045
16055
|
"sha256": "9da8c3416b4d06f82fdf8254aec216d8e7a7368b697f151f5d58f1c286f86639"
|
|
16046
16056
|
},
|
|
16057
|
+
{
|
|
16058
|
+
"path": "tests/project_manage_link.mjs",
|
|
16059
|
+
"mode": "0000644",
|
|
16060
|
+
"sha256": "b2b14c23e972735db76833c133214e977f4ab6b0c1009fd3946cebae4346e4a5"
|
|
16061
|
+
},
|
|
16047
16062
|
{
|
|
16048
16063
|
"path": "tests/project_modules_ui.mjs",
|
|
16049
16064
|
"mode": "0000644",
|
|
@@ -17012,7 +17027,7 @@
|
|
|
17012
17027
|
{
|
|
17013
17028
|
"path": "tests/ship_merge_gate.mjs",
|
|
17014
17029
|
"mode": "0000644",
|
|
17015
|
-
"sha256": "
|
|
17030
|
+
"sha256": "28ad67a5ee8be6807f8d16149ea42cb837b7bc4e4084068b74d8e944db09d291"
|
|
17016
17031
|
},
|
|
17017
17032
|
{
|
|
17018
17033
|
"path": "tests/ship_post_land_verify.mjs",
|
|
@@ -17022,7 +17037,7 @@
|
|
|
17022
17037
|
{
|
|
17023
17038
|
"path": "tests/ship_preflight.mjs",
|
|
17024
17039
|
"mode": "0000644",
|
|
17025
|
-
"sha256": "
|
|
17040
|
+
"sha256": "325980877dc43ea902de03cf938a85f29700f0443ca040efe75873b5f4f210b9"
|
|
17026
17041
|
},
|
|
17027
17042
|
{
|
|
17028
17043
|
"path": "tests/ship_premerge.mjs",
|
|
@@ -17064,6 +17079,11 @@
|
|
|
17064
17079
|
"mode": "0000644",
|
|
17065
17080
|
"sha256": "46856ed6c15ec0cca70e9d2541b4e17331de3c2336eb45dc1e36de1241b5440a"
|
|
17066
17081
|
},
|
|
17082
|
+
{
|
|
17083
|
+
"path": "tests/ship_vendored_instance.mjs",
|
|
17084
|
+
"mode": "0000644",
|
|
17085
|
+
"sha256": "75aa59accad12d197202457ed36281e5d3eca1040762a5045972c4b10cf09006"
|
|
17086
|
+
},
|
|
17067
17087
|
{
|
|
17068
17088
|
"path": "tests/ship_zero_commit.mjs",
|
|
17069
17089
|
"mode": "0000644",
|
|
@@ -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
|
+
- 520 operations across 75 resource groups
|
|
9
9
|
|
|
10
10
|
## Use it from your project
|
|
11
11
|
|
|
@@ -844,6 +844,10 @@ function createClient(opts = {}) {
|
|
|
844
844
|
// GET /profiles/{handle} — rank: public — GET /profiles/:handle
|
|
845
845
|
getProfilesHandle: (args) => request("GET", "/profiles/{handle}", { hasBody: false }, args),
|
|
846
846
|
},
|
|
847
|
+
"project": {
|
|
848
|
+
// GET /project/manage-link — rank: archon — GET /project/manage-link
|
|
849
|
+
getProjectManageLink: (args) => request("GET", "/project/manage-link", { hasBody: false }, args),
|
|
850
|
+
},
|
|
847
851
|
"projectSettings": {
|
|
848
852
|
// GET /project-settings — rank: metic+archon — GET /project-settings
|
|
849
853
|
getProjectSettings: (args) => request("GET", "/project-settings", { hasBody: false }, args),
|
|
@@ -843,6 +843,10 @@ function createClient(opts = {}) {
|
|
|
843
843
|
// GET /profiles/{handle} — rank: public — GET /profiles/:handle
|
|
844
844
|
getProfilesHandle: (args) => request("GET", "/profiles/{handle}", { hasBody: false }, args),
|
|
845
845
|
},
|
|
846
|
+
"project": {
|
|
847
|
+
// GET /project/manage-link — rank: archon — GET /project/manage-link
|
|
848
|
+
getProjectManageLink: (args) => request("GET", "/project/manage-link", { hasBody: false }, args),
|
|
849
|
+
},
|
|
846
850
|
"projectSettings": {
|
|
847
851
|
// GET /project-settings — rank: metic+archon — GET /project-settings
|
|
848
852
|
getProjectSettings: (args) => request("GET", "/project-settings", { hasBody: false }, args),
|
|
@@ -124,6 +124,7 @@ export interface GetPageNotesIdResponse { note: unknown; images: unknown; ideas:
|
|
|
124
124
|
export interface GetPageNotesIdeasResponse { page_path: unknown; ideas: unknown }
|
|
125
125
|
export interface GetPageNotesResponse { page_id: unknown; notes: unknown }
|
|
126
126
|
export interface GetProfilesHandleResponse { account: unknown; cross_project: unknown }
|
|
127
|
+
export interface GetProjectManageLinkResponse { ok: boolean; link: unknown }
|
|
127
128
|
export interface GetProjectSettingsResponse { rows: unknown }
|
|
128
129
|
export interface GetProjectsFeaturedResponse { projects: unknown; page: PageInfo }
|
|
129
130
|
export interface GetProjectsResponse { projects: unknown }
|
|
@@ -1337,6 +1338,10 @@ export interface BongosClient {
|
|
|
1337
1338
|
/** GET /profiles/{handle} — rank: public */
|
|
1338
1339
|
getProfilesHandle(args?: RequestArgs): Promise<GetProfilesHandleResponse>;
|
|
1339
1340
|
};
|
|
1341
|
+
"project": {
|
|
1342
|
+
/** GET /project/manage-link — rank: archon */
|
|
1343
|
+
getProjectManageLink(args?: RequestArgs): Promise<GetProjectManageLinkResponse>;
|
|
1344
|
+
};
|
|
1340
1345
|
"projectSettings": {
|
|
1341
1346
|
/** GET /project-settings — rank: metic+archon */
|
|
1342
1347
|
getProjectSettings(args?: RequestArgs): Promise<GetProjectSettingsResponse>;
|
|
@@ -840,6 +840,10 @@ export function createClient(opts = {}) {
|
|
|
840
840
|
// GET /profiles/{handle} — rank: public — GET /profiles/:handle
|
|
841
841
|
getProfilesHandle: (args) => request("GET", "/profiles/{handle}", { hasBody: false }, args),
|
|
842
842
|
},
|
|
843
|
+
"project": {
|
|
844
|
+
// GET /project/manage-link — rank: archon — GET /project/manage-link
|
|
845
|
+
getProjectManageLink: (args) => request("GET", "/project/manage-link", { hasBody: false }, args),
|
|
846
|
+
},
|
|
843
847
|
"projectSettings": {
|
|
844
848
|
// GET /project-settings — rank: metic+archon — GET /project-settings
|
|
845
849
|
getProjectSettings: (args) => request("GET", "/project-settings", { hasBody: false }, args),
|
package/docs/adr/0366-hall-planning-is-forms-and-a-goal-made-there-carries-its-own-spec-task.md
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# ADR 0366 — Hall planning is forms; a goal made there carries its own spec task, and the interviews stay in the CLI
|
|
2
|
+
|
|
3
|
+
- **Status:** accepted
|
|
4
|
+
- **Date:** 2026-10-05
|
|
5
|
+
- **Task:** [task 1003461](https://cloudbongos.com/builders#/task/1003461) (spike, goal 1000089 — Working area 3, BONGOS-V2)
|
|
6
|
+
- **Builds on:** [ADR 0086](0086-goal-scoped-work-hierarchy.md) (goals and the scope wall), [ADR 0154](0154-goal-owner-criterion-authoring.md) (a goal's owner authors its criteria), [ADR 0264](0264-the-ten-working-areas.md) §1 (working area 3: "users edit, scope and manage work without ever prompting Claude")
|
|
7
|
+
- **Decided with:** the owner, 2026-10-05 — two questions; the scope answer was the owner's own (D3), the hand-off answer was the recommended option (D4).
|
|
8
|
+
|
|
9
|
+
## Context
|
|
10
|
+
|
|
11
|
+
Goal 1000089 wants the hall to plan work: create a task, a goal, a criterion. Two CLI flows do this today, and both are **interviews**, not forms:
|
|
12
|
+
|
|
13
|
+
- **`/goal-create`** (`.claude/skills/goal-create/SKILL.md`). Phases 1–3 are marked *"autonomous; ask nothing"*: Claude picks the version, decides **reuse vs create** against the live goal board, infers the **scope wall** from the planned work's file paths and checks it against the live module roster, drafts 2–4 criteria and 3–8 seed tasks with dependencies. Phase 4 asks the human only the grey areas (at most 4 questions) and one approval. Phase 5 writes goal → criteria → tasks.
|
|
14
|
+
- **`/planning-session`** (`.claude/skills/planning-session/SKILL.md`). A whole version: a written spec file under `docs/specs/`, a multi-round interview that runs *"until nothing material is left"*, then a migration, a seed script, dependency ranking and promotion. Creating a version is Archon-only (ADR 0250 §6).
|
|
15
|
+
|
|
16
|
+
The spike's question: which of these steps are form-shaped, which must stay interviews (named, so nobody half-builds them), and whether anything wants a third shape. The constraint: every write already exists behind a server rank floor (`task.create`, `goal.create`, `criterion.create`, the Archon wall on a protected scope); the spike decides **surface only**.
|
|
17
|
+
|
|
18
|
+
### The evidence
|
|
19
|
+
|
|
20
|
+
Read the two flows for which inputs a person can **know** versus which Claude **infers**:
|
|
21
|
+
|
|
22
|
+
| Input | Who supplies it today | Shape |
|
|
23
|
+
|---|---|---|
|
|
24
|
+
| A task's title, description, goal | the person | form — and the goal picker already exists: `GET /goals/suggestions` feeds the hall composer (`sky-composer.js`, task 1003069) |
|
|
25
|
+
| A task's kind, criterion link | the server already infers it: `POST /tasks` auto-classifies kind; `GET /goals/:id/suggest-criteria` ranks criteria | form, with the server's suggestion shown |
|
|
26
|
+
| A goal's name, subtitle, description, version, category | the person (goal-create *drafts* them, but they are statements of intent, and `GET /work-categories` is a plain list) | form |
|
|
27
|
+
| A criterion's outcome text | the person, for a goal they own (ADR 0154) | form — the slug `criterion_id` is derivable from the text, and a 409 collision is a sentence, not a judgement |
|
|
28
|
+
| Satisfying a criterion | already in the hall (`goals-page.js`) | form (exists) |
|
|
29
|
+
| Reuse vs create a goal | Claude reads the board and judges | **interview** — though a form can *show* the suggester's candidates and let the person choose |
|
|
30
|
+
| A goal's **scope wall** | Claude infers from file paths, checks the roster | **interview** — and the roster is not readable by the hall at all (`module-scope-map` is server-only; the hall gets only a derived `scope_protected` flag, `goal-route-authz.js` `decorateGoalScope`) |
|
|
31
|
+
| Criteria drafted from a description; seed tasks and their dependency edges | Claude | **interview** |
|
|
32
|
+
| A version: spec, multi-round interview, migration, seed script, ranking | Claude with the owner, Archon-only to create | **interview** |
|
|
33
|
+
|
|
34
|
+
And two precedents show the in-between shape already exists in the hall: the idea composer asks a **server-defined question sequence** with skip and cancel and no Claude (`sky-composer.js`, the base-v2 template), and the hall already **composes a prompt for a session to finish** (`task-lib.js` `buildPromptForTask`, the bulk toolbar's sequential and parallel prompts, collab's "Copy for Session Start").
|
|
35
|
+
|
|
36
|
+
## Decision
|
|
37
|
+
|
|
38
|
+
**D1 — Form-shaped; build in the hall.** Every step whose inputs the person knows:
|
|
39
|
+
1. Create a task under a goal (title, description, goal via the existing suggester; kind and criterion offered from the server's own suggestions). → [task 1003462](https://cloudbongos.com/builders#/task/1003462).
|
|
40
|
+
2. Create a goal: a **name** field and a separate **subtitle/description** (goal 1000072's convention — a title is a name, not its own explanation), version, category. **No scope field** (D3). Before the name is submitted the form shows the suggester's matching open goals, so "reuse instead" is a click and the judgement stays the person's. → [task 1003463](https://cloudbongos.com/builders#/task/1003463).
|
|
41
|
+
3. Attach a criterion to a goal the person owns or manages: the outcome text; the slug is derived from it. → task 1003463.
|
|
42
|
+
|
|
43
|
+
Every refusal the server already makes — `task.create` / `goal.create` / `criterion.create` floors, the Archon wall on a protected scope, ADR 0154's `bad_goal_id` for a goal the actor does not hold — is rendered as copy. The forms never pre-filter themselves into a shape that hides one (1003463's own rule).
|
|
44
|
+
|
|
45
|
+
**D2 — Interview-shaped; stays in the CLI, deliberately absent from the hall.** Named so nobody half-builds them:
|
|
46
|
+
- planning a **version** (`/planning-session`) — the spec file, the multi-round interview, the migration, the seed script, the ranking, and creating a version at all;
|
|
47
|
+
- **inferring a goal's scope wall** from the work it will do;
|
|
48
|
+
- **drafting criteria** from a description, and **decomposing a goal into seed tasks** with dependency edges;
|
|
49
|
+
- **judging reuse vs create** beyond showing the suggester's candidates;
|
|
50
|
+
- **carrying achieved goals forward** across a version boundary (the planning session's rescope).
|
|
51
|
+
|
|
52
|
+
A hall form for any of these would be the title-field-and-textarea the spike warned against: worse than the CLI it replaces, because the CLI's value *is* the inference.
|
|
53
|
+
|
|
54
|
+
**D3 — The third shape: a goal made in the hall carries its own spec task (the owner's answer).** A goal created from the hall form is created with a task inside it — **"Spec goal N: its scope, criteria and first tasks"** — and the goal's other work waits behind that task until it ships. Someone claims it like any task and does the interview half in a session (`/goal-create`, finishing an existing goal rather than creating one). This is the "draft the hall composes and a session finishes" shape, but recorded in the ledger as a claimable, creditable task rather than a prompt on someone's clipboard. Concretely:
|
|
55
|
+
- `POST /goals` grows an opt-in `spec_task: true` (the hall form sends it; `/goal-create`, which specs inline, does not). The server creates the spec task in the same request, `source_ref = goal-<id>-spec` so a retry is idempotent, promoted to `ready` so it can be claimed.
|
|
56
|
+
- While that task is unshipped, every task created in the goal gets a **dependency** on it, so a claim is refused `DEPS_NOT_SHIPPED` — the existing gate, not a new one. Once it ships, the dependents auto-promote as they do today.
|
|
57
|
+
- The walls do not move. Setting the scope uses the existing `POST /goals/:id/scope` (`goal.scope.widen`, owner or manager, Archon for a protected key) and criteria use `criterion.create` under ADR 0154. A claimer who does not hold the goal drafts the scope and criteria and hands them to the owner — `/goal-create`'s existing off-ramp — rather than gaining anything.
|
|
58
|
+
|
|
59
|
+
No new permission and no migration: the spec task is identified by its `source_ref`, and blocking is an ordinary dependency.
|
|
60
|
+
|
|
61
|
+
**D4 — An optional hand-off button.** On a goal's page, a **"Plan with Claude"** button copies a prompt that continues from that goal (its open spec task when there is one, else `/goal-create` against the goal for seed tasks). It is an extra, never a requirement: every D1 step works without it, so ADR 0264's "without ever prompting Claude" holds.
|
|
62
|
+
|
|
63
|
+
## Consequences
|
|
64
|
+
|
|
65
|
+
- Goal 1000089's remaining planning work is five tasks (below; the three new ones were filed by this spike as tasks 1004585, 1004586 and 1004587). The CLI flows are unchanged except that `/goal-create` learns to finish an existing goal's spec task.
|
|
66
|
+
- A hall-made goal is visibly **unspecced** until its spec task ships, and its work cannot be claimed early. That is the intent: a goal with no wall and no criteria is the state `/goal-create` exists to prevent, and D3 makes the gap a task instead of a silence.
|
|
67
|
+
- The hall never needs the module roster, so the protected list stays server-only.
|
|
68
|
+
- Risk: a spec task nobody claims stalls its goal. It is an ordinary ready task, visible on the board and in the goal; if this proves common, an age nudge is the follow-up, not a softer block.
|
|
69
|
+
|
|
70
|
+
## The task list for the rest of the criterion
|
|
71
|
+
|
|
72
|
+
| Task | Shape | Depends on |
|
|
73
|
+
|---|---|---|
|
|
74
|
+
| [task 1003462](https://cloudbongos.com/builders#/task/1003462) — Create a task from the hall, attached to its goal | form (D1.1) | — |
|
|
75
|
+
| [task 1004585](https://cloudbongos.com/builders#/task/1004585) — A goal made in the hall carries a spec task that gates its other work (server: `spec_task`, the dependency) | D3 | — |
|
|
76
|
+
| [task 1003463](https://cloudbongos.com/builders#/task/1003463) — Author a goal and a done-when criterion from the hall | form (D1.2, D1.3) | task 1004585 |
|
|
77
|
+
| [task 1004586](https://cloudbongos.com/builders#/task/1004586) — `/goal-create` finishes an existing goal's spec task | D3, CLI | task 1004585 |
|
|
78
|
+
| [task 1004587](https://cloudbongos.com/builders#/task/1004587) — "Plan with Claude" hand-off button on a goal | D4 | task 1004585 |
|
|
79
|
+
|
|
80
|
+
## Alternatives considered
|
|
81
|
+
|
|
82
|
+
- **A scope picker in the goal form** (checkboxes of code areas, protected ones marked). Rejected in favour of D3 by the owner: scope is inferred from the work, and a person ticking boxes before the work is understood is the half-built interview D2 forbids. It would also have needed a new roster read.
|
|
83
|
+
- **No scope at all for hall goals.** Rejected: an open wall with no criteria and nobody responsible for fixing it is the catch-all failure ADR 0086 retired.
|
|
84
|
+
- **Port `/goal-create` into the hall as a guided form** (the idea composer's question sequence). Rejected: the composer's questions are fixed; goal-create's are decided by what it reads, which is exactly the part a script cannot do.
|
|
85
|
+
- **The hand-off as the only path** (every hall planning action copies a prompt). Rejected: it breaks working area 3's thesis outright.
|
package/docs/adr/README.md
CHANGED
|
@@ -484,3 +484,4 @@ These 20 numbers are each shared by exactly two files. They are **accepted histo
|
|
|
484
484
|
| 0363 | [**Who decides what is a per-project table, changed only by a passed amendment** ([task 1004529](https://cloudbongos.com/builders#/task/1004529), goal 1000125). **D1:** `government_decision_rules`, one row per building: `gate` (as today), `board` (the charter only), `nobody` (vacant) or a membership predicate with decide / first / consent / majority / unanimous / sign-off. **D2:** the seeded defaults are today, and a malformed row reads as its default. **D3:** written only inside the transaction that closes a `decision_rules` amendment as passed; JS guard + SQL condition + trigger; no settings route. **D4:** eight building matters join the board's three subjects, openable only where a row names a sitting; sign-off is the author rule. **D5:** People's rank assignments defer to People's row (`checkActAlone`); a passed People matter acts. **D6:** the docket's buildings carry who decides.](0363-who-decides-what-is-a-table-changed-only-by-amendment.md) | government / Governor City |
|
|
485
485
|
| 0364 | [**Repo access is asked at sign-in on the hub, and held for as long as the builder stays signed in** ([task 1004549](https://cloudbongos.com/builders#/task/1004549)). Amends ADR 0143 and 0155. **D1:** every sign-in door on the hub's own pages carries `repos=1`; the hall and CLI stay identity-only. **D2:** the repo token's TTL is the web session's remaining life; a web sign-out deletes it, a CLI logout does not. **D3:** a draft at a wizard step beside a stored create keeps its place on a reload or a GitHub round-trip.](0364-repo-access-is-asked-at-sign-in-and-held-for-the-session.md) | auth / GitHub / create wizard |
|
|
486
486
|
| 0365 | [**A guild engages a project through each member's own door** ([task 1002303](https://cloudbongos.com/builders#/task/1002303)). Amends ADR 0336 D7's invite half after ADR 0353. **D1:** the engagement row as D7 specified, plus `guild_id` on the echo (the latest application decides the label). **D2:** a guild applies = each member applies as themselves through the relay, naming the engagement. **D3:** a project invites a guild = the hub records it and returns one hall hand-off link per public-roster member; no hub-written invites, the one-step relay stays deferred. **D4:** a project is named only when on the map and public, for both kinds. **D5:** the label rides the applicant-profile read; the queue is R28's. **D6:** the D4.4 guild cards are their own task.](0365-a-guild-engages-a-project-through-each-members-own-door.md) | guilds / invites / applications |
|
|
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 |
|
package/docs/api/openapi.json
CHANGED
|
@@ -233,6 +233,10 @@
|
|
|
233
233
|
"name": "profiles",
|
|
234
234
|
"description": "Endpoints under `/api/bongos/profiles`."
|
|
235
235
|
},
|
|
236
|
+
{
|
|
237
|
+
"name": "project",
|
|
238
|
+
"description": "Endpoints under `/api/bongos/project`."
|
|
239
|
+
},
|
|
236
240
|
{
|
|
237
241
|
"name": "project-settings",
|
|
238
242
|
"description": "Endpoints under `/api/bongos/project-settings`."
|
|
@@ -15612,6 +15616,44 @@
|
|
|
15612
15616
|
]
|
|
15613
15617
|
}
|
|
15614
15618
|
},
|
|
15619
|
+
"/project/manage-link": {
|
|
15620
|
+
"get": {
|
|
15621
|
+
"operationId": "get_project_manage_link",
|
|
15622
|
+
"tags": [
|
|
15623
|
+
"project"
|
|
15624
|
+
],
|
|
15625
|
+
"summary": "GET /project/manage-link",
|
|
15626
|
+
"description": "GET /project/manage-link — the hub's page for THIS project, where its owner takes it offline or disconnects it (task 1004570). On a hosted project the owner is its Archon, so the read is Archon-only: a builder below that is refused and the hall draws no section. { link: null } on a self-hosted instance (no hub to link to). rank: archon — the project's owner; it names where the project can be ended.\n\n**Rank:** `archon` — Archon only (rank and identity management + the escalation keys — the trust boundary).",
|
|
15627
|
+
"x-rank": "archon",
|
|
15628
|
+
"x-source": "src/bongos/routes/core-update.js",
|
|
15629
|
+
"responses": {
|
|
15630
|
+
"200": {
|
|
15631
|
+
"description": "Success.",
|
|
15632
|
+
"content": {
|
|
15633
|
+
"application/json": {
|
|
15634
|
+
"schema": {
|
|
15635
|
+
"$ref": "#/components/schemas/GetProjectManageLinkResponse"
|
|
15636
|
+
}
|
|
15637
|
+
}
|
|
15638
|
+
}
|
|
15639
|
+
},
|
|
15640
|
+
"400": {
|
|
15641
|
+
"$ref": "#/components/responses/BadRequest"
|
|
15642
|
+
},
|
|
15643
|
+
"401": {
|
|
15644
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
15645
|
+
},
|
|
15646
|
+
"403": {
|
|
15647
|
+
"$ref": "#/components/responses/Forbidden"
|
|
15648
|
+
}
|
|
15649
|
+
},
|
|
15650
|
+
"security": [
|
|
15651
|
+
{
|
|
15652
|
+
"builderSession": []
|
|
15653
|
+
}
|
|
15654
|
+
]
|
|
15655
|
+
}
|
|
15656
|
+
},
|
|
15615
15657
|
"/projects": {
|
|
15616
15658
|
"get": {
|
|
15617
15659
|
"operationId": "get_projects",
|
|
@@ -26031,6 +26073,19 @@
|
|
|
26031
26073
|
"cross_project"
|
|
26032
26074
|
]
|
|
26033
26075
|
},
|
|
26076
|
+
"GetProjectManageLinkResponse": {
|
|
26077
|
+
"type": "object",
|
|
26078
|
+
"properties": {
|
|
26079
|
+
"ok": {
|
|
26080
|
+
"type": "boolean"
|
|
26081
|
+
},
|
|
26082
|
+
"link": {}
|
|
26083
|
+
},
|
|
26084
|
+
"required": [
|
|
26085
|
+
"ok",
|
|
26086
|
+
"link"
|
|
26087
|
+
]
|
|
26088
|
+
},
|
|
26034
26089
|
"GetProjectSettingsResponse": {
|
|
26035
26090
|
"type": "object",
|
|
26036
26091
|
"properties": {
|
|
@@ -33375,9 +33430,9 @@
|
|
|
33375
33430
|
"description": "A required dependency/feature is not configured or is temporarily down."
|
|
33376
33431
|
}
|
|
33377
33432
|
},
|
|
33378
|
-
"x-endpoint-count":
|
|
33379
|
-
"x-schema-count":
|
|
33433
|
+
"x-endpoint-count": 520,
|
|
33434
|
+
"x-schema-count": 561,
|
|
33380
33435
|
"x-undocumented-bodies": 12,
|
|
33381
|
-
"x-response-schemas":
|
|
33436
|
+
"x-response-schemas": 372,
|
|
33382
33437
|
"x-generated-by": "scripts/gds/gen-api-docs.js"
|
|
33383
33438
|
}
|
package/docs/api-reference.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
# Bongos API reference
|
|
4
4
|
|
|
5
|
-
> **Generated from the live route files** — the route file is authoritative.
|
|
5
|
+
> **Generated from the live route files** — the route file is authoritative. 520 endpoints across 93 route files.
|
|
6
6
|
> Machine-readable spec: [`docs/api/openapi.json`](api/openapi.json) (OpenAPI 3.1). Rendered docs site: **`/docs`** (e.g. `cloudbongos.com/docs`).
|
|
7
7
|
|
|
8
8
|
Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust-boundary-server-enforced-permissions.md)): `public` < `any-builder` < `metic+archon` < `archon`.
|
|
@@ -599,6 +599,12 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust
|
|
|
599
599
|
|---|---|---|---|---|
|
|
600
600
|
| GET | `/api/bongos/profiles/:handle` | `public` | — | a handle-addressed public profile. |
|
|
601
601
|
|
|
602
|
+
## `project` (1)
|
|
603
|
+
|
|
604
|
+
| Method | Path | Rank | Body | Description |
|
|
605
|
+
|---|---|---|---|---|
|
|
606
|
+
| GET | `/api/bongos/project/manage-link` | `archon` | — | GET /project/manage-link — the hub's page for THIS project, where its owner takes it offline or disconnects it (task 1004570). |
|
|
607
|
+
|
|
602
608
|
## `project-settings` (2)
|
|
603
609
|
|
|
604
610
|
| Method | Path | Rank | Body | Description |
|