@bongos/core 1.19.183 → 1.19.185

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 (81) hide show
  1. package/.bongos-core.json +102 -92
  2. package/clients/bongos-client/bongos-client.global.js +19 -19
  3. package/clients/bongos-client/index.cjs +19 -19
  4. package/clients/bongos-client/index.d.ts +29 -29
  5. package/clients/bongos-client/index.mjs +19 -19
  6. package/docs/adr/0157-archon-is-rank-and-identity-only.md +2 -2
  7. package/docs/api/openapi.json +117 -117
  8. package/docs/api-reference.md +10 -10
  9. package/docs/canonical-permissions.md +6 -6
  10. package/modules/dev-box/app/src/vendor/bongos-client.cjs +19 -19
  11. package/modules/{governance → government}/catalog.js +8 -8
  12. package/modules/{governance → government}/config.js +6 -6
  13. package/modules/{governance → government}/db.js +44 -44
  14. package/modules/government/migrations/government_001_rename_from_governance.sql +213 -0
  15. package/modules/government/migrations/government_002_rename_permission_keys.sql +112 -0
  16. package/modules/government/module.json +22 -0
  17. package/modules/{governance → government}/protected-surfaces.json +0 -1
  18. package/modules/{governance/rank-roles.js → government/ranks.js} +18 -18
  19. package/modules/{governance/routes/governance.js → government/routes/government.js} +109 -84
  20. package/modules/{governance/routes/role-sync.js → government/routes/rank-sync.js} +7 -7
  21. package/modules/hall-ui/public/gate.js +1 -1
  22. package/modules/hall-ui/public/governance.js +38 -38
  23. package/modules/hall-ui/public/harbor.js +2 -2
  24. package/modules/hall-ui/public/shell.js +3 -3
  25. package/modules/hall-ui/public/watch.js +1 -1
  26. package/modules/lifecycle/db.js +6 -6
  27. package/modules/lifecycle/routes/gate-approvals.js +1 -1
  28. package/package-lock.json +2 -2
  29. package/package.json +1 -1
  30. package/scripts/gds/fitness.js +11 -1
  31. package/scripts/gds/migration-namespace.js +15 -3
  32. package/scripts/gds/publish-manifest.js +2 -3
  33. package/scripts/gds/seed-governance-tasks.js +3 -3
  34. package/src/bongos/auth.js +16 -16
  35. package/src/bongos/db.js +6 -6
  36. package/src/bongos/module-scope-map.js +7 -22
  37. package/src/bongos/permission-path-check.js +3 -3
  38. package/src/bongos/route-rank-check.js +15 -21
  39. package/src/bongos/serve-internal.js +2 -2
  40. package/src/module-api.js +7 -3
  41. package/tests/auth_page_gate.mjs +2 -2
  42. package/tests/criterion_authoring_gate.mjs +1 -1
  43. package/tests/governance_abuse_matrix.mjs +38 -38
  44. package/tests/governance_catalog.mjs +4 -4
  45. package/tests/governance_claim_eligibility.mjs +1 -1
  46. package/tests/governance_config.mjs +7 -7
  47. package/tests/governance_fold.mjs +4 -4
  48. package/tests/governance_fold_bench.mjs +2 -2
  49. package/tests/governance_live_proof.mjs +6 -6
  50. package/tests/governance_ownership_scope.mjs +2 -2
  51. package/tests/governance_page_gates.mjs +10 -10
  52. package/tests/governance_parity.mjs +3 -3
  53. package/tests/governance_principals.mjs +3 -3
  54. package/tests/governance_protected_surfaces.mjs +44 -19
  55. package/tests/governance_require_permission.mjs +11 -11
  56. package/tests/governance_resolver.mjs +4 -4
  57. package/tests/governance_role_sync.mjs +35 -35
  58. package/tests/governance_routes.mjs +98 -98
  59. package/tests/governance_seed.mjs +27 -4
  60. package/tests/governance_session_scope.mjs +5 -5
  61. package/tests/governance_vanilla_boot.mjs +4 -4
  62. package/tests/hall_page_gate_map.mjs +3 -3
  63. package/tests/memory_isolation.mjs +2 -2
  64. package/tests/module_loader.mjs +1 -1
  65. package/tests/onboarding_observability.mjs +2 -2
  66. package/tests/rank_tier_single_source.mjs +2 -2
  67. package/tests/route_permission_check.mjs +2 -2
  68. package/modules/governance/module.json +0 -11
  69. /package/config/{governance.neutral.json → government.neutral.json} +0 -0
  70. /package/modules/{governance → government}/CLAUDE.md +0 -0
  71. /package/modules/{governance → government}/migrations/governance_001_tables.sql +0 -0
  72. /package/modules/{governance → government}/migrations/governance_002_seed_and_backfill.sql +0 -0
  73. /package/modules/{governance → government}/migrations/governance_003_task_abandon_metic.sql +0 -0
  74. /package/modules/{governance → government}/migrations/governance_004_criterion_create.sql +0 -0
  75. /package/modules/{governance → government}/migrations/governance_005_resync_builder_rank_roles.sql +0 -0
  76. /package/modules/{governance → government}/migrations/governance_006_version_create.sql +0 -0
  77. /package/modules/{governance → government}/migrations/governance_007_delegate_archon_ops_to_metic.sql +0 -0
  78. /package/modules/{governance → government}/protected-surfaces.js +0 -0
  79. /package/modules/{governance → government}/resolver.js +0 -0
  80. /package/modules/{governance → government}/session-scopes.js +0 -0
  81. /package/modules/{governance → government}/session-scopes.json +0 -0
