@bongos/core 1.20.64 → 1.20.66

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.20.64",
6
- "core_contract": "1.20.64",
7
- "source_commit": "575676341f5c84eab982a6e546119e8b477740a3",
5
+ "core_version": "1.20.66",
6
+ "core_contract": "1.20.66",
7
+ "source_commit": "b20b1cd9652722eebc2cc8a17369c7bc29c7284a",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-10-01T10:53:37.791Z",
9
+ "built_at": "2026-10-01T11:16:57.096Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
12
  "docs_redacted": 572,
13
13
  "agent_docs_stubbed": 27,
14
- "functional_verbatim": 2790,
14
+ "functional_verbatim": 2793,
15
15
  "rules": 3,
16
16
  "gate_literals": 3,
17
17
  "gate": "passed"
18
18
  },
19
- "file_count": 3390,
20
- "tree_sha256": "52d2e7e9c9429a83086dcfccfa49a001131cd68200e4e4c6713eb3cd7f6326c3",
19
+ "file_count": 3393,
20
+ "tree_sha256": "fe92e9b1d448a099b9733514cd16f02219f90b86e1af2612331edbb45aed7a2a",
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": "87352a8f884ec57b9263ac7596f8c66a5f353b633658304f2b531d31b9cf9b44"
320
+ "sha256": "3350163ed447189b523028f711e3ef1a400ea375ebe7123f2515add8b6a89de1"
321
321
  },
322
322
  {
323
323
  "path": "clients/bongos-client/bongos-client.global.js",
324
324
  "mode": "0000644",
325
- "sha256": "0a2e5d5157aeecb5ba74d68533e8267bc733f06eff2a72025c2fefce196c4c4e"
325
+ "sha256": "a863d3db1a112c490648e0f2b3eaddf3f2e8c9ebe107ec298ea5ff0c663a5e6a"
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": "1b62998873e5e55e5ddd827b48b4698e851859c667f2993d2552b79fae4e9009"
335
+ "sha256": "06bf39230e1c813494dc85130694754d1eb6b3fd55d3e93a684dd238bf6bc22b"
336
336
  },
337
337
  {
338
338
  "path": "clients/bongos-client/index.d.ts",
339
339
  "mode": "0000644",
340
- "sha256": "425cfa53b1e0bf7d7ff08675e7732312fe14e6b6bf84bb3d627beffbebbd73ad"
340
+ "sha256": "2345d96c47f3851443f8b1adc5dac4556705e7f63f9875a4c62252bf833f17d4"
341
341
  },
342
342
  {
343
343
  "path": "clients/bongos-client/index.mjs",
344
344
  "mode": "0000644",
345
- "sha256": "1a73be7803ba716ee5e03cdffdb807d2700d8cd398ce4f22a07a3fe809c3aa76"
345
+ "sha256": "313cfd428b7fd04a9fec6e56cdc1ddabb69af6ca144d7e09d2384a50d48b53df"
346
346
  },
