@bongos/core 1.21.31 → 1.21.32

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 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.31",
6
- "core_contract": "1.21.31",
7
- "source_commit": "420a0600d983580f569292a84785356f3df3f039",
5
+ "core_version": "1.21.32",
6
+ "core_contract": "1.21.32",
7
+ "source_commit": "dc621db8394a42d17e812d259ae034b2d9ff2e49",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-10-03T13:05:22.192Z",
9
+ "built_at": "2026-10-03T20:09:59.517Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
12
  "docs_redacted": 581,
13
13
  "agent_docs_stubbed": 27,
14
- "functional_verbatim": 2902,
14
+ "functional_verbatim": 2904,
15
15
  "rules": 3,
16
16
  "gate_literals": 3,
17
17
  "gate": "passed"
18
18
  },
19
- "file_count": 3511,
20
- "tree_sha256": "e167a836d4a72c03cf4282938fce24179be13959361af809c0a340b24e4599d2",
19
+ "file_count": 3513,
20
+ "tree_sha256": "90d84e8130f69ebcd5a15d34b53ac41e6728ff754955ee11a4a9c62dda2dd54b",
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": "9a17378c114f0459f7e10ea00630b8e28a681c00f7167d42e6c4f2753250ac9d"
320
+ "sha256": "69d42ead01d9c96a8728c306701ade8dc9f1682cfa82513c2411a9d3a265c48d"
321
321
  },
322
322
  {
323
323
  "path": "clients/bongos-client/bongos-client.global.js",
324
324
  "mode": "0000644",
325
- "sha256": "89925473105a2efe1cc3113eb01bb781e340b495125552769562e22c1c43e1f4"
325
+ "sha256": "134bfb4b226537fdeaf31519c764926dc250b713e4eb3968e65068d0fc460740"
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": "f6ef7ef830a1bc6c806e523a5c1e86cdc43b48b73f5d66f7235e9ed23837ac82"
335
+ "sha256": "319671c677ec2bbcadbb8b054b47acf4e943e823720edba32416b6a23c46c90b"
336
336
  },
337
337
  {
338
338
  "path": "clients/bongos-client/index.d.ts",
339
339
  "mode": "0000644",
340
- "sha256": "96670d9a3abbf2d4bdd3eb3f63f179210493a822d07bbdfc9dc98d4e93cd866a"
340
+ "sha256": "07246b400a63caa5586a45ec1af6b60c04e616f06515015653d6e7dc48b3fe4f"
341
341
  },
342
342
  {
343
343
  "path": "clients/bongos-client/index.mjs",
344
344
  "mode": "0000644",
345
- "sha256": "3611b6a0d1425b44300c80828e90ae324e566639f2bc4a6f5792902c8805b31c"
345
+ "sha256": "1a8057d83c6ab453ce6251991f30b8502edb0cd9cebd90d427f706187073f3c2"
346
346
  },
