@bongos/core 1.19.1061 → 1.19.1062

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.19.1061",
6
- "core_contract": "1.19.1061",
7
- "source_commit": "1cc2c2cdca684d17445332667885541d1bd1abbc",
5
+ "core_version": "1.19.1062",
6
+ "core_contract": "1.19.1062",
7
+ "source_commit": "50e8dd0c7f634e2a9b63dd35707e1a0e6bb9e224",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-09-28T12:38:11.098Z",
9
+ "built_at": "2026-09-28T13:24:10.829Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
12
  "docs_redacted": 543,
13
13
  "agent_docs_stubbed": 26,
14
- "functional_verbatim": 2531,
14
+ "functional_verbatim": 2535,
15
15
  "rules": 3,
16
16
  "gate_literals": 3,
17
17
  "gate": "passed"
18
18
  },
19
- "file_count": 3101,
20
- "tree_sha256": "22d7d908ffbc96ccc7866b4212aabb6062dfb4b6ffa915ddaa0153125d8aa4dd",
19
+ "file_count": 3105,
20
+ "tree_sha256": "6fb489b83e1cdeaf974f95a1adfb0bd25dd83ade9748de12f98b9bf3d9d95baa",
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": "a430ee71b5a2698346d4917245863dfc847cd31091dfa5de9a01ef7d21abd1f7"
320
+ "sha256": "9459ee392b1a2db1a960411c0a41be2f9421cc398392a311cdedb57df41310c4"
321
321
  },
322
322
  {
323
323
  "path": "clients/bongos-client/bongos-client.global.js",
324
324
  "mode": "0000644",
325
- "sha256": "86d62d8e000364d5c05ef0eced49f1fa165c923dc7892fe82d918c21864de616"
325
+ "sha256": "6aaec85ca6a98a25d863b37da5785e3232cb42775a759de992cf2eb0759bc968"
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": "e0e84783a89af88a81251931ae7702e0c0302001446bf5b33d7de30bd4c9e264"
335
+ "sha256": "6c46904bcf4ae17449d693b18166ed600b922a4de7198baccbdc8c96f622619a"
336
336
  },
337
337
  {
338
338
  "path": "clients/bongos-client/index.d.ts",
339
339
  "mode": "0000644",
340
- "sha256": "9fdc897116e58b93d39b940c5ae20108825bc88d67dad1de11d980f943a021c0"
340
+ "sha256": "ddfd0be094fb577bc4ec56a698a7b2745d3f9aa8b88537a8726f730a853895c7"
341
341
  },
342
342
  {
343
343
  "path": "clients/bongos-client/index.mjs",
344
344
  "mode": "0000644",
345
- "sha256": "102dae082b630a9d2613d1f5dab5b128748a005304f066ce3f36f8ff5166aa04"
345
+ "sha256": "3126818319137ce283ceb4cc6252b3de1fdb12f9f25feaa7f20ea6b2e9ef28be"
346
346
  },
