@bongos/core 1.21.7 → 1.21.9
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 +98 -38
- 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 +8 -0
- package/clients/bongos-client/index.mjs +4 -0
- package/docs/adr/0363-who-decides-what-is-a-table-changed-only-by-amendment.md +52 -0
- package/docs/adr/README.md +1 -0
- package/docs/api/openapi.json +182 -3
- package/docs/api-reference.md +4 -2
- package/docs/copy-inventory.md +20 -5
- package/docs/copy-registry.json +163 -16
- package/docs/module-api-changelog.md +4 -0
- package/docs/page-inventory.json +33 -4
- package/docs/page-readings.json +44 -2
- package/modules/discord/board-broadcast.js +2 -0
- package/modules/government/board.js +82 -23
- package/modules/government/db.js +81 -6
- package/modules/government/decision-board.js +300 -0
- package/modules/government/decision-rules.js +312 -0
- package/modules/government/docket.js +49 -9
- package/modules/government/migrations/government_023_decision_rules.sql +190 -0
- package/modules/government/routes/government.js +115 -0
- package/modules/hall-ui/public/city-draw.js +11 -2
- package/modules/hall-ui/public/street-draw.js +585 -0
- package/modules/hall-ui/public/street.css +188 -0
- package/modules/hall-ui/public/street.html +118 -0
- package/modules/hall-ui/public/street.js +364 -0
- package/modules/hall-ui/public/street.states.json +43 -0
- package/modules/hall-ui/records/governor-street.md +14 -0
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/release-notes.json +16 -0
- package/src/bongos/route-rank-check.js +6 -0
- package/src/bongos/serve-internal.js +12 -0
- package/src/module-api.js +1 -1
- package/tests/government_abuse_matrix.mjs +3 -0
- package/tests/government_decision_rules.mjs +701 -0
- package/tests/government_routes.mjs +4 -0
- package/tests/government_seed.mjs +1 -0
- package/tests/hall_audit.mjs +9 -1
- package/tests/hall_page_gate_map.mjs +3 -0
- package/tests/hall_street.mjs +521 -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.9",
|
|
6
|
+
"core_contract": "1.21.9",
|
|
7
|
+
"source_commit": "5e31917865d3e81d3818f3930245d356d5a4026d",
|
|
8
8
|
"source_ref": "HEAD",
|
|
9
|
-
"built_at": "2026-10-02T17:06
|
|
9
|
+
"built_at": "2026-10-02T17:40:06.190Z",
|
|
10
10
|
"redaction": {
|
|
11
11
|
"model": "docs-redacted+functional-verbatim",
|
|
12
|
-
"docs_redacted":
|
|
12
|
+
"docs_redacted": 579,
|
|
13
13
|
"agent_docs_stubbed": 27,
|
|
14
|
-
"functional_verbatim":
|
|
14
|
+
"functional_verbatim": 2885,
|
|
15
15
|
"rules": 3,
|
|
16
16
|
"gate_literals": 3,
|
|
17
17
|
"gate": "passed"
|
|
18
18
|
},
|
|
19
|
-
"file_count":
|
|
20
|
-
"tree_sha256": "
|
|
19
|
+
"file_count": 3492,
|
|
20
|
+
"tree_sha256": "24b6a7b06537f3c5cb25c6a7eabfb5f090643f6e300f42c37dee0627da872521",
|
|
21
21
|
"files": [
|
|
22
22
|
{
|
|
23
23
|
"path": ".claude/skills/ask-for-help/SKILL.md",
|
|
@@ -317,12 +317,12 @@
|
|
|
317
317
|
{
|
|
318
318
|
"path": "clients/bongos-client/README.md",
|
|
319
319
|
"mode": "0000644",
|
|
320
|
-
"sha256": "
|
|
320
|
+
"sha256": "9a17378c114f0459f7e10ea00630b8e28a681c00f7167d42e6c4f2753250ac9d"
|
|
321
321
|
},
|
|
322
322
|
{
|
|
323
323
|
"path": "clients/bongos-client/bongos-client.global.js",
|
|
324
324
|
"mode": "0000644",
|
|
325
|
-
"sha256": "
|
|
325
|
+
"sha256": "89925473105a2efe1cc3113eb01bb781e340b495125552769562e22c1c43e1f4"
|
|
326
326
|
},
|
|
327
327
|
{
|
|
328
328
|
"path": "clients/bongos-client/examples/hello-world.mjs",
|
|
@@ -332,17 +332,17 @@
|
|
|
332
332
|
{
|
|
333
333
|
"path": "clients/bongos-client/index.cjs",
|
|
334
334
|
"mode": "0000644",
|
|
335
|
-
"sha256": "
|
|
335
|
+
"sha256": "f6ef7ef830a1bc6c806e523a5c1e86cdc43b48b73f5d66f7235e9ed23837ac82"
|
|
336
336
|
},
|
|
337
337
|
{
|
|
338
338
|
"path": "clients/bongos-client/index.d.ts",
|
|
339
339
|
"mode": "0000644",
|
|
340
|
-
"sha256": "
|
|
340
|
+
"sha256": "96670d9a3abbf2d4bdd3eb3f63f179210493a822d07bbdfc9dc98d4e93cd866a"
|
|
341
341
|
},
|
|
342
342
|
{
|
|
343
343
|
"path": "clients/bongos-client/index.mjs",
|
|
344
344
|
"mode": "0000644",
|
|
345
|
-
"sha256": "
|
|
345
|
+
"sha256": "3611b6a0d1425b44300c80828e90ae324e566639f2bc4a6f5792902c8805b31c"
|
|
346
346
|
},
|
|
347
347
|
{
|
|
348
348
|
"path": "clients/bongos-client/package.json",
|
|
@@ -2274,20 +2274,25 @@
|
|
|
2274
2274
|
"mode": "0000644",
|
|
2275
2275
|
"sha256": "8a9616a33266a54d6d148fdacdbee9a516483244f6d914fee9b5b2c9f0343cfa"
|
|
2276
2276
|
},
|
|
2277
|
+
{
|
|
2278
|
+
"path": "docs/adr/0363-who-decides-what-is-a-table-changed-only-by-amendment.md",
|
|
2279
|
+
"mode": "0000644",
|
|
2280
|
+
"sha256": "4feed5892da4fe2fbe148cdf56edeacd2bf7e6c3886a880a4246811e500e6973"
|
|
2281
|
+
},
|
|
2277
2282
|
{
|
|
2278
2283
|
"path": "docs/adr/README.md",
|
|
2279
2284
|
"mode": "0000644",
|
|
2280
|
-
"sha256": "
|
|
2285
|
+
"sha256": "dca575c50aaffca8560db48e6965ecbe4b3826e11052b0d17c02b216fda49baf"
|
|
2281
2286
|
},
|
|
2282
2287
|
{
|
|
2283
2288
|
"path": "docs/api-reference.md",
|
|
2284
2289
|
"mode": "0000644",
|
|
2285
|
-
"sha256": "
|
|
2290
|
+
"sha256": "d777b55865ecfa5a21314670adbeb2beac32108edad08757edb4df5cdc25bcf5"
|
|
2286
2291
|
},
|
|
2287
2292
|
{
|
|
2288
2293
|
"path": "docs/api/openapi.json",
|
|
2289
2294
|
"mode": "0000644",
|
|
2290
|
-
"sha256": "
|
|
2295
|
+
"sha256": "6b1825bfec2fdcf183266c4cb4a3e66cef2d66ef0d712050b9361a534ce78313"
|
|
2291
2296
|
},
|
|
2292
2297
|
{
|
|
2293
2298
|
"path": "docs/architecture.md",
|
|
@@ -2312,12 +2317,12 @@
|
|
|
2312
2317
|
{
|
|
2313
2318
|
"path": "docs/copy-inventory.md",
|
|
2314
2319
|
"mode": "0000644",
|
|
2315
|
-
"sha256": "
|
|
2320
|
+
"sha256": "29d3b399a53a5c89ecd310d353865cfbb29edbd28831dbf39bf7a094369dc746"
|
|
2316
2321
|
},
|
|
2317
2322
|
{
|
|
2318
2323
|
"path": "docs/copy-registry.json",
|
|
2319
2324
|
"mode": "0000644",
|
|
2320
|
-
"sha256": "
|
|
2325
|
+
"sha256": "aec91a4e362a16a62845f79329962972f3b7dbbb819983776528ad784a5c9bdd"
|
|
2321
2326
|
},
|
|
2322
2327
|
{
|
|
2323
2328
|
"path": "docs/design/apex-pass-2-direction.md",
|
|
@@ -2822,7 +2827,7 @@
|
|
|
2822
2827
|
{
|
|
2823
2828
|
"path": "docs/module-api-changelog.md",
|
|
2824
2829
|
"mode": "0000644",
|
|
2825
|
-
"sha256": "
|
|
2830
|
+
"sha256": "8f7968f627d9784ce81c36e26fefc4e729b846921ec9683cb8ebec89f613e031"
|
|
2826
2831
|
},
|
|
2827
2832
|
{
|
|
2828
2833
|
"path": "docs/modules-contract.md",
|
|
@@ -2907,12 +2912,12 @@
|
|
|
2907
2912
|
{
|
|
2908
2913
|
"path": "docs/page-inventory.json",
|
|
2909
2914
|
"mode": "0000644",
|
|
2910
|
-
"sha256": "
|
|
2915
|
+
"sha256": "b92d6e4dc2359a29511b89a63fac998dee78365bc585c20bc1af5dafac6a3b69"
|
|
2911
2916
|
},
|
|
2912
2917
|
{
|
|
2913
2918
|
"path": "docs/page-readings.json",
|
|
2914
2919
|
"mode": "0000644",
|
|
2915
|
-
"sha256": "
|
|
2920
|
+
"sha256": "8adad41c014489cb4c242af0ebe67f28c78337eb4fdb932739de76a0e977f2d1"
|
|
2916
2921
|
},
|
|
2917
2922
|
{
|
|
2918
2923
|
"path": "docs/project-context.template.md",
|
|
@@ -4602,7 +4607,7 @@
|
|
|
4602
4607
|
{
|
|
4603
4608
|
"path": "modules/discord/board-broadcast.js",
|
|
4604
4609
|
"mode": "0000644",
|
|
4605
|
-
"sha256": "
|
|
4610
|
+
"sha256": "3630b6d4776e9faeeda93c6ae21b55c3ac77cf23e8bb131e18f7dea3bf0158d1"
|
|
4606
4611
|
},
|
|
4607
4612
|
{
|
|
4608
4613
|
"path": "modules/discord/bug-attachments.js",
|
|
@@ -4832,7 +4837,7 @@
|
|
|
4832
4837
|
{
|
|
4833
4838
|
"path": "modules/government/board.js",
|
|
4834
4839
|
"mode": "0000644",
|
|
4835
|
-
"sha256": "
|
|
4840
|
+
"sha256": "60c586fbc4a7201784c8d10820bc7052aa7f77d43772485fbf8f6d34efedbdd4"
|
|
4836
4841
|
},
|
|
4837
4842
|
{
|
|
4838
4843
|
"path": "modules/government/catalog.js",
|
|
@@ -4852,7 +4857,17 @@
|
|
|
4852
4857
|
{
|
|
4853
4858
|
"path": "modules/government/db.js",
|
|
4854
4859
|
"mode": "0000644",
|
|
4855
|
-
"sha256": "
|
|
4860
|
+
"sha256": "33e8a44a1dabb0241d1e707cf4ba61f033d21720082462c2a81d4c16e878df24"
|
|
4861
|
+
},
|
|
4862
|
+
{
|
|
4863
|
+
"path": "modules/government/decision-board.js",
|
|
4864
|
+
"mode": "0000644",
|
|
4865
|
+
"sha256": "9b4bc765641347db4a41d749185312896abe4c0c1628ccd647f1dd20f2a3afa7"
|
|
4866
|
+
},
|
|
4867
|
+
{
|
|
4868
|
+
"path": "modules/government/decision-rules.js",
|
|
4869
|
+
"mode": "0000644",
|
|
4870
|
+
"sha256": "577921791cf32ad8a824f78e534bf26d608eaf32401ed31cc555554bc8e411eb"
|
|
4856
4871
|
},
|
|
4857
4872
|
{
|
|
4858
4873
|
"path": "modules/government/docket-vocab.js",
|
|
@@ -4862,7 +4877,7 @@
|
|
|
4862
4877
|
{
|
|
4863
4878
|
"path": "modules/government/docket.js",
|
|
4864
4879
|
"mode": "0000644",
|
|
4865
|
-
"sha256": "
|
|
4880
|
+
"sha256": "5e683dec1977f3ac60b98834bd5638079c6dcef8e097f9fd5d841aed8648b6d3"
|
|
4866
4881
|
},
|
|
4867
4882
|
{
|
|
4868
4883
|
"path": "modules/government/membership-predicate.js",
|
|
@@ -5014,6 +5029,11 @@
|
|
|
5014
5029
|
"mode": "0000644",
|
|
5015
5030
|
"sha256": "a7cf217a49f6512084d94678fff8dbcb0d3333beea09933f8b870987b69fd8f7"
|
|
5016
5031
|
},
|
|
5032
|
+
{
|
|
5033
|
+
"path": "modules/government/migrations/government_023_decision_rules.sql",
|
|
5034
|
+
"mode": "0000644",
|
|
5035
|
+
"sha256": "2c2d27c50016287ecba7ccbd2491895a7edc7b2b100887d6f76ffdc2a1617fcc"
|
|
5036
|
+
},
|
|
5017
5037
|
{
|
|
5018
5038
|
"path": "modules/government/module.json",
|
|
5019
5039
|
"mode": "0000644",
|
|
@@ -5052,7 +5072,7 @@
|
|
|
5052
5072
|
{
|
|
5053
5073
|
"path": "modules/government/routes/government.js",
|
|
5054
5074
|
"mode": "0000644",
|
|
5055
|
-
"sha256": "
|
|
5075
|
+
"sha256": "621e677481369bcd5ac9ded0c1c9a9c3d6ed9df8c19ec76c293cc28474adfeeb"
|
|
5056
5076
|
},
|
|
5057
5077
|
{
|
|
5058
5078
|
"path": "modules/government/routes/rank-sync.js",
|
|
@@ -5327,7 +5347,7 @@
|
|
|
5327
5347
|
{
|
|
5328
5348
|
"path": "modules/hall-ui/public/city-draw.js",
|
|
5329
5349
|
"mode": "0000644",
|
|
5330
|
-
"sha256": "
|
|
5350
|
+
"sha256": "7e35b1ca99ae3cabd70e32436a664839da375829dd62913dc357441fba8eaf9a"
|
|
5331
5351
|
},
|
|
5332
5352
|
{
|
|
5333
5353
|
"path": "modules/hall-ui/public/city.css",
|
|
@@ -6114,6 +6134,31 @@
|
|
|
6114
6134
|
"mode": "0000644",
|
|
6115
6135
|
"sha256": "8b9b9495eac0febcf56d4e049f1ceeb9cfdc6fc0031c93d99256dc628a95585a"
|
|
6116
6136
|
},
|
|
6137
|
+
{
|
|
6138
|
+
"path": "modules/hall-ui/public/street-draw.js",
|
|
6139
|
+
"mode": "0000644",
|
|
6140
|
+
"sha256": "c6509f74996840412e9e4be74c5c3f234b9bfd76d952332a10d5dcdcc847ac89"
|
|
6141
|
+
},
|
|
6142
|
+
{
|
|
6143
|
+
"path": "modules/hall-ui/public/street.css",
|
|
6144
|
+
"mode": "0000644",
|
|
6145
|
+
"sha256": "fc49ab807afe2acd396ceab53b7d6890cc66723e2140c03d7eeb1496dc2ae642"
|
|
6146
|
+
},
|
|
6147
|
+
{
|
|
6148
|
+
"path": "modules/hall-ui/public/street.html",
|
|
6149
|
+
"mode": "0000644",
|
|
6150
|
+
"sha256": "fc8181afa3416e492e61e4190f7facd1c8beaf8ffc26700ebc815e905c478bd3"
|
|
6151
|
+
},
|
|
6152
|
+
{
|
|
6153
|
+
"path": "modules/hall-ui/public/street.js",
|
|
6154
|
+
"mode": "0000644",
|
|
6155
|
+
"sha256": "91393db97f4791906a45a5e961b6992eba6e12ca47f2f399565735684bdc3cf5"
|
|
6156
|
+
},
|
|
6157
|
+
{
|
|
6158
|
+
"path": "modules/hall-ui/public/street.states.json",
|
|
6159
|
+
"mode": "0000644",
|
|
6160
|
+
"sha256": "d6fca03ffda1d671d8780a654f59c80655957d24e03af137074c6de443bbf7c2"
|
|
6161
|
+
},
|
|
6117
6162
|
{
|
|
6118
6163
|
"path": "modules/hall-ui/public/studio-lib.js",
|
|
6119
6164
|
"mode": "0000644",
|
|
@@ -6319,6 +6364,11 @@
|
|
|
6319
6364
|
"mode": "0000644",
|
|
6320
6365
|
"sha256": "dde9b115c2db984ddd86c7dbf3e9e8164f5ae9d3bf09638702bd5206f68f2d04"
|
|
6321
6366
|
},
|
|
6367
|
+
{
|
|
6368
|
+
"path": "modules/hall-ui/records/governor-street.md",
|
|
6369
|
+
"mode": "0000644",
|
|
6370
|
+
"sha256": "94cd854cb5996871fb549ee5e1f95d02ba542fa10d177b77b9b50a6233926bdf"
|
|
6371
|
+
},
|
|
6322
6372
|
{
|
|
6323
6373
|
"path": "modules/hall-ui/records/hall-navigation.md",
|
|
6324
6374
|
"mode": "0000644",
|
|
@@ -9692,12 +9742,12 @@
|
|
|
9692
9742
|
{
|
|
9693
9743
|
"path": "package-lock.json",
|
|
9694
9744
|
"mode": "0000644",
|
|
9695
|
-
"sha256": "
|
|
9745
|
+
"sha256": "b23c027985b0275c7f62b7cd914a25f8557fd771ce9cc4abef71248344a51038"
|
|
9696
9746
|
},
|
|
9697
9747
|
{
|
|
9698
9748
|
"path": "package.json",
|
|
9699
9749
|
"mode": "0000644",
|
|
9700
|
-
"sha256": "
|
|
9750
|
+
"sha256": "3b87c1abaf920c0c806b703ac09727005771586d21b2ace4591c3c80179b8dff"
|
|
9701
9751
|
},
|
|
9702
9752
|
{
|
|
9703
9753
|
"path": "public-docs/index.html",
|
|
@@ -9717,7 +9767,7 @@
|
|
|
9717
9767
|
{
|
|
9718
9768
|
"path": "release-notes.json",
|
|
9719
9769
|
"mode": "0000644",
|
|
9720
|
-
"sha256": "
|
|
9770
|
+
"sha256": "636e17f625656d60f00fd2b995930f25d063eef13c9ab00e4e814097bcb74784"
|
|
9721
9771
|
},
|
|
9722
9772
|
{
|
|
9723
9773
|
"path": "scripts/bongos-mcp.js",
|
|
@@ -11782,7 +11832,7 @@
|
|
|
11782
11832
|
{
|
|
11783
11833
|
"path": "src/bongos/route-rank-check.js",
|
|
11784
11834
|
"mode": "0000644",
|
|
11785
|
-
"sha256": "
|
|
11835
|
+
"sha256": "932376cc890d5b7cd05d871e7ae346b2a877c867ae05d330f930b5779c88ad2e"
|
|
11786
11836
|
},
|
|
11787
11837
|
{
|
|
11788
11838
|
"path": "src/bongos/routes.js",
|
|
@@ -11907,7 +11957,7 @@
|
|
|
11907
11957
|
{
|
|
11908
11958
|
"path": "src/bongos/serve-internal.js",
|
|
11909
11959
|
"mode": "0000644",
|
|
11910
|
-
"sha256": "
|
|
11960
|
+
"sha256": "04da98fd5c6725397ea18824d3a6a825cddfd806ee5b5b72a797c0d6ea9aa5e3"
|
|
11911
11961
|
},
|
|
11912
11962
|
{
|
|
11913
11963
|
"path": "src/bongos/software-update.js",
|
|
@@ -11942,7 +11992,7 @@
|
|
|
11942
11992
|
{
|
|
11943
11993
|
"path": "src/module-api.js",
|
|
11944
11994
|
"mode": "0000644",
|
|
11945
|
-
"sha256": "
|
|
11995
|
+
"sha256": "16930510b83df4fe79f92b31a33eb01634368e526ee1cf7e41e59410952aaf45"
|
|
11946
11996
|
},
|
|
11947
11997
|
{
|
|
11948
11998
|
"path": "src/module-loader/catalog.js",
|
|
@@ -13757,7 +13807,7 @@
|
|
|
13757
13807
|
{
|
|
13758
13808
|
"path": "tests/government_abuse_matrix.mjs",
|
|
13759
13809
|
"mode": "0000644",
|
|
13760
|
-
"sha256": "
|
|
13810
|
+
"sha256": "47d5e7db2bdab4504fca424d20588d4b0857e3246cd0376f5e111e6ca409632e"
|
|
13761
13811
|
},
|
|
13762
13812
|
{
|
|
13763
13813
|
"path": "tests/government_board_amendment.mjs",
|
|
@@ -13869,6 +13919,11 @@
|
|
|
13869
13919
|
"mode": "0000644",
|
|
13870
13920
|
"sha256": "1121e9fc07e9b6cf42f6206ef07465d7d1f0236efd19982dcd65f007f35108d6"
|
|
13871
13921
|
},
|
|
13922
|
+
{
|
|
13923
|
+
"path": "tests/government_decision_rules.mjs",
|
|
13924
|
+
"mode": "0000644",
|
|
13925
|
+
"sha256": "f88e88c545b872042f9c55d49d7b5af32120542eda92c64605aec3e369a881c9"
|
|
13926
|
+
},
|
|
13872
13927
|
{
|
|
13873
13928
|
"path": "tests/government_fold.mjs",
|
|
13874
13929
|
"mode": "0000644",
|
|
@@ -13937,12 +13992,12 @@
|
|
|
13937
13992
|
{
|
|
13938
13993
|
"path": "tests/government_routes.mjs",
|
|
13939
13994
|
"mode": "0000644",
|
|
13940
|
-
"sha256": "
|
|
13995
|
+
"sha256": "c5bc4a05509f2dc26064f9d8fa2c2e0ab156f269c340a9623ebed5e96c935142"
|
|
13941
13996
|
},
|
|
13942
13997
|
{
|
|
13943
13998
|
"path": "tests/government_seed.mjs",
|
|
13944
13999
|
"mode": "0000644",
|
|
13945
|
-
"sha256": "
|
|
14000
|
+
"sha256": "3d3fdae6553db59da40f639b5ba5788a4953bcfd560fdcbba46e5cc08806e3dc"
|
|
13946
14001
|
},
|
|
13947
14002
|
{
|
|
13948
14003
|
"path": "tests/government_session_scope.mjs",
|
|
@@ -14137,7 +14192,7 @@
|
|
|
14137
14192
|
{
|
|
14138
14193
|
"path": "tests/hall_audit.mjs",
|
|
14139
14194
|
"mode": "0000644",
|
|
14140
|
-
"sha256": "
|
|
14195
|
+
"sha256": "2552f55a975d2bf0e3b2c0b64d2723d53c300082ead58d0435a39d8e26226e9d"
|
|
14141
14196
|
},
|
|
14142
14197
|
{
|
|
14143
14198
|
"path": "tests/hall_board_world.mjs",
|
|
@@ -14217,7 +14272,7 @@
|
|
|
14217
14272
|
{
|
|
14218
14273
|
"path": "tests/hall_page_gate_map.mjs",
|
|
14219
14274
|
"mode": "0000644",
|
|
14220
|
-
"sha256": "
|
|
14275
|
+
"sha256": "8f44f83810647ecb87a80634e309844b9576af8b480d3d0c7ae9068cdc7126ea"
|
|
14221
14276
|
},
|
|
14222
14277
|
{
|
|
14223
14278
|
"path": "tests/hall_palette.mjs",
|
|
@@ -14289,6 +14344,11 @@
|
|
|
14289
14344
|
"mode": "0000644",
|
|
14290
14345
|
"sha256": "906786d9728fd1d94449674422401ef1b53a460d5c84998565b1ebeab5e47c7a"
|
|
14291
14346
|
},
|
|
14347
|
+
{
|
|
14348
|
+
"path": "tests/hall_street.mjs",
|
|
14349
|
+
"mode": "0000644",
|
|
14350
|
+
"sha256": "8fc4f6ffd39e79c9441b22f88a082643cb460a46e0e3e449afe568c0d49acf01"
|
|
14351
|
+
},
|
|
14292
14352
|
{
|
|
14293
14353
|
"path": "tests/hall_studio_home.mjs",
|
|
14294
14354
|
"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
|
+
- 499 operations across 73 resource groups
|
|
9
9
|
|
|
10
10
|
## Use it from your project
|
|
11
11
|
|
|
@@ -503,6 +503,8 @@ function createClient(opts = {}) {
|
|
|
503
503
|
deleteGovernmentAssignmentsBuilderIdRankKey: (args) => request("DELETE", "/government/assignments/{builderId}/{rankKey}", { hasBody: false }, args),
|
|
504
504
|
// POST /government/board/charter — rank: metic+archon — POST /government/board/charter
|
|
505
505
|
postGovernmentBoardCharter: (args) => request("POST", "/government/board/charter", { hasBody: true }, args),
|
|
506
|
+
// POST /government/board/decision-rules — rank: metic+archon — POST /government/board/decision-rules
|
|
507
|
+
postGovernmentBoardDecisionRules: (args) => request("POST", "/government/board/decision-rules", { hasBody: true }, args),
|
|
506
508
|
// GET /government/board/genesis-stages — rank: any-builder — GET /government/board/genesis-stages
|
|
507
509
|
getGovernmentBoardGenesisStages: (args) => request("GET", "/government/board/genesis-stages", { hasBody: false }, args),
|
|
508
510
|
// GET /government/board/items — rank: any-builder — GET /government/board/items
|
|
@@ -511,6 +513,8 @@ function createClient(opts = {}) {
|
|
|
511
513
|
postGovernmentBoardItems: (args) => request("POST", "/government/board/items", { hasBody: true }, args),
|
|
512
514
|
// POST /government/board/items/{itemId}/votes — rank: any-builder — POST /government/board/items/:itemId/votes
|
|
513
515
|
postGovernmentBoardItemsItemIdVotes: (args) => request("POST", "/government/board/items/{itemId}/votes", { hasBody: true }, args),
|
|
516
|
+
// POST /government/board/matters — rank: metic+archon — POST /government/board/matters
|
|
517
|
+
postGovernmentBoardMatters: (args) => request("POST", "/government/board/matters", { hasBody: true }, args),
|
|
514
518
|
// GET /government/constitution — rank: any-builder — GET /government/constitution
|
|
515
519
|
getGovernmentConstitution: (args) => request("GET", "/government/constitution", { hasBody: false }, args),
|
|
516
520
|
// GET /government/docket — rank: any-builder — GET /government/docket
|
|
@@ -502,6 +502,8 @@ function createClient(opts = {}) {
|
|
|
502
502
|
deleteGovernmentAssignmentsBuilderIdRankKey: (args) => request("DELETE", "/government/assignments/{builderId}/{rankKey}", { hasBody: false }, args),
|
|
503
503
|
// POST /government/board/charter — rank: metic+archon — POST /government/board/charter
|
|
504
504
|
postGovernmentBoardCharter: (args) => request("POST", "/government/board/charter", { hasBody: true }, args),
|
|
505
|
+
// POST /government/board/decision-rules — rank: metic+archon — POST /government/board/decision-rules
|
|
506
|
+
postGovernmentBoardDecisionRules: (args) => request("POST", "/government/board/decision-rules", { hasBody: true }, args),
|
|
505
507
|
// GET /government/board/genesis-stages — rank: any-builder — GET /government/board/genesis-stages
|
|
506
508
|
getGovernmentBoardGenesisStages: (args) => request("GET", "/government/board/genesis-stages", { hasBody: false }, args),
|
|
507
509
|
// GET /government/board/items — rank: any-builder — GET /government/board/items
|
|
@@ -510,6 +512,8 @@ function createClient(opts = {}) {
|
|
|
510
512
|
postGovernmentBoardItems: (args) => request("POST", "/government/board/items", { hasBody: true }, args),
|
|
511
513
|
// POST /government/board/items/{itemId}/votes — rank: any-builder — POST /government/board/items/:itemId/votes
|
|
512
514
|
postGovernmentBoardItemsItemIdVotes: (args) => request("POST", "/government/board/items/{itemId}/votes", { hasBody: true }, args),
|
|
515
|
+
// POST /government/board/matters — rank: metic+archon — POST /government/board/matters
|
|
516
|
+
postGovernmentBoardMatters: (args) => request("POST", "/government/board/matters", { hasBody: true }, args),
|
|
513
517
|
// GET /government/constitution — rank: any-builder — GET /government/constitution
|
|
514
518
|
getGovernmentConstitution: (args) => request("GET", "/government/constitution", { hasBody: false }, args),
|
|
515
519
|
// GET /government/docket — rank: any-builder — GET /government/docket
|
|
@@ -346,9 +346,13 @@ export interface PostGoalsResponse { ok: boolean; goal: unknown; succeeds_goal_i
|
|
|
346
346
|
export interface PostGovernmentAssignmentsRequest { builder_id: number; rank_key: string }
|
|
347
347
|
export interface PostGovernmentBoardCharterRequest { form?: string; franchise?: string; council_rank?: string; pass_rule?: string; rationale_md?: string; acknowledge_self_removal?: boolean }
|
|
348
348
|
export interface PostGovernmentBoardCharterResponse { ok: boolean; amendment: unknown; item: unknown; reads_as: unknown }
|
|
349
|
+
export interface PostGovernmentBoardDecisionRulesRequest { rules: unknown[]; rationale_md?: string }
|
|
350
|
+
export interface PostGovernmentBoardDecisionRulesResponse { ok: boolean; amendment: unknown; item: unknown; rules: unknown }
|
|
349
351
|
export interface PostGovernmentBoardItemsItemIdVotesRequest { direction: string; reason_md?: string; section_key?: string }
|
|
350
352
|
export interface PostGovernmentBoardItemsRequest { subject_type: string; proposal: Record<string, unknown>; rationale_md?: string; acknowledge_self_removal?: boolean }
|
|
351
353
|
export interface PostGovernmentBoardItemsResponse { ok: boolean; amendment: unknown; item: unknown }
|
|
354
|
+
export interface PostGovernmentBoardMattersRequest { area: string; title: string; detail_md?: string; action?: Record<string, unknown> }
|
|
355
|
+
export interface PostGovernmentBoardMattersResponse { ok: boolean; matter: unknown; item: unknown; decided: unknown }
|
|
352
356
|
export interface PostGovernmentRankSetsApplyRequest { type?: string; headcount: number }
|
|
353
357
|
export interface PostGovernmentRankSetsApplyResponse { ok: boolean; type: unknown; size: unknown; created: unknown; skipped: unknown }
|
|
354
358
|
export interface PostGovernmentRanksRankKeyResetResponse { ok: boolean; rank_key: unknown; seeded_rank: unknown; permission_count: unknown }
|
|
@@ -963,6 +967,8 @@ export interface BongosClient {
|
|
|
963
967
|
deleteGovernmentAssignmentsBuilderIdRankKey(args?: RequestArgs): Promise<DeleteGovernmentAssignmentsBuilderIdRankKeyResponse>;
|
|
964
968
|
/** POST /government/board/charter — rank: metic+archon */
|
|
965
969
|
postGovernmentBoardCharter(args?: RequestArgs & { body?: PostGovernmentBoardCharterRequest }): Promise<PostGovernmentBoardCharterResponse>;
|
|
970
|
+
/** POST /government/board/decision-rules — rank: metic+archon */
|
|
971
|
+
postGovernmentBoardDecisionRules(args: RequestArgs & { body: PostGovernmentBoardDecisionRulesRequest }): Promise<PostGovernmentBoardDecisionRulesResponse>;
|
|
966
972
|
/** GET /government/board/genesis-stages — rank: any-builder */
|
|
967
973
|
getGovernmentBoardGenesisStages(args?: RequestArgs): Promise<ApiResponse>;
|
|
968
974
|
/** GET /government/board/items — rank: any-builder */
|
|
@@ -971,6 +977,8 @@ export interface BongosClient {
|
|
|
971
977
|
postGovernmentBoardItems(args: RequestArgs & { body: PostGovernmentBoardItemsRequest }): Promise<PostGovernmentBoardItemsResponse>;
|
|
972
978
|
/** POST /government/board/items/{itemId}/votes — rank: any-builder */
|
|
973
979
|
postGovernmentBoardItemsItemIdVotes(args: RequestArgs & { body: PostGovernmentBoardItemsItemIdVotesRequest }): Promise<ApiResponse>;
|
|
980
|
+
/** POST /government/board/matters — rank: metic+archon */
|
|
981
|
+
postGovernmentBoardMatters(args: RequestArgs & { body: PostGovernmentBoardMattersRequest }): Promise<PostGovernmentBoardMattersResponse>;
|
|
974
982
|
/** GET /government/constitution — rank: any-builder */
|
|
975
983
|
getGovernmentConstitution(args?: RequestArgs): Promise<ApiResponse>;
|
|
976
984
|
/** GET /government/docket — rank: any-builder */
|
|
@@ -499,6 +499,8 @@ export function createClient(opts = {}) {
|
|
|
499
499
|
deleteGovernmentAssignmentsBuilderIdRankKey: (args) => request("DELETE", "/government/assignments/{builderId}/{rankKey}", { hasBody: false }, args),
|
|
500
500
|
// POST /government/board/charter — rank: metic+archon — POST /government/board/charter
|
|
501
501
|
postGovernmentBoardCharter: (args) => request("POST", "/government/board/charter", { hasBody: true }, args),
|
|
502
|
+
// POST /government/board/decision-rules — rank: metic+archon — POST /government/board/decision-rules
|
|
503
|
+
postGovernmentBoardDecisionRules: (args) => request("POST", "/government/board/decision-rules", { hasBody: true }, args),
|
|
502
504
|
// GET /government/board/genesis-stages — rank: any-builder — GET /government/board/genesis-stages
|
|
503
505
|
getGovernmentBoardGenesisStages: (args) => request("GET", "/government/board/genesis-stages", { hasBody: false }, args),
|
|
504
506
|
// GET /government/board/items — rank: any-builder — GET /government/board/items
|
|
@@ -507,6 +509,8 @@ export function createClient(opts = {}) {
|
|
|
507
509
|
postGovernmentBoardItems: (args) => request("POST", "/government/board/items", { hasBody: true }, args),
|
|
508
510
|
// POST /government/board/items/{itemId}/votes — rank: any-builder — POST /government/board/items/:itemId/votes
|
|
509
511
|
postGovernmentBoardItemsItemIdVotes: (args) => request("POST", "/government/board/items/{itemId}/votes", { hasBody: true }, args),
|
|
512
|
+
// POST /government/board/matters — rank: metic+archon — POST /government/board/matters
|
|
513
|
+
postGovernmentBoardMatters: (args) => request("POST", "/government/board/matters", { hasBody: true }, args),
|
|
510
514
|
// GET /government/constitution — rank: any-builder — GET /government/constitution
|
|
511
515
|
getGovernmentConstitution: (args) => request("GET", "/government/constitution", { hasBody: false }, args),
|
|
512
516
|
// GET /government/docket — rank: any-builder — GET /government/docket
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# ADR 0363 — Who decides what is a per-project table, changed only by a passed amendment
|
|
2
|
+
|
|
3
|
+
- **Status:** Accepted.
|
|
4
|
+
- **Date:** 2026-10-02
|
|
5
|
+
- **Task:** [task 1004529](https://cloudbongos.com/builders#/task/1004529) (goal 1000125, the Governor City).
|
|
6
|
+
- **Builds on:** [ADR 0016](0016-trust-boundary-server-enforced-permissions.md) (authority is resolved server-side, per request, uncached), [ADR 0175](0175-the-board-room-full-idea-ratification.md) (the board and its amendments), [ADR 0179](0179-board-membership-predicate-grammar.md) (the membership grammar), [ADR 0191](0191-majority-and-the-author-who-may-not-decide-alone.md) (the author rule, and why a clock is safe only where silence returns), [ADR 0362](0362-the-governor-docket-is-collected-from-contributed-sources.md) (the docket).
|
|
7
|
+
|
|
8
|
+
## Context
|
|
9
|
+
|
|
10
|
+
Before this, every building of a project's government was decided one way. Whoever held that building's fixed permission acted alone through its own page (the rank gate). Only the charter had a board. The reference design (`docs/design/mocks/governor-city/Governments.dc.html`, "Four governments") shows one project decided four ways: one founder, a council, everyone votes, and a board of trustees. Each building is decided by a named seat under one of seven rules (decide alone, first yes, consent, majority, unanimous, sign-off, or vacant). A project starts from one of the four and amends itself as it grows. So "who decides, and how" has to be data a project can change, and it has to change in the only way a constitution changes: the board passing it.
|
|
11
|
+
|
|
12
|
+
## Decision
|
|
13
|
+
|
|
14
|
+
**D1 — One row per building, in `government_decision_rules` (migration `government_023`).** The buildings are the docket's nine: charter, rules, disputes, people, planning, automation, review, release and treasury. An instance is one project, so the building is the whole key. A row is `decided_by` plus `rule`:
|
|
15
|
+
- `gate`, with no rule, means **as today**: whoever holds the building's fixed permission decides alone. Every building except the charter starts here.
|
|
16
|
+
- `board` is the charter's only value. The charter is decided by the constitution's own board under its own pass rule, and is changed by amending the board block, never through this table.
|
|
17
|
+
- `nobody` with `vacant` means no one holds the building yet.
|
|
18
|
+
- A membership predicate in the board's grammar (`rank:<key>`, `rank:<key>+`, `rank:a,b`) with one of the six sitting rules.
|
|
19
|
+
|
|
20
|
+
`who` carries the seat in the design's words ("Mira under $50, the council above"). It is display only.
|
|
21
|
+
|
|
22
|
+
**D2 — The defaults are today.** The migration seeds the nine as-today rows. A missing or malformed row also reads as its default, so the table can never read wider than today. No existing project's permissions change until it passes an amendment.
|
|
23
|
+
|
|
24
|
+
**D3 — Changed only by a passed amendment, enforced three times.** A change is an amendment of the new kind `decision_rules` (`government_amendments.kind`), filed by `POST /government/board/decision-rules` and decided by the board in force like any amendment. It is written in exactly one place: inside the transaction that closes it as passed (`decision-board.applyPassedDecisionRules`, called from `board.closeItem`'s in-transaction hook). The guard is enforced in three places:
|
|
25
|
+
1. The JavaScript guard refuses anything but a passed `decision_rules` amendment that names its own amendment.
|
|
26
|
+
2. The SQL write carries the same condition.
|
|
27
|
+
3. `government_023`'s trigger refuses any insert or update that does not name such an item, and refuses every delete. This covers a hand-written UPDATE too.
|
|
28
|
+
|
|
29
|
+
A failed write rolls the close back, so the sitting is retried and is never recorded as passed but unapplied. There is no settings route that writes the table. The proof is in `tests/government_decision_rules.mjs`, which scans for writers and probes the guard.
|
|
30
|
+
|
|
31
|
+
**D4 — More subjects: one matter per building.** The board voted on three subjects (a Full Idea, a constitutional amendment, a genesis stage). This adds eight more, `rules_matter` … `treasury_matter`, stored in `government_matters`, for eleven in all. `POST /government/board/matters` opens a matter **only** where the building's row names a sitting. Under the defaults every building refuses (`decided_by_gate`), and a vacant building refuses (`no_one_holds_this`). A matter's sitting is snapshotted from the row: the predicate's members and the rule (decide, first and sign-off sit as first-yes; consent, majority and unanimous as themselves). The table's own `rule` rides the snapshot. A clock is set only under majority or unanimous, because under the others expiry would pass a matter nobody read (ADR 0191 §4). **Sign-off is the author rule:** the proposer's own yes never decides. A matter pays no credit and no karma. A passed matter emits `board.matter.passed`.
|
|
32
|
+
|
|
33
|
+
**D5 — The gate is replaced where the building allows it, starting with People.** The building's own direct act asks `checkActAlone(area, builder)`. As today, the act is allowed and the route's permission is the whole gate. Under decide or first-yes, only a member the row seats may act alone. Under any other rule, or vacant, nobody may act alone, so the act is refused (409 `decided_by_sitting`) and points at the matter route. This build wires People's own acts in this module, giving and taking a custom rank (`POST`/`DELETE /government/assignments`). A People matter may carry that act (`assign_rank` / `unassign_rank`, custom ranks only, the same walls as the route), and it is carried out when the sitting passes. The route pins are unchanged: the permission is still the coarse gate, and the row only narrows who may use it alone.
|
|
34
|
+
|
|
35
|
+
**D6 — The feed reads the table.** `GET /government/docket` gives each building a `decision` (who, rule, whether as today, and the amendment that set it). A building's sitting carries the rule from the table snapshot. A contributed matter (an access request, an override request) keeps the rule its own route decides it by, because that route's gate still decides it until its module adopts `checkActAlone`. `GET /government/constitution` carries the table as `decision_rules`. A rules amendment is never compared against the board block by the divergence check (ADR 0268).
|
|
36
|
+
|
|
37
|
+
## The four governments, expressed
|
|
38
|
+
|
|
39
|
+
Each is a constitution plus rows. `tests/government_decision_rules.mjs` reads the four columns off the design file and checks that every building resolves to the design's glyph:
|
|
40
|
+
- **One founder:** monarchy; every building `rank:archon` decide, except People `rank:archon` first and Review `rank:xenos+` sign-off.
|
|
41
|
+
- **A council:** board `rank:council` unanimous; Rules and Planning majority; People consent; Disputes decide; Treasury `rank:treasurer` decide; Review vacant; Release and Automation `rank:archon` decide.
|
|
42
|
+
- **Everyone votes:** board `rank:xenos+` majority, with the same predicate on most buildings; Review `rank:tester` sign-off; Release `rank:lead` first.
|
|
43
|
+
- **A board of trustees:** board `rank:trustee` unanimous; maintainers run Planning, Release (first) and People (consent); Review `rank:reviewer` sign-off.
|
|
44
|
+
|
|
45
|
+
The council, tester, lead, trustee, maintainer and treasurer seats are the project's own custom ranks. A proposal naming a custom rank that does not exist is refused, because it would seat nobody.
|
|
46
|
+
|
|
47
|
+
## Consequences
|
|
48
|
+
|
|
49
|
+
- Owning modules adopt `checkActAlone` on their own direct acts, one at a time: admission and goal join requests (People), goal creation (Planning), report judging (Disputes), settings (Rules), the fence (Automation), criteria (Review), the pin move (Release) and budgets (Treasury). Until then, a row for those buildings decides that building's board matters, and the direct page still decides alone. The docket says so honestly (D6). Widening, where a row lets a seat that does not hold the permission act, is deliberately not done here. It would put the table inside the permission resolver, which is a trust-boundary change of its own.
|
|
50
|
+
- An objection on a matter still names a Full Idea section (the vote CHECK is unchanged), the same position as a genesis stage.
|
|
51
|
+
- Opening a matter needs `board.item.open` (metic floor). A project where everyone votes still has its matters put up by metics and above.
|
|
52
|
+
- Rejected: a settings route for the table (it would let a rank gate rewrite the government); a separate amendments table (a second pass path to keep in step); storing the rows in the instance config file like the board block (a row must be a database fact the trigger can guard).
|
package/docs/adr/README.md
CHANGED
|
@@ -481,3 +481,4 @@ These 20 numbers are each shared by exactly two files. They are **accepted histo
|
|
|
481
481
|
| 0360 | [**Bongos follows every candidate; every other project follows releases** ([task 1004297](https://cloudbongos.com/builders#/task/1004297), goal 1000090 — the owner's 2026-09-26 decision that the Bongos hall takes every candidate automatically). Amends ADR 0136. **D1:** a per-instance `follow` beside the channel — `released` (default: at or below the registry's `latest` label) or `candidates` (every version, the platform hall only). **D2:** released is the `latest` dist-tag, read separately; an unreadable label skips the instance, never a guess. **D3:** the timer period is the lag — 15 min declared, installed by task 1003969. **D4:** a version that failed here is held for a day per instance (recorded in the sweep's config home), while any newer version is taken at once — no restart loop at a 15-minute cadence. **D5:** the deploy page's "Upgrades on this hall" — the core_upgrades ledger, rollbacks flagged, and a published version waiting past 30 min said to be the automation stopping. Rejected: a second runner, CI pushing to the box, a hold only a human clears.](0360-bongos-follows-every-candidate-every-other-project-follows-releases.md) | update channel / deploy / core update |
|
|
482
482
|
| 0361 | [**Merges publish as candidates; Release on /deploy decides what other projects are offered** ([task 1004298](https://cloudbongos.com/builders#/task/1004298), goal 1000090). Amends ADR 0161. **D1:** merges publish under `next` when `PUBLISH_AS_CANDIDATE=1` (ships inert). **D2:** a `release` job in publish.yml moves `latest` (release-core.js: published, stable, newer than the release) over the same OIDC trusted publisher — no npm token. **D3:** /deploy's Release button (`core.pin.move`) dispatches it through the one-function `lifecycle.workflowDispatch` port. **D4:** evidence beside each button — hours on this hall, ever rolled back. **D5:** the banner and the hosted-project runner offer only released versions; the control-plane row follows candidates. Arming: roster follow → npm dist-tag permission → GitHub credential Actions: write → the variable.](0361-merges-publish-as-candidates-release-decides-what-others-are-offered.md) | publish / release / update channel |
|
|
483
483
|
| 0362 | [**The governor's docket is collected from sources each module contributes, scoped by each source's own atom** ([task 1004523](https://cloudbongos.com/builders#/task/1004523), goal 1000125). **D1:** one contribution point, `governor.docket`; each owner contributes its source on the read its own list route serves. **D2:** a source declares its list route's atom and the collector enforces it (gated out = `not_yours`, no rows; no gate = dropped). **D3:** nothing invented: `coming` / `off` / `unavailable`. **D4:** the board's needs-you is the /me summons rule. **D5:** `GET /government/docket` gates on `board.vote.cast`.](0362-the-governor-docket-is-collected-from-contributed-sources.md) | government / Governor City |
|
|
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 |
|