@@ -338,25 +338,25 @@ function createClient(opts = {}) {
338
338
  // POST /goals/reorder — rank: metic+archon — POST /goals/reorder
339
339
  postGoalsReorder: (args) => request("POST", "/goals/reorder", { hasBody: true }, args),
340
340
  },
341
- "governance": {
342
- // GET /governance/assignments — rank: archon — GET /governance/assignments
343
- getGovernanceAssignments: (args) => request("GET", "/governance/assignments", { hasBody: false }, args),
344
- // POST /governance/assignments — rank: archon — POST /governance/assignments
345
- postGovernanceAssignments: (args) => request("POST", "/governance/assignments", { hasBody: true }, args),
346
- // DELETE /governance/assignments/{builderId}/{roleKey} — rank: archon — DELETE /governance/assignments/:builderId/:roleKey
347
- deleteGovernanceAssignmentsBuilderIdRoleKey: (args) => request("DELETE", "/governance/assignments/{builderId}/{roleKey}", { hasBody: false }, args),
348
- // GET /governance/permissions — rank: archon — GET /governance/permissions
349
- getGovernancePermissions: (args) => request("GET", "/governance/permissions", { hasBody: false }, args),
350
- // GET /governance/roles — rank: archon — GET /governance/roles
351
- getGovernanceRoles: (args) => request("GET", "/governance/roles", { hasBody: false }, args),
352
- // POST /governance/roles — rank: archon — POST /governance/roles
353
- postGovernanceRoles: (args) => request("POST", "/governance/roles", { hasBody: true }, args),
354
- // DELETE /governance/roles/{roleKey}/permissions/{permissionKey} — rank: archon — DELETE /governance/roles/:roleKey/permissions/:permissionKey
355
- deleteGovernanceRolesRoleKeyPermissionsPermissionKey: (args) => request("DELETE", "/governance/roles/{roleKey}/permissions/{permissionKey}", { hasBody: false }, args),
356
- // PUT /governance/roles/{roleKey}/permissions/{permissionKey} — rank: archon — PUT /governance/roles/:roleKey/permissions/:permissionKey
357
- putGovernanceRolesRoleKeyPermissionsPermissionKey: (args) => request("PUT", "/governance/roles/{roleKey}/permissions/{permissionKey}", { hasBody: true }, args),
358
- // POST /governance/roles/{roleKey}/reset — rank: archon — POST /governance/roles/:roleKey/reset
359
- postGovernanceRolesRoleKeyReset: (args) => request("POST", "/governance/roles/{roleKey}/reset", { hasBody: true }, args),
341
+ "government": {
342
+ // GET /government/assignments — rank: archon — GET /government/assignments
343
+ getGovernmentAssignments: (args) => request("GET", "/government/assignments", { hasBody: false }, args),
344
+ // POST /government/assignments — rank: archon — POST /government/assignments
345
+ postGovernmentAssignments: (args) => request("POST", "/government/assignments", { hasBody: true }, args),
346
+ // DELETE /government/assignments/{builderId}/{rankKey} — rank: archon — DELETE /government/assignments/:builderId/:rankKey
347
+ deleteGovernmentAssignmentsBuilderIdRankKey: (args) => request("DELETE", "/government/assignments/{builderId}/{rankKey}", { hasBody: false }, args),
348
+ // GET /government/permissions — rank: archon — GET /government/permissions
349
+ getGovernmentPermissions: (args) => request("GET", "/government/permissions", { hasBody: false }, args),
350
+ // GET /government/ranks — rank: archon — GET /government/ranks
351
+ getGovernmentRanks: (args) => request("GET", "/government/ranks", { hasBody: false }, args),
352
+ // POST /government/ranks — rank: archon — POST /government/ranks
353
+ postGovernmentRanks: (args) => request("POST", "/government/ranks", { hasBody: true }, args),
354
+ // DELETE /government/ranks/{rankKey}/permissions/{permissionKey} — rank: archon — DELETE /government/ranks/:rankKey/permissions/:permissionKey
355
+ deleteGovernmentRanksRankKeyPermissionsPermissionKey: (args) => request("DELETE", "/government/ranks/{rankKey}/permissions/{permissionKey}", { hasBody: false }, args),
356
+ // PUT /government/ranks/{rankKey}/permissions/{permissionKey} — rank: archon — PUT /government/ranks/:rankKey/permissions/:permissionKey
357
+ putGovernmentRanksRankKeyPermissionsPermissionKey: (args) => request("PUT", "/government/ranks/{rankKey}/permissions/{permissionKey}", { hasBody: true }, args),
358
+ // POST /government/ranks/{rankKey}/reset — rank: archon — POST /government/ranks/:rankKey/reset
359
+ postGovernmentRanksRankKeyReset: (args) => request("POST", "/government/ranks/{rankKey}/reset", { hasBody: true }, args),
360
360
  },
361
361
  "grades": {
362
362
  // GET /grades/by-builder — rank: metic+archon — GET /grades/by-builder
@@ -337,25 +337,25 @@ function createClient(opts = {}) {
337
337
  // POST /goals/reorder — rank: metic+archon — POST /goals/reorder
338
338
  postGoalsReorder: (args) => request("POST", "/goals/reorder", { hasBody: true }, args),
339
339
  },
340
- "governance": {
341
- // GET /governance/assignments — rank: archon — GET /governance/assignments
342
- getGovernanceAssignments: (args) => request("GET", "/governance/assignments", { hasBody: false }, args),
343
- // POST /governance/assignments — rank: archon — POST /governance/assignments
344
- postGovernanceAssignments: (args) => request("POST", "/governance/assignments", { hasBody: true }, args),
345
- // DELETE /governance/assignments/{builderId}/{roleKey} — rank: archon — DELETE /governance/assignments/:builderId/:roleKey
346
- deleteGovernanceAssignmentsBuilderIdRoleKey: (args) => request("DELETE", "/governance/assignments/{builderId}/{roleKey}", { hasBody: false }, args),
347
- // GET /governance/permissions — rank: archon — GET /governance/permissions
348
- getGovernancePermissions: (args) => request("GET", "/governance/permissions", { hasBody: false }, args),
349
- // GET /governance/roles — rank: archon — GET /governance/roles
350
- getGovernanceRoles: (args) => request("GET", "/governance/roles", { hasBody: false }, args),
351
- // POST /governance/roles — rank: archon — POST /governance/roles
352
- postGovernanceRoles: (args) => request("POST", "/governance/roles", { hasBody: true }, args),
353
- // DELETE /governance/roles/{roleKey}/permissions/{permissionKey} — rank: archon — DELETE /governance/roles/:roleKey/permissions/:permissionKey
354
- deleteGovernanceRolesRoleKeyPermissionsPermissionKey: (args) => request("DELETE", "/governance/roles/{roleKey}/permissions/{permissionKey}", { hasBody: false }, args),
355
- // PUT /governance/roles/{roleKey}/permissions/{permissionKey} — rank: archon — PUT /governance/roles/:roleKey/permissions/:permissionKey
356
- putGovernanceRolesRoleKeyPermissionsPermissionKey: (args) => request("PUT", "/governance/roles/{roleKey}/permissions/{permissionKey}", { hasBody: true }, args),
357
- // POST /governance/roles/{roleKey}/reset — rank: archon — POST /governance/roles/:roleKey/reset
358
- postGovernanceRolesRoleKeyReset: (args) => request("POST", "/governance/roles/{roleKey}/reset", { hasBody: true }, args),
340
+ "government": {
341
+ // GET /government/assignments — rank: archon — GET /government/assignments
342
+ getGovernmentAssignments: (args) => request("GET", "/government/assignments", { hasBody: false }, args),
343
+ // POST /government/assignments — rank: archon — POST /government/assignments
344
+ postGovernmentAssignments: (args) => request("POST", "/government/assignments", { hasBody: true }, args),
345
+ // DELETE /government/assignments/{builderId}/{rankKey} — rank: archon — DELETE /government/assignments/:builderId/:rankKey
346
+ deleteGovernmentAssignmentsBuilderIdRankKey: (args) => request("DELETE", "/government/assignments/{builderId}/{rankKey}", { hasBody: false }, args),
347
+ // GET /government/permissions — rank: archon — GET /government/permissions
348
+ getGovernmentPermissions: (args) => request("GET", "/government/permissions", { hasBody: false }, args),
349
+ // GET /government/ranks — rank: archon — GET /government/ranks
350
+ getGovernmentRanks: (args) => request("GET", "/government/ranks", { hasBody: false }, args),
351
+ // POST /government/ranks — rank: archon — POST /government/ranks
352
+ postGovernmentRanks: (args) => request("POST", "/government/ranks", { hasBody: true }, args),
353
+ // DELETE /government/ranks/{rankKey}/permissions/{permissionKey} — rank: archon — DELETE /government/ranks/:rankKey/permissions/:permissionKey
354
+ deleteGovernmentRanksRankKeyPermissionsPermissionKey: (args) => request("DELETE", "/government/ranks/{rankKey}/permissions/{permissionKey}", { hasBody: false }, args),
355
+ // PUT /government/ranks/{rankKey}/permissions/{permissionKey} — rank: archon — PUT /government/ranks/:rankKey/permissions/:permissionKey
356
+ putGovernmentRanksRankKeyPermissionsPermissionKey: (args) => request("PUT", "/government/ranks/{rankKey}/permissions/{permissionKey}", { hasBody: true }, args),
357
+ // POST /government/ranks/{rankKey}/reset — rank: archon — POST /government/ranks/:rankKey/reset
358
+ postGovernmentRanksRankKeyReset: (args) => request("POST", "/government/ranks/{rankKey}/reset", { hasBody: true }, args),
359
359
  },
360
360
  "grades": {
361
361
  // GET /grades/by-builder — rank: metic+archon — GET /grades/by-builder
@@ -7,8 +7,8 @@ export declare const DEFAULT_BASE_URL: string;
7
7
  export interface ApiErrorObject { code: string; message: string; details?: unknown }
8
8
  export interface DeleteBoxSshKeyIdResponse { ok: boolean; deleted: unknown }
9
9
  export interface DeleteDependenciesResponse { ok: boolean }
10
- export interface DeleteGovernanceAssignmentsBuilderIdRoleKeyResponse { ok: boolean; builder_id: unknown; role_key: unknown; removed: unknown }
11
- export interface DeleteGovernanceRolesRoleKeyPermissionsPermissionKeyResponse { ok: boolean; role_key: unknown; permission_key: unknown; removed: unknown }
10
+ export interface DeleteGovernmentAssignmentsBuilderIdRankKeyResponse { ok: boolean; builder_id: unknown; rank_key: unknown; removed: unknown }
11
+ export interface DeleteGovernmentRanksRankKeyPermissionsPermissionKeyResponse { ok: boolean; rank_key: unknown; permission_key: unknown; removed: unknown }
12
12
  export interface DeleteMemoryFileResponse { deleted: boolean; builder_id: unknown; path: unknown }
13
13
  export interface DeleteTasksIdCriteriaCriterionIdResponse { ok: boolean; removed: unknown }
14
14
  export interface DeleteTasksIdDependenciesDepIdResponse { ok: boolean; removed: unknown }
@@ -41,9 +41,9 @@ export interface GetGoalsIdRequestsResponse { requests: unknown }
41
41
  export interface GetGoalsIdResponse { goal: unknown; members: unknown; criteria: unknown; dependencies: unknown }
42
42
  export interface GetGoalsIdSuggestCriteriaResponse { goal_id: unknown; suggestions: unknown }
43
43
  export interface GetGoalsResponse { goals: unknown }
44
- export interface GetGovernanceAssignmentsResponse { assignments: unknown }
45
- export interface GetGovernancePermissionsResponse { permissions: unknown; principals: unknown }
46
- export interface GetGovernanceRolesResponse { roles: unknown }
44
+ export interface GetGovernmentAssignmentsResponse { assignments: unknown }
45
+ export interface GetGovernmentPermissionsResponse { permissions: unknown; principals: unknown }
46
+ export interface GetGovernmentRanksResponse { roles: 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 }
@@ -225,10 +225,10 @@ export interface PostGoalsReorderRequest { version_id: string; ordered_ids: numb
225
225
  export interface PostGoalsReorderResponse { ok: boolean; goals: unknown }
226
226
  export interface PostGoalsRequest { version_id: string; title: string; description?: string; scope_modules?: string[]; succeeds_goal_id?: number }
227
227
  export interface PostGoalsResponse { ok: boolean; goal: unknown; succeeds_goal_id: unknown }
228
- export interface PostGovernanceAssignmentsRequest { builder_id: number; role_key: string }
229
- export interface PostGovernanceRolesRequest { role_key: string; label: string; description?: string }
230
- export interface PostGovernanceRolesResponse { role: unknown }
231
- export interface PostGovernanceRolesRoleKeyResetResponse { ok: boolean; role_key: unknown; seeded_rank: unknown; permission_count: unknown }
228
+ export interface PostGovernmentAssignmentsRequest { builder_id: number; rank_key: string }
229
+ export interface PostGovernmentRanksRankKeyResetResponse { ok: boolean; rank_key: unknown; seeded_rank: unknown; permission_count: unknown }
230
+ export interface PostGovernmentRanksRequest { rank_key: string; label: string; description?: string }
231
+ export interface PostGovernmentRanksResponse { role: 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 }
@@ -311,7 +311,7 @@ export interface PostVersionsIdDoneWhenRequest { criterion_id: string; criterion
311
311
  export interface PostVersionsIdDoneWhenResponse { ok: boolean; criterion: unknown }
312
312
  export interface PostVersionsRequest { id: string; name: string; status?: string; track?: string; done_when?: string; scope_doc_path?: string; criteria?: unknown[] }
313
313
  export interface PostVersionsResponse { version: unknown; criteria: unknown }
314
- export interface PutGovernanceRolesRoleKeyPermissionsPermissionKeyResponse { ok: boolean; role_key: unknown; permission_key: unknown; granted: unknown }
314
+ export interface PutGovernmentRanksRankKeyPermissionsPermissionKeyResponse { ok: boolean; rank_key: unknown; permission_key: unknown; granted: unknown }
315
315
  export interface PutTasksIdDependenciesRequest { depends_on_task_ids: unknown[] }
316
316
  export interface PutTasksIdDependenciesResponse { ok: boolean; written: unknown; dependencies: unknown }
317
317
  export type StringifiableId = number | string;
@@ -582,25 +582,25 @@ export interface BongosClient {
582
582
  /** POST /goals/reorder — rank: metic+archon */
583
583
  postGoalsReorder(args: RequestArgs & { body: PostGoalsReorderRequest }): Promise<PostGoalsReorderResponse>;
584
584
  };
585
- "governance": {
586
- /** GET /governance/assignments — rank: archon */
587
- getGovernanceAssignments(args?: RequestArgs): Promise<GetGovernanceAssignmentsResponse>;
588
- /** POST /governance/assignments — rank: archon */
589
- postGovernanceAssignments(args: RequestArgs & { body: PostGovernanceAssignmentsRequest }): Promise<ApiResponse>;
590
- /** DELETE /governance/assignments/{builderId}/{roleKey} — rank: archon */
591
- deleteGovernanceAssignmentsBuilderIdRoleKey(args?: RequestArgs): Promise<DeleteGovernanceAssignmentsBuilderIdRoleKeyResponse>;
592
- /** GET /governance/permissions — rank: archon */
593
- getGovernancePermissions(args?: RequestArgs): Promise<GetGovernancePermissionsResponse>;
594
- /** GET /governance/roles — rank: archon */
595
- getGovernanceRoles(args?: RequestArgs): Promise<GetGovernanceRolesResponse>;
596
- /** POST /governance/roles — rank: archon */
597
- postGovernanceRoles(args: RequestArgs & { body: PostGovernanceRolesRequest }): Promise<PostGovernanceRolesResponse>;
598
- /** DELETE /governance/roles/{roleKey}/permissions/{permissionKey} — rank: archon */
599
- deleteGovernanceRolesRoleKeyPermissionsPermissionKey(args?: RequestArgs): Promise<DeleteGovernanceRolesRoleKeyPermissionsPermissionKeyResponse>;
600
- /** PUT /governance/roles/{roleKey}/permissions/{permissionKey} — rank: archon */
601
- putGovernanceRolesRoleKeyPermissionsPermissionKey(args?: RequestArgs): Promise<PutGovernanceRolesRoleKeyPermissionsPermissionKeyResponse>;
602
- /** POST /governance/roles/{roleKey}/reset — rank: archon */
603
- postGovernanceRolesRoleKeyReset(args?: RequestArgs): Promise<PostGovernanceRolesRoleKeyResetResponse>;
585
+ "government": {
586
+ /** GET /government/assignments — rank: archon */
587
+ getGovernmentAssignments(args?: RequestArgs): Promise<GetGovernmentAssignmentsResponse>;
588
+ /** POST /government/assignments — rank: archon */
589
+ postGovernmentAssignments(args: RequestArgs & { body: PostGovernmentAssignmentsRequest }): Promise<ApiResponse>;
590
+ /** DELETE /government/assignments/{builderId}/{rankKey} — rank: archon */
591
+ deleteGovernmentAssignmentsBuilderIdRankKey(args?: RequestArgs): Promise<DeleteGovernmentAssignmentsBuilderIdRankKeyResponse>;
592
+ /** GET /government/permissions — rank: archon */
593
+ getGovernmentPermissions(args?: RequestArgs): Promise<GetGovernmentPermissionsResponse>;
594
+ /** GET /government/ranks — rank: archon */
595
+ getGovernmentRanks(args?: RequestArgs): Promise<GetGovernmentRanksResponse>;
596
+ /** POST /government/ranks — rank: archon */
597
+ postGovernmentRanks(args: RequestArgs & { body: PostGovernmentRanksRequest }): Promise<PostGovernmentRanksResponse>;
598
+ /** DELETE /government/ranks/{rankKey}/permissions/{permissionKey} — rank: archon */
599
+ deleteGovernmentRanksRankKeyPermissionsPermissionKey(args?: RequestArgs): Promise<DeleteGovernmentRanksRankKeyPermissionsPermissionKeyResponse>;
600
+ /** PUT /government/ranks/{rankKey}/permissions/{permissionKey} — rank: archon */
601
+ putGovernmentRanksRankKeyPermissionsPermissionKey(args?: RequestArgs): Promise<PutGovernmentRanksRankKeyPermissionsPermissionKeyResponse>;
602
+ /** POST /government/ranks/{rankKey}/reset — rank: archon */
603
+ postGovernmentRanksRankKeyReset(args?: RequestArgs): Promise<PostGovernmentRanksRankKeyResetResponse>;
604
604
  };
605
605
  "grades": {
606
606
  /** GET /grades/by-builder — rank: metic+archon */
@@ -334,25 +334,25 @@ export function createClient(opts = {}) {
334
334
  // POST /goals/reorder — rank: metic+archon — POST /goals/reorder
335
335
  postGoalsReorder: (args) => request("POST", "/goals/reorder", { hasBody: true }, args),
336
336
  },
337
- "governance": {
338
- // GET /governance/assignments — rank: archon — GET /governance/assignments
339
- getGovernanceAssignments: (args) => request("GET", "/governance/assignments", { hasBody: false }, args),
340
- // POST /governance/assignments — rank: archon — POST /governance/assignments
341
- postGovernanceAssignments: (args) => request("POST", "/governance/assignments", { hasBody: true }, args),
342
- // DELETE /governance/assignments/{builderId}/{roleKey} — rank: archon — DELETE /governance/assignments/:builderId/:roleKey
343
- deleteGovernanceAssignmentsBuilderIdRoleKey: (args) => request("DELETE", "/governance/assignments/{builderId}/{roleKey}", { hasBody: false }, args),
344
- // GET /governance/permissions — rank: archon — GET /governance/permissions
345
- getGovernancePermissions: (args) => request("GET", "/governance/permissions", { hasBody: false }, args),
346
- // GET /governance/roles — rank: archon — GET /governance/roles
347
- getGovernanceRoles: (args) => request("GET", "/governance/roles", { hasBody: false }, args),
348
- // POST /governance/roles — rank: archon — POST /governance/roles
349
- postGovernanceRoles: (args) => request("POST", "/governance/roles", { hasBody: true }, args),
350
- // DELETE /governance/roles/{roleKey}/permissions/{permissionKey} — rank: archon — DELETE /governance/roles/:roleKey/permissions/:permissionKey
351
- deleteGovernanceRolesRoleKeyPermissionsPermissionKey: (args) => request("DELETE", "/governance/roles/{roleKey}/permissions/{permissionKey}", { hasBody: false }, args),
352
- // PUT /governance/roles/{roleKey}/permissions/{permissionKey} — rank: archon — PUT /governance/roles/:roleKey/permissions/:permissionKey
353
- putGovernanceRolesRoleKeyPermissionsPermissionKey: (args) => request("PUT", "/governance/roles/{roleKey}/permissions/{permissionKey}", { hasBody: true }, args),
354
- // POST /governance/roles/{roleKey}/reset — rank: archon — POST /governance/roles/:roleKey/reset
355
- postGovernanceRolesRoleKeyReset: (args) => request("POST", "/governance/roles/{roleKey}/reset", { hasBody: true }, args),
337
+ "government": {
338
+ // GET /government/assignments — rank: archon — GET /government/assignments
339
+ getGovernmentAssignments: (args) => request("GET", "/government/assignments", { hasBody: false }, args),
340
+ // POST /government/assignments — rank: archon — POST /government/assignments
341
+ postGovernmentAssignments: (args) => request("POST", "/government/assignments", { hasBody: true }, args),
342
+ // DELETE /government/assignments/{builderId}/{rankKey} — rank: archon — DELETE /government/assignments/:builderId/:rankKey
343
+ deleteGovernmentAssignmentsBuilderIdRankKey: (args) => request("DELETE", "/government/assignments/{builderId}/{rankKey}", { hasBody: false }, args),
344
+ // GET /government/permissions — rank: archon — GET /government/permissions
345
+ getGovernmentPermissions: (args) => request("GET", "/government/permissions", { hasBody: false }, args),
346
+ // GET /government/ranks — rank: archon — GET /government/ranks
347
+ getGovernmentRanks: (args) => request("GET", "/government/ranks", { hasBody: false }, args),
348
+ // POST /government/ranks — rank: archon — POST /government/ranks
349
+ postGovernmentRanks: (args) => request("POST", "/government/ranks", { hasBody: true }, args),
350
+ // DELETE /government/ranks/{rankKey}/permissions/{permissionKey} — rank: archon — DELETE /government/ranks/:rankKey/permissions/:permissionKey
351
+ deleteGovernmentRanksRankKeyPermissionsPermissionKey: (args) => request("DELETE", "/government/ranks/{rankKey}/permissions/{permissionKey}", { hasBody: false }, args),
352
+ // PUT /government/ranks/{rankKey}/permissions/{permissionKey} — rank: archon — PUT /government/ranks/:rankKey/permissions/:permissionKey
353
+ putGovernmentRanksRankKeyPermissionsPermissionKey: (args) => request("PUT", "/government/ranks/{rankKey}/permissions/{permissionKey}", { hasBody: true }, args),
354
+ // POST /government/ranks/{rankKey}/reset — rank: archon — POST /government/ranks/:rankKey/reset
355
+ postGovernmentRanksRankKeyReset: (args) => request("POST", "/government/ranks/{rankKey}/reset", { hasBody: true }, args),
356
356
  },
357
357
  "grades": {
358
358
  // GET /grades/by-builder — rank: metic+archon — GET /grades/by-builder
@@ -22,7 +22,7 @@ Lars's directive (2026-08-05): **"Move all of these to metic, and make archon ju
22
22
 
23
23
  The literal reading of that directive — edit 41 `requireRank('archon')` call sites — was the wrong shape, and briefly the plan. BV1.R104/R105 (jaxri, tasks [1001846](https://cloudbongos.com/builders#/task/1001846)/[1001847](https://cloudbongos.com/builders#/task/1001847)) had migrated the route gates to `requirePermission(...)` and were sitting at `confirmed` — graded, verified, unmerged — for five days. They landed mid-session.
24
24
 
25
- Once every gate reads `requirePermission('<atom>')`, the rank floor is declared in exactly one place: `floor:` in [`modules/governance/catalog.js`](../../modules/governance/catalog.js). The delegation collapses from 41 call-site edits to **20 one-word floor changes in one table**. That is the ADR 0151 payoff arriving in practice, and it is worth recording as the concrete return on that refactor: the same owner decision was a 41-file diff on Monday and a 1-file diff on Tuesday.
25
+ Once every gate reads `requirePermission('<atom>')`, the rank floor is declared in exactly one place: `floor:` in [`modules/governance/catalog.js`](../../modules/government/catalog.js). The delegation collapses from 41 call-site edits to **20 one-word floor changes in one table**. That is the ADR 0151 payoff arriving in practice, and it is worth recording as the concrete return on that refactor: the same owner decision was a 41-file diff on Monday and a 1-file diff on Tuesday.
26
26
 
27
27
  ## Decision
28
28
 
@@ -82,7 +82,7 @@ Left alone, a Metic would open `/gate` and get a page rendering nothing but a 40
82
82
  1. **The exploit cookbook widened.** `security.report.adjudicate` guards `/security/docs` — the engagement-report store holding attacker-usable exploit detail — so that is now Metic-readable. Every other delegated atom widens who may *act*; this one widens who may *read*. If unwanted, the fix mirrors §4: split a `security.docs.read` at archon and let adjudication delegate. Recorded in `tests/security_docs.mjs` at the assertion that used to guard it.
83
83
  2. **The backward ratchet delegated.** [ADR 0154](<redacted>.md) made "unsatisfy stays Archon" the explicit safety argument for delegating criterion *create* — the forward ratchet moved, the backward one did not. `criterion.unsatisfy` is neither rank/identity nor an escalation key, so under this directive it moved, superseding that carve-out. What still holds is the part that never depended on rank: satisfy and unsatisfy remain **separate atoms**, so confirming a criterion never confers the power to un-confirm one.
84
84
 
85
- **A floor change needs a migration.** `governance_002`'s compat seed is run-once, so an edited `floor:` never reaches an already-migrated database. [`<redacted>.sql`](../../modules/governance/migrations/<redacted>.sql) grants the 20 to `metic` (+ `gate_approval.read` to both, since it is new). Lowering a floor is additive, so `tests/governance_seed.mjs`'s union model handles it and revokes nothing.
85
+ **A floor change needs a migration.** `governance_002`'s compat seed is run-once, so an edited `floor:` never reaches an already-migrated database. [`<redacted>.sql`](../../modules/government/migrations/<redacted>.sql) grants the 20 to `metic` (+ `gate_approval.read` to both, since it is new). Lowering a floor is additive, so `tests/governance_seed.mjs`'s union model handles it and revokes nothing.
86
86
 
87
87
  **`requireArchonPage` is now a misnomer** — it resolves `page.view.governance`, floor metic. Renaming it touches serve-internal, auth, and several test files; left deliberately to keep this diff small in authz code, and filed separately. The hall nav group was relabelled **Archon → Governance**, because a header reading "Archon" over items a Metic can open misdescribes the ladder to exactly the builders still learning it.
88
88