@bongos/core 1.19.185 → 1.19.187

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/.bongos-core.json +90 -85
  2. package/clients/bongos-client/index.d.ts +2 -2
  3. package/config/government.neutral.json +6 -6
  4. package/docs/adr/0172-editable-rank-roles-substrate-axis.md +1 -1
  5. package/docs/api/openapi.json +12 -12
  6. package/docs/api-reference.md +7 -7
  7. package/modules/builder-settings/wandering-prefs.js +13 -13
  8. package/modules/government/catalog.js +79 -79
  9. package/modules/government/config.js +43 -33
  10. package/modules/government/db.js +58 -58
  11. package/modules/government/protected-surfaces.js +7 -7
  12. package/modules/government/protected-surfaces.json +4 -4
  13. package/modules/government/ranks.js +17 -17
  14. package/modules/government/resolver.js +24 -24
  15. package/modules/government/routes/government.js +88 -88
  16. package/modules/government/routes/rank-sync.js +8 -8
  17. package/modules/government/session-scopes.js +7 -7
  18. package/modules/government/session-scopes.json +5 -5
  19. package/modules/hall-ui/public/gate.js +2 -2
  20. package/modules/hall-ui/public/{governance.css → government.css} +11 -11
  21. package/modules/hall-ui/public/{governance.html → government.html} +14 -14
  22. package/modules/hall-ui/public/{governance.js → government.js} +108 -108
  23. package/modules/hall-ui/public/harbor.js +2 -2
  24. package/modules/hall-ui/public/shell.js +19 -15
  25. package/modules/hall-ui/public/watch.js +1 -1
  26. package/modules/lifecycle/claim-eligibility.js +1 -1
  27. package/modules/lifecycle/db.js +1 -1
  28. package/package-lock.json +2 -2
  29. package/package.json +1 -1
  30. package/scripts/gds/fitness.js +138 -0
  31. package/scripts/hall-preview/server.js +1 -1
  32. package/src/bongos/auth.js +11 -11
  33. package/src/bongos/serve-internal.js +8 -8
  34. package/src/module-api.js +5 -1
  35. package/tests/auth_page_gate.mjs +2 -2
  36. package/tests/auth_resolve_failure.mjs +4 -4
  37. package/tests/{governance_abuse_matrix.mjs → government_abuse_matrix.mjs} +39 -39
  38. package/tests/{governance_catalog.mjs → government_catalog.mjs} +11 -11
  39. package/tests/{governance_claim_eligibility.mjs → government_claim_eligibility.mjs} +2 -2
  40. package/tests/{governance_config.mjs → government_config.mjs} +54 -54
  41. package/tests/{governance_fold.mjs → government_fold.mjs} +6 -6
  42. package/tests/{governance_fold_bench.mjs → government_fold_bench.mjs} +3 -3
  43. package/tests/{governance_live_proof.mjs → government_live_proof.mjs} +5 -5
  44. package/tests/{governance_ownership_scope.mjs → government_ownership_scope.mjs} +16 -16
  45. package/tests/{governance_page_gates.mjs → government_page_gates.mjs} +14 -14
  46. package/tests/{governance_parity.mjs → government_parity.mjs} +3 -3
  47. package/tests/{governance_principals.mjs → government_principals.mjs} +14 -14
  48. package/tests/{governance_protected_surfaces.mjs → government_protected_surfaces.mjs} +1 -1
  49. package/tests/{governance_role_sync.mjs → government_rank_sync.mjs} +2 -2
  50. package/tests/{governance_require_permission.mjs → government_require_permission.mjs} +1 -1
  51. package/tests/{governance_resolver.mjs → government_resolver.mjs} +6 -6
  52. package/tests/{governance_routes.mjs → government_routes.mjs} +36 -36
  53. package/tests/{governance_seed.mjs → government_seed.mjs} +8 -8
  54. package/tests/{governance_session_scope.mjs → government_session_scope.mjs} +10 -10
  55. package/tests/{governance_vanilla_boot.mjs → government_vanilla_boot.mjs} +26 -26
  56. package/tests/government_vocabulary.mjs +94 -0
  57. package/tests/hall_nav.mjs +8 -7
  58. package/tests/hall_page_gate_map.mjs +9 -9
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.19.185",
6
- "core_contract": "1.19.185",
7
- "source_commit": "c725667c9921ff8e8dce9113f3f11a230ca9ce15",
5
+ "core_version": "1.19.187",
6
+ "core_contract": "1.19.187",
7
+ "source_commit": "403b66bde87b5b97d9aec89a8ab95794d525cb0d",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-08-16T22:31:52.623Z",
9
+ "built_at": "2026-08-16T23:14:43.477Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
12
  "docs_redacted": 308,
13
13
  "agent_docs_stubbed": 21,
14
- "functional_verbatim": 1281,
14
+ "functional_verbatim": 1282,
15
15
  "rules": 3,
16
16
  "gate_literals": 3,
17
17
  "gate": "passed"
18
18
  },