347
347
  {
348
348
  "path": "clients/bongos-client/package.json",
@@ -2207,7 +2207,7 @@
2207
2207
  {
2208
2208
  "path": "docs/adr/0349-a-version-preview-is-a-sandboxed-child-the-web-tier-launches.md",
2209
2209
  "mode": "0000644",
2210
- "sha256": "7fe345d475d9540181d12544606c1c2cbfd5510e94c8fbf3599fc48d2790b3cb"
2210
+ "sha256": "b609d870b217440a12839ce675617973aac721e9f017e831ff208e06567c9939"
2211
2211
  },
2212
2212
  {
2213
2213
  "path": "docs/adr/0350-the-hub-holds-a-per-project-write-deploy-key-so-a-hosted-upgrade-reaches-github.md",
@@ -2262,12 +2262,12 @@
2262
2262
  {
2263
2263
  "path": "docs/api-reference.md",
2264
2264
  "mode": "0000644",
2265
- "sha256": "630d2344ea6f8a380f99022dfab1d2c4a79b2c1804259f42f6954cb769536407"
2265
+ "sha256": "0abf904bcf32aef68bd70592d09cb986e4538cae62c2b9b268af8904d8a483fb"
2266
2266
  },
2267
2267
  {
2268
2268
  "path": "docs/api/openapi.json",
2269
2269
  "mode": "0000644",
2270
- "sha256": "bbfc9546a939b4472a734d121f4db659667ad2e647e005b882a7a7c76589a287"
2270
+ "sha256": "026ea9ba339051ada00869b8363718fae4fcded3be6eae98bcc60a37b9e844dc"
2271
2271
  },
2272
2272
  {
2273
2273
  "path": "docs/architecture.md",
@@ -2802,7 +2802,7 @@
2802
2802
  {
2803
2803
  "path": "docs/module-api-changelog.md",
2804
2804
  "mode": "0000644",
2805
- "sha256": "7a7ee07e1f53d9a35fb896d8b88c0b03ee3437d7b60dcd85f94c49fe2317bd05"
2805
+ "sha256": "a6ca9dad8d9c0bd38f081d1852a161731a62e9b34a759f6740c890ee4b3f7170"
2806
2806
  },
2807
2807
  {
2808
2808
  "path": "docs/modules-contract.md",
@@ -4762,7 +4762,7 @@
4762
4762
  {
4763
4763
  "path": "modules/government/catalog.js",
4764
4764
  "mode": "0000644",
4765
- "sha256": "0559d78f54b4b8a89ac4e6924d6dad4e2693a7e54f943532e83e4ac966868b76"
4765
+ "sha256": "f3d82f60997e944eb7108c36bafa9d9be8469c5980b5460abfdf410ffa601dea"
4766
4766
  },
4767
4767
  {
4768
4768
  "path": "modules/government/charter.js",
@@ -6654,6 +6654,11 @@
6654
6654
  "mode": "0000644",
6655
6655
  "sha256": "593c5a96579f1df60f1fa232f6f31414541372a8a5277126e78b5046bcd990ac"
6656
6656
  },
6657
+ {
6658
+ "path": "modules/lifecycle/goal-move.js",
6659
+ "mode": "0000644",
6660
+ "sha256": "9f176232145d0e173d9a7fd08906186c127749c409469b7af1c02b071c9f3d23"
6661
+ },
6657
6662
  {
6658
6663
  "path": "modules/lifecycle/goal-rollup.js",
6659
6664
  "mode": "0000644",
@@ -6792,7 +6797,7 @@
6792
6797
  {
6793
6798
  "path": "modules/lifecycle/module.json",
6794
6799
  "mode": "0000644",
6795
- "sha256": "75b5ab14761c7c83b44219a0d4540b064548a38ecb1de20eab540c5cbebf162b"
6800
+ "sha256": "4eaad6ef027c1e2f3baa2d589a963e721d1f4c20201ed003e412953ea570ee8e"
6796
6801
  },
6797
6802
  {
6798
6803
  "path": "modules/lifecycle/page-tweak-approve.js",
@@ -6909,6 +6914,11 @@
6909
6914
  "mode": "0000644",
6910
6915
  "sha256": "474b9fa9e13a731f39ab15de74a75ee4878155eb2236d25b0f12011c1df99583"
6911
6916
  },
6917
+ {
6918
+ "path": "modules/lifecycle/routes/goal-move.js",
6919
+ "mode": "0000644",
6920
+ "sha256": "9b5ed11cf59a69105d861fc6bd01bddc5c7d3d29913b4d1e9d8daf73434ea083"
6921
+ },
6912
6922
  {
6913
6923
  "path": "modules/lifecycle/routes/goal-route-authz.js",
6914
6924
  "mode": "0000644",
@@ -7142,7 +7152,7 @@
7142
7152
  {
7143
7153
  "path": "modules/npm-release/preview/env.js",
7144
7154
  "mode": "0000644",
7145
- "sha256": "d9716eea3c3c233eb0397fa0976de9dfcb8a87a8e3b802c5bbea4e5568e691f9"
7155
+ "sha256": "018bdef460587e17cb6bf1fd622a2b14f671a777a1e36e4aeb00e798da5f30c3"
7146
7156
  },
7147
7157
  {
7148
7158
  "path": "modules/npm-release/preview/proxy.js",
@@ -7157,7 +7167,7 @@
7157
7167
  {
7158
7168
  "path": "modules/npm-release/preview/supervisor.js",
7159
7169
  "mode": "0000644",
7160
- "sha256": "fd27648c4d75e03ec541f1295a05ffd05aae957bbf0748215497b624106cf12e"
7170
+ "sha256": "cd708c56ae7bba361c139aba9cfccbe8501843db1c4f54bcd0c0dcf93e76f83c"
7161
7171
  },
7162
7172
  {
7163
7173
  "path": "modules/npm-release/public/task-widget.js",
@@ -9447,12 +9457,12 @@
9447
9457
  {
9448
9458
  "path": "package-lock.json",
9449
9459
  "mode": "0000644",
9450
- "sha256": "e76e52c17163b9b22e508e70795ddc77484f81fd47a2ccc156fd39ea4123c39f"
9460
+ "sha256": "3cab8f24d1505f76d3830cba2640a4d75a29b6f77cb288f3e0b73ac72528b829"
9451
9461
  },
9452
9462
  {
9453
9463
  "path": "package.json",
9454
9464
  "mode": "0000644",
9455
- "sha256": "456223fa87e0f237ec34208c0019990f0c76a4fadfd6812797812c1d36113125"
9465
+ "sha256": "ae2d9d106c6a31eb87e19ab5d4da9d433a43bfa14d029773a33f8119236145e1"
9456
9466
  },
9457
9467
  {
9458
9468
  "path": "public-docs/index.html",
@@ -9472,7 +9482,7 @@
9472
9482
  {
9473
9483
  "path": "release-notes.json",
9474
9484
  "mode": "0000644",
9475
- "sha256": "412a73973976c63d7bf974f72354cdbeae90720c79b923c97f8b1f7d8cb81e9a"
9485
+ "sha256": "1f738eb89f28f99d21310d526b289097059ddc1f660339a1282461396e06801c"
9476
9486
  },
9477
9487
  {
9478
9488
  "path": "scripts/bongos-mcp.js",
@@ -10157,7 +10167,7 @@
10157
10167
  {
10158
10168
  "path": "scripts/gds/goal.js",
10159
10169
  "mode": "0000644",
10160
- "sha256": "6cd8b2e7d23a4a8351f4018d2eec9403bb7eb16391e77fa2583a5f4c612e3046"
10170
+ "sha256": "320841b1e4df014966ea9b6b70645ecb7915b412f94b8fa0d9835dae5b9446c5"
10161
10171
  },
10162
10172
  {
10163
10173
  "path": "scripts/gds/grade-correlation-audit.js",
@@ -11492,7 +11502,7 @@
11492
11502
  {
11493
11503
  "path": "src/bongos/route-rank-check.js",
11494
11504
  "mode": "0000644",
11495
- "sha256": "3d7c62d9c3925bc1ebafeae7d90ff09fc22a09c75c2ec47382e12bcff8d017ad"
11505
+ "sha256": "c31e753d353b6c8c6b1f4e9af80a31afc995568aea9fd4ad8ab408e093a6f786"
11496
11506
  },
11497
11507
  {
11498
11508
  "path": "src/bongos/routes.js",
@@ -11652,7 +11662,7 @@
11652
11662
  {
11653
11663
  "path": "src/module-api.js",
11654
11664
  "mode": "0000644",
11655
- "sha256": "e63e10c38215257f0811ee1300826615a5922a000872faf02d6aa835043ca281"
11665
+ "sha256": "91a903030df7c3ff180de1a505f0de4dece1cfcbd9fc7131c22c667a2074c648"
11656
11666
  },
11657
11667
  {
11658
11668
  "path": "src/module-loader/catalog.js",
@@ -13349,6 +13359,11 @@
13349
13359
  "mode": "0000644",
13350
13360
  "sha256": "a465047f1e25c6cdeedf75f53337851224b7207c95d5135d1353504b3c660087"
13351
13361
  },
13362
+ {
13363
+ "path": "tests/goal_move.mjs",
13364
+ "mode": "0000644",
13365
+ "sha256": "7a7caded5d4d1f26b9f37a4c2c55636adc6f10ad2633f2b3260d7c4f31ebacd8"
13366
+ },
13352
13367
  {
13353
13368
  "path": "tests/goal_names.mjs",
13354
13369
  "mode": "0000644",
@@ -14877,7 +14892,7 @@
14877
14892
  {
14878
14893
  "path": "tests/npm_release_preview_diagnosis.mjs",
14879
14894
  "mode": "0000644",
14880
- "sha256": "9a246f9a29da48eaed7d0f19e156f1f63a48afb0277ab8ce02f7d6dc07c6d92b"
14895
+ "sha256": "1d0fe23920e58d8838d6753750097d55c0c36d32d30d8f14ddd916a8bea908d6"
14881
14896
  },
14882
14897
  {
14883
14898
  "path": "tests/npm_release_preview_divert.mjs",
@@ -14887,7 +14902,7 @@
14887
14902
  {
14888
14903
  "path": "tests/npm_release_preview_env.mjs",
14889
14904
  "mode": "0000644",
14890
- "sha256": "f25208db9870e67ac3b53456a97fbc02d2ab56a01974c82d1e264222ea063639"
14905
+ "sha256": "9febec41c155f29a2e22a7fa7dc8059be1fe6a36ff1845dceb85f87e695f42c3"
14891
14906
  },
14892
14907
  {
14893
14908
  "path": "tests/npm_release_preview_proxy.mjs",
@@ -14902,7 +14917,7 @@
14902
14917
  {
14903
14918
  "path": "tests/npm_release_preview_supervisor.mjs",
14904
14919
  "mode": "0000644",
14905
- "sha256": "d699b5b2a6b36169cfcdd925bf6b580c0238a6125174469a0129ca7945b1e69b"
14920
+ "sha256": "f326bc26e3b137dc8e17a22beeb08861181d35dc881ec1762e05377b9d9430e7"
14906
14921
  },
14907
14922
  {
14908
14923
  "path": "tests/npm_release_where.mjs",
@@ -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
- - 484 operations across 73 resource groups
8
+ - 485 operations across 73 resource groups
9
9
 
10
10
  ## Use it from your project
11
11
 
@@ -449,6 +449,8 @@ function createClient(opts = {}) {
449
449
  postGoalsIdMembers: (args) => request("POST", "/goals/{id}/members", { hasBody: true }, args),
450
450
  // PATCH /goals/{id}/members/{builderId} — rank: any-builder — PATCH /goals/:id/members/:builderId
451
451
  patchGoalsIdMembersBuilderId: (args) => request("PATCH", "/goals/{id}/members/{builderId}", { hasBody: true }, args),
452
+ // POST /goals/{id}/move — rank: archon — POST /goals/:id/move
453
+ postGoalsIdMove: (args) => request("POST", "/goals/{id}/move", { hasBody: true }, args),
452
454
  // POST /goals/{id}/reopen — rank: metic+archon — POST /goals/:id/reopen
453
455
  postGoalsIdReopen: (args) => request("POST", "/goals/{id}/reopen", { hasBody: true }, args),
454
456
  // GET /goals/{id}/requests — rank: any-builder — GET /goals/:id/requests
@@ -448,6 +448,8 @@ function createClient(opts = {}) {
448
448
  postGoalsIdMembers: (args) => request("POST", "/goals/{id}/members", { hasBody: true }, args),
449
449
  // PATCH /goals/{id}/members/{builderId} — rank: any-builder — PATCH /goals/:id/members/:builderId
450
450
  patchGoalsIdMembersBuilderId: (args) => request("PATCH", "/goals/{id}/members/{builderId}", { hasBody: true }, args),
451
+ // POST /goals/{id}/move — rank: archon — POST /goals/:id/move
452
+ postGoalsIdMove: (args) => request("POST", "/goals/{id}/move", { hasBody: true }, args),
451
453
  // POST /goals/{id}/reopen — rank: metic+archon — POST /goals/:id/reopen
452
454
  postGoalsIdReopen: (args) => request("POST", "/goals/{id}/reopen", { hasBody: true }, args),
453
455
  // GET /goals/{id}/requests — rank: any-builder — GET /goals/:id/requests
@@ -320,6 +320,8 @@ export interface PostGoalsIdJoinResponse { ok: boolean; member: unknown }
320
320
  export interface PostGoalsIdLeaveResponse { ok: boolean }
321
321
  export interface PostGoalsIdMembersRequest { membership_kind?: string; builder_id?: StringifiableId }
322
322
  export interface PostGoalsIdMembersResponse { ok: boolean; member: unknown }
323
+ export interface PostGoalsIdMoveRequest { version_id: string; admit_reason?: string }
324
+ export interface PostGoalsIdMoveResponse { ok: boolean; goal: unknown; from_version_id: unknown; to_version_id: unknown; moved_task_ids: unknown; moved_criterion_ids: unknown; admitted: unknown }
323
325
  export interface PostGoalsIdReopenResponse { ok: boolean; goal: unknown }
324
326
  export interface PostGoalsIdRequestsReqIdRespondRequest { action: string }
325
327
  export interface PostGoalsIdRequestsReqIdRespondResponse { ok: boolean; action: unknown; request: unknown; member?: unknown }
@@ -893,6 +895,8 @@ export interface BongosClient {
893
895
  postGoalsIdMembers(args?: RequestArgs & { body?: PostGoalsIdMembersRequest }): Promise<PostGoalsIdMembersResponse>;
894
896
  /** PATCH /goals/{id}/members/{builderId} — rank: any-builder */
895
897
  patchGoalsIdMembersBuilderId(args: RequestArgs & { body: PatchGoalsIdMembersBuilderIdRequest }): Promise<PatchGoalsIdMembersBuilderIdResponse>;
898
+ /** POST /goals/{id}/move — rank: archon */
899
+ postGoalsIdMove(args: RequestArgs & { body: PostGoalsIdMoveRequest }): Promise<PostGoalsIdMoveResponse>;
896
900
  /** POST /goals/{id}/reopen — rank: metic+archon */
897
901
  postGoalsIdReopen(args?: RequestArgs): Promise<PostGoalsIdReopenResponse>;
898
902
  /** GET /goals/{id}/requests — rank: any-builder */
@@ -445,6 +445,8 @@ export function createClient(opts = {}) {
445
445
  postGoalsIdMembers: (args) => request("POST", "/goals/{id}/members", { hasBody: true }, args),
446
446
  // PATCH /goals/{id}/members/{builderId} — rank: any-builder — PATCH /goals/:id/members/:builderId
447
447
  patchGoalsIdMembersBuilderId: (args) => request("PATCH", "/goals/{id}/members/{builderId}", { hasBody: true }, args),
448
+ // POST /goals/{id}/move — rank: archon — POST /goals/:id/move
449
+ postGoalsIdMove: (args) => request("POST", "/goals/{id}/move", { hasBody: true }, args),
448
450
  // POST /goals/{id}/reopen — rank: metic+archon — POST /goals/:id/reopen
449
451
  postGoalsIdReopen: (args) => request("POST", "/goals/{id}/reopen", { hasBody: true }, args),
450
452
  // GET /goals/{id}/requests — rank: any-builder — GET /goals/:id/requests
@@ -97,6 +97,7 @@ What keeps that exception narrow:
97
97
  - A preview started by the live process is stopped when that process exits, but the copy is
98
98
  dropped only by the next start or stop. It is one fixed name, so it cannot pile up.
99
99
  - **Correction, 2026-09-30 (task 1004466): the proxy strips every upstream `Set-Cookie`.** Same origin means a cookie the child set replaced the live hall's own (`cb_stealth`, the session) and locked the owner out of `/deploy`. The child's cookies now stay with the child; the steering cookie is the only one this module writes, and its clear repeats the set's Path, SameSite and Secure.
100
+ - **Correction, 2026-10-01 (task 1004486): the child is handed `PGUSER`.** The droplet's hall connects by socket peer auth with no `PGUSER`, so the driver names its login from `USER`, which an environment built from nothing does not have: every query in the copy failed. When no `PGUSER` is carried, the child gets the OS user it runs as (the identity peer auth checks anyway). And the dump file, a full copy of the live database, is now deleted as soon as the restore has read it; a service restart had left one in `/tmp` for eleven hours.
100
101
 
101
102
  ## Consequences
102
103
 
@@ -7470,6 +7470,72 @@
7470
7470
  ]
7471
7471
  }
7472
7472
  },
7473
+ "/goals/{id}/move": {
7474
+ "post": {
7475
+ "operationId": "post_goals_id_move",
7476
+ "tags": [
7477
+ "goals"
7478
+ ],
7479
+ "summary": "POST /goals/:id/move",
7480
+ "description": "(perm:version.create) — re-homes a goal and its tasks across versions.\n\n**Rank:** `archon` — Archon only (rank and identity management + the escalation keys — the trust boundary).\n\n**Permissions:** `version.create` (all required).",
7481
+ "x-rank": "archon",
7482
+ "x-source": "modules/lifecycle/routes/goal-move.js",
7483
+ "x-permissions": [
7484
+ "version.create"
7485
+ ],
7486
+ "parameters": [
7487
+ {
7488
+ "name": "id",
7489
+ "in": "path",
7490
+ "required": true,
7491
+ "schema": {
7492
+ "type": "string"
7493
+ },
7494
+ "description": "Path parameter `id`."
7495
+ }
7496
+ ],
7497
+ "requestBody": {
7498
+ "required": true,
7499
+ "content": {
7500
+ "application/json": {
7501
+ "schema": {
7502
+ "$ref": "#/components/schemas/PostGoalsIdMoveRequest"
7503
+ }
7504
+ }
7505
+ },
7506
+ "x-validated": true
7507
+ },
7508
+ "responses": {
7509
+ "200": {
7510
+ "description": "Success.",
7511
+ "content": {
7512
+ "application/json": {
7513
+ "schema": {
7514
+ "$ref": "#/components/schemas/PostGoalsIdMoveResponse"
7515
+ }
7516
+ }
7517
+ }
7518
+ },
7519
+ "400": {
7520
+ "$ref": "#/components/responses/ValidationFailed"
7521
+ },
7522
+ "401": {
7523
+ "$ref": "#/components/responses/Unauthorized"
7524
+ },
7525
+ "403": {
7526
+ "$ref": "#/components/responses/Forbidden"
7527
+ },
7528
+ "404": {
7529
+ "$ref": "#/components/responses/NotFound"
7530
+ }
7531
+ },
7532
+ "security": [
7533
+ {
7534
+ "builderSession": []
7535
+ }
7536
+ ]
7537
+ }
7538
+ },
7473
7539
  "/goals/{id}/reopen": {
7474
7540
  "post": {
7475
7541
  "operationId": "post_goals_id_reopen",
@@ -27248,6 +27314,47 @@
27248
27314
  "member"
27249
27315
  ]
27250
27316
  },
27317
+ "PostGoalsIdMoveRequest": {
27318
+ "type": "object",
27319
+ "properties": {
27320
+ "version_id": {
27321
+ "type": "string",
27322
+ "minLength": 1,
27323
+ "maxLength": 64
27324
+ },
27325
+ "admit_reason": {
27326
+ "type": "string",
27327
+ "maxLength": 2000
27328
+ }
27329
+ },
27330
+ "required": [
27331
+ "version_id"
27332
+ ],
27333
+ "additionalProperties": false
27334
+ },
27335
+ "PostGoalsIdMoveResponse": {
27336
+ "type": "object",
27337
+ "properties": {
27338
+ "ok": {
27339
+ "type": "boolean"
27340
+ },
27341
+ "goal": {},
27342
+ "from_version_id": {},
27343
+ "to_version_id": {},
27344
+ "moved_task_ids": {},
27345
+ "moved_criterion_ids": {},
27346
+ "admitted": {}
27347
+ },
27348
+ "required": [
27349
+ "ok",
27350
+ "goal",
27351
+ "from_version_id",
27352
+ "to_version_id",
27353
+ "moved_task_ids",
27354
+ "moved_criterion_ids",
27355
+ "admitted"
27356
+ ]
27357
+ },
27251
27358
  "PostGoalsIdReopenResponse": {
27252
27359
  "type": "object",
27253
27360
  "properties": {
@@ -30890,9 +30997,9 @@
30890
30997
  "description": "A required dependency/feature is not configured or is temporarily down."
30891
30998
  }
30892
30999
  },
30893
- "x-endpoint-count": 484,
30894
- "x-schema-count": 511,
31000
+ "x-endpoint-count": 485,
31001
+ "x-schema-count": 513,
30895
31002
  "x-undocumented-bodies": 12,
30896
- "x-response-schemas": 342,
31003
+ "x-response-schemas": 343,
30897
31004
  "x-generated-by": "scripts/gds/gen-api-docs.js"
30898
31005
  }
@@ -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. 484 endpoints across 88 route files.
5
+ > **Generated from the live route files** — the route file is authoritative. 485 endpoints across 89 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`.
@@ -296,7 +296,7 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust
296
296
  | POST | `/api/bongos/goal-task-relevance/:id/decide` | `metic+archon` | `decision`, `note` | task.promote — same atom as the read (task.promote's own gate). |
297
297
  | GET | `/api/bongos/goal-task-relevance/pending` | `metic+archon` | — | task.promote (metic+archon) — the reused review-queue atom. |
298
298
 
299
- ## `goals` (33)
299
+ ## `goals` (34)
300
300
 
301
301
  | Method | Path | Rank | Body | Description |
302
302
  |---|---|---|---|---|
@@ -317,6 +317,7 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust
317
317
  | POST | `/api/bongos/goals/:id/leave` | `any-builder` | — | POST /goals/:id/leave — leave a goal you're in. |
318
318
  | POST | `/api/bongos/goals/:id/members` | `any-builder` | `membership_kind`, `builder_id` | POST /goals/:id/members — the goal's own authority (owner \| manager \| Archon) invites a builder to the goal (task 1762: widened from Arch… |
319
319
  | PATCH | `/api/bongos/goals/:id/members/:builderId` | `any-builder` | `membership_kind` | PATCH /goals/:id/members/:builderId — membership management by the goal's own authority (task 1735): the owner, a manager, or an Archon p… |
320
+ | POST | `/api/bongos/goals/:id/move` | `archon` | `version_id`, `admit_reason` | (perm:version.create) — re-homes a goal and its tasks across versions. |
320
321
  | POST | `/api/bongos/goals/:id/reopen` | `metic+archon` | — | POST /goals/:id/reopen — bring an archived goal back to open (ADR 0086 §6 / BV1.R64). |
321
322
  | GET | `/api/bongos/goals/:id/requests` | `any-builder` | — | GET /goals/:id/requests — the goal's own pending invite/join-request queue (task 1953): every pending row on THIS goal, both kinds — outs… |
322
323
  | POST | `/api/bongos/goals/:id/requests` | `any-builder` | `note` | POST /goals/:id/requests — a builder asks to join a (private or protected) goal (task 1952 / ADR 0112). |
@@ -2785,5 +2785,9 @@ is load-bearing: the script throws rather than guess if it is missing, and
2785
2785
  landed since 1.20.62 with no explicit bump. run 36850426143. (task 1002620)
2786
2786
  1.20.64 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
2787
2787
  landed since 1.20.63 with no explicit bump. run 36851876428. (task 1002620)
2788
+ 1.20.65 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
2789
+ landed since 1.20.64 with no explicit bump. run 36852902728. (task 1002620)
2790
+ 1.20.66 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
2791
+ landed since 1.20.65 with no explicit bump. run 36854308972. (task 1002620)
2788
2792
  ---------------------------------------------------------------------------
2789
2793
  ```
@@ -152,7 +152,7 @@ const PERMISSIONS = [
152
152
  // granted is not a gate" argument. That argument was heard and was not the deciding
153
153
  // one. The revisit trigger is a concrete one — the first time such a rank exists —
154
154
  // and tests/government_catalog.mjs pins the flag so the change cannot land silently.
155
- { key: 'version.create', system: false, floor: 'archon', guards: 'POST /versions — create a version + its done-when criteria (ADR 0250 §6 returns it to archon; ADR 0157 had lowered it to metic)' },
155
+ { key: 'version.create', system: false, floor: 'archon', guards: 'POST /versions — create a version + its done-when criteria (ADR 0250 §6 returns it to archon; ADR 0157 had lowered it to metic); POST /goals/:id/move — re-home a goal across versions (task 1004485)' },
156
156
  { key: 'task.confirm.grade_bypass', system: true, floor: 'archon', guards: 'POST /tasks/:id/confirm — ratify past a failed grade (env-relaxable, ADR 0041)' },
157
157
  { key: 'dependency.cross_tier.manage', system: true, floor: 'archon', guards: 'POST|DELETE /dependencies — cross-tier structural edges (ADR 0086)' },
158
158
  { key: 'goal.scope.manage', system: true, floor: 'archon', guards: 'cross-tier goal-scope edges + protected-scope admission (ADR 0086)' },