@bongos/core 1.19.1060 → 1.19.1061

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.1060",
6
- "core_contract": "1.19.1060",
7
- "source_commit": "053ab05047f2cede246dd8c6cca763a032ee8495",
5
+ "core_version": "1.19.1061",
6
+ "core_contract": "1.19.1061",
7
+ "source_commit": "1cc2c2cdca684d17445332667885541d1bd1abbc",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-09-28T11:58:43.905Z",
9
+ "built_at": "2026-09-28T12:38:11.098Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
12
  "docs_redacted": 543,
13
13
  "agent_docs_stubbed": 26,
14
- "functional_verbatim": 2528,
14
+ "functional_verbatim": 2531,
15
15
  "rules": 3,
16
16
  "gate_literals": 3,
17
17
  "gate": "passed"
18
18
  },
19
- "file_count": 3098,
20
- "tree_sha256": "80aa074ee45fe0f2b5b60a190786cd4833e3aad1153828d157d5fe2b865b7db0",
19
+ "file_count": 3101,
20
+ "tree_sha256": "22d7d908ffbc96ccc7866b4212aabb6062dfb4b6ffa915ddaa0153125d8aa4dd",
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": "3e5980fb95bfaf6029cdddc9c9921053d9897cbcbf15be30e58e9b494177d4af"
320
+ "sha256": "a430ee71b5a2698346d4917245863dfc847cd31091dfa5de9a01ef7d21abd1f7"
321
321
  },
322
322
  {
323
323
  "path": "clients/bongos-client/bongos-client.global.js",
324
324
  "mode": "0000644",
325
- "sha256": "c587bec39fefe04695a0c1673882e3af552fe72486909e9e90759a3b46e20916"
325
+ "sha256": "86d62d8e000364d5c05ef0eced49f1fa165c923dc7892fe82d918c21864de616"
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": "ee6df391f3c319e77b9601fb47bf5deddc56adb95af62e8086a3d6dbeac4993b"
335
+ "sha256": "e0e84783a89af88a81251931ae7702e0c0302001446bf5b33d7de30bd4c9e264"
336
336
  },
337
337
  {
338
338
  "path": "clients/bongos-client/index.d.ts",
339
339
  "mode": "0000644",
340
- "sha256": "ed5f287b10278823cf322091feff1e784125d21a7856ad021a98e6e3e2269f71"
340
+ "sha256": "9fdc897116e58b93d39b940c5ae20108825bc88d67dad1de11d980f943a021c0"
341
341
  },
342
342
  {
343
343
  "path": "clients/bongos-client/index.mjs",
344
344
  "mode": "0000644",
345
- "sha256": "a43b2952238b2f19e76fe8767ec6b8a313fdfb0173cfa10946b6dee63e97af69"
345
+ "sha256": "102dae082b630a9d2613d1f5dab5b128748a005304f066ce3f36f8ff5166aa04"
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": "d642de14db69137bb04bf79bf4a67b8ec01818ac2ff6b85f04fca4944f2bdd15"
2180
+ "sha256": "66487b94a7ca2646daa4fbe24159396d48fbcf10f2adc9c14b9e43fc86233b56"
2181
2181
  },
2182
2182
  {
2183
2183
  "path": "docs/api/openapi.json",
2184
2184
  "mode": "0000644",
2185
- "sha256": "f47a697a636c8b50dafd4d8e58986676af0b8fcacaf89f6a418b230ebcb28cdc"
2185
+ "sha256": "258b4baf4671e59e66464c47193f54a91d34a3a678dcc9db0955053f7f86e48b"
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": "72f72960133805df016e92eb786b37d8fb7cb67bf3f09e9fcade295cce4773cb"
2745
+ "sha256": "a47ac184c604897dd657f4995f4e278303d378747164bc9540b0937eab19186e"
2746
2746
  },