347
347
  {
348
348
  "path": "clients/bongos-client/package.json",
@@ -2177,12 +2177,12 @@
2177
2177
  {
2178
2178
  "path": "docs/api-reference.md",
2179
2179
  "mode": "0000644",
2180
- "sha256": "66487b94a7ca2646daa4fbe24159396d48fbcf10f2adc9c14b9e43fc86233b56"
2180
+ "sha256": "f297f09132092126cac8e6471ce3ba0cd2a1a1550d48f6f64dd0e20f1d38f806"
2181
2181
  },
2182
2182
  {
2183
2183
  "path": "docs/api/openapi.json",
2184
2184
  "mode": "0000644",
2185
- "sha256": "258b4baf4671e59e66464c47193f54a91d34a3a678dcc9db0955053f7f86e48b"
2185
+ "sha256": "c8fb1b6f7e3f67a81f5eaba74e7b0fab5439c7e52dd9a9a959f15a99791ce1ec"
2186
2186
  },
2187
2187
  {
2188
2188
  "path": "docs/architecture.md",
@@ -2742,7 +2742,7 @@
2742
2742
  {
2743
2743
  "path": "docs/module-api-changelog.md",
2744
2744
  "mode": "0000644",
2745
- "sha256": "a47ac184c604897dd657f4995f4e278303d378747164bc9540b0937eab19186e"
2745
+ "sha256": "9acd9af3c17ae8a44161edb0b037e8fff138a4059e5d7ec2affda4b0ed12b735"
2746
2746
  },
2747
2747
  {
2748
2748
  "path": "docs/modules-contract.md",
@@ -4109,6 +4109,11 @@
4109
4109
  "mode": "0000644",
4110
4110
  "sha256": "7cb9dac9cb87b679e1ae50e4112b3a7928a38ebb9902c8947a74d17bec4d9009"
4111
4111
  },
4112
+ {
4113
+ "path": "modules/copy-desk/docx.js",
4114
+ "mode": "0000644",
4115
+ "sha256": "3c59a29bbd97016909222bb6fc09e8fe0de505fae33536acf7aae2816edfbff6"
4116
+ },
4112
4117
  {
4113
4118
  "path": "modules/copy-desk/flags.js",
4114
4119
  "mode": "0000644",
@@ -4142,7 +4147,7 @@
4142
4147
  {
4143
4148
  "path": "modules/copy-desk/pages.js",
4144
4149
  "mode": "0000644",
4145
- "sha256": "ba89a35e225a41e94e20a21e716a3d83ab15081c2f9d6f6718394c25b37ea305"
4150
+ "sha256": "7cb248a536b49794409bb74c8bed19109b842195c9fb97093250218c3a58f101"
4146
4151
  },
4147
4152
  {
4148
4153
  "path": "modules/copy-desk/proposals.js",
@@ -4157,7 +4162,12 @@
4157
4162
  {
4158
4163
  "path": "modules/copy-desk/routes/copy-desk.js",
4159
4164
  "mode": "0000644",
4160
- "sha256": "92170c36251df8a1606d87dcbd057bccc167f348f39d2705872934f24411c7d7"
4165
+ "sha256": "4aaa64c6ec0cc6b63353659007cd3ed1b2daf1f0df77c8e7c98ba63217a1c719"
4166
+ },
4167
+ {
4168
+ "path": "modules/copy-desk/tests/copy_docx.mjs",
4169
+ "mode": "0000644",
4170
+ "sha256": "f2cc7cdd4e729f73aa832f217da1f057160a5ac6951803798effa5df6aac4c09"
4161
4171
  },
4162
4172
  {
4163
4173
  "path": "modules/copy-desk/tests/copy_flags.mjs",
@@ -4167,7 +4177,7 @@
4167
4177
  {
4168
4178
  "path": "modules/copy-desk/tests/copy_no_cms.mjs",
4169
4179
  "mode": "0000644",
4170
- "sha256": "b04b745bfc010ed86d7187c22f067bb8ecaaa24a095420a01f2b37806f283d48"
4180
+ "sha256": "7d4354fea2dc435e1783cdfbcb07024b40f732d700cbaf7764a79ef2d9f53456"
4171
4181
  },
4172
4182
  {
4173
4183
  "path": "modules/copy-desk/tests/copy_page_draft.mjs",
@@ -4199,6 +4209,11 @@
4199
4209
  "mode": "0000644",
4200
4210
  "sha256": "2797ec9f49688f7a1a2475777749671a248e03f40b023a0d6e4f9ee19f6a5fe1"
4201
4211
  },
4212
+ {
4213
+ "path": "modules/copy-desk/tests/fixtures/word-docx.mjs",
4214
+ "mode": "0000644",
4215
+ "sha256": "0a4b82cf5d28898f88b41f3710870b240fa458fd19979a598d81eb2a0a1fdbc9"
4216
+ },
4202
4217
  {
4203
4218
  "path": "modules/dev-box/CLAUDE.md",
4204
4219
  "mode": "0000644",
@@ -8532,12 +8547,12 @@
8532
8547
  {
8533
8548
  "path": "package-lock.json",
8534
8549
  "mode": "0000644",
8535
- "sha256": "dd4068cbb235742769c4bda2d8d49dd955c266e5986844fc471ef12416166730"
8550
+ "sha256": "e7d5ed448c2fa5c6fb22742c4be710109c9fbe6755dd57d6fffd286b7a194cb3"
8536
8551
  },
8537
8552
  {
8538
8553
  "path": "package.json",
8539
8554
  "mode": "0000644",
8540
- "sha256": "c3abc1f3e3b321375820e92c627d7f7aeb13a87259f0783aea211386c68d8267"
8555
+ "sha256": "ac4e84c9db583e987e75010a264f325a9ff10f4c1440aad5bfe6b22048e81688"
8541
8556
  },
8542
8557
  {
8543
8558
  "path": "public-docs/index.html",
@@ -8557,7 +8572,7 @@
8557
8572
  {
8558
8573
  "path": "release-notes.json",
8559
8574
  "mode": "0000644",
8560
- "sha256": "d77397164aba5ff244fe0ddbcd9a4d7e8e327b357a37e6cb48bdfbe1bbbba7a6"
8575
+ "sha256": "5b76f8faa6dc8215c2720ca937015f3968689700b842c1bb7e103fc66f17ddc8"
8561
8576
  },
8562
8577
  {
8563
8578
  "path": "scripts/bongos-mcp.js",
@@ -9112,7 +9127,7 @@
9112
9127
  {
9113
9128
  "path": "scripts/gds/fitness-checks-write-validation.js",
9114
9129
  "mode": "0000644",
9115
- "sha256": "7501680e8b657a1002c185750951f16af1b2e7e30c04c72a3f03a94d286e02c4"
9130
+ "sha256": "907b7ad50eb89059d17af5952ef5725b5009053da76ececd23f0d7e5dcdc6980"
9116
9131
  },
9117
9132
  {
9118
9133
  "path": "scripts/gds/fitness-lib.js",
@@ -10642,7 +10657,7 @@
10642
10657
  {
10643
10658
  "path": "src/module-api.js",
10644
10659
  "mode": "0000644",
10645
- "sha256": "56850953ea4d6876e68096995c35e9b9eaa1b44f092715c4aba8677e89c889d3"
10660
+ "sha256": "5d2d121a71ed87875920963e2dd09b8116a7657e47d76429e921509089919e0c"
10646
10661
  },
10647
10662
  {
10648
10663
  "path": "src/module-loader/catalog.js",
@@ -11599,6 +11614,11 @@
11599
11614
  "mode": "0000644",
11600
11615
  "sha256": "af6cdac77b90aad511a603757e12d7ffefaa7fdbcdd14aefd70ad49e3cd193fe"
11601
11616
  },
11617
+ {
11618
+ "path": "tests/copy_desk_page_docx.mjs",
11619
+ "mode": "0000644",
11620
+ "sha256": "e25485728f161b8610f57db11b387f5f7807afb41d0badd2f7a32776eaf97283"
11621
+ },
11602
11622
  {
11603
11623
  "path": "tests/copy_desk_page_next.mjs",
11604
11624
  "mode": "0000644",
@@ -12042,7 +12062,7 @@
12042
12062
  {
12043
12063
  "path": "tests/fitness.mjs",
12044
12064
  "mode": "0000644",
12045
- "sha256": "7252f8134ae29b16df7c136865acb110263cc862781d7ae26ee416398caa1f09"
12065
+ "sha256": "dfef0e15d8b062fe92a608579883f4780e277c61a0f66a302f1bbf339bac95f8"
12046
12066
  },
12047
12067
  {
12048
12068
  "path": "tests/fitness_gds_ratchet.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
- - 451 operations across 68 resource groups
8
+ - 453 operations across 68 resource groups
9
9
 
10
10
  ## Use it from your project
11
11
 
@@ -355,6 +355,10 @@ function createClient(opts = {}) {
355
355
  postCopyDeskPagesPageIdClaim: (args) => request("POST", "/copy-desk/pages/{pageId}/claim", { hasBody: true }, args),
356
356
  // PUT /copy-desk/pages/{pageId}/draft — rank: any-builder — PUT /copy-desk/pages/:pageId/draft
357
357
  putCopyDeskPagesPageIdDraft: (args) => request("PUT", "/copy-desk/pages/{pageId}/draft", { hasBody: true }, args),
358
+ // GET /copy-desk/pages/{pageId}/draft.docx — rank: any-builder — GET /copy-desk/pages/:pageId/draft.docx
359
+ getCopyDeskPagesPageIdDraftDocx: (args) => request("GET", "/copy-desk/pages/{pageId}/draft.docx", { hasBody: false }, args),
360
+ // POST /copy-desk/pages/{pageId}/draft.docx — rank: any-builder — POST /copy-desk/pages/:pageId/draft.docx
361
+ postCopyDeskPagesPageIdDraftDocx: (args) => request("POST", "/copy-desk/pages/{pageId}/draft.docx", { hasBody: true }, args),
358
362
  // POST /copy-desk/pages/{pageId}/submit — rank: any-builder — POST /copy-desk/pages/:pageId/submit
359
363
  postCopyDeskPagesPageIdSubmit: (args) => request("POST", "/copy-desk/pages/{pageId}/submit", { hasBody: true }, args),
360
364
  // POST /copy-desk/proposals — rank: any-builder — POST /copy-desk/proposals
@@ -354,6 +354,10 @@ function createClient(opts = {}) {
354
354
  postCopyDeskPagesPageIdClaim: (args) => request("POST", "/copy-desk/pages/{pageId}/claim", { hasBody: true }, args),
355
355
  // PUT /copy-desk/pages/{pageId}/draft — rank: any-builder — PUT /copy-desk/pages/:pageId/draft
356
356
  putCopyDeskPagesPageIdDraft: (args) => request("PUT", "/copy-desk/pages/{pageId}/draft", { hasBody: true }, args),
357
+ // GET /copy-desk/pages/{pageId}/draft.docx — rank: any-builder — GET /copy-desk/pages/:pageId/draft.docx
358
+ getCopyDeskPagesPageIdDraftDocx: (args) => request("GET", "/copy-desk/pages/{pageId}/draft.docx", { hasBody: false }, args),
359
+ // POST /copy-desk/pages/{pageId}/draft.docx — rank: any-builder — POST /copy-desk/pages/:pageId/draft.docx
360
+ postCopyDeskPagesPageIdDraftDocx: (args) => request("POST", "/copy-desk/pages/{pageId}/draft.docx", { hasBody: true }, args),
357
361
  // POST /copy-desk/pages/{pageId}/submit — rank: any-builder — POST /copy-desk/pages/:pageId/submit
358
362
  postCopyDeskPagesPageIdSubmit: (args) => request("POST", "/copy-desk/pages/{pageId}/submit", { hasBody: true }, args),
359
363
  // POST /copy-desk/proposals — rank: any-builder — POST /copy-desk/proposals
@@ -298,6 +298,7 @@ export interface PostCopyDeskFlagsIdCloseResponse { ok: boolean; flag: unknown }
298
298
  export interface PostCopyDeskFlagsRequest { scope?: string; surface: string; string_id?: string; reason: string; kind?: string }
299
299
  export interface PostCopyDeskFlagsResponse { ok: boolean; flag: unknown }
300
300
  export interface PostCopyDeskPagesPageIdAsksRequest { reason: string }
301
+ export interface PostCopyDeskPagesPageIdDraftDocxResponse { ok: boolean; outcome: unknown; page_id: unknown; round: unknown; draft: unknown; counter: unknown; merge: unknown }
301
302
  export interface PostCopyDeskProposalsRequest { string_id: string; proposed_text: string; why: string; file?: string; line?: number; flag_id?: number }
302
303
  export interface PostCopyDeskProposalsResponse { ok: boolean; task: unknown; created: boolean; patch?: unknown }
303
304
  export interface PostCostRequest { task_id?: number; amount_usd: number; category: string; description?: string; source?: string; source_ref?: string; recorded_at?: string; fresh_input_usd?: number; cache_read_usd?: number; cache_write_usd?: number; output_usd?: number; builder_id?: number; skill_name?: string }
@@ -774,6 +775,10 @@ export interface BongosClient {
774
775
  postCopyDeskPagesPageIdClaim(args?: RequestArgs): Promise<ApiResponse>;
775
776
  /** PUT /copy-desk/pages/{pageId}/draft — rank: any-builder */
776
777
  putCopyDeskPagesPageIdDraft(args: RequestArgs & { body: PutCopyDeskPagesPageIdDraftRequest }): Promise<PutCopyDeskPagesPageIdDraftResponse>;
778
+ /** GET /copy-desk/pages/{pageId}/draft.docx — rank: any-builder */
779
+ getCopyDeskPagesPageIdDraftDocx(args?: RequestArgs): Promise<ApiResponse>;
780
+ /** POST /copy-desk/pages/{pageId}/draft.docx — rank: any-builder */
781
+ postCopyDeskPagesPageIdDraftDocx(args?: RequestArgs): Promise<PostCopyDeskPagesPageIdDraftDocxResponse>;
777
782
  /** POST /copy-desk/pages/{pageId}/submit — rank: any-builder */
778
783
  postCopyDeskPagesPageIdSubmit(args?: RequestArgs): Promise<ApiResponse>;
779
784
  /** POST /copy-desk/proposals — rank: any-builder */
@@ -351,6 +351,10 @@ export function createClient(opts = {}) {
351
351
  postCopyDeskPagesPageIdClaim: (args) => request("POST", "/copy-desk/pages/{pageId}/claim", { hasBody: true }, args),
352
352
  // PUT /copy-desk/pages/{pageId}/draft — rank: any-builder — PUT /copy-desk/pages/:pageId/draft
353
353
  putCopyDeskPagesPageIdDraft: (args) => request("PUT", "/copy-desk/pages/{pageId}/draft", { hasBody: true }, args),
354
+ // GET /copy-desk/pages/{pageId}/draft.docx — rank: any-builder — GET /copy-desk/pages/:pageId/draft.docx
355
+ getCopyDeskPagesPageIdDraftDocx: (args) => request("GET", "/copy-desk/pages/{pageId}/draft.docx", { hasBody: false }, args),
356
+ // POST /copy-desk/pages/{pageId}/draft.docx — rank: any-builder — POST /copy-desk/pages/:pageId/draft.docx
357
+ postCopyDeskPagesPageIdDraftDocx: (args) => request("POST", "/copy-desk/pages/{pageId}/draft.docx", { hasBody: true }, args),
354
358
  // POST /copy-desk/pages/{pageId}/submit — rank: any-builder — POST /copy-desk/pages/:pageId/submit
355
359
  postCopyDeskPagesPageIdSubmit: (args) => request("POST", "/copy-desk/pages/{pageId}/submit", { hasBody: true }, args),
356
360
  // POST /copy-desk/proposals — rank: any-builder — POST /copy-desk/proposals
@@ -5374,6 +5374,114 @@
5374
5374
  ]
5375
5375
  }
5376
5376
  },
5377
+ "/copy-desk/pages/{pageId}/draft.docx": {
5378
+ "get": {
5379
+ "operationId": "get_copy_desk_pages_pageId_draft_docx",
5380
+ "tags": [
5381
+ "copy-desk"
5382
+ ],
5383
+ "summary": "GET /copy-desk/pages/:pageId/draft.docx",
5384
+ "description": "------------------------------------------------------------------------- GET /copy-desk/pages/:pageId/draft.docx — download the page's words as a Word document, to work on offline (task 1004320 / BV2.TW09, ADR 0341 D12). The file is built from the page reading plus the open round's draft (a line the artist has rewritten shows its rewrite). A draft saved on an older reading is not shown, since its keys may now name other lines. rank: any signed-in builder. The words are the page's own, and the draft is on a task description every builder can already read; only the upload is the holder's. -------------------------------------------------------------------------\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
5385
+ "x-rank": "any-builder",
5386
+ "x-source": "modules/copy-desk/routes/copy-desk.js",
5387
+ "parameters": [
5388
+ {
5389
+ "name": "pageId",
5390
+ "in": "path",
5391
+ "required": true,
5392
+ "schema": {
5393
+ "type": "string"
5394
+ },
5395
+ "description": "Path parameter `pageId`."
5396
+ }
5397
+ ],
5398
+ "responses": {
5399
+ "200": {
5400
+ "description": "Success."
5401
+ },
5402
+ "400": {
5403
+ "$ref": "#/components/responses/BadRequest"
5404
+ },
5405
+ "401": {
5406
+ "$ref": "#/components/responses/Unauthorized"
5407
+ },
5408
+ "403": {
5409
+ "$ref": "#/components/responses/Forbidden"
5410
+ },
5411
+ "404": {
5412
+ "$ref": "#/components/responses/NotFound"
5413
+ }
5414
+ },
5415
+ "security": [
5416
+ {
5417
+ "builderSession": []
5418
+ }
5419
+ ]
5420
+ },
5421
+ "post": {
5422
+ "operationId": "post_copy_desk_pages_pageId_draft_docx",
5423
+ "tags": [
5424
+ "copy-desk"
5425
+ ],
5426
+ "summary": "POST /copy-desk/pages/:pageId/draft.docx",
5427
+ "description": "------------------------------------------------------------------------- POST /copy-desk/pages/:pageId/draft.docx — upload the Word file back into the DRAFT (task 1004320 / BV2.TW09, ADR 0341 D12). Never to the site: the words land in the round's draft block, exactly where the autosave puts them, through the same port call (holder only) and the same resolver (every target from the page reading by key, never from the file). Body: the .docx bytes (Content-Type: the Word type, application/zip or application/octet-stream), at most docx.MAX_UPLOAD_BYTES. rank: any signed-in builder; only the HOLDER of the page's writing claim. A MERGE, not a replace: a line is taken from the file only when the artist changed it in Word (against the text the download showed), so a line they rewrote in the studio after downloading keeps that rewrite. 200 saved | unchanged the draft, the counter, and `merge` (which lines came from the file, and how they were matched) 409 structure_changed a line added, dropped or reordered, or a heading changed; each is named (section, first words) 409 wrong_page · reading_moved · page_not_held · no_open_round 413 upload_too_large · 415 not_a_docx -------------------------------------------------------------------------\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
5428
+ "x-rank": "any-builder",
5429
+ "x-source": "modules/copy-desk/routes/copy-desk.js",
5430
+ "parameters": [
5431
+ {
5432
+ "name": "pageId",
5433
+ "in": "path",
5434
+ "required": true,
5435
+ "schema": {
5436
+ "type": "string"
5437
+ },
5438
+ "description": "Path parameter `pageId`."
5439
+ }
5440
+ ],
5441
+ "requestBody": {
5442
+ "required": false,
5443
+ "content": {
5444
+ "application/json": {
5445
+ "schema": {
5446
+ "type": "object",
5447
+ "additionalProperties": true
5448
+ }
5449
+ }
5450
+ },
5451
+ "x-validated": false,
5452
+ "x-body-undocumented": true
5453
+ },
5454
+ "responses": {
5455
+ "200": {
5456
+ "description": "Success.",
5457
+ "content": {
5458
+ "application/json": {
5459
+ "schema": {
5460
+ "$ref": "#/components/schemas/PostCopyDeskPagesPageIdDraftDocxResponse"
5461
+ }
5462
+ }
5463
+ }
5464
+ },
5465
+ "400": {
5466
+ "$ref": "#/components/responses/BadRequest"
5467
+ },
5468
+ "401": {
5469
+ "$ref": "#/components/responses/Unauthorized"
5470
+ },
5471
+ "403": {
5472
+ "$ref": "#/components/responses/Forbidden"
5473
+ },
5474
+ "404": {
5475
+ "$ref": "#/components/responses/NotFound"
5476
+ }
5477
+ },
5478
+ "security": [
5479
+ {
5480
+ "builderSession": []
5481
+ }
5482
+ ]
5483
+ }
5484
+ },
5377
5485
  "/copy-desk/pages/{pageId}/submit": {
5378
5486
  "post": {
5379
5487
  "operationId": "post_copy_desk_pages_pageId_submit",
@@ -25003,6 +25111,29 @@
25003
25111
  ],
25004
25112
  "additionalProperties": false
25005
25113
  },
25114
+ "PostCopyDeskPagesPageIdDraftDocxResponse": {
25115
+ "type": "object",
25116
+ "properties": {
25117
+ "ok": {
25118
+ "type": "boolean"
25119
+ },
25120
+ "outcome": {},
25121
+ "page_id": {},
25122
+ "round": {},
25123
+ "draft": {},
25124
+ "counter": {},
25125
+ "merge": {}
25126
+ },
25127
+ "required": [
25128
+ "ok",
25129
+ "outcome",
25130
+ "page_id",
25131
+ "round",
25132
+ "draft",
25133
+ "counter",
25134
+ "merge"
25135
+ ]
25136
+ },
25006
25137
  "PostCopyDeskProposalsRequest": {
25007
25138
  "type": "object",
25008
25139
  "properties": {
@@ -28544,9 +28675,9 @@
28544
28675
  "description": "A required dependency/feature is not configured or is temporarily down."
28545
28676
  }
28546
28677
  },
28547
- "x-endpoint-count": 451,
28548
- "x-schema-count": 486,
28549
- "x-undocumented-bodies": 9,
28550
- "x-response-schemas": 332,
28678
+ "x-endpoint-count": 453,
28679
+ "x-schema-count": 487,
28680
+ "x-undocumented-bodies": 10,
28681
+ "x-response-schemas": 333,
28551
28682
  "x-generated-by": "scripts/gds/gen-api-docs.js"
28552
28683
  }
@@ -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. 451 endpoints across 76 route files.
5
+ > **Generated from the live route files** — the route file is authoritative. 453 endpoints across 76 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`.
@@ -210,7 +210,7 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust
210
210
  | GET | `/api/bongos/connections/requests` | `any-builder` | — | MY pending requests, both directions (own data). |
211
211
  | GET | `/api/bongos/connections/suggestions` | `any-builder` | — | "builders you may know" (R21, task 1002297; ADR 0202 D5). |
212
212
 
213
- ## `copy-desk` (13)
213
+ ## `copy-desk` (15)
214
214
 
215
215
  | Method | Path | Rank | Body | Description |
216
216
  |---|---|---|---|---|
@@ -222,6 +222,8 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust
222
222
  | POST | `/api/bongos/copy-desk/pages/:pageId/asks` | `any-builder` | `reason` | ------------------------------------------------------------------------- POST /copy-desk/pages/:pageId/asks — ask for a page (task 10043… |
223
223
  | POST | `/api/bongos/copy-desk/pages/:pageId/claim` | `any-builder` | validated | ------------------------------------------------------------------------- POST /copy-desk/pages/:pageId/claim — claim a page's tweak (tas… |
224
224
  | PUT | `/api/bongos/copy-desk/pages/:pageId/draft` | `any-builder` | `reading_hash`, `lines` | ------------------------------------------------------------------------- PUT /copy-desk/pages/:pageId/draft — autosave the artist's draf… |
225
+ | GET | `/api/bongos/copy-desk/pages/:pageId/draft.docx` | `any-builder` | — | ------------------------------------------------------------------------- GET /copy-desk/pages/:pageId/draft.docx — download the page's w… |
226
+ | POST | `/api/bongos/copy-desk/pages/:pageId/draft.docx` | `any-builder` | _undocumented_ | ------------------------------------------------------------------------- POST /copy-desk/pages/:pageId/draft.docx — upload the Word file… |
225
227
  | POST | `/api/bongos/copy-desk/pages/:pageId/submit` | `any-builder` | validated | ------------------------------------------------------------------------- POST /copy-desk/pages/:pageId/submit — freeze the draft and que… |
226
228
  | POST | `/api/bongos/copy-desk/proposals` | `any-builder` | `string_id`, `proposed_text`, `why`, `file`, `line`, `flag_id` | ------------------------------------------------------------------------- POST /copy-desk/proposals — an artist proposes new wording, and… |
227
229
  | GET | `/api/bongos/copy-desk/queue` | `any-builder` | — | ------------------------------------------------------------------------- GET /copy-desk/queue — the artist's working list. |
@@ -800,5 +802,5 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust
800
802
 
801
803
  ---
802
804
 
803
- > 9 write endpoint(s) take a JSON body with no declared validator schema — their fields are not yet machine-documented. Adding a `validateOrRespond` schema (`src/bongos/routes/_helpers.js`) surfaces them here automatically.
805
+ > 10 write endpoint(s) take a JSON body with no declared validator schema — their fields are not yet machine-documented. Adding a `validateOrRespond` schema (`src/bongos/routes/_helpers.js`) surfaces them here automatically.
804
806
 
@@ -2609,5 +2609,7 @@ is load-bearing: the script throws rather than guess if it is missing, and
2609
2609
  landed since 1.19.1059 with no explicit bump. run 36418832327. (task 1002620)
2610
2610
  1.19.1061 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
2611
2611
  landed since 1.19.1060 with no explicit bump. run 36423029975. (task 1002620)
2612
+ 1.19.1062 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
2613
+ landed since 1.19.1061 with no explicit bump. run 36428277106. (task 1002620)
2612
2614
  ---------------------------------------------------------------------------
2613
2615
  ```