347
347
  {
348
348
  "path": "clients/bongos-client/package.json",
@@ -2292,12 +2292,12 @@
2292
2292
  {
2293
2293
  "path": "docs/api-reference.md",
2294
2294
  "mode": "0000644",
2295
- "sha256": "f7a74e0d63a68d2e806d9f24288f2a15549819baafcd041aa472ecd0f604b7d4"
2295
+ "sha256": "0d8593234a315be3d3e03f23612ee7248ee742bca086e24c6b835d28f137c443"
2296
2296
  },
2297
2297
  {
2298
2298
  "path": "docs/api/openapi.json",
2299
2299
  "mode": "0000644",
2300
- "sha256": "7f94594aed0457b0adb4c1812602aa59199f61540653d378c2e326a1a50fd9a5"
2300
+ "sha256": "0b0b87bbe13d992d896a7145f86d1ef09d7f80c2922d968ea45bcbff38479e11"
2301
2301
  },
2302
2302
  {
2303
2303
  "path": "docs/architecture.md",
@@ -2322,12 +2322,12 @@
2322
2322
  {
2323
2323
  "path": "docs/copy-inventory.md",
2324
2324
  "mode": "0000644",
2325
- "sha256": "ed778bfe2ae98c220dbedfd760b4a9c237f00bb87d4d64e5586db10c9aee8464"
2325
+ "sha256": "48ed28854a75411af0098e31dd92f99b1cceff4e969dc1d1811a5e1bf9ccf696"
2326
2326
  },
2327
2327
  {
2328
2328
  "path": "docs/copy-registry.json",
2329
2329
  "mode": "0000644",
2330
- "sha256": "daa76534767164c10b7c9fe69b835b17434551180c53c7f4138d3b86a00b55d0"
2330
+ "sha256": "13b018cc4a49c755c7f6b598079fdd0f028008e2c63b1e1bb18c14871b786d1f"
2331
2331
  },
2332
2332
  {
2333
2333
  "path": "docs/design/apex-pass-2-direction.md",
@@ -2832,7 +2832,7 @@
2832
2832
  {
2833
2833
  "path": "docs/module-api-changelog.md",
2834
2834
  "mode": "0000644",
2835
- "sha256": "f3e68aad9ee24560d93e154ac36542eb2eb74da83df0aab7e5cd62e45f4767bd"
2835
+ "sha256": "c0f0ecb9abea0a0d26109fbdc1022b7496ef6e9bdbfe84f1d2555bde8400149e"
2836
2836
  },
2837
2837
  {
2838
2838
  "path": "docs/modules-contract.md",
@@ -2922,7 +2922,7 @@
2922
2922
  {
2923
2923
  "path": "docs/page-readings.json",
2924
2924
  "mode": "0000644",
2925
- "sha256": "3687073b5014216bf3d9c555a63ded681c1125d388218d98e23ccaedd43221db"
2925
+ "sha256": "8ba0324ffe4260864ca53f1e42198491c42e60dd328e9886380e3ffb2e3087be"
2926
2926
  },
2927
2927
  {
2928
2928
  "path": "docs/project-context.template.md",
@@ -4852,7 +4852,7 @@
4852
4852
  {
4853
4853
  "path": "modules/government/catalog.js",
4854
4854
  "mode": "0000644",
4855
- "sha256": "9544ad82b54da74a8c9e9074222a649a1a6e16927d66fde8b4b7db75ff1639e5"
4855
+ "sha256": "300d99ff9a8c8c59f70179367e0b262c774f2cfa91376347d13e62296dbf132a"
4856
4856
  },
4857
4857
  {
4858
4858
  "path": "modules/government/charter.js",
@@ -5049,6 +5049,11 @@
5049
5049
  "mode": "0000644",
5050
5050
  "sha256": "2c2d27c50016287ecba7ccbd2491895a7edc7b2b100887d6f76ffdc2a1617fcc"
5051
5051
  },
5052
+ {
5053
+ "path": "modules/government/migrations/government_024_version_focus_set.sql",
5054
+ "mode": "0000644",
5055
+ "sha256": "e839988918bee95e0a5f11bbfe71bd6d3304ad6d8a00a6b78593a34c3e36a6c4"
5056
+ },
5052
5057
  {
5053
5058
  "path": "modules/government/module.json",
5054
5059
  "mode": "0000644",
@@ -5997,7 +6002,7 @@
5997
6002
  {
5998
6003
  "path": "modules/hall-ui/public/roadmap.css",
5999
6004
  "mode": "0000644",
6000
- "sha256": "ea64e6904225470e20d8bb4a0d18f39f7a1e70406ecdec67ed9abaaf2880fc85"
6005
+ "sha256": "fccf31699d5f0a01d2f733f97eb50e5eea55ed2c4c8859cf1b59b6c09809b5b4"
6001
6006
  },
6002
6007
  {
6003
6008
  "path": "modules/hall-ui/public/roadmap.html",
@@ -6007,7 +6012,7 @@
6007
6012
  {
6008
6013
  "path": "modules/hall-ui/public/roadmap.js",
6009
6014
  "mode": "0000644",
6010
- "sha256": "cddeb1d315e7222724199fef9a3045f2c7def92a63c56d0151c5e45a38ff7b3d"
6015
+ "sha256": "d48cbc473110568a145127fa0c7cc22e07a32b835d3c40e0412c31a91ca3a217"
6011
6016
  },
6012
6017
  {
6013
6018
  "path": "modules/hall-ui/public/roadmap.states.json",
@@ -7267,7 +7272,7 @@
7267
7272
  {
7268
7273
  "path": "modules/lifecycle/routes/versions.js",
7269
7274
  "mode": "0000644",
7270
- "sha256": "f26de67bbb2bc311e3c258cb8946402006c8705653edbb020435a9e7653945d7"
7275
+ "sha256": "882403ac8a51cd660b8251c1be7aabefa26688fa78882e71567df1e6e136e365"
7271
7276
  },
7272
7277
  {
7273
7278
  "path": "modules/lifecycle/routes/visuals.js",
@@ -9802,12 +9807,12 @@
9802
9807
  {
9803
9808
  "path": "package-lock.json",
9804
9809
  "mode": "0000644",
9805
- "sha256": "6465549449f685ca54f3bc931158e2d9db65eb9928f6eff8a62b029ba6a23090"
9810
+ "sha256": "98c7377fe080c344a720b0ec5e306d6229bd9c330fb051838c1d9e6f653dbbe6"
9806
9811
  },
9807
9812
  {
9808
9813
  "path": "package.json",
9809
9814
  "mode": "0000644",
9810
- "sha256": "c674f1e75b2375308ce73b76d12e6feae99f563776c6cca414685979f0816e14"
9815
+ "sha256": "6bb8d1ab2b6db8876f1e38077a19483cb12ebe4c8a9971e4964f563298a0866c"
9811
9816
  },
9812
9817
  {
9813
9818
  "path": "public-docs/index.html",
@@ -9827,7 +9832,7 @@
9827
9832
  {
9828
9833
  "path": "release-notes.json",
9829
9834
  "mode": "0000644",
9830
- "sha256": "24ad77c91494da27e79240ca6fcdfd801363bfa44f941b038ea422c0452a5d51"
9835
+ "sha256": "71b4fa8ec2f99c846ba0ee0d7f3451613e624841fcf4fc6790b40f5f086a3a4c"
9831
9836
  },
9832
9837
  {
9833
9838
  "path": "scripts/bongos-mcp.js",
@@ -11877,7 +11882,7 @@
11877
11882
  {
11878
11883
  "path": "src/bongos/project-settings.js",
11879
11884
  "mode": "0000644",
11880
- "sha256": "a33925c65c1c9e909eceaf57e17834506d923b34a39aa751418dfaedc095fc65"
11885
+ "sha256": "314c81c0837fcb79c15bb9e2761f902e7216c0411582c006123cc9014d883f16"
11881
11886
  },
11882
11887
  {
11883
11888
  "path": "src/bongos/repo-info.js",
@@ -12052,7 +12057,7 @@
12052
12057
  {
12053
12058
  "path": "src/module-api.js",
12054
12059
  "mode": "0000644",
12055
- "sha256": "4a1a5a417c91bfa2df5df2fa356b5e016191549af19e19d182a48e1f4282af14"
12060
+ "sha256": "3b1ea1c35af115635ef7cacc489bf5ba30bbc7aa205cec47e38602934574393d"
12056
12061
  },
12057
12062
  {
12058
12063
  "path": "src/module-loader/catalog.js",
@@ -13579,6 +13584,11 @@
13579
13584
  "mode": "0000644",
13580
13585
  "sha256": "9bbd9e2977105beeb98e52f0cb0d7e57c5dd20d3254710adcc937a15b327d292"
13581
13586
  },
13587
+ {
13588
+ "path": "tests/focus_version.mjs",
13589
+ "mode": "0000644",
13590
+ "sha256": "537ebc7aaa324f6cd3af8b2289714472de811361453d7f463017a653118b0518"
13591
+ },
13582
13592
  {
13583
13593
  "path": "tests/founding_birth.mjs",
13584
13594
  "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
- - 499 operations across 73 resource groups
8
+ - 501 operations across 73 resource groups
9
9
 
10
10
  ## Use it from your project
11
11
 
@@ -1217,6 +1217,10 @@ function createClient(opts = {}) {
1217
1217
  getVersionsIdProgress: (args) => request("GET", "/versions/{id}/progress", { hasBody: false }, args),
1218
1218
  // GET /versions/close-suggestions — rank: public — GET /versions/close-suggestions
1219
1219
  getVersionsCloseSuggestions: (args) => request("GET", "/versions/close-suggestions", { hasBody: false }, args),
1220
+ // GET /versions/focus — rank: any-builder — GET /versions/focus
1221
+ getVersionsFocus: (args) => request("GET", "/versions/focus", { hasBody: false }, args),
1222
+ // PUT /versions/focus — rank: archon — PUT /versions/focus
1223
+ putVersionsFocus: (args) => request("PUT", "/versions/focus", { hasBody: true }, args),
1220
1224
  // GET /versions/progress — rank: public — GET /versions/progress
1221
1225
  getVersionsProgress: (args) => request("GET", "/versions/progress", { hasBody: false }, args),
1222
1226
  },
@@ -1216,6 +1216,10 @@ function createClient(opts = {}) {
1216
1216
  getVersionsIdProgress: (args) => request("GET", "/versions/{id}/progress", { hasBody: false }, args),
1217
1217
  // GET /versions/close-suggestions — rank: public — GET /versions/close-suggestions
1218
1218
  getVersionsCloseSuggestions: (args) => request("GET", "/versions/close-suggestions", { hasBody: false }, args),
1219
+ // GET /versions/focus — rank: any-builder — GET /versions/focus
1220
+ getVersionsFocus: (args) => request("GET", "/versions/focus", { hasBody: false }, args),
1221
+ // PUT /versions/focus — rank: archon — PUT /versions/focus
1222
+ putVersionsFocus: (args) => request("PUT", "/versions/focus", { hasBody: true }, args),
1219
1223
  // GET /versions/progress — rank: public — GET /versions/progress
1220
1224
  getVersionsProgress: (args) => request("GET", "/versions/progress", { hasBody: false }, args),
1221
1225
  },
@@ -182,6 +182,7 @@ export interface GetTasksNewcomerFloorResponse { disciplines: unknown }
182
182
  export interface GetTasksPeerVotesFeedResponse { tasks: unknown; can_vote: unknown }
183
183
  export interface GetTasksResponse { tasks: unknown }
184
184
  export interface GetVersionsCloseSuggestionsResponse { suggestions: unknown }
185
+ export interface GetVersionsFocusResponse { focus_version_id: unknown; can_set: unknown }
185
186
  export interface GetVersionsIdDoneWhenResponse { version_id: unknown; criteria: unknown; goals: unknown }
186
187
  export interface GetVersionsProgressResponse { progress: unknown }
187
188
  export interface GetVersionsResponse { versions: unknown; page: unknown }
@@ -534,6 +535,8 @@ export interface PutSpecialitiesIdSkillsRequest { enabled_skills: string[] }
534
535
  export interface PutSpecialitiesIdSkillsResponse { adoption: unknown }
535
536
  export interface PutTasksIdDependenciesRequest { depends_on_task_ids: unknown[] }
536
537
  export interface PutTasksIdDependenciesResponse { ok: boolean; written: unknown; dependencies: unknown }
538
+ export interface PutVersionsFocusRequest { version_id?: string }
539
+ export interface PutVersionsFocusResponse { ok: boolean; focus_version_id: unknown }
537
540
  export type StringifiableId = number | string;
538
541
 
539
542
  // The fallback response type: a route whose res.json({…}) shape could not be
@@ -1681,6 +1684,10 @@ export interface BongosClient {
1681
1684
  getVersionsIdProgress(args?: RequestArgs): Promise<ApiResponse>;
1682
1685
  /** GET /versions/close-suggestions — rank: public */
1683
1686
  getVersionsCloseSuggestions(args?: RequestArgs): Promise<GetVersionsCloseSuggestionsResponse>;
1687
+ /** GET /versions/focus — rank: any-builder */
1688
+ getVersionsFocus(args?: RequestArgs): Promise<GetVersionsFocusResponse>;
1689
+ /** PUT /versions/focus — rank: archon */
1690
+ putVersionsFocus(args?: RequestArgs & { body?: PutVersionsFocusRequest }): Promise<PutVersionsFocusResponse>;
1684
1691
  /** GET /versions/progress — rank: public */
1685
1692
  getVersionsProgress(args?: RequestArgs): Promise<GetVersionsProgressResponse>;
1686
1693
  };
@@ -1213,6 +1213,10 @@ export function createClient(opts = {}) {
1213
1213
  getVersionsIdProgress: (args) => request("GET", "/versions/{id}/progress", { hasBody: false }, args),
1214
1214
  // GET /versions/close-suggestions — rank: public — GET /versions/close-suggestions
1215
1215
  getVersionsCloseSuggestions: (args) => request("GET", "/versions/close-suggestions", { hasBody: false }, args),
1216
+ // GET /versions/focus — rank: any-builder — GET /versions/focus
1217
+ getVersionsFocus: (args) => request("GET", "/versions/focus", { hasBody: false }, args),
1218
+ // PUT /versions/focus — rank: archon — PUT /versions/focus
1219
+ putVersionsFocus: (args) => request("PUT", "/versions/focus", { hasBody: true }, args),
1216
1220
  // GET /versions/progress — rank: public — GET /versions/progress
1217
1221
  getVersionsProgress: (args) => request("GET", "/versions/progress", { hasBody: false }, args),
1218
1222
  },
@@ -23058,6 +23058,94 @@
23058
23058
  "security": []
23059
23059
  }
23060
23060
  },
23061
+ "/versions/focus": {
23062
+ "get": {
23063
+ "operationId": "get_versions_focus",
23064
+ "tags": [
23065
+ "versions"
23066
+ ],
23067
+ "summary": "GET /versions/focus",
23068
+ "description": "The project's focus version (task 1004551) — the one the Roadmap stars. Read: any signed-in builder. Write: Archon only, enforced here on the server, not just by the button hiding. No row = no focus. rank: any-builder — read-only; returns { focus_version_id: string|null, can_set }. can_set tells the page whether to draw a button — a hint only; PUT is the gate.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
23069
+ "x-rank": "any-builder",
23070
+ "x-source": "modules/lifecycle/routes/versions.js",
23071
+ "responses": {
23072
+ "200": {
23073
+ "description": "Success.",
23074
+ "content": {
23075
+ "application/json": {
23076
+ "schema": {
23077
+ "$ref": "#/components/schemas/GetVersionsFocusResponse"
23078
+ }
23079
+ }
23080
+ }
23081
+ },
23082
+ "400": {
23083
+ "$ref": "#/components/responses/BadRequest"
23084
+ },
23085
+ "401": {
23086
+ "$ref": "#/components/responses/Unauthorized"
23087
+ },
23088
+ "403": {
23089
+ "$ref": "#/components/responses/Forbidden"
23090
+ }
23091
+ },
23092
+ "security": [
23093
+ {
23094
+ "builderSession": []
23095
+ }
23096
+ ]
23097
+ },
23098
+ "put": {
23099
+ "operationId": "put_versions_focus",
23100
+ "tags": [
23101
+ "versions"
23102
+ ],
23103
+ "summary": "PUT /versions/focus",
23104
+ "description": "(atom version.focus.set, system) — body { version_id } sets the focus; { version_id: null } clears it. An unknown version id is refused rather than stored.\n\n**Rank:** `archon` — Archon only (rank and identity management + the escalation keys — the trust boundary).\n\n**Permissions:** `version.focus.set` (all required).",
23105
+ "x-rank": "archon",
23106
+ "x-source": "modules/lifecycle/routes/versions.js",
23107
+ "x-permissions": [
23108
+ "version.focus.set"
23109
+ ],
23110
+ "requestBody": {
23111
+ "required": false,
23112
+ "content": {
23113
+ "application/json": {
23114
+ "schema": {
23115
+ "$ref": "#/components/schemas/PutVersionsFocusRequest"
23116
+ }
23117
+ }
23118
+ },
23119
+ "x-validated": true
23120
+ },
23121
+ "responses": {
23122
+ "200": {
23123
+ "description": "Success.",
23124
+ "content": {
23125
+ "application/json": {
23126
+ "schema": {
23127
+ "$ref": "#/components/schemas/PutVersionsFocusResponse"
23128
+ }
23129
+ }
23130
+ }
23131
+ },
23132
+ "400": {
23133
+ "$ref": "#/components/responses/ValidationFailed"
23134
+ },
23135
+ "401": {
23136
+ "$ref": "#/components/responses/Unauthorized"
23137
+ },
23138
+ "403": {
23139
+ "$ref": "#/components/responses/Forbidden"
23140
+ }
23141
+ },
23142
+ "security": [
23143
+ {
23144
+ "builderSession": []
23145
+ }
23146
+ ]
23147
+ }
23148
+ },
23061
23149
  "/versions/progress": {
23062
23150
  "get": {
23063
23151
  "operationId": "get_versions_progress",
@@ -25721,6 +25809,17 @@
25721
25809
  "suggestions"
25722
25810
  ]
25723
25811
  },
25812
+ "GetVersionsFocusResponse": {
25813
+ "type": "object",
25814
+ "properties": {
25815
+ "focus_version_id": {},
25816
+ "can_set": {}
25817
+ },
25818
+ "required": [
25819
+ "focus_version_id",
25820
+ "can_set"
25821
+ ]
25822
+ },
25724
25823
  "GetVersionsIdDoneWhenResponse": {
25725
25824
  "type": "object",
25726
25825
  "properties": {
@@ -31832,6 +31931,29 @@
31832
31931
  "dependencies"
31833
31932
  ]
31834
31933
  },
31934
+ "PutVersionsFocusRequest": {
31935
+ "type": "object",
31936
+ "properties": {
31937
+ "version_id": {
31938
+ "type": "string",
31939
+ "maxLength": 64
31940
+ }
31941
+ },
31942
+ "additionalProperties": false
31943
+ },
31944
+ "PutVersionsFocusResponse": {
31945
+ "type": "object",
31946
+ "properties": {
31947
+ "ok": {
31948
+ "type": "boolean"
31949
+ },
31950
+ "focus_version_id": {}
31951
+ },
31952
+ "required": [
31953
+ "ok",
31954
+ "focus_version_id"
31955
+ ]
31956
+ },
31835
31957
  "StringifiableId": {
31836
31958
  "type": [
31837
31959
  "integer",
@@ -31955,9 +32077,9 @@
31955
32077
  "description": "A required dependency/feature is not configured or is temporarily down."
31956
32078
  }
31957
32079
  },
31958
- "x-endpoint-count": 499,
31959
- "x-schema-count": 531,
32080
+ "x-endpoint-count": 501,
32081
+ "x-schema-count": 534,
31960
32082
  "x-undocumented-bodies": 12,
31961
- "x-response-schemas": 353,
32083
+ "x-response-schemas": 355,
31962
32084
  "x-generated-by": "scripts/gds/gen-api-docs.js"
31963
32085
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Bongos API reference
4
4
 
5
- > **Generated from the live route files** — the route file is authoritative. 499 endpoints across 92 route files.
5
+ > **Generated from the live route files** — the route file is authoritative. 501 endpoints across 92 route files.
6
6
  > Machine-readable spec: [`docs/api/openapi.json`](api/openapi.json) (OpenAPI 3.1). Rendered docs site: **`/docs`** (e.g. `cloudbongos.com/docs`).
7
7
 
8
8
  Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust-boundary-server-enforced-permissions.md)): `public` < `any-builder` < `metic+archon` < `archon`.
@@ -850,7 +850,7 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust
850
850
  | GET | `/api/bongos/tasks/peer-votes/feed` | `any-builder` | — | GET /tasks/peer-votes/feed — recent confirmed/shipped work by OTHER builders, each with its net vote total and the caller's own current v… |
851
851
  | POST | `/api/bongos/tasks/peer-votes/tally` | `metic+archon` | — | POST /tasks/peer-votes/tally — fold matured votes (≥7 days old, not yet counted) into karma_log, one net row per shipping builder, then m… |
852
852
 
853
- ## `versions` (8)
853
+ ## `versions` (10)
854
854
 
855
855
  | Method | Path | Rank | Body | Description |
856
856
  |---|---|---|---|---|
@@ -861,6 +861,8 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust
861
861
  | POST | `/api/bongos/versions/:id/done-when` | `metic+archon` | `criterion_id`, `criterion_md`, `goal_id`, `sort_order` | Auth (Metic+, then the goal's own authority): create a done-when criterion at RUNTIME. |
862
862
  | GET | `/api/bongos/versions/:id/progress` | `public` | — | Per-criterion progress rollup: each done-when criterion → the tasks that gate it (task_criteria, migration 055) → live statuses → what re… |
863
863
  | GET | `/api/bongos/versions/close-suggestions` | `public` | — | Close-flow gate suggestions for every version still 'building'. |
864
+ | GET | `/api/bongos/versions/focus` | `any-builder` | — | The project's focus version (task 1004551) — the one the Roadmap stars. |
865
+ | PUT | `/api/bongos/versions/focus` | `archon` | `version_id` | (atom version.focus.set, system) — body { version_id } sets the focus; { version_id: null } clears it. |
864
866
  | GET | `/api/bongos/versions/progress` | `public` | — | read-only progress aggregate; mirrors /public/progress. |
865
867
 
866
868
  ## `work-categories` (3)