19
- "file_count": 1610,
20
- "tree_sha256": "076b2c5942c82770787a176f2f500059304f8ddc297dc8fe580d0f3e035a4f67",
19
+ "file_count": 1611,
20
+ "tree_sha256": "3d648b4ac642a80bde4746eaaab7f61fc06cd888117fc17bc66751d8f1e15fc8",
21
21
  "files": [
22
22
  {
23
23
  "path": ".claude/skills/blocker-review/SKILL.md",
@@ -367,7 +367,7 @@
367
367
  {
368
368
  "path": "clients/bongos-client/index.d.ts",
369
369
  "mode": "0000644",
370
- "sha256": "1efedc7f78c88bcc7ce8ca5523915258273063a575481504bd046ed905d9e41a"
370
+ "sha256": "b37e4a561554ec579b525ff660246d350a70c4acdda9a16d8e6521c38180bae6"
371
371
  },
372
372
  {
373
373
  "path": "clients/bongos-client/index.mjs",
@@ -397,7 +397,7 @@
397
397
  {
398
398
  "path": "config/government.neutral.json",
399
399
  "mode": "0000644",
400
- "sha256": "1d285d78452558c995d2c0568190f4377ac4ecfddea642f5a94949298a1e48b1"
400
+ "sha256": "70fe731d06dd9744178a27ec4379ee8c769f9a45d9a585f095b1765433767afc"
401
401
  },
402
402
  {
403
403
  "path": "config/modules.neutral.json",
@@ -1337,7 +1337,7 @@
1337
1337
  {
1338
1338
  "path": "docs/adr/0172-editable-rank-roles-substrate-axis.md",
1339
1339
  "mode": "0000644",
1340
- "sha256": "0bfe5ce46139bf9ee236868317cc80ee10eb8747d5606d0dd0fe9f2580ea5177"
1340
+ "sha256": "2b813d75d1fb2aa3f9978a6dee7855f963444f1734bed5766ef269dae7637a2c"
1341
1341
  },
1342
1342
  {
1343
1343
  "path": "docs/adr/0172-per-craft-compensation-ideator-credit-lane.md",
@@ -1362,12 +1362,12 @@
1362
1362
  {
1363
1363
  "path": "docs/api-reference.md",
1364
1364
  "mode": "0000644",
1365
- "sha256": "683e1e4a67d553e5ac75a4593c936ba8e273e07eace3ae623cb5a08b4d73c81c"
1365
+ "sha256": "32c6c5fe14cf8684d353f0c73cde4b09d84ba61eabcb13e75c11bd5b7f9be2b7"
1366
1366
  },
1367
1367
  {
1368
1368
  "path": "docs/api/openapi.json",
1369
1369
  "mode": "0000644",
1370
- "sha256": "3a3fd517cd4aff7e29f8c298d9099af7fe7b3282f74e437a2fbbce300da8b46d"
1370
+ "sha256": "7892d449572d19f058c6ac364d5b697e28d76bcd922d25d33b5203f5e1b5b7aa"
1371
1371
  },
1372
1372
  {
1373
1373
  "path": "docs/architecture.md",
@@ -2452,7 +2452,7 @@
2452
2452
  {
2453
2453
  "path": "modules/builder-settings/wandering-prefs.js",
2454
2454
  "mode": "0000644",
2455
- "sha256": "1e47da4c8a0db204baf3cbfaae516e254a3a273e37a0e1d68e4c0108b3fa7450"
2455
+ "sha256": "e84c11a506bcd47b1f9b6be16bcd262d69aa7162f283c41da63687c5dd611845"
2456
2456
  },
2457
2457
  {
2458
2458
  "path": "modules/dev-box/CLAUDE.md",
@@ -2887,17 +2887,17 @@
2887
2887
  {
2888
2888
  "path": "modules/government/catalog.js",
2889
2889
  "mode": "0000644",
2890
- "sha256": "4ebb584351a14dc849be7e06a92a3f9056cca4347e6b1b9e3d041ad8b407d7ee"
2890
+ "sha256": "b7073912e1aea3da33f876999a6beaae028142f0bf7bf66c1f95efc261b41272"
2891
2891
  },
2892
2892
  {
2893
2893
  "path": "modules/government/config.js",
2894
2894
  "mode": "0000644",
2895
- "sha256": "57086a188ac6557b2f7c2c52e4a75f3960dfd1b7a54ce6fa3c0ce3a216411703"
2895
+ "sha256": "183bca92e8ba897871287aeb58e6f9cfebcf9510b15d6cd9701066ce7c108edd"
2896
2896
  },
2897
2897
  {
2898
2898
  "path": "modules/government/db.js",
2899
2899
  "mode": "0000644",
2900
- "sha256": "e7c4d26ed0b5efe6426426d486170f5a1de106fe16071a050c77d45a25c66233"
2900
+ "sha256": "0e84802af9d1dd4c139548d4e621fc11896513415abf4e9eadfacbae33c40952"
2901
2901
  },
2902
2902
  {
2903
2903
  "path": "modules/government/migrations/governance_001_tables.sql",
@@ -2952,42 +2952,42 @@
2952
2952
  {
2953
2953
  "path": "modules/government/protected-surfaces.js",
2954
2954
  "mode": "0000644",
2955
- "sha256": "1855c8cd74b7aa00e6f87fb9d402a4be440ecbb26691a84418b6725b83dd2cf9"
2955
+ "sha256": "f2acc38f5d9a361522944334f6db046a96b1d49aa2030f91391ab80752f42274"
2956
2956
  },
2957
2957
  {
2958
2958
  "path": "modules/government/protected-surfaces.json",
2959
2959
  "mode": "0000644",
2960
- "sha256": "d7423da998a11b30cf8015dd5fd537c262f3e3d739ed02a1473debbc5eeb4e6c"
2960
+ "sha256": "6d9a7520b2565b34bf002df016598543101639ccc384d81a622d313ed688acbc"
2961
2961
  },
2962
2962
  {
2963
2963
  "path": "modules/government/ranks.js",
2964
2964
  "mode": "0000644",
2965
- "sha256": "3b217eea2db398db99d580a3d3b2cef8574e3f14b2737e5764fe32d93a1ffc3d"
2965
+ "sha256": "fb0903c3b885a81c99136cc6f080aaf7fc00f86bd1c45c235e37c7c45a462ffc"
2966
2966
  },
2967
2967
  {
2968
2968
  "path": "modules/government/resolver.js",
2969
2969
  "mode": "0000644",
2970
- "sha256": "7c86e964b457bb21192aaacd9f014ec1afabea1779c751fc1682f30fb9a8ac81"
2970
+ "sha256": "bc30290bd0726f643f37984e4e537f503b89a3013bc8319d39d3af116dd08d94"
2971
2971
  },
2972
2972
  {
2973
2973
  "path": "modules/government/routes/government.js",
2974
2974
  "mode": "0000644",
2975
- "sha256": "d29087432cdb8f5c42f756924d326246517c81bb59065bddfce1e8c95794339f"
2975
+ "sha256": "63e80d002e09d05a93238e15491a82dd733baea219814e8f7e2961ecb5373e1f"
2976
2976
  },
2977
2977
  {
2978
2978
  "path": "modules/government/routes/rank-sync.js",
2979
2979
  "mode": "0000644",
2980
- "sha256": "7934d1d1db163b20403c98afc4670e44ab926cf21123c8be1764172df4eb3290"
2980
+ "sha256": "e7fd1b378d48e93b946237261713a5791f7506dfdd7fcef2d843fe0e2ae8b370"
2981
2981
  },
2982
2982
  {
2983
2983
  "path": "modules/government/session-scopes.js",
2984
2984
  "mode": "0000644",
2985
- "sha256": "d27dc4b14eeaa2e06f7a8ea175b7928d972f424a1165f9ec3e6577ccdd2faf35"
2985
+ "sha256": "1452e5a0480e7c3e1692ec210cb4d85f724d7ebb8dcf38048fb3369c483be46b"
2986
2986
  },
2987
2987
  {
2988
2988
  "path": "modules/government/session-scopes.json",
2989
2989
  "mode": "0000644",
2990
- "sha256": "813e4ddb324363278bfbd6b65260a54697673ac20f0df8e8992dd4ece57efea8"
2990
+ "sha256": "acf5d2391c2228d09c33e6c9a5cfe850dcf8986abb80b30b0c7ff778795938b2"
2991
2991
  },
2992
2992
  {
2993
2993
  "path": "modules/grading/CLAUDE.md",
@@ -3182,7 +3182,7 @@
3182
3182
  {
3183
3183
  "path": "modules/hall-ui/public/gate.js",
3184
3184
  "mode": "0000644",
3185
- "sha256": "16cdabe86d1deef19de5604aeeab69037c67fae0e92ffa7c93a3c0892242581e"
3185
+ "sha256": "0d3c92f77b90bce0d8e44045aedd8673ba2516bf4a0512c3a5abfa5c4f73375c"
3186
3186
  },
3187
3187
  {
3188
3188
  "path": "modules/hall-ui/public/goal-inbox.js",
@@ -3210,19 +3210,19 @@
3210
3210
  "sha256": "9cdbc14c1709dcc26fe9b8c85b2bfd08685a2925c9855758ca8e758455d1bc5c"
3211
3211
  },
3212
3212
  {
3213
- "path": "modules/hall-ui/public/governance.css",
3213
+ "path": "modules/hall-ui/public/government.css",
3214
3214
  "mode": "0000644",
3215
- "sha256": "f51e53cba5b1e1853de2682ca4909530925547691af93ccc772aa2e3c3598833"
3215
+ "sha256": "5d58516ae9a07e045de49c7d2bad2b024dbea5207f9cf84cb2928ebd995cbd4e"
3216
3216
  },
3217
3217
  {
3218
- "path": "modules/hall-ui/public/governance.html",
3218
+ "path": "modules/hall-ui/public/government.html",
3219
3219
  "mode": "0000644",
3220
- "sha256": "605a6456c163cbff579d3f742a7da6f54e487b4764e33890c216f65dbd3be92b"
3220
+ "sha256": "91c14637adc59dde39f47e51cfd243ddc1796b0a4108491f46aa64e68eea4a0d"
3221
3221
  },
3222
3222
  {
3223
- "path": "modules/hall-ui/public/governance.js",
3223
+ "path": "modules/hall-ui/public/government.js",
3224
3224
  "mode": "0000644",
3225
- "sha256": "68a9b5f21246c2b476f78793e60056341ad15699bb56d3a3ff9a72d0661ba7a1"
3225
+ "sha256": "b7504f63fc1086c4367dbd76da7ac96ac4297a23f74456f90c5aebe5e974e034"
3226
3226
  },
3227
3227
  {
3228
3228
  "path": "modules/hall-ui/public/hall-kit.js",
@@ -3247,7 +3247,7 @@
3247
3247
  {
3248
3248
  "path": "modules/hall-ui/public/harbor.js",
3249
3249
  "mode": "0000644",
3250
- "sha256": "43377715522a948d23d1f07a1062bc73bc0f96342e165eb42591baa54df6c4d9"
3250
+ "sha256": "7a102f4fd675910b0c80416c3ed05397d38f977e647fffb00c593732d05a3712"
3251
3251
  },
3252
3252
  {
3253
3253
  "path": "modules/hall-ui/public/index.html",
@@ -3417,7 +3417,7 @@
3417
3417
  {
3418
3418
  "path": "modules/hall-ui/public/shell.js",
3419
3419
  "mode": "0000644",
3420
- "sha256": "2b393108bd61a33dea9dc590c8acd346922e84ba1582ecf1a5ae220def1f2d29"
3420
+ "sha256": "f9b6d2ddd7b27e37a4be64dea8e767de43ad89a2d9999a566245a42d1d6196e1"
3421
3421
  },
3422
3422
  {
3423
3423
  "path": "modules/hall-ui/public/style.css",
@@ -3452,7 +3452,7 @@
3452
3452
  {
3453
3453
  "path": "modules/hall-ui/public/watch.js",
3454
3454
  "mode": "0000644",
3455
- "sha256": "0c9fa898f0dcf34ed92c3b096c72fb41d88bec871f36b19b954a71b672a932ed"
3455
+ "sha256": "9fbaee78276658ca61631e2849d8c8b34e708d3074c2739f1c0ae0cd8a048c78"
3456
3456
  },
3457
3457
  {
3458
3458
  "path": "modules/hall-ui/public/work.css",
@@ -3527,7 +3527,7 @@
3527
3527
  {
3528
3528
  "path": "modules/lifecycle/claim-eligibility.js",
3529
3529
  "mode": "0000644",
3530
- "sha256": "14fcf797d47f5a194fd316efc6f670c7beabed0d9102741a324850cdad59a596"
3530
+ "sha256": "0c52ae165d304f0f08ca04c9a288ef7d8ffb07288282dcd7b2d503fced7cd744"
3531
3531
  },
3532
3532
  {
3533
3533
  "path": "modules/lifecycle/conflict-resolve.js",
@@ -3542,7 +3542,7 @@
3542
3542
  {
3543
3543
  "path": "modules/lifecycle/db.js",
3544
3544
  "mode": "0000644",
3545
- "sha256": "4408fc7ed6a7f82e7a55c96b260497e4c36eeaf703d1646cecb28514f1150643"
3545
+ "sha256": "7fa58e9a9c09ba4857d57fe7cc1ed36d827d34f8cc1119ae42dc9dffdd4653b5"
3546
3546
  },
3547
3547
  {
3548
3548
  "path": "modules/lifecycle/done-when.js",
@@ -4257,12 +4257,12 @@
4257
4257
  {
4258
4258
  "path": "package-lock.json",
4259
4259
  "mode": "0000644",
4260
- "sha256": "285a39e688ff084805cf3cc403ffc2affbf3efd85eccefa1661e932c912db9a9"
4260
+ "sha256": "436a51acc58194d24659f69a9db624e06296dde02416cc2c3bf2ef2086f35ff4"
4261
4261
  },
4262
4262
  {
4263
4263
  "path": "package.json",
4264
4264
  "mode": "0000644",
4265
- "sha256": "699b38fd120a85262b8040961b95881039b6050263f8e9a72e61ad7c2f72fa6b"
4265
+ "sha256": "5dfe0314cb6157006b6eeb88e03cb8c2d2d20a6535d1f303903cb336cd06ae86"
4266
4266
  },
4267
4267
  {
4268
4268
  "path": "public-docs/index.html",
@@ -4887,7 +4887,7 @@
4887
4887
  {
4888
4888
  "path": "scripts/gds/fitness.js",
4889
4889
  "mode": "0000644",
4890
- "sha256": "887cf9daf51448f1ca031b4cc26d0695dd6e7577bb62bba6b619c91ea8e3024b"
4890
+ "sha256": "65648d6d05b73dafc08194e843850b460b738a17b565a69a5234dd817386eea8"
4891
4891
  },
4892
4892
  {
4893
4893
  "path": "scripts/gds/gate-review.js",
@@ -5522,7 +5522,7 @@
5522
5522
  {
5523
5523
  "path": "scripts/hall-preview/server.js",
5524
5524
  "mode": "0000644",
5525
- "sha256": "1cd66475d610b107b0f3b7f19688133e7c482b41b034e2cef6009d552df31cb2"
5525
+ "sha256": "384b6ee204f1ca1bb0f352d6a879f7674c9e7741999e584b72dfe4bf1983d0d1"
5526
5526
  },
5527
5527
  {
5528
5528
  "path": "scripts/migrate.sh",
@@ -5627,7 +5627,7 @@
5627
5627
  {
5628
5628
  "path": "src/bongos/auth.js",
5629
5629
  "mode": "0000644",
5630
- "sha256": "acabbb5f2586adbb3b3bd25eca0a258ab16095669f298f71e4a7c5e64d9c02a2"
5630
+ "sha256": "8fd6f6ce798ebcde76cd2ac0ccf7129a60555506ce3d2fed818deb1eb331d42b"
5631
5631
  },
5632
5632
  {
5633
5633
  "path": "src/bongos/cascade-dispatch.js",
@@ -5832,7 +5832,7 @@
5832
5832
  {
5833
5833
  "path": "src/bongos/serve-internal.js",
5834
5834
  "mode": "0000644",
5835
- "sha256": "473f4d8021f6996eac64e5d2e5c712eeaf8a6de561864d98c9d777e0a71868ed"
5835
+ "sha256": "94af8e061c690b6fb979cd95ec3a65e21b0f830898a05ab868c5a9f34d9dee72"
5836
5836
  },
5837
5837
  {
5838
5838
  "path": "src/bongos/stealth-gate.js",
@@ -5867,7 +5867,7 @@
5867
5867
  {
5868
5868
  "path": "src/module-api.js",
5869
5869
  "mode": "0000644",
5870
- "sha256": "ae7d472a89aace19a9544a330a8c1859680a3fd88f29358c6d4c1e905305aae7"
5870
+ "sha256": "5034caf71ab288ff969e2ca31c4b80c5c97e62b327711f5de6e6e53e13ce6c13"
5871
5871
  },
5872
5872
  {
5873
5873
  "path": "src/module-loader/catalog.js",
@@ -6062,12 +6062,12 @@
6062
6062
  {
6063
6063
  "path": "tests/auth_page_gate.mjs",
6064
6064
  "mode": "0000644",
6065
- "sha256": "3d4fd12068c6256ed2b74930fce0fd43ba1ed28f323cd80d4c24a984ca0eeba4"
6065
+ "sha256": "3ed218eada5e36170217ded839fdc80d1cbad4ec71086d9707f00115d6c622d2"
6066
6066
  },
6067
6067
  {
6068
6068
  "path": "tests/auth_resolve_failure.mjs",
6069
6069
  "mode": "0000644",
6070
- "sha256": "8d40fbb16a8b6256551eb014ba3a209b577548fe1e61ccd965227422ac238d90"
6070
+ "sha256": "25271ff1abef5600fab6b9d768c0f94965ffdea4d926b6a60344676f5392f9f1"
6071
6071
  },
6072
6072
  {
6073
6073
  "path": "tests/auth_session_ttl.mjs",
@@ -6770,99 +6770,104 @@
6770
6770
  "sha256": "412ca7c0bdc10abc90146b777571bcc7a180e19f0e3d058c6998ac2d33941940"
6771
6771
  },
6772
6772
  {
6773
- "path": "tests/governance_abuse_matrix.mjs",
6773
+ "path": "tests/government_abuse_matrix.mjs",
6774
6774
  "mode": "0000644",
6775
- "sha256": "9950499be79588f6b0f2fd34e7fedd534c5ac69e66890e81e80c3e486be073f8"
6775
+ "sha256": "8f5354cbacf15c9b49500f96b265fe52f5c0d4500a4ec7b41b4819a149782893"
6776
6776
  },
6777
6777
  {
6778
- "path": "tests/governance_catalog.mjs",
6778
+ "path": "tests/government_catalog.mjs",
6779
6779
  "mode": "0000644",
6780
- "sha256": "5611b3eeabcf98b37a6e36f131af2a8d1086b672017df12bb520d2471761bbee"
6780
+ "sha256": "74cfbd482b689df40348af3bdaf050f056e216ff18fdd6add4136d4589b7cd92"
6781
6781
  },
6782
6782
  {
6783
- "path": "tests/governance_claim_eligibility.mjs",
6783
+ "path": "tests/government_claim_eligibility.mjs",
6784
6784
  "mode": "0000644",
6785
- "sha256": "33cb7e88aaf45dac176216c29eb41d2ba5152779e53cb91779d81006f2e6c043"
6785
+ "sha256": "2750f75bc0ef7f5286a2abe1d59e49ff2ea6ea300d3c1760dda31ae8ad74dc61"
6786
6786
  },
6787
6787
  {
6788
- "path": "tests/governance_config.mjs",
6788
+ "path": "tests/government_config.mjs",
6789
6789
  "mode": "0000644",
6790
- "sha256": "c71ac0c7a7b519dac0fed1557f6ce5de52bf29bb830ee940e7cfcb29ce483205"
6790
+ "sha256": "979deef4473243dc86ab13b9284104bce71f6a1ee839acc6c5a6db04770cd62c"
6791
6791
  },
6792
6792
  {
6793
- "path": "tests/governance_fold.mjs",
6793
+ "path": "tests/government_fold.mjs",
6794
6794
  "mode": "0000644",
6795
- "sha256": "9a4feed7e93183e1558ef4c2012c94f1d93786abc2fcca429534d5248b00bebd"
6795
+ "sha256": "5ea27c3008f17597984c72cf504e8e934a76a3ff76323c94b7ccb65e01c84ead"
6796
6796
  },
6797
6797
  {
6798
- "path": "tests/governance_fold_bench.mjs",
6798
+ "path": "tests/government_fold_bench.mjs",
6799
6799
  "mode": "0000644",
6800
- "sha256": "ee9dd3cd6a9965272305cf3ddffab45a860efbe6cf6f0f4209fd458cd1dd5c16"
6800
+ "sha256": "52f32270eff1105ca1164398c4a1ef279657573d9bb50c7588bd03981f2354a9"
6801
6801
  },
6802
6802
  {
6803
- "path": "tests/governance_live_proof.mjs",
6803
+ "path": "tests/government_live_proof.mjs",
6804
6804
  "mode": "0000644",
6805
- "sha256": "29196719cfa414945a2eeec5b4f8fab30bcdc5bc24a7c184e0c5223d108ec67e"
6805
+ "sha256": "af6423ac87819ff344c8a7804c0eda903a3e8c7633d1e4182e7d4f446d30cec0"
6806
6806
  },
6807
6807
  {
6808
- "path": "tests/governance_ownership_scope.mjs",
6808
+ "path": "tests/government_ownership_scope.mjs",
6809
6809
  "mode": "0000644",
6810
- "sha256": "737343cc8955211c15215a155ed67e20047b5082283f33941f1a027dd435d602"
6810
+ "sha256": "ad627c69ede0d79a2f38030d762cbd5bcf630cd6b067441f5763f261b829d1ba"
6811
6811
  },
6812
6812
  {
6813
- "path": "tests/governance_page_gates.mjs",
6813
+ "path": "tests/government_page_gates.mjs",
6814
6814
  "mode": "0000644",
6815
- "sha256": "b0df520ae8492533e660052fd4da8895c378de63fe90122f1b01790e7bad537e"
6815
+ "sha256": "a0e02201ecc2ab17fc05dd8e20ce106c90dcffd936aa057f4a44cebe01109e4a"
6816
6816
  },
6817
6817
  {
6818
- "path": "tests/governance_parity.mjs",
6818
+ "path": "tests/government_parity.mjs",
6819
6819
  "mode": "0000644",
6820
- "sha256": "12c821eb8c1e051b9de43a9759ea0c5954433b89a88ed4f83699e8cf726979dc"
6820
+ "sha256": "7e1cc047dc75b9574bd64329974f8d1ae59b474d8719fbaae00314c7b2cc88e5"
6821
6821
  },
6822
6822
  {
6823
- "path": "tests/governance_principals.mjs",
6823
+ "path": "tests/government_principals.mjs",
6824
6824
  "mode": "0000644",
6825
- "sha256": "d41e822485d4830e9c5e2154527ca5ebf63bda6281eace6ed7d77f380b74c28b"
6825
+ "sha256": "c2a7d6b6d644b44ca2248fa0247261a4a548e25bd744fa7e029db550231d9da7"
6826
6826
  },
6827
6827
  {
6828
- "path": "tests/governance_protected_surfaces.mjs",
6828
+ "path": "tests/government_protected_surfaces.mjs",
6829
6829
  "mode": "0000644",
6830
- "sha256": "875978b1f2b9a25b9345a6652ff6b7eb48325ec94e11408c45b15e2c0b21fa9a"
6830
+ "sha256": "fd05f72404be0d007222793a6ed3a49904239f8bb354cddab6b052d74288b3b1"
6831
6831
  },
6832
6832
  {
6833
- "path": "tests/governance_require_permission.mjs",
6833
+ "path": "tests/government_rank_sync.mjs",
6834
6834
  "mode": "0000644",
6835
- "sha256": "c546c5d7924031867fa90ebfed8cb9ee5f6906ab199ebb5e837c3ec25920e15c"
6835
+ "sha256": "83462482dff692a3587edecd0e57e0d7638fa08076329a7591c0cb2222d50e47"
6836
6836
  },
6837
6837
  {
6838
- "path": "tests/governance_resolver.mjs",
6838
+ "path": "tests/government_require_permission.mjs",
6839
6839
  "mode": "0000644",
6840
- "sha256": "9153ae65a4f9f4a92fe7ccea791149137c7ec62bed7220bb61421b5c75af8de8"
6840
+ "sha256": "36596b8870d2edc60bd810af5e10fa864d7f35e62e358d2dff58ed85b69922c0"
6841
6841
  },
6842
6842
  {
6843
- "path": "tests/governance_role_sync.mjs",
6843
+ "path": "tests/government_resolver.mjs",
6844
6844
  "mode": "0000644",
6845
- "sha256": "79f837585e89c5f55ad523b4ab2e6e02507c40c1020d387df9fae72557425f29"
6845
+ "sha256": "1e37f1902b59676c1004d4790078ddb39ad6dacd74a5e9ac861982fc33fe2b6d"
6846
6846
  },
6847
6847
  {
6848
- "path": "tests/governance_routes.mjs",
6848
+ "path": "tests/government_routes.mjs",
6849
6849
  "mode": "0000644",
6850
- "sha256": "14788e7c215ea8fda120ca6138073d728ec9ac8271420b47b6d13fb1b5672a80"
6850
+ "sha256": "099954d8dbfa1fd3d503ee1b4825f9a3f10d5ae1e3694c600dd3f06e6a21a127"
6851
6851
  },
6852
6852
  {
6853
- "path": "tests/governance_seed.mjs",
6853
+ "path": "tests/government_seed.mjs",
6854
6854
  "mode": "0000644",
6855
- "sha256": "2543dcac04230360ce311fc13da51134ef1f4e879cb24046457337d2160e50bb"
6855
+ "sha256": "97c9728181f98dcf2daed14a4f87b8acb0fa9fa1d6d55e628eaa06c60c539094"
6856
6856
  },
6857
6857
  {
6858
- "path": "tests/governance_session_scope.mjs",
6858
+ "path": "tests/government_session_scope.mjs",
6859
6859
  "mode": "0000644",
6860
- "sha256": "084d6c0c1af8434a225a0ad9d770a36709debb04938ae70cc7a02e13187da5a4"
6860
+ "sha256": "7aea1db75ada98b9e3756695c743516a3aac5f12a71d654adc383ae886c2568c"
6861
6861
  },
6862
6862
  {
6863
- "path": "tests/governance_vanilla_boot.mjs",
6863
+ "path": "tests/government_vanilla_boot.mjs",
6864
6864
  "mode": "0000644",
6865
- "sha256": "ee9c6fe61ef2b747a7aebd2cc1a000282def4e9c8bd40c181f726c3494c8660c"
6865
+ "sha256": "da3ebb855209f5de20b7d9ec45a9b09a068e251bc644e3090818e5a3f063b356"
6866
+ },
6867
+ {
6868
+ "path": "tests/government_vocabulary.mjs",
6869
+ "mode": "0000644",
6870
+ "sha256": "71bd23242e53b1acd15fddedcb093790a847471c8c55485614d379d29e3065f3"
6866
6871
  },
6867
6872
  {
6868
6873
  "path": "tests/grade_aggregates_unavailable.mjs",
@@ -6932,12 +6937,12 @@
6932
6937
  {
6933
6938
  "path": "tests/hall_nav.mjs",
6934
6939
  "mode": "0000644",
6935
- "sha256": "b0da8fb0e46c57419821dbf8cb5ddeda3c98da76d1b2918c3ce77798ee2768fb"
6940
+ "sha256": "1a8d9bffb258d8338fd5367796bd19d4a31265f591b6d0e941bc1bcf5e2dc4cc"
6936
6941
  },
6937
6942
  {
6938
6943
  "path": "tests/hall_page_gate_map.mjs",
6939
6944
  "mode": "0000644",
6940
- "sha256": "667f291c94e5770c703bae8566e3eb73e86b40baef0e5e9474d92410623b123a"
6945
+ "sha256": "cb23b7a54220c3c53906fed559fb0c8a8e97375aa48dfc3cf64a1af88339e110"
6941
6946
  },
6942
6947
  {
6943
6948
  "path": "tests/hall_palette.mjs",
@@ -43,7 +43,7 @@ export interface GetGoalsIdSuggestCriteriaResponse { goal_id: unknown; suggestio
43
43
  export interface GetGoalsResponse { goals: unknown }
44
44
  export interface GetGovernmentAssignmentsResponse { assignments: unknown }
45
45
  export interface GetGovernmentPermissionsResponse { permissions: unknown; principals: unknown }
46
- export interface GetGovernmentRanksResponse { roles: unknown }
46
+ export interface GetGovernmentRanksResponse { ranks: unknown }
47
47
  export interface GetGradesByBuilderResponse { window_days: unknown; builders: unknown }
48
48
  export interface GetHealthzResponse { ok: boolean; auth_configured: unknown }
49
49
  export interface GetInboxIdResponse { idea: unknown }
@@ -228,7 +228,7 @@ export interface PostGoalsResponse { ok: boolean; goal: unknown; succeeds_goal_i
228
228
  export interface PostGovernmentAssignmentsRequest { builder_id: number; rank_key: string }
229
229
  export interface PostGovernmentRanksRankKeyResetResponse { ok: boolean; rank_key: unknown; seeded_rank: unknown; permission_count: unknown }
230
230
  export interface PostGovernmentRanksRequest { rank_key: string; label: string; description?: string }
231
- export interface PostGovernmentRanksResponse { role: unknown }
231
+ export interface PostGovernmentRanksResponse { rank: unknown }
232
232
  export interface PostInboxIdRatifyRequest { notes_md?: string }
233
233
  export interface PostInboxRequest { title: string; body_md?: string; kind?: string; suggested_version?: string; suggested_priority?: number; grade?: string; template_key?: string; field_values?: Record<string, unknown> }
234
234
  export interface PostLearningsRequest { title: string; body_md: string; tags?: string[]; related_files?: string[]; source?: string; source_ref?: string; task_id?: number }
@@ -1,21 +1,21 @@
1
1
  {
2
- "_note": "Neutral governance starter — the role TEMPLATES a fresh instance inherits (BV1.R96, ADR 0151). Resolved by modules/governance/config.js with the branding precedence: env override -> config/governance.json (instance) -> this file. TEMPLATES AND DEFAULTS ONLY. Live roles, grants, and per-builder assignments are DB rows (governance_roles / governance_role_permissions / governance_builder_roles), resolved server-side per request by resolver.js — putting a live grant here would make config a second source of authority truth and break ADR 0016. The four seeded rank-roles carry label + description only: their grants derive from catalog.js floors and are materialised by governance_002, so config may relabel a seeded role, never re-grant it. A CUSTOM role template may propose a `permissions` array, but a `system: true` key or a key the catalog does not define is stripped fail-closed — a config file is editable by anyone who can write the checkout, so it is not a trust boundary. Carries NO host identity: a vanilla instance boots sane from this file alone (proved by R102). To customise, copy to config/governance.json and edit there.",
3
- "roles": {
2
+ "_note": "Neutral governance starter \u2014 the rank TEMPLATES a fresh instance inherits (BV1.R96, ADR 0151). Resolved by modules/government/config.js with the branding precedence: env override -> config/government.json (instance) -> this file. TEMPLATES AND DEFAULTS ONLY. Live ranks, grants, and per-builder assignments are DB rows (government_ranks / government_rank_permissions / government_builder_ranks), resolved server-side per request by resolver.js \u2014 putting a live grant here would make config a second source of authority truth and break ADR 0016. The four seeded ranks carry label + description only: their grants derive from catalog.js floors and are materialised by governance_002, so config may relabel a seeded rank, never re-grant it. A CUSTOM rank template may propose a `permissions` array, but a `system: true` key or a key the catalog does not define is stripped fail-closed \u2014 a config file is editable by anyone who can write the checkout, so it is not a trust boundary. Carries NO host identity: a vanilla instance boots sane from this file alone (proved by R102). To customise, copy to config/government.json and edit there.",
3
+ "ranks": {
4
4
  "xenos": {
5
5
  "label": "Xenos",
6
- "description": "Seeded rank-role — the sandboxed entry rank. Own-work + public read."
6
+ "description": "Seeded rank \u2014 the sandboxed entry rank. Own-work + public read."
7
7
  },
8
8
  "thetes": {
9
9
  "label": "Thetes",
10
- "description": "Seeded rank-role — graduated newcomer. Adds the general claim queue."
10
+ "description": "Seeded rank \u2014 graduated newcomer. Adds the general claim queue."
11
11
  },
12
12
  "metic": {
13
13
  "label": "Metic",
14
- "description": "Seeded rank-role — the trusted working rank. Adds review/triage/authoring."
14
+ "description": "Seeded rank \u2014 the trusted working rank. Adds review/triage/authoring."
15
15
  },
16
16
  "archon": {
17
17
  "label": "Archon",
18
- "description": "Seeded rank-role — top authority. Adds the admin + system (non-grantable) powers."
18
+ "description": "Seeded rank \u2014 top authority. Adds the admin + system (non-grantable) powers."
19
19
  }
20
20
  }
21
21
  }
@@ -13,7 +13,7 @@ The governance tab (BV1.R110/R111) let an Archon build custom roles and toggle t
13
13
  Three facts made this cheaper and narrower than the read-only rendering suggested:
14
14
 
15
15
  1. **The rank roles' grants were already ordinary rows.** `<redacted>.sql` writes them into `governance_role_permissions` exactly like a custom role's. The immutability was a route-level refusal (`loadMutableRole` → `seeded_role_immutable`) plus a disabled toggle — policy, not structure. Nothing had to be remodelled to make them editable.
16
- 2. **The `system` flag was carrying two different meanings.** ADR 0151 used one boolean for "trust-boundary power," but the twelve `system:true` keys split cleanly in two. Seven are **in-app**: a real route reads them through `requirePermission`, so a grant row genuinely confers them (`builder.rank.set`, `version.close`, `task.confirm.grade_bypass`, `dependency.cross_tier.manage`, `goal.scope.manage`, `governance.manage`, `gate_approval.decide`). Three are **substrate**: `deploy.push_main`, `path.protected.modify`, `infra.ssh` are enforced entirely outside the app by the pre-push hook, `main-audit.js`, the grader pre-pass and credential placement (ADR 0043) — `tests/governance_abuse_matrix.mjs` V10 asserts *no route consumes them* at all. Two are **principal** keys, held by an exact `builders.system_role` identity and by no role ever.
16
+ 2. **The `system` flag was carrying two different meanings.** ADR 0151 used one boolean for "trust-boundary power," but the twelve `system:true` keys split cleanly in two. Seven are **in-app**: a real route reads them through `requirePermission`, so a grant row genuinely confers them (`builder.rank.set`, `version.close`, `task.confirm.grade_bypass`, `dependency.cross_tier.manage`, `goal.scope.manage`, `governance.manage`, `gate_approval.decide`). Three are **substrate**: `deploy.push_main`, `path.protected.modify`, `infra.ssh` are enforced entirely outside the app by the pre-push hook, `main-audit.js`, the grader pre-pass and credential placement (ADR 0043) — `tests/government_abuse_matrix.mjs` V10 asserts *no route consumes them* at all. Two are **principal** keys, held by an exact `builders.system_role` identity and by no role ever.
17
17
  3. **A grant row for a substrate key is inert.** It resolves honestly and admits nothing (abuse matrix V8/V10/V11). So the interesting question was never "is it dangerous to allow" but "would allowing it be *true*" — and it would not be.
18
18
 
19
19
  The owner was presented with the choice and chose to delegate the in-app Archon powers as well as the operational ones, having been told the escalation consequence explicitly.
@@ -5108,7 +5108,7 @@
5108
5108
  "government"
5109
5109
  ],
5110
5110
  "summary": "GET /government/assignments",
5111
- "description": "government.manage — every builder↔role assignment row.\n\n**Rank:** `archon` — Archon only (rank and identity management + the escalation keys — the trust boundary).\n\n**Permissions:** `government.manage` (all required).",
5111
+ "description": "government.manage — every builder↔rank assignment row.\n\n**Rank:** `archon` — Archon only (rank and identity management + the escalation keys — the trust boundary).\n\n**Permissions:** `government.manage` (all required).",
5112
5112
  "x-rank": "archon",
5113
5113
  "x-source": "modules/government/routes/government.js",
5114
5114
  "x-permissions": [
@@ -5147,7 +5147,7 @@
5147
5147
  "government"
5148
5148
  ],
5149
5149
  "summary": "POST /government/assignments",
5150
- "description": "government.manage — assign a CUSTOM role to a builder. assigned_by is ALWAYS the session builder, never input (the audit trail's \"who did this\" must be the authenticated actor).\n\n**Rank:** `archon` — Archon only (rank and identity management + the escalation keys — the trust boundary).\n\n**Permissions:** `government.manage` (all required).",
5150
+ "description": "government.manage — assign a CUSTOM rank to a builder. assigned_by is ALWAYS the session builder, never input (the audit trail's \"who did this\" must be the authenticated actor).\n\n**Rank:** `archon` — Archon only (rank and identity management + the escalation keys — the trust boundary).\n\n**Permissions:** `government.manage` (all required).",
5151
5151
  "x-rank": "archon",
5152
5152
  "x-source": "modules/government/routes/government.js",
5153
5153
  "x-permissions": [
@@ -5192,7 +5192,7 @@
5192
5192
  "government"
5193
5193
  ],
5194
5194
  "summary": "DELETE /government/assignments/:builderId/:rankKey",
5195
- "description": "government.manage — remove a custom-role assignment. Idempotent: `removed` says whether a row went away.\n\n**Rank:** `archon` — Archon only (rank and identity management + the escalation keys — the trust boundary).\n\n**Permissions:** `government.manage` (all required).",
5195
+ "description": "government.manage — remove a custom-rank assignment. Idempotent: `removed` says whether a row went away.\n\n**Rank:** `archon` — Archon only (rank and identity management + the escalation keys — the trust boundary).\n\n**Permissions:** `government.manage` (all required).",
5196
5196
  "x-rank": "archon",
5197
5197
  "x-source": "modules/government/routes/government.js",
5198
5198
  "x-permissions": [
@@ -5256,7 +5256,7 @@
5256
5256
  "government"
5257
5257
  ],
5258
5258
  "summary": "GET /government/permissions",
5259
- "description": "government.manage — the permission catalog + principals, straight from code (the catalog is CODE, not a table); no DB read. Principals are read-only by construction. Three flags the tab renders its locks from, and the tab must read all three rather than just `grantable`, because since ADR 0172 grantability depends on WHICH role is selected: • `grantable` — the CUSTOM-role answer (system:false). Unchanged meaning. • `system` — an in-app Archon power: locked on a custom role, togglable on a sub-Archon rank-role. • `substrate` — locked EVERYWHERE, on every role, forever (ADR 0043).\n\n**Rank:** `archon` — Archon only (rank and identity management + the escalation keys — the trust boundary).\n\n**Permissions:** `government.manage` (all required).",
5259
+ "description": "government.manage — the permission catalog + principals, straight from code (the catalog is CODE, not a table); no DB read. Principals are read-only by construction. Three flags the tab renders its locks from, and the tab must read all three rather than just `grantable`, because since ADR 0172 grantability depends on WHICH rank is selected: • `grantable` — the CUSTOM-rank answer (system:false). Unchanged meaning. • `system` — an in-app Archon power: locked on a custom rank, togglable on a sub-Archon rank. • `substrate` — locked EVERYWHERE, on every rank, forever (ADR 0043).\n\n**Rank:** `archon` — Archon only (rank and identity management + the escalation keys — the trust boundary).\n\n**Permissions:** `government.manage` (all required).",
5260
5260
  "x-rank": "archon",
5261
5261
  "x-source": "modules/government/routes/government.js",
5262
5262
  "x-permissions": [
@@ -5297,7 +5297,7 @@
5297
5297
  "government"
5298
5298
  ],
5299
5299
  "summary": "GET /government/ranks",
5300
- "description": "government.manage — the full role list with each role's grants.\n\n**Rank:** `archon` — Archon only (rank and identity management + the escalation keys — the trust boundary).\n\n**Permissions:** `government.manage` (all required).",
5300
+ "description": "government.manage — the full rank list with each rank's grants.\n\n**Rank:** `archon` — Archon only (rank and identity management + the escalation keys — the trust boundary).\n\n**Permissions:** `government.manage` (all required).",
5301
5301
  "x-rank": "archon",
5302
5302
  "x-source": "modules/government/routes/government.js",
5303
5303
  "x-permissions": [
@@ -5336,7 +5336,7 @@
5336
5336
  "government"
5337
5337
  ],
5338
5338
  "summary": "POST /government/ranks",
5339
- "description": "government.manage — create a CUSTOM role (is_system false, no seeded_rank — the seeded four exist only via governance_002). Grants are added one at a time via the toggle below, so creation carries none.\n\n**Rank:** `archon` — Archon only (rank and identity management + the escalation keys — the trust boundary).\n\n**Permissions:** `government.manage` (all required).",
5339
+ "description": "government.manage — create a CUSTOM rank (is_system false, no seeded_rank — the seeded four exist only via governance_002). Grants are added one at a time via the toggle below, so creation carries none.\n\n**Rank:** `archon` — Archon only (rank and identity management + the escalation keys — the trust boundary).\n\n**Permissions:** `government.manage` (all required).",
5340
5340
  "x-rank": "archon",
5341
5341
  "x-source": "modules/government/routes/government.js",
5342
5342
  "x-permissions": [
@@ -5388,7 +5388,7 @@
5388
5388
  "government"
5389
5389
  ],
5390
5390
  "summary": "PUT /government/ranks/:rankKey/permissions/:permissionKey",
5391
- "description": "government.manage — grant one permission to a role (the toggle's ON half). The order of refusals is the authority order: role exists → role is not the Archon one → the key exists → the key is grantable TO THIS ROLE.\n\n**Rank:** `archon` — Archon only (rank and identity management + the escalation keys — the trust boundary).\n\n**Permissions:** `government.manage` (all required).",
5391
+ "description": "government.manage — grant one permission to a rank (the toggle's ON half). The order of refusals is the authority order: rank exists → rank is not the Archon one → the key exists → the key is grantable TO THIS RANK.\n\n**Rank:** `archon` — Archon only (rank and identity management + the escalation keys — the trust boundary).\n\n**Permissions:** `government.manage` (all required).",
5392
5392
  "x-rank": "archon",
5393
5393
  "x-source": "modules/government/routes/government.js",
5394
5394
  "x-permissions": [
@@ -5514,7 +5514,7 @@
5514
5514
  "government"
5515
5515
  ],
5516
5516
  "summary": "POST /government/ranks/:rankKey/reset",
5517
- "description": "government.manage — restore a SEEDED rank-role to its catalog default (ADR 0172). The counterweight to making the rank-roles editable: a rank's grant set is ~60 rows, so an owner who drifts one has no practical way back by clicking, and \"what does Trusted mean by default\" is a question only the catalog can answer. Restores catalog.seedForRank(role.seeded_rank) — the same derivation governance_002 seeded from, so the answer cannot drift from the floors even after later catalog edits. Deliberately NOT offered for a CUSTOM role: a custom role has no catalog default to return to (its \"default\" is the empty set it was created with), so the honest verb there is revoking the grants, which the toggle already does.\n\n**Rank:** `archon` — Archon only (rank and identity management + the escalation keys — the trust boundary).\n\n**Permissions:** `government.manage` (all required).",
5517
+ "description": "government.manage — restore a SEEDED rank to its catalog default (ADR 0172). The counterweight to making the ranks editable: a rank's grant set is ~60 rows, so an owner who drifts one has no practical way back by clicking, and \"what does Trusted mean by default\" is a question only the catalog can answer. Restores catalog.seedForRank(rank.seeded_rank) — the same derivation governance_002 seeded from, so the answer cannot drift from the floors even after later catalog edits. Deliberately NOT offered for a CUSTOM rank: a custom rank has no catalog default to return to (its \"default\" is the empty set it was created with), so the honest verb there is revoking the grants, which the toggle already does.\n\n**Rank:** `archon` — Archon only (rank and identity management + the escalation keys — the trust boundary).\n\n**Permissions:** `government.manage` (all required).",
5518
5518
  "x-rank": "archon",
5519
5519
  "x-source": "modules/government/routes/government.js",
5520
5520
  "x-permissions": [
@@ -13000,10 +13000,10 @@
13000
13000
  "GetGovernmentRanksResponse": {
13001
13001
  "type": "object",
13002
13002
  "properties": {
13003
- "roles": {}
13003
+ "ranks": {}
13004
13004
  },
13005
13005
  "required": [
13006
- "roles"
13006
+ "ranks"
13007
13007
  ]
13008
13008
  },
13009
13009
  "GetGradesByBuilderResponse": {
@@ -15709,10 +15709,10 @@
15709
15709
  "PostGovernmentRanksResponse": {
15710
15710
  "type": "object",
15711
15711
  "properties": {
15712
- "role": {}
15712
+ "rank": {}
15713
15713
  },
15714
15714
  "required": [
15715
- "role"
15715
+ "rank"
15716
15716
  ]
15717
15717
  },
15718
15718
  "PostInboxIdRatifyRequest": {