@bongos/core 1.19.1060 → 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 +62 -27
- package/clients/bongos-client/README.md +1 -1
- package/clients/bongos-client/bongos-client.global.js +8 -0
- package/clients/bongos-client/index.cjs +8 -0
- package/clients/bongos-client/index.d.ts +11 -0
- package/clients/bongos-client/index.mjs +8 -0
- package/docs/api/openapi.json +294 -4
- package/docs/api-reference.md +7 -3
- package/docs/module-api-changelog.md +4 -0
- package/modules/copy-desk/docx.js +818 -0
- package/modules/copy-desk/pages.js +216 -0
- package/modules/copy-desk/routes/copy-desk.js +467 -0
- package/modules/copy-desk/tests/copy_docx.mjs +347 -0
- package/modules/copy-desk/tests/copy_no_cms.mjs +66 -2
- package/modules/copy-desk/tests/copy_page_draft.mjs +202 -0
- package/modules/copy-desk/tests/fixtures/word-docx.mjs +131 -0
- package/modules/lifecycle/lifecycle.js +8 -0
- package/modules/lifecycle/page-tweak-reads.js +11 -2
- package/modules/lifecycle/page-tweak-write.js +192 -0
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/release-notes.json +12 -0
- package/scripts/gds/fitness-checks-write-validation.js +4 -0
- package/src/module-api.js +1 -1
- package/tests/copy_desk_page_docx.mjs +279 -0
- package/tests/copy_desk_page_submit.mjs +289 -0
- package/tests/fitness.mjs +7 -2
- package/tests/fixtures/page-ledger.mjs +33 -2
package/docs/api/openapi.json
CHANGED
|
@@ -5311,6 +5311,234 @@
|
|
|
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}/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
|
+
},
|
|
5485
|
+
"/copy-desk/pages/{pageId}/submit": {
|
|
5486
|
+
"post": {
|
|
5487
|
+
"operationId": "post_copy_desk_pages_pageId_submit",
|
|
5488
|
+
"tags": [
|
|
5489
|
+
"copy-desk"
|
|
5490
|
+
],
|
|
5491
|
+
"summary": "POST /copy-desk/pages/:pageId/submit",
|
|
5492
|
+
"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).",
|
|
5493
|
+
"x-rank": "any-builder",
|
|
5494
|
+
"x-source": "modules/copy-desk/routes/copy-desk.js",
|
|
5495
|
+
"parameters": [
|
|
5496
|
+
{
|
|
5497
|
+
"name": "pageId",
|
|
5498
|
+
"in": "path",
|
|
5499
|
+
"required": true,
|
|
5500
|
+
"schema": {
|
|
5501
|
+
"type": "string"
|
|
5502
|
+
},
|
|
5503
|
+
"description": "Path parameter `pageId`."
|
|
5504
|
+
}
|
|
5505
|
+
],
|
|
5506
|
+
"requestBody": {
|
|
5507
|
+
"required": false,
|
|
5508
|
+
"content": {
|
|
5509
|
+
"application/json": {
|
|
5510
|
+
"schema": {
|
|
5511
|
+
"type": "object",
|
|
5512
|
+
"additionalProperties": true
|
|
5513
|
+
}
|
|
5514
|
+
}
|
|
5515
|
+
},
|
|
5516
|
+
"x-validated": true
|
|
5517
|
+
},
|
|
5518
|
+
"responses": {
|
|
5519
|
+
"200": {
|
|
5520
|
+
"description": "Success."
|
|
5521
|
+
},
|
|
5522
|
+
"400": {
|
|
5523
|
+
"$ref": "#/components/responses/ValidationFailed"
|
|
5524
|
+
},
|
|
5525
|
+
"401": {
|
|
5526
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
5527
|
+
},
|
|
5528
|
+
"403": {
|
|
5529
|
+
"$ref": "#/components/responses/Forbidden"
|
|
5530
|
+
},
|
|
5531
|
+
"404": {
|
|
5532
|
+
"$ref": "#/components/responses/NotFound"
|
|
5533
|
+
}
|
|
5534
|
+
},
|
|
5535
|
+
"security": [
|
|
5536
|
+
{
|
|
5537
|
+
"builderSession": []
|
|
5538
|
+
}
|
|
5539
|
+
]
|
|
5540
|
+
}
|
|
5541
|
+
},
|
|
5314
5542
|
"/copy-desk/proposals": {
|
|
5315
5543
|
"post": {
|
|
5316
5544
|
"operationId": "post_copy_desk_proposals",
|
|
@@ -24883,6 +25111,29 @@
|
|
|
24883
25111
|
],
|
|
24884
25112
|
"additionalProperties": false
|
|
24885
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
|
+
},
|
|
24886
25137
|
"PostCopyDeskProposalsRequest": {
|
|
24887
25138
|
"type": "object",
|
|
24888
25139
|
"properties": {
|
|
@@ -28182,6 +28433,45 @@
|
|
|
28182
28433
|
"criteria"
|
|
28183
28434
|
]
|
|
28184
28435
|
},
|
|
28436
|
+
"PutCopyDeskPagesPageIdDraftRequest": {
|
|
28437
|
+
"type": "object",
|
|
28438
|
+
"properties": {
|
|
28439
|
+
"reading_hash": {
|
|
28440
|
+
"type": "string",
|
|
28441
|
+
"minLength": 1,
|
|
28442
|
+
"maxLength": 64
|
|
28443
|
+
},
|
|
28444
|
+
"lines": {
|
|
28445
|
+
"type": "array"
|
|
28446
|
+
}
|
|
28447
|
+
},
|
|
28448
|
+
"required": [
|
|
28449
|
+
"reading_hash",
|
|
28450
|
+
"lines"
|
|
28451
|
+
],
|
|
28452
|
+
"additionalProperties": false
|
|
28453
|
+
},
|
|
28454
|
+
"PutCopyDeskPagesPageIdDraftResponse": {
|
|
28455
|
+
"type": "object",
|
|
28456
|
+
"properties": {
|
|
28457
|
+
"ok": {
|
|
28458
|
+
"type": "boolean"
|
|
28459
|
+
},
|
|
28460
|
+
"outcome": {},
|
|
28461
|
+
"page_id": {},
|
|
28462
|
+
"round": {},
|
|
28463
|
+
"draft": {},
|
|
28464
|
+
"counter": {}
|
|
28465
|
+
},
|
|
28466
|
+
"required": [
|
|
28467
|
+
"ok",
|
|
28468
|
+
"outcome",
|
|
28469
|
+
"page_id",
|
|
28470
|
+
"round",
|
|
28471
|
+
"draft",
|
|
28472
|
+
"counter"
|
|
28473
|
+
]
|
|
28474
|
+
},
|
|
28185
28475
|
"PutGovernmentRanksRankKeyPermissionsPermissionKeyResponse": {
|
|
28186
28476
|
"type": "object",
|
|
28187
28477
|
"properties": {
|
|
@@ -28385,9 +28675,9 @@
|
|
|
28385
28675
|
"description": "A required dependency/feature is not configured or is temporarily down."
|
|
28386
28676
|
}
|
|
28387
28677
|
},
|
|
28388
|
-
"x-endpoint-count":
|
|
28389
|
-
"x-schema-count":
|
|
28390
|
-
"x-undocumented-bodies":
|
|
28391
|
-
"x-response-schemas":
|
|
28678
|
+
"x-endpoint-count": 453,
|
|
28679
|
+
"x-schema-count": 487,
|
|
28680
|
+
"x-undocumented-bodies": 10,
|
|
28681
|
+
"x-response-schemas": 333,
|
|
28392
28682
|
"x-generated-by": "scripts/gds/gen-api-docs.js"
|
|
28393
28683
|
}
|
package/docs/api-reference.md
CHANGED
|
@@ -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.
|
|
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` (
|
|
213
|
+
## `copy-desk` (15)
|
|
214
214
|
|
|
215
215
|
| Method | Path | Rank | Body | Description |
|
|
216
216
|
|---|---|---|---|---|
|
|
@@ -221,6 +221,10 @@ 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
|
+
| 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… |
|
|
227
|
+
| POST | `/api/bongos/copy-desk/pages/:pageId/submit` | `any-builder` | validated | ------------------------------------------------------------------------- POST /copy-desk/pages/:pageId/submit — freeze the draft and que… |
|
|
224
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… |
|
|
225
229
|
| GET | `/api/bongos/copy-desk/queue` | `any-builder` | — | ------------------------------------------------------------------------- GET /copy-desk/queue — the artist's working list. |
|
|
226
230
|
| GET | `/api/bongos/copy-desk/strings` | `any-builder` | — | ------------------------------------------------------------------------- GET /copy-desk/strings — search the inventory, to find somethin… |
|
|
@@ -798,5 +802,5 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust
|
|
|
798
802
|
|
|
799
803
|
---
|
|
800
804
|
|
|
801
|
-
>
|
|
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.
|
|
802
806
|
|
|
@@ -2607,5 +2607,9 @@ 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)
|
|
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)
|
|
2610
2614
|
---------------------------------------------------------------------------
|
|
2611
2615
|
```
|