2747
2747
  {
2748
2748
  "path": "docs/modules-contract.md",
@@ -4142,7 +4142,7 @@
4142
4142
  {
4143
4143
  "path": "modules/copy-desk/pages.js",
4144
4144
  "mode": "0000644",
4145
- "sha256": "671edb87faad28217c30abdcfff2c110d9b692f0da0f2d18af975d34d42b782e"
4145
+ "sha256": "ba89a35e225a41e94e20a21e716a3d83ab15081c2f9d6f6718394c25b37ea305"
4146
4146
  },
4147
4147
  {
4148
4148
  "path": "modules/copy-desk/proposals.js",
@@ -4157,7 +4157,7 @@
4157
4157
  {
4158
4158
  "path": "modules/copy-desk/routes/copy-desk.js",
4159
4159
  "mode": "0000644",
4160
- "sha256": "6d313d730906c5f240504695b792401fc0dc9ffde993efd2f330a9e71df276c0"
4160
+ "sha256": "92170c36251df8a1606d87dcbd057bccc167f348f39d2705872934f24411c7d7"
4161
4161
  },
4162
4162
  {
4163
4163
  "path": "modules/copy-desk/tests/copy_flags.mjs",
@@ -4167,7 +4167,12 @@
4167
4167
  {
4168
4168
  "path": "modules/copy-desk/tests/copy_no_cms.mjs",
4169
4169
  "mode": "0000644",
4170
- "sha256": "17ad6640e97dde18273ccd5c533b6910d490bfad970da16fd0712c20a8b5f7f3"
4170
+ "sha256": "b04b745bfc010ed86d7187c22f067bb8ecaaa24a095420a01f2b37806f283d48"
4171
+ },
4172
+ {
4173
+ "path": "modules/copy-desk/tests/copy_page_draft.mjs",
4174
+ "mode": "0000644",
4175
+ "sha256": "7bae773b6f8e3c4d5dced4d689237f59d421fc34f9d6c809d50e81f610e9eafb"
4171
4176
  },
4172
4177
  {
4173
4178
  "path": "modules/copy-desk/tests/copy_page_next.mjs",
@@ -6132,7 +6137,7 @@
6132
6137
  {
6133
6138
  "path": "modules/lifecycle/lifecycle.js",
6134
6139
  "mode": "0000644",
6135
- "sha256": "05edef42162cff680d96b084805959741be5a9ec09b18c87fdbfab6ff65458e0"
6140
+ "sha256": "8ed95b63975ec4aceb34ddeb31fa147194b38c26242530c83a5ed144214b5150"
6136
6141
  },
6137
6142
  {
6138
6143
  "path": "modules/lifecycle/merge-lock.js",
@@ -6217,7 +6222,12 @@
6217
6222
  {
6218
6223
  "path": "modules/lifecycle/page-tweak-reads.js",
6219
6224
  "mode": "0000644",
6220
- "sha256": "ed622f53097f8f0595c885c796ca597c6d96004cca82d884c30c97f43afc104e"
6225
+ "sha256": "016329bc9dadda1e1b1dce86aa02aa7c7f259cc56708ca12030ea601ea63e7a0"
6226
+ },
6227
+ {
6228
+ "path": "modules/lifecycle/page-tweak-write.js",
6229
+ "mode": "0000644",
6230
+ "sha256": "a13c01e96c5ae09837b9d599a66b23765f6d6f16cc29b11ca897da4f497d0b0d"
6221
6231
  },
6222
6232
  {
6223
6233
  "path": "modules/lifecycle/pg-constraint-fail.js",
@@ -8522,12 +8532,12 @@
8522
8532
  {
8523
8533
  "path": "package-lock.json",
8524
8534
  "mode": "0000644",
8525
- "sha256": "1dd792c5514fb93f90ca899378a3fe7fb0ba2759d11ae763a593eaa4de211a37"
8535
+ "sha256": "dd4068cbb235742769c4bda2d8d49dd955c266e5986844fc471ef12416166730"
8526
8536
  },
8527
8537
  {
8528
8538
  "path": "package.json",
8529
8539
  "mode": "0000644",
8530
- "sha256": "8e2cc56778737033b8c49aabdb41869132a0343fae6419e90aa23adedf474daa"
8540
+ "sha256": "c3abc1f3e3b321375820e92c627d7f7aeb13a87259f0783aea211386c68d8267"
8531
8541
  },
8532
8542
  {
8533
8543
  "path": "public-docs/index.html",
@@ -8547,7 +8557,7 @@
8547
8557
  {
8548
8558
  "path": "release-notes.json",
8549
8559
  "mode": "0000644",
8550
- "sha256": "971eebaefe45a5e3bd6eac7a217d7a1abc571d02240dac97799f9167643a227b"
8560
+ "sha256": "d77397164aba5ff244fe0ddbcd9a4d7e8e327b357a37e6cb48bdfbe1bbbba7a6"
8551
8561
  },
8552
8562
  {
8553
8563
  "path": "scripts/bongos-mcp.js",
@@ -10632,7 +10642,7 @@
10632
10642
  {
10633
10643
  "path": "src/module-api.js",
10634
10644
  "mode": "0000644",
10635
- "sha256": "5be8c8ecfa92788bfeef57fd9e4235d24ac3e4257d10e9936f38ace6b627d2cb"
10645
+ "sha256": "56850953ea4d6876e68096995c35e9b9eaa1b44f092715c4aba8677e89c889d3"
10636
10646
  },
10637
10647
  {
10638
10648
  "path": "src/module-loader/catalog.js",
@@ -11599,6 +11609,11 @@
11599
11609
  "mode": "0000644",
11600
11610
  "sha256": "29c591eb22b17fb86a3bff894d362f1372e41d1d0e06e3751f36da90184a425a"
11601
11611
  },
11612
+ {
11613
+ "path": "tests/copy_desk_page_submit.mjs",
11614
+ "mode": "0000644",
11615
+ "sha256": "c77d8c60449bad805d048ec78e43169b5ec87283a3f91e29edba9e88352f4c51"
11616
+ },
11602
11617
  {
11603
11618
  "path": "tests/copy_inventory.mjs",
11604
11619
  "mode": "0000644",
@@ -12082,7 +12097,7 @@
12082
12097
  {
12083
12098
  "path": "tests/fixtures/page-ledger.mjs",
12084
12099
  "mode": "0000644",
12085
- "sha256": "7e6cee001284e873e06a3037f6916abcfbfa53e243daafd652c6f629d4f73012"
12100
+ "sha256": "9087b5a76ddc3d11e5b7a8bf23ac56c824e763e63d302ac457d9515707f0c7a5"
12086
12101
  },
12087
12102
  {
12088
12103
  "path": "tests/fixtures/session-506-digest.json",
@@ -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
- - 449 operations across 68 resource groups
8
+ - 451 operations across 68 resource groups
9
9
 
10
10
  ## Use it from your project
11
11
 
@@ -353,6 +353,10 @@ function createClient(opts = {}) {
353
353
  postCopyDeskPagesPageIdAsks: (args) => request("POST", "/copy-desk/pages/{pageId}/asks", { hasBody: true }, args),
354
354
  // POST /copy-desk/pages/{pageId}/claim — rank: any-builder — POST /copy-desk/pages/:pageId/claim
355
355
  postCopyDeskPagesPageIdClaim: (args) => request("POST", "/copy-desk/pages/{pageId}/claim", { hasBody: true }, args),
356
+ // PUT /copy-desk/pages/{pageId}/draft — rank: any-builder — PUT /copy-desk/pages/:pageId/draft
357
+ putCopyDeskPagesPageIdDraft: (args) => request("PUT", "/copy-desk/pages/{pageId}/draft", { hasBody: true }, args),
358
+ // POST /copy-desk/pages/{pageId}/submit — rank: any-builder — POST /copy-desk/pages/:pageId/submit
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
357
361
  postCopyDeskProposals: (args) => request("POST", "/copy-desk/proposals", { hasBody: true }, args),
358
362
  // GET /copy-desk/queue — rank: any-builder — GET /copy-desk/queue
@@ -352,6 +352,10 @@ function createClient(opts = {}) {
352
352
  postCopyDeskPagesPageIdAsks: (args) => request("POST", "/copy-desk/pages/{pageId}/asks", { hasBody: true }, args),
353
353
  // POST /copy-desk/pages/{pageId}/claim — rank: any-builder — POST /copy-desk/pages/:pageId/claim
354
354
  postCopyDeskPagesPageIdClaim: (args) => request("POST", "/copy-desk/pages/{pageId}/claim", { hasBody: true }, args),
355
+ // PUT /copy-desk/pages/{pageId}/draft — rank: any-builder — PUT /copy-desk/pages/:pageId/draft
356
+ putCopyDeskPagesPageIdDraft: (args) => request("PUT", "/copy-desk/pages/{pageId}/draft", { hasBody: true }, args),
357
+ // POST /copy-desk/pages/{pageId}/submit — rank: any-builder — POST /copy-desk/pages/:pageId/submit
358
+ postCopyDeskPagesPageIdSubmit: (args) => request("POST", "/copy-desk/pages/{pageId}/submit", { hasBody: true }, args),
355
359
  // POST /copy-desk/proposals — rank: any-builder — POST /copy-desk/proposals
356
360
  postCopyDeskProposals: (args) => request("POST", "/copy-desk/proposals", { hasBody: true }, args),
357
361
  // GET /copy-desk/queue — rank: any-builder — GET /copy-desk/queue
@@ -481,6 +481,8 @@ export interface PostVersionsIdDoneWhenRequest { criterion_id: string; criterion
481
481
  export interface PostVersionsIdDoneWhenResponse { ok: boolean; criterion: unknown }
482
482
  export interface PostVersionsRequest { id: string; name: string; status?: string; done_when?: string; scope_doc_path?: string; criteria?: unknown[]; first_goal?: Record<string, unknown> }
483
483
  export interface PostVersionsResponse { version: unknown; goal: unknown; criteria: unknown }
484
+ export interface PutCopyDeskPagesPageIdDraftRequest { reading_hash: string; lines: unknown[] }
485
+ export interface PutCopyDeskPagesPageIdDraftResponse { ok: boolean; outcome: unknown; page_id: unknown; round: unknown; draft: unknown; counter: unknown }
484
486
  export interface PutGovernmentRanksRankKeyPermissionsPermissionKeyResponse { ok: boolean; rank_key: unknown; permission_key: unknown; granted: unknown }
485
487
  export interface PutMingleOptInRequest { opted_in: boolean }
486
488
  export interface PutMingleOptInResponse { opted_in: unknown; updated_at: unknown }
@@ -770,6 +772,10 @@ export interface BongosClient {
770
772
  postCopyDeskPagesPageIdAsks(args: RequestArgs & { body: PostCopyDeskPagesPageIdAsksRequest }): Promise<ApiResponse>;
771
773
  /** POST /copy-desk/pages/{pageId}/claim — rank: any-builder */
772
774
  postCopyDeskPagesPageIdClaim(args?: RequestArgs): Promise<ApiResponse>;
775
+ /** PUT /copy-desk/pages/{pageId}/draft — rank: any-builder */
776
+ putCopyDeskPagesPageIdDraft(args: RequestArgs & { body: PutCopyDeskPagesPageIdDraftRequest }): Promise<PutCopyDeskPagesPageIdDraftResponse>;
777
+ /** POST /copy-desk/pages/{pageId}/submit — rank: any-builder */
778
+ postCopyDeskPagesPageIdSubmit(args?: RequestArgs): Promise<ApiResponse>;
773
779
  /** POST /copy-desk/proposals — rank: any-builder */
774
780
  postCopyDeskProposals(args: RequestArgs & { body: PostCopyDeskProposalsRequest }): Promise<PostCopyDeskProposalsResponse>;
775
781
  /** GET /copy-desk/queue — rank: any-builder */
@@ -349,6 +349,10 @@ export function createClient(opts = {}) {
349
349
  postCopyDeskPagesPageIdAsks: (args) => request("POST", "/copy-desk/pages/{pageId}/asks", { hasBody: true }, args),
350
350
  // POST /copy-desk/pages/{pageId}/claim — rank: any-builder — POST /copy-desk/pages/:pageId/claim
351
351
  postCopyDeskPagesPageIdClaim: (args) => request("POST", "/copy-desk/pages/{pageId}/claim", { hasBody: true }, args),
352
+ // PUT /copy-desk/pages/{pageId}/draft — rank: any-builder — PUT /copy-desk/pages/:pageId/draft
353
+ putCopyDeskPagesPageIdDraft: (args) => request("PUT", "/copy-desk/pages/{pageId}/draft", { hasBody: true }, args),
354
+ // POST /copy-desk/pages/{pageId}/submit — rank: any-builder — POST /copy-desk/pages/:pageId/submit
355
+ postCopyDeskPagesPageIdSubmit: (args) => request("POST", "/copy-desk/pages/{pageId}/submit", { hasBody: true }, args),
352
356
  // POST /copy-desk/proposals — rank: any-builder — POST /copy-desk/proposals
353
357
  postCopyDeskProposals: (args) => request("POST", "/copy-desk/proposals", { hasBody: true }, args),
354
358
  // GET /copy-desk/queue — rank: any-builder — GET /copy-desk/queue
@@ -5311,6 +5311,126 @@
5311
5311
  ]
5312
5312
  }
5313
5313
  },
5314
+ "/copy-desk/pages/{pageId}/draft": {
5315
+ "put": {
5316
+ "operationId": "put_copy_desk_pages_pageId_draft",
5317
+ "tags": [
5318
+ "copy-desk"
5319
+ ],
5320
+ "summary": "PUT /copy-desk/pages/:pageId/draft",
5321
+ "description": "------------------------------------------------------------------------- PUT /copy-desk/pages/:pageId/draft — autosave the artist's draft (task 1004319 / BV2.TW08, ADR 0341 D4). Body: { reading_hash, lines: [{ key, after }] }, the WHOLE draft: every line the artist has changed. The saved draft becomes exactly that (a line sent back at its current text is dropped, so only changed lines are stored). rank: any signed-in builder; only the HOLDER of the page's writing claim (the web claim the page claim took) may save, checked in the lifecycle transaction. Every target is resolved from the page reading by key: section, current text (`before`) and placement are the reading's, never the body's. A body built on an older reading is refused `reading_moved`, whole, since its keys may now mean other lines. Cheap and idempotent: a save that resolves to the draft already stored writes nothing (200 `unchanged`; `updated_at` does not move). The editor debounces; the server only has to make a repeated save free. 200 saved | unchanged with the draft and \"N of M rewritten\" 409 page_not_held the caller does not hold the page (holder named) 409 no_open_round the page has no round: claim it first 409 reading_moved · 400 unknown_line / line_empty / line_too_long -------------------------------------------------------------------------\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
5322
+ "x-rank": "any-builder",
5323
+ "x-source": "modules/copy-desk/routes/copy-desk.js",
5324
+ "parameters": [
5325
+ {
5326
+ "name": "pageId",
5327
+ "in": "path",
5328
+ "required": true,
5329
+ "schema": {
5330
+ "type": "string"
5331
+ },
5332
+ "description": "Path parameter `pageId`."
5333
+ }
5334
+ ],
5335
+ "requestBody": {
5336
+ "required": true,
5337
+ "content": {
5338
+ "application/json": {
5339
+ "schema": {
5340
+ "$ref": "#/components/schemas/PutCopyDeskPagesPageIdDraftRequest"
5341
+ }
5342
+ }
5343
+ },
5344
+ "x-validated": true
5345
+ },
5346
+ "responses": {
5347
+ "200": {
5348
+ "description": "Success.",
5349
+ "content": {
5350
+ "application/json": {
5351
+ "schema": {
5352
+ "$ref": "#/components/schemas/PutCopyDeskPagesPageIdDraftResponse"
5353
+ }
5354
+ }
5355
+ }
5356
+ },
5357
+ "400": {
5358
+ "$ref": "#/components/responses/ValidationFailed"
5359
+ },
5360
+ "401": {
5361
+ "$ref": "#/components/responses/Unauthorized"
5362
+ },
5363
+ "403": {
5364
+ "$ref": "#/components/responses/Forbidden"
5365
+ },
5366
+ "404": {
5367
+ "$ref": "#/components/responses/NotFound"
5368
+ }
5369
+ },
5370
+ "security": [
5371
+ {
5372
+ "builderSession": []
5373
+ }
5374
+ ]
5375
+ }
5376
+ },
5377
+ "/copy-desk/pages/{pageId}/submit": {
5378
+ "post": {
5379
+ "operationId": "post_copy_desk_pages_pageId_submit",
5380
+ "tags": [
5381
+ "copy-desk"
5382
+ ],
5383
+ "summary": "POST /copy-desk/pages/:pageId/submit",
5384
+ "description": "------------------------------------------------------------------------- POST /copy-desk/pages/:pageId/submit — freeze the draft and queue the page for /tweak (task 1004319 / BV2.TW08, ADR 0341 D4, D7). Body: {} (it freezes the draft already on the task; nothing is taken from the request). rank: any signed-in builder; the holder only. One lifecycle transaction: * every draft line is re-resolved on the CURRENT page reading; a line the page no longer shows is refused by name (target_gone), as are an ambiguous one and a {…} hole added or dropped. Any refusal refuses the submit, listing the lines, and nothing is frozen; * a rewrite of an UNPLACED line (and of shared shell text with no registry row) leaves the batch and files its own engineer task (source page-tweak-unplaced, backlog), carrying the page, the line and the wording. The page does not wait for it; * the rest is frozen into the `page-tweak` block with each line's file, line and string id from the reading, naming the engineer tasks; * the artist's web claim is released and the task goes back to `ready`: the round reads `submitted`, the /tweak queue. 200 submitted with the batch, the engineer tasks, and where \"next up\" reads (GET /copy-desk/next) 200 already_submitted a repeated submit by the round's artist 409 lines_refused · nothing_to_submit · page_not_held · no_open_round -------------------------------------------------------------------------\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
+ "requestBody": {
5399
+ "required": false,
5400
+ "content": {
5401
+ "application/json": {
5402
+ "schema": {
5403
+ "type": "object",
5404
+ "additionalProperties": true
5405
+ }
5406
+ }
5407
+ },
5408
+ "x-validated": true
5409
+ },
5410
+ "responses": {
5411
+ "200": {
5412
+ "description": "Success."
5413
+ },
5414
+ "400": {
5415
+ "$ref": "#/components/responses/ValidationFailed"
5416
+ },
5417
+ "401": {
5418
+ "$ref": "#/components/responses/Unauthorized"
5419
+ },
5420
+ "403": {
5421
+ "$ref": "#/components/responses/Forbidden"
5422
+ },
5423
+ "404": {
5424
+ "$ref": "#/components/responses/NotFound"
5425
+ }
5426
+ },
5427
+ "security": [
5428
+ {
5429
+ "builderSession": []
5430
+ }
5431
+ ]
5432
+ }
5433
+ },
5314
5434
  "/copy-desk/proposals": {
5315
5435
  "post": {
5316
5436
  "operationId": "post_copy_desk_proposals",
@@ -28182,6 +28302,45 @@
28182
28302
  "criteria"
28183
28303
  ]
28184
28304
  },
28305
+ "PutCopyDeskPagesPageIdDraftRequest": {
28306
+ "type": "object",
28307
+ "properties": {
28308
+ "reading_hash": {
28309
+ "type": "string",
28310
+ "minLength": 1,
28311
+ "maxLength": 64
28312
+ },
28313
+ "lines": {
28314
+ "type": "array"
28315
+ }
28316
+ },
28317
+ "required": [
28318
+ "reading_hash",
28319
+ "lines"
28320
+ ],
28321
+ "additionalProperties": false
28322
+ },
28323
+ "PutCopyDeskPagesPageIdDraftResponse": {
28324
+ "type": "object",
28325
+ "properties": {
28326
+ "ok": {
28327
+ "type": "boolean"
28328
+ },
28329
+ "outcome": {},
28330
+ "page_id": {},
28331
+ "round": {},
28332
+ "draft": {},
28333
+ "counter": {}
28334
+ },
28335
+ "required": [
28336
+ "ok",
28337
+ "outcome",
28338
+ "page_id",
28339
+ "round",
28340
+ "draft",
28341
+ "counter"
28342
+ ]
28343
+ },
28185
28344
  "PutGovernmentRanksRankKeyPermissionsPermissionKeyResponse": {
28186
28345
  "type": "object",
28187
28346
  "properties": {
@@ -28385,9 +28544,9 @@
28385
28544
  "description": "A required dependency/feature is not configured or is temporarily down."
28386
28545
  }
28387
28546
  },
28388
- "x-endpoint-count": 449,
28389
- "x-schema-count": 484,
28547
+ "x-endpoint-count": 451,
28548
+ "x-schema-count": 486,
28390
28549
  "x-undocumented-bodies": 9,
28391
- "x-response-schemas": 331,
28550
+ "x-response-schemas": 332,
28392
28551
  "x-generated-by": "scripts/gds/gen-api-docs.js"
28393
28552
  }
@@ -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. 449 endpoints across 76 route files.
5
+ > **Generated from the live route files** — the route file is authoritative. 451 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` (11)
213
+ ## `copy-desk` (13)
214
214
 
215
215
  | Method | Path | Rank | Body | Description |
216
216
  |---|---|---|---|---|
@@ -221,6 +221,8 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust
221
221
  | GET | `/api/bongos/copy-desk/pages/:pageId` | `any-builder` | — | ------------------------------------------------------------------------- GET /copy-desk/pages/:pageId — one page: status, changelog, the… |
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
+ | 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
+ | POST | `/api/bongos/copy-desk/pages/:pageId/submit` | `any-builder` | validated | ------------------------------------------------------------------------- POST /copy-desk/pages/:pageId/submit — freeze the draft and que… |
224
226
  | 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… |
225
227
  | GET | `/api/bongos/copy-desk/queue` | `any-builder` | — | ------------------------------------------------------------------------- GET /copy-desk/queue — the artist's working list. |
226
228
  | GET | `/api/bongos/copy-desk/strings` | `any-builder` | — | ------------------------------------------------------------------------- GET /copy-desk/strings — search the inventory, to find somethin… |
@@ -2607,5 +2607,7 @@ is load-bearing: the script throws rather than guess if it is missing, and
2607
2607
  landed since 1.19.1058 with no explicit bump. run 36415558760. (task 1002620)
2608
2608
  1.19.1060 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
2609
2609
  landed since 1.19.1059 with no explicit bump. run 36418832327. (task 1002620)
2610
+ 1.19.1061 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
2611
+ landed since 1.19.1060 with no explicit bump. run 36423029975. (task 1002620)
2610
2612
  ---------------------------------------------------------------------------
2611
2613
  ```