@bongos/core 1.19.1058 → 1.19.1060
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 +58 -28
- package/clients/bongos-client/README.md +1 -1
- package/clients/bongos-client/bongos-client.global.js +6 -0
- package/clients/bongos-client/index.cjs +6 -0
- package/clients/bongos-client/index.d.ts +7 -0
- package/clients/bongos-client/index.mjs +6 -0
- package/docs/api/openapi.json +159 -2
- package/docs/api-reference.md +5 -2
- package/docs/file-map.md +1 -1
- package/docs/module-api-changelog.md +4 -0
- package/modules/copy-desk/flags.js +97 -9
- package/modules/copy-desk/migrations/copy_desk_002_page_asks.sql +62 -0
- package/modules/copy-desk/page-status.js +177 -3
- package/modules/copy-desk/pages.js +34 -0
- package/modules/copy-desk/routes/copy-desk.js +253 -14
- package/modules/copy-desk/tests/copy_flags.mjs +52 -2
- package/modules/copy-desk/tests/copy_no_cms.mjs +47 -11
- package/modules/copy-desk/tests/copy_page_next.mjs +184 -0
- package/modules/lifecycle/lifecycle.js +7 -0
- package/modules/lifecycle/page-tweak-claim.js +184 -0
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/release-notes.json +12 -0
- package/src/module-api.js +1 -1
- package/tests/copy_desk_flags_db.mjs +56 -0
- package/tests/copy_desk_page_claim.mjs +219 -0
- package/tests/copy_desk_page_next.mjs +172 -0
- package/tests/fixtures/page-ledger.mjs +175 -0
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.
|
|
6
|
-
"core_contract": "1.19.
|
|
7
|
-
"source_commit": "
|
|
5
|
+
"core_version": "1.19.1060",
|
|
6
|
+
"core_contract": "1.19.1060",
|
|
7
|
+
"source_commit": "053ab05047f2cede246dd8c6cca763a032ee8495",
|
|
8
8
|
"source_ref": "HEAD",
|
|
9
|
-
"built_at": "2026-09-
|
|
9
|
+
"built_at": "2026-09-28T11:58:43.905Z",
|
|
10
10
|
"redaction": {
|
|
11
11
|
"model": "docs-redacted+functional-verbatim",
|
|
12
12
|
"docs_redacted": 543,
|
|
13
13
|
"agent_docs_stubbed": 26,
|
|
14
|
-
"functional_verbatim":
|
|
14
|
+
"functional_verbatim": 2528,
|
|
15
15
|
"rules": 3,
|
|
16
16
|
"gate_literals": 3,
|
|
17
17
|
"gate": "passed"
|
|
18
18
|
},
|
|
19
|
-
"file_count":
|
|
20
|
-
"tree_sha256": "
|
|
19
|
+
"file_count": 3098,
|
|
20
|
+
"tree_sha256": "80aa074ee45fe0f2b5b60a190786cd4833e3aad1153828d157d5fe2b865b7db0",
|
|
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": "
|
|
320
|
+
"sha256": "3e5980fb95bfaf6029cdddc9c9921053d9897cbcbf15be30e58e9b494177d4af"
|
|
321
321
|
},
|
|
322
322
|
{
|
|
323
323
|
"path": "clients/bongos-client/bongos-client.global.js",
|
|
324
324
|
"mode": "0000644",
|
|
325
|
-
"sha256": "
|
|
325
|
+
"sha256": "c587bec39fefe04695a0c1673882e3af552fe72486909e9e90759a3b46e20916"
|
|
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": "
|
|
335
|
+
"sha256": "ee6df391f3c319e77b9601fb47bf5deddc56adb95af62e8086a3d6dbeac4993b"
|
|
336
336
|
},
|
|
337
337
|
{
|
|
338
338
|
"path": "clients/bongos-client/index.d.ts",
|
|
339
339
|
"mode": "0000644",
|
|
340
|
-
"sha256": "
|
|
340
|
+
"sha256": "ed5f287b10278823cf322091feff1e784125d21a7856ad021a98e6e3e2269f71"
|
|
341
341
|
},
|
|
342
342
|
{
|
|
343
343
|
"path": "clients/bongos-client/index.mjs",
|
|
344
344
|
"mode": "0000644",
|
|
345
|
-
"sha256": "
|
|
345
|
+
"sha256": "a43b2952238b2f19e76fe8767ec6b8a313fdfb0173cfa10946b6dee63e97af69"
|
|
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": "
|
|
2180
|
+
"sha256": "d642de14db69137bb04bf79bf4a67b8ec01818ac2ff6b85f04fca4944f2bdd15"
|
|
2181
2181
|
},
|
|
2182
2182
|
{
|
|
2183
2183
|
"path": "docs/api/openapi.json",
|
|
2184
2184
|
"mode": "0000644",
|
|
2185
|
-
"sha256": "
|
|
2185
|
+
"sha256": "f47a697a636c8b50dafd4d8e58986676af0b8fcacaf89f6a418b230ebcb28cdc"
|
|
2186
2186
|
},
|
|
2187
2187
|
{
|
|
2188
2188
|
"path": "docs/architecture.md",
|
|
@@ -2732,7 +2732,7 @@
|
|
|
2732
2732
|
{
|
|
2733
2733
|
"path": "docs/file-map.md",
|
|
2734
2734
|
"mode": "0000644",
|
|
2735
|
-
"sha256": "
|
|
2735
|
+
"sha256": "43d6bdc61cd3401d35e68f0e98caa645db48a81eb59df2fd0b0c5e04d42b9254"
|
|
2736
2736
|
},
|
|
2737
2737
|
{
|
|
2738
2738
|
"path": "docs/handoff-template.md",
|
|
@@ -2742,7 +2742,7 @@
|
|
|
2742
2742
|
{
|
|
2743
2743
|
"path": "docs/module-api-changelog.md",
|
|
2744
2744
|
"mode": "0000644",
|
|
2745
|
-
"sha256": "
|
|
2745
|
+
"sha256": "72f72960133805df016e92eb786b37d8fb7cb67bf3f09e9fcade295cce4773cb"
|
|
2746
2746
|
},
|
|
2747
2747
|
{
|
|
2748
2748
|
"path": "docs/modules-contract.md",
|
|
@@ -4112,13 +4112,18 @@
|
|
|
4112
4112
|
{
|
|
4113
4113
|
"path": "modules/copy-desk/flags.js",
|
|
4114
4114
|
"mode": "0000644",
|
|
4115
|
-
"sha256": "
|
|
4115
|
+
"sha256": "ca617aef2c209f89c57acf2db7772b27f0bb7e790afb48dc940822422ec8ad81"
|
|
4116
4116
|
},
|
|
4117
4117
|
{
|
|
4118
4118
|
"path": "modules/copy-desk/migrations/copy_desk_001_flags.sql",
|
|
4119
4119
|
"mode": "0000644",
|
|
4120
4120
|
"sha256": "7569a5b33b9a2c86c588b49d086c443966066a412855d3f88367851a24edcfa7"
|
|
4121
4121
|
},
|
|
4122
|
+
{
|
|
4123
|
+
"path": "modules/copy-desk/migrations/copy_desk_002_page_asks.sql",
|
|
4124
|
+
"mode": "0000644",
|
|
4125
|
+
"sha256": "776a4374537dcc86ef8ecb2c333cf12889832ae6319727a7787783e5ee80dfd3"
|
|
4126
|
+
},
|
|
4122
4127
|
{
|
|
4123
4128
|
"path": "modules/copy-desk/module.json",
|
|
4124
4129
|
"mode": "0000644",
|
|
@@ -4132,12 +4137,12 @@
|
|
|
4132
4137
|
{
|
|
4133
4138
|
"path": "modules/copy-desk/page-status.js",
|
|
4134
4139
|
"mode": "0000644",
|
|
4135
|
-
"sha256": "
|
|
4140
|
+
"sha256": "fe85e899abb8524b36ef7187a8a2b5b127ea87342c378a32b95a644d18a83021"
|
|
4136
4141
|
},
|
|
4137
4142
|
{
|
|
4138
4143
|
"path": "modules/copy-desk/pages.js",
|
|
4139
4144
|
"mode": "0000644",
|
|
4140
|
-
"sha256": "
|
|
4145
|
+
"sha256": "671edb87faad28217c30abdcfff2c110d9b692f0da0f2d18af975d34d42b782e"
|
|
4141
4146
|
},
|
|
4142
4147
|
{
|
|
4143
4148
|
"path": "modules/copy-desk/proposals.js",
|
|
@@ -4152,17 +4157,22 @@
|
|
|
4152
4157
|
{
|
|
4153
4158
|
"path": "modules/copy-desk/routes/copy-desk.js",
|
|
4154
4159
|
"mode": "0000644",
|
|
4155
|
-
"sha256": "
|
|
4160
|
+
"sha256": "6d313d730906c5f240504695b792401fc0dc9ffde993efd2f330a9e71df276c0"
|
|
4156
4161
|
},
|
|
4157
4162
|
{
|
|
4158
4163
|
"path": "modules/copy-desk/tests/copy_flags.mjs",
|
|
4159
4164
|
"mode": "0000644",
|
|
4160
|
-
"sha256": "
|
|
4165
|
+
"sha256": "2af8862a4bb01acea75b775139db43d78218841cc217638c9a72b3e658e6d6c5"
|
|
4161
4166
|
},
|
|
4162
4167
|
{
|
|
4163
4168
|
"path": "modules/copy-desk/tests/copy_no_cms.mjs",
|
|
4164
4169
|
"mode": "0000644",
|
|
4165
|
-
"sha256": "
|
|
4170
|
+
"sha256": "17ad6640e97dde18273ccd5c533b6910d490bfad970da16fd0712c20a8b5f7f3"
|
|
4171
|
+
},
|
|
4172
|
+
{
|
|
4173
|
+
"path": "modules/copy-desk/tests/copy_page_next.mjs",
|
|
4174
|
+
"mode": "0000644",
|
|
4175
|
+
"sha256": "d82db6db97b22a88a83b4cf9bac7724a411dc7831b08cacd5548c0ac367ad3b9"
|
|
4166
4176
|
},
|
|
4167
4177
|
{
|
|
4168
4178
|
"path": "modules/copy-desk/tests/copy_page_status.mjs",
|
|
@@ -6122,7 +6132,7 @@
|
|
|
6122
6132
|
{
|
|
6123
6133
|
"path": "modules/lifecycle/lifecycle.js",
|
|
6124
6134
|
"mode": "0000644",
|
|
6125
|
-
"sha256": "
|
|
6135
|
+
"sha256": "05edef42162cff680d96b084805959741be5a9ec09b18c87fdbfab6ff65458e0"
|
|
6126
6136
|
},
|
|
6127
6137
|
{
|
|
6128
6138
|
"path": "modules/lifecycle/merge-lock.js",
|
|
@@ -6199,6 +6209,11 @@
|
|
|
6199
6209
|
"mode": "0000644",
|
|
6200
6210
|
"sha256": "472161627fdeb33b628eb3d9b4d4d58eba13dc74dacee1f661fc79856496cff8"
|
|
6201
6211
|
},
|
|
6212
|
+
{
|
|
6213
|
+
"path": "modules/lifecycle/page-tweak-claim.js",
|
|
6214
|
+
"mode": "0000644",
|
|
6215
|
+
"sha256": "4b9f9c23161a961381857a01fc810ce1b960e2b89b74e616fa17d34a403b592f"
|
|
6216
|
+
},
|
|
6202
6217
|
{
|
|
6203
6218
|
"path": "modules/lifecycle/page-tweak-reads.js",
|
|
6204
6219
|
"mode": "0000644",
|
|
@@ -8507,12 +8522,12 @@
|
|
|
8507
8522
|
{
|
|
8508
8523
|
"path": "package-lock.json",
|
|
8509
8524
|
"mode": "0000644",
|
|
8510
|
-
"sha256": "
|
|
8525
|
+
"sha256": "1dd792c5514fb93f90ca899378a3fe7fb0ba2759d11ae763a593eaa4de211a37"
|
|
8511
8526
|
},
|
|
8512
8527
|
{
|
|
8513
8528
|
"path": "package.json",
|
|
8514
8529
|
"mode": "0000644",
|
|
8515
|
-
"sha256": "
|
|
8530
|
+
"sha256": "8e2cc56778737033b8c49aabdb41869132a0343fae6419e90aa23adedf474daa"
|
|
8516
8531
|
},
|
|
8517
8532
|
{
|
|
8518
8533
|
"path": "public-docs/index.html",
|
|
@@ -8532,7 +8547,7 @@
|
|
|
8532
8547
|
{
|
|
8533
8548
|
"path": "release-notes.json",
|
|
8534
8549
|
"mode": "0000644",
|
|
8535
|
-
"sha256": "
|
|
8550
|
+
"sha256": "971eebaefe45a5e3bd6eac7a217d7a1abc571d02240dac97799f9167643a227b"
|
|
8536
8551
|
},
|
|
8537
8552
|
{
|
|
8538
8553
|
"path": "scripts/bongos-mcp.js",
|
|
@@ -10617,7 +10632,7 @@
|
|
|
10617
10632
|
{
|
|
10618
10633
|
"path": "src/module-api.js",
|
|
10619
10634
|
"mode": "0000644",
|
|
10620
|
-
"sha256": "
|
|
10635
|
+
"sha256": "5be8c8ecfa92788bfeef57fd9e4235d24ac3e4257d10e9936f38ace6b627d2cb"
|
|
10621
10636
|
},
|
|
10622
10637
|
{
|
|
10623
10638
|
"path": "src/module-loader/catalog.js",
|
|
@@ -11567,7 +11582,17 @@
|
|
|
11567
11582
|
{
|
|
11568
11583
|
"path": "tests/copy_desk_flags_db.mjs",
|
|
11569
11584
|
"mode": "0000644",
|
|
11570
|
-
"sha256": "
|
|
11585
|
+
"sha256": "739bbd623955742864ac712a5f119968ebac671c005054a07a8521c7770a929b"
|
|
11586
|
+
},
|
|
11587
|
+
{
|
|
11588
|
+
"path": "tests/copy_desk_page_claim.mjs",
|
|
11589
|
+
"mode": "0000644",
|
|
11590
|
+
"sha256": "af6cdac77b90aad511a603757e12d7ffefaa7fdbcdd14aefd70ad49e3cd193fe"
|
|
11591
|
+
},
|
|
11592
|
+
{
|
|
11593
|
+
"path": "tests/copy_desk_page_next.mjs",
|
|
11594
|
+
"mode": "0000644",
|
|
11595
|
+
"sha256": "d9827f75b542ce1a3fe9bfe9e3d5cd8ecaaed4691d611dc73617d280ec6cf292"
|
|
11571
11596
|
},
|
|
11572
11597
|
{
|
|
11573
11598
|
"path": "tests/copy_desk_page_reads.mjs",
|
|
@@ -12054,6 +12079,11 @@
|
|
|
12054
12079
|
"mode": "0000644",
|
|
12055
12080
|
"sha256": "2f532cacb06f0f074c15101c16578f3183104042644d6c8aa0d2e80fdb425b2f"
|
|
12056
12081
|
},
|
|
12082
|
+
{
|
|
12083
|
+
"path": "tests/fixtures/page-ledger.mjs",
|
|
12084
|
+
"mode": "0000644",
|
|
12085
|
+
"sha256": "7e6cee001284e873e06a3037f6916abcfbfa53e243daafd652c6f629d4f73012"
|
|
12086
|
+
},
|
|
12057
12087
|
{
|
|
12058
12088
|
"path": "tests/fixtures/session-506-digest.json",
|
|
12059
12089
|
"mode": "0000644",
|
|
@@ -5,7 +5,7 @@ A **generated**, zero-dependency typed client for the Bongos API — produced fr
|
|
|
5
5
|
by hand; it regenerates when the spec changes, so it can never drift from the routes.
|
|
6
6
|
|
|
7
7
|
- API version: **v1** (served at `/api/bongos/v1`)
|
|
8
|
-
-
|
|
8
|
+
- 449 operations across 68 resource groups
|
|
9
9
|
|
|
10
10
|
## Use it from your project
|
|
11
11
|
|
|
@@ -343,10 +343,16 @@ function createClient(opts = {}) {
|
|
|
343
343
|
postCopyDeskFlags: (args) => request("POST", "/copy-desk/flags", { hasBody: true }, args),
|
|
344
344
|
// POST /copy-desk/flags/{id}/close — rank: any-builder — POST /copy-desk/flags/:id/close
|
|
345
345
|
postCopyDeskFlagsIdClose: (args) => request("POST", "/copy-desk/flags/{id}/close", { hasBody: true }, args),
|
|
346
|
+
// GET /copy-desk/next — rank: any-builder — GET /copy-desk/next
|
|
347
|
+
getCopyDeskNext: (args) => request("GET", "/copy-desk/next", { hasBody: false }, args),
|
|
346
348
|
// GET /copy-desk/pages — rank: any-builder — GET /copy-desk/pages
|
|
347
349
|
getCopyDeskPages: (args) => request("GET", "/copy-desk/pages", { hasBody: false }, args),
|
|
348
350
|
// GET /copy-desk/pages/{pageId} — rank: any-builder — GET /copy-desk/pages/:pageId
|
|
349
351
|
getCopyDeskPagesPageId: (args) => request("GET", "/copy-desk/pages/{pageId}", { hasBody: false }, args),
|
|
352
|
+
// POST /copy-desk/pages/{pageId}/asks — rank: any-builder — POST /copy-desk/pages/:pageId/asks
|
|
353
|
+
postCopyDeskPagesPageIdAsks: (args) => request("POST", "/copy-desk/pages/{pageId}/asks", { hasBody: true }, args),
|
|
354
|
+
// POST /copy-desk/pages/{pageId}/claim — rank: any-builder — POST /copy-desk/pages/:pageId/claim
|
|
355
|
+
postCopyDeskPagesPageIdClaim: (args) => request("POST", "/copy-desk/pages/{pageId}/claim", { hasBody: true }, args),
|
|
350
356
|
// POST /copy-desk/proposals — rank: any-builder — POST /copy-desk/proposals
|
|
351
357
|
postCopyDeskProposals: (args) => request("POST", "/copy-desk/proposals", { hasBody: true }, args),
|
|
352
358
|
// GET /copy-desk/queue — rank: any-builder — GET /copy-desk/queue
|
|
@@ -342,10 +342,16 @@ function createClient(opts = {}) {
|
|
|
342
342
|
postCopyDeskFlags: (args) => request("POST", "/copy-desk/flags", { hasBody: true }, args),
|
|
343
343
|
// POST /copy-desk/flags/{id}/close — rank: any-builder — POST /copy-desk/flags/:id/close
|
|
344
344
|
postCopyDeskFlagsIdClose: (args) => request("POST", "/copy-desk/flags/{id}/close", { hasBody: true }, args),
|
|
345
|
+
// GET /copy-desk/next — rank: any-builder — GET /copy-desk/next
|
|
346
|
+
getCopyDeskNext: (args) => request("GET", "/copy-desk/next", { hasBody: false }, args),
|
|
345
347
|
// GET /copy-desk/pages — rank: any-builder — GET /copy-desk/pages
|
|
346
348
|
getCopyDeskPages: (args) => request("GET", "/copy-desk/pages", { hasBody: false }, args),
|
|
347
349
|
// GET /copy-desk/pages/{pageId} — rank: any-builder — GET /copy-desk/pages/:pageId
|
|
348
350
|
getCopyDeskPagesPageId: (args) => request("GET", "/copy-desk/pages/{pageId}", { hasBody: false }, args),
|
|
351
|
+
// POST /copy-desk/pages/{pageId}/asks — rank: any-builder — POST /copy-desk/pages/:pageId/asks
|
|
352
|
+
postCopyDeskPagesPageIdAsks: (args) => request("POST", "/copy-desk/pages/{pageId}/asks", { hasBody: true }, args),
|
|
353
|
+
// POST /copy-desk/pages/{pageId}/claim — rank: any-builder — POST /copy-desk/pages/:pageId/claim
|
|
354
|
+
postCopyDeskPagesPageIdClaim: (args) => request("POST", "/copy-desk/pages/{pageId}/claim", { hasBody: true }, args),
|
|
349
355
|
// POST /copy-desk/proposals — rank: any-builder — POST /copy-desk/proposals
|
|
350
356
|
postCopyDeskProposals: (args) => request("POST", "/copy-desk/proposals", { hasBody: true }, args),
|
|
351
357
|
// GET /copy-desk/queue — rank: any-builder — GET /copy-desk/queue
|
|
@@ -297,6 +297,7 @@ export interface PostCopyDeskFlagsIdCloseRequest { status: string; resolution_no
|
|
|
297
297
|
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
|
+
export interface PostCopyDeskPagesPageIdAsksRequest { reason: string }
|
|
300
301
|
export interface PostCopyDeskProposalsRequest { string_id: string; proposed_text: string; why: string; file?: string; line?: number; flag_id?: number }
|
|
301
302
|
export interface PostCopyDeskProposalsResponse { ok: boolean; task: unknown; created: boolean; patch?: unknown }
|
|
302
303
|
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 }
|
|
@@ -759,10 +760,16 @@ export interface BongosClient {
|
|
|
759
760
|
postCopyDeskFlags(args: RequestArgs & { body: PostCopyDeskFlagsRequest }): Promise<PostCopyDeskFlagsResponse>;
|
|
760
761
|
/** POST /copy-desk/flags/{id}/close — rank: any-builder */
|
|
761
762
|
postCopyDeskFlagsIdClose(args: RequestArgs & { body: PostCopyDeskFlagsIdCloseRequest }): Promise<PostCopyDeskFlagsIdCloseResponse>;
|
|
763
|
+
/** GET /copy-desk/next — rank: any-builder */
|
|
764
|
+
getCopyDeskNext(args?: RequestArgs): Promise<ApiResponse>;
|
|
762
765
|
/** GET /copy-desk/pages — rank: any-builder */
|
|
763
766
|
getCopyDeskPages(args?: RequestArgs): Promise<ApiResponse>;
|
|
764
767
|
/** GET /copy-desk/pages/{pageId} — rank: any-builder */
|
|
765
768
|
getCopyDeskPagesPageId(args?: RequestArgs): Promise<ApiResponse>;
|
|
769
|
+
/** POST /copy-desk/pages/{pageId}/asks — rank: any-builder */
|
|
770
|
+
postCopyDeskPagesPageIdAsks(args: RequestArgs & { body: PostCopyDeskPagesPageIdAsksRequest }): Promise<ApiResponse>;
|
|
771
|
+
/** POST /copy-desk/pages/{pageId}/claim — rank: any-builder */
|
|
772
|
+
postCopyDeskPagesPageIdClaim(args?: RequestArgs): Promise<ApiResponse>;
|
|
766
773
|
/** POST /copy-desk/proposals — rank: any-builder */
|
|
767
774
|
postCopyDeskProposals(args: RequestArgs & { body: PostCopyDeskProposalsRequest }): Promise<PostCopyDeskProposalsResponse>;
|
|
768
775
|
/** GET /copy-desk/queue — rank: any-builder */
|
|
@@ -339,10 +339,16 @@ export function createClient(opts = {}) {
|
|
|
339
339
|
postCopyDeskFlags: (args) => request("POST", "/copy-desk/flags", { hasBody: true }, args),
|
|
340
340
|
// POST /copy-desk/flags/{id}/close — rank: any-builder — POST /copy-desk/flags/:id/close
|
|
341
341
|
postCopyDeskFlagsIdClose: (args) => request("POST", "/copy-desk/flags/{id}/close", { hasBody: true }, args),
|
|
342
|
+
// GET /copy-desk/next — rank: any-builder — GET /copy-desk/next
|
|
343
|
+
getCopyDeskNext: (args) => request("GET", "/copy-desk/next", { hasBody: false }, args),
|
|
342
344
|
// GET /copy-desk/pages — rank: any-builder — GET /copy-desk/pages
|
|
343
345
|
getCopyDeskPages: (args) => request("GET", "/copy-desk/pages", { hasBody: false }, args),
|
|
344
346
|
// GET /copy-desk/pages/{pageId} — rank: any-builder — GET /copy-desk/pages/:pageId
|
|
345
347
|
getCopyDeskPagesPageId: (args) => request("GET", "/copy-desk/pages/{pageId}", { hasBody: false }, args),
|
|
348
|
+
// POST /copy-desk/pages/{pageId}/asks — rank: any-builder — POST /copy-desk/pages/:pageId/asks
|
|
349
|
+
postCopyDeskPagesPageIdAsks: (args) => request("POST", "/copy-desk/pages/{pageId}/asks", { hasBody: true }, args),
|
|
350
|
+
// POST /copy-desk/pages/{pageId}/claim — rank: any-builder — POST /copy-desk/pages/:pageId/claim
|
|
351
|
+
postCopyDeskPagesPageIdClaim: (args) => request("POST", "/copy-desk/pages/{pageId}/claim", { hasBody: true }, args),
|
|
346
352
|
// POST /copy-desk/proposals — rank: any-builder — POST /copy-desk/proposals
|
|
347
353
|
postCopyDeskProposals: (args) => request("POST", "/copy-desk/proposals", { hasBody: true }, args),
|
|
348
354
|
// GET /copy-desk/queue — rank: any-builder — GET /copy-desk/queue
|
package/docs/api/openapi.json
CHANGED
|
@@ -5091,6 +5091,37 @@
|
|
|
5091
5091
|
]
|
|
5092
5092
|
}
|
|
5093
5093
|
},
|
|
5094
|
+
"/copy-desk/next": {
|
|
5095
|
+
"get": {
|
|
5096
|
+
"operationId": "get_copy_desk_next",
|
|
5097
|
+
"tags": [
|
|
5098
|
+
"copy-desk"
|
|
5099
|
+
],
|
|
5100
|
+
"summary": "GET /copy-desk/next",
|
|
5101
|
+
"description": "------------------------------------------------------------------------- GET /copy-desk/next — the Tweak/CopyWrite Flow's recommendation (task 1004318 / BV2.TW07, ADR 0341 D8): the page the caller should tweak next and why (\"2 people asked for it\"), plus the next few for \"pick another\". Order: asked for (most distinct askers, then the oldest ask), then changed since the last tweak (most changed lines), then untweaked (landing, builders, status, then inventory order); tweaked pages with no drift last. A page another builder holds, or whose round is in flight, is never recommended (it is listed in `skipped`). The caller's own held page is `resume`, not a recommendation. \"Take next\" is POST /copy-desk/pages/:pageId/claim on `recommended.page_id` (each candidate carries its `take`), one call. The availability rule here is the claim's own, so that call is not refused for a reason this read knew. rank: any signed-in builder. The read is the caller's own and needs no craft; the claim it points at is where the artist gate lives. -------------------------------------------------------------------------\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
5102
|
+
"x-rank": "any-builder",
|
|
5103
|
+
"x-source": "modules/copy-desk/routes/copy-desk.js",
|
|
5104
|
+
"responses": {
|
|
5105
|
+
"200": {
|
|
5106
|
+
"description": "Success."
|
|
5107
|
+
},
|
|
5108
|
+
"400": {
|
|
5109
|
+
"$ref": "#/components/responses/BadRequest"
|
|
5110
|
+
},
|
|
5111
|
+
"401": {
|
|
5112
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
5113
|
+
},
|
|
5114
|
+
"403": {
|
|
5115
|
+
"$ref": "#/components/responses/Forbidden"
|
|
5116
|
+
}
|
|
5117
|
+
},
|
|
5118
|
+
"security": [
|
|
5119
|
+
{
|
|
5120
|
+
"builderSession": []
|
|
5121
|
+
}
|
|
5122
|
+
]
|
|
5123
|
+
}
|
|
5124
|
+
},
|
|
5094
5125
|
"/copy-desk/pages": {
|
|
5095
5126
|
"get": {
|
|
5096
5127
|
"operationId": "get_copy_desk_pages",
|
|
@@ -5167,6 +5198,119 @@
|
|
|
5167
5198
|
]
|
|
5168
5199
|
}
|
|
5169
5200
|
},
|
|
5201
|
+
"/copy-desk/pages/{pageId}/asks": {
|
|
5202
|
+
"post": {
|
|
5203
|
+
"operationId": "post_copy_desk_pages_pageId_asks",
|
|
5204
|
+
"tags": [
|
|
5205
|
+
"copy-desk"
|
|
5206
|
+
],
|
|
5207
|
+
"summary": "POST /copy-desk/pages/:pageId/asks",
|
|
5208
|
+
"description": "------------------------------------------------------------------------- POST /copy-desk/pages/:pageId/asks — ask for a page (task 1004317 / TW06, ADR 0341 D6). Body: { reason } — one line, the flag's own floor (10 characters). rank: any signed-in builder, any craft. A page ask is a copy_desk_flags row with scope 'page'; it carries a judgement and a page id, never text. 201 a new ask · 200 the caller's open ask on this page already (the first one comes back; a double ask is not a second signal) Both carry `askers`: distinct builders with an open ask on the page. -------------------------------------------------------------------------\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
5209
|
+
"x-rank": "any-builder",
|
|
5210
|
+
"x-source": "modules/copy-desk/routes/copy-desk.js",
|
|
5211
|
+
"parameters": [
|
|
5212
|
+
{
|
|
5213
|
+
"name": "pageId",
|
|
5214
|
+
"in": "path",
|
|
5215
|
+
"required": true,
|
|
5216
|
+
"schema": {
|
|
5217
|
+
"type": "string"
|
|
5218
|
+
},
|
|
5219
|
+
"description": "Path parameter `pageId`."
|
|
5220
|
+
}
|
|
5221
|
+
],
|
|
5222
|
+
"requestBody": {
|
|
5223
|
+
"required": true,
|
|
5224
|
+
"content": {
|
|
5225
|
+
"application/json": {
|
|
5226
|
+
"schema": {
|
|
5227
|
+
"$ref": "#/components/schemas/PostCopyDeskPagesPageIdAsksRequest"
|
|
5228
|
+
}
|
|
5229
|
+
}
|
|
5230
|
+
},
|
|
5231
|
+
"x-validated": true
|
|
5232
|
+
},
|
|
5233
|
+
"responses": {
|
|
5234
|
+
"200": {
|
|
5235
|
+
"description": "Success."
|
|
5236
|
+
},
|
|
5237
|
+
"400": {
|
|
5238
|
+
"$ref": "#/components/responses/ValidationFailed"
|
|
5239
|
+
},
|
|
5240
|
+
"401": {
|
|
5241
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
5242
|
+
},
|
|
5243
|
+
"403": {
|
|
5244
|
+
"$ref": "#/components/responses/Forbidden"
|
|
5245
|
+
},
|
|
5246
|
+
"404": {
|
|
5247
|
+
"$ref": "#/components/responses/NotFound"
|
|
5248
|
+
}
|
|
5249
|
+
},
|
|
5250
|
+
"security": [
|
|
5251
|
+
{
|
|
5252
|
+
"builderSession": []
|
|
5253
|
+
}
|
|
5254
|
+
]
|
|
5255
|
+
}
|
|
5256
|
+
},
|
|
5257
|
+
"/copy-desk/pages/{pageId}/claim": {
|
|
5258
|
+
"post": {
|
|
5259
|
+
"operationId": "post_copy_desk_pages_pageId_claim",
|
|
5260
|
+
"tags": [
|
|
5261
|
+
"copy-desk"
|
|
5262
|
+
],
|
|
5263
|
+
"summary": "POST /copy-desk/pages/:pageId/claim",
|
|
5264
|
+
"description": "------------------------------------------------------------------------- POST /copy-desk/pages/:pageId/claim — claim a page's tweak (task 1004317 / BV2.TW06, ADR 0341 D2 and D5). Also Resume and \"Take next\". Body: {} (nothing — who claims is the session, what is claimed is the path). rank: any signed-in builder; the gate is the CRAFT, read server-side (builders.preferred_disciplines includes artist), never the request. One call finds the page's open round or creates it (source_ref page-tweak/<page_id>/r<n>, 30 credits, the building version's catch-all goal) and WEB-claims it: no worktree, no session. The lifecycle port runs it in one transaction under an advisory lock on the page, so two artists cannot both open a round. 201 created a new round, held by the caller 200 claimed an unheld round still being written (a draft released without submitting) taken over; the draft stays 200 resumed the caller already holds it 409 page_held another builder holds it; the holder is named 409 page_in_flight the round is past writing (submitted, applying, waiting for the artist, landing) 403 not_an_artist the caller's crafts do not include artist; they are offered the ask -------------------------------------------------------------------------\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
5265
|
+
"x-rank": "any-builder",
|
|
5266
|
+
"x-source": "modules/copy-desk/routes/copy-desk.js",
|
|
5267
|
+
"parameters": [
|
|
5268
|
+
{
|
|
5269
|
+
"name": "pageId",
|
|
5270
|
+
"in": "path",
|
|
5271
|
+
"required": true,
|
|
5272
|
+
"schema": {
|
|
5273
|
+
"type": "string"
|
|
5274
|
+
},
|
|
5275
|
+
"description": "Path parameter `pageId`."
|
|
5276
|
+
}
|
|
5277
|
+
],
|
|
5278
|
+
"requestBody": {
|
|
5279
|
+
"required": false,
|
|
5280
|
+
"content": {
|
|
5281
|
+
"application/json": {
|
|
5282
|
+
"schema": {
|
|
5283
|
+
"type": "object",
|
|
5284
|
+
"additionalProperties": true
|
|
5285
|
+
}
|
|
5286
|
+
}
|
|
5287
|
+
},
|
|
5288
|
+
"x-validated": true
|
|
5289
|
+
},
|
|
5290
|
+
"responses": {
|
|
5291
|
+
"200": {
|
|
5292
|
+
"description": "Success."
|
|
5293
|
+
},
|
|
5294
|
+
"400": {
|
|
5295
|
+
"$ref": "#/components/responses/ValidationFailed"
|
|
5296
|
+
},
|
|
5297
|
+
"401": {
|
|
5298
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
5299
|
+
},
|
|
5300
|
+
"403": {
|
|
5301
|
+
"$ref": "#/components/responses/Forbidden"
|
|
5302
|
+
},
|
|
5303
|
+
"404": {
|
|
5304
|
+
"$ref": "#/components/responses/NotFound"
|
|
5305
|
+
}
|
|
5306
|
+
},
|
|
5307
|
+
"security": [
|
|
5308
|
+
{
|
|
5309
|
+
"builderSession": []
|
|
5310
|
+
}
|
|
5311
|
+
]
|
|
5312
|
+
}
|
|
5313
|
+
},
|
|
5170
5314
|
"/copy-desk/proposals": {
|
|
5171
5315
|
"post": {
|
|
5172
5316
|
"operationId": "post_copy_desk_proposals",
|
|
@@ -24726,6 +24870,19 @@
|
|
|
24726
24870
|
"flag"
|
|
24727
24871
|
]
|
|
24728
24872
|
},
|
|
24873
|
+
"PostCopyDeskPagesPageIdAsksRequest": {
|
|
24874
|
+
"type": "object",
|
|
24875
|
+
"properties": {
|
|
24876
|
+
"reason": {
|
|
24877
|
+
"type": "string",
|
|
24878
|
+
"minLength": 1
|
|
24879
|
+
}
|
|
24880
|
+
},
|
|
24881
|
+
"required": [
|
|
24882
|
+
"reason"
|
|
24883
|
+
],
|
|
24884
|
+
"additionalProperties": false
|
|
24885
|
+
},
|
|
24729
24886
|
"PostCopyDeskProposalsRequest": {
|
|
24730
24887
|
"type": "object",
|
|
24731
24888
|
"properties": {
|
|
@@ -28228,8 +28385,8 @@
|
|
|
28228
28385
|
"description": "A required dependency/feature is not configured or is temporarily down."
|
|
28229
28386
|
}
|
|
28230
28387
|
},
|
|
28231
|
-
"x-endpoint-count":
|
|
28232
|
-
"x-schema-count":
|
|
28388
|
+
"x-endpoint-count": 449,
|
|
28389
|
+
"x-schema-count": 484,
|
|
28233
28390
|
"x-undocumented-bodies": 9,
|
|
28234
28391
|
"x-response-schemas": 331,
|
|
28235
28392
|
"x-generated-by": "scripts/gds/gen-api-docs.js"
|
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. 449 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,14 +210,17 @@ 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` (11)
|
|
214
214
|
|
|
215
215
|
| Method | Path | Rank | Body | Description |
|
|
216
216
|
|---|---|---|---|---|
|
|
217
217
|
| POST | `/api/bongos/copy-desk/flags` | `any-builder` | `scope`, `surface`, `string_id`, `reason`, `kind` | ------------------------------------------------------------------------- POST /copy-desk/flags — file a flag. |
|
|
218
218
|
| POST | `/api/bongos/copy-desk/flags/:id/close` | `any-builder` | `status`, `resolution_note`, `resolved_task_id` | ------------------------------------------------------------------------- POST /copy-desk/flags/:id/close — resolve or dismiss. |
|
|
219
|
+
| GET | `/api/bongos/copy-desk/next` | `any-builder` | — | ------------------------------------------------------------------------- GET /copy-desk/next — the Tweak/CopyWrite Flow's recommendation… |
|
|
219
220
|
| GET | `/api/bongos/copy-desk/pages` | `any-builder` | — | ------------------------------------------------------------------------- GET /copy-desk/pages — every page's status, count and drift, pl… |
|
|
220
221
|
| GET | `/api/bongos/copy-desk/pages/:pageId` | `any-builder` | — | ------------------------------------------------------------------------- GET /copy-desk/pages/:pageId — one page: status, changelog, the… |
|
|
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
|
+
| POST | `/api/bongos/copy-desk/pages/:pageId/claim` | `any-builder` | validated | ------------------------------------------------------------------------- POST /copy-desk/pages/:pageId/claim — claim a page's tweak (tas… |
|
|
221
224
|
| 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… |
|
|
222
225
|
| GET | `/api/bongos/copy-desk/queue` | `any-builder` | — | ------------------------------------------------------------------------- GET /copy-desk/queue — the artist's working list. |
|
|
223
226
|
| GET | `/api/bongos/copy-desk/strings` | `any-builder` | — | ------------------------------------------------------------------------- GET /copy-desk/strings — search the inventory, to find somethin… |
|
package/docs/file-map.md
CHANGED
|
@@ -131,7 +131,7 @@
|
|
|
131
131
|
│ ├── status-ui/ ← CORE-DOMAIN WEB-SURFACE carve (BV1.R84, default-on): the public status dashboard at status.<apex>, moved from public-status/. NO routes/db/port — declares contributes.webSurfaces:[{host:"status.",dir:"public"}], served by the loader web-surface seam (moduleWebSurfaces → serve-internal). CLAUDE.md, module.json, public/{index.html,status.js,style.css,cursors/,snapshots/}.
|
|
132
132
|
│ ├── hall-ui/ ← CORE-DOMAIN WEB-SURFACE carve (BV1.R85, default-on): the authenticated builders' hall at builders.<apex>, moved from public-builders/ (~13k LOC, the largest). NO routes/db/port — declares contributes.webSurfaces:[{host:"builders.",dir:"public"}] for discovery, but UNLIKE status-ui keeps its DEDICATED serving block in serve-internal (the /builders shim + canonical redirects + citizen/Archon page gates + asset-stamping + hall-widget injection), partitioned out of the generic web-surface loop and served from BUILDERS_DIR. CLAUDE.md, module.json, records/ (one file per page family — what each family's redesign settled; CLAUDE.md points at them, and a new record is a new file there so concurrent hall tasks stop colliding on one insertion point, task 1003499), public/{index.html,builders.js,style.css,work,watch,gate,settings,ranks,sessions,primer,diagrams,atlas,...}.{html,js},cursors/,chime.wav. Four ARCHETYPE sheets sit beside the per-page ones: `record.css` (the task + idea records, task 1003305), `room.css` (the READING ROOMS — the primer + the diagrams index, task 1003306: the reading measure and rhythm, the table of contents, the progress hairline and the framed figure diagram-viewer.js upgrades on both pages), `oversight.css` (the OVERSIGHT family — government, watch, gate, task 1003469 (harbor was its fourth until task 1003890 removed the dev box): the row, the figure band inside a panel, the group head, the inline form, the grant toggle and the shared confirm modal; named oversight because the vocabulary wall bans "governance" on the government surface) and `panel.css` (the PANEL family — settings, profile, task 1003308 (pair was its third until task 1003890 removed the dev box): the row, the switch, the field with its label above, the chip control, the four voices and the sign-in gate; the hall's my-projects page was DELETED in the same task — "my projects" is the hub's user-level page, and the hall keeps no link or redirect; the family's fourth page `not-ready.html` was deleted by task 1003450, along with the emptied `requireNonXenosPage` gate that was the only thing redirecting to it). A page sheet then holds only what one page has and the others do not — `primer.css` the acknowledge gate, `diagrams.css` the legend strip, `gate.css` the hold reasons and file chips, `watch.css` the severities, the report reader and the grade trend, `settings.css` the rail layout, the group head, the token ladder and the voices grid, `profile.css` the identity band and the shelf, `roster.css` the Builders roster's identity cell (was `people.css`, shared with the cross-project `/people` directory until task 1003444 deleted that page — `/people` and its legacy door `/scouting` now 302 to `/roster`), `thinking.css` THE SKY's one sheet (task 1004231 / sky part 3 — `thinking.html` at `/thinking` is the prototype the owner adopted as the design of record, `docs/design/mocks/sky/`, built over `GET /sky` + `GET /sky/mine`; its script is the seven `sky-*.js` files on one shared `window.OTBSky`; it replaced THE ROOM of task 1004098, which survives as the list drawer, and the old `/sky` page, whose URL 301s here; `idea-objects.js` beside it is the shared five-object vocabulary).
|
|
133
133
|
│ ├── lifecycle/ ← CORE-DOMAIN carve (BV1.R86, default-on): the build state machine — tasks · claims · versions · done-when · goals · dependencies · claim→ship→grade→credit · github-push + merge-lock + conflict-resolve + publish-reconciler. The LAST, most-coupled carve; registers the `lifecycle` kernel port (createTask, classifyTaskKind, tallyPeerVotes, work-tracking reads). CLAUDE.md, module.json, routes/{tasks,claims,versions,done-when,goals,dependencies,gate-approvals,analytics}.js, lifecycle.js, github-push.js, merge-lock.js, conflict-resolve.js, publish-reconciler.js, task-visuals.js + task-visual-db.js + routes/visuals.js (the optional ship-time visual, task 1003109 — the route file is NOT named task-*.js on purpose; see the module CLAUDE.md).
|
|
134
|
-
│ ├── copy-desk/ ← CORE-DOMAIN module (task 1003113 / R02 of goal 1000074, default-on): the COPY half of the design contract — ADR 0081 gave design TOKENS a repo-owned source of truth, text had none. Owns the FLAG (anyone in any role marks a string or a whole surface as needing an artist's attention, with a reason required in BOTH the route and a CHECK constraint) and the QUEUE an artist reads it from. READS R01's committed registry (docs/copy-registry.json, generated by scripts/gds/copy-inventory.js) and never writes it. NO LIVE CMS is the hard non-goal: no column here could hold replacement text, and copy_no_cms.mjs pins that. Key is `copy-desk`, not `copy` — the branding contract already owns a `copy` block, so the bare word reds the "core carries no module code" fitness check. R03 (task 1003114, ADR 0233) added the PROPOSAL: an artist writes the replacement wording and it becomes a Bongos task carrying a fenced copy-proposal patch — no row, NO second migration (a proposals table is the forbidden column with extra steps), and scripts/gds/copy-apply.js lands it as a real diff under a claim. BV2.TW05 (task 1004316, ADR 0341 D8) added Tweak Mode's three derived READS — GET /copy-desk/pages, /copy-desk/pages/:pageId, /copy-desk/tally: page status and count, changelog, drift, "N of M tweaked" per surface, and the artist's tally — over the page-tweak tasks (lifecycle port), docs/page-inventory.json and docs/page-readings.json (both now in the publish manifest), with no status table. CLAUDE.md, module.json, registry.js, flags.js, proposals.js, pages.js (the page-tweak block format), page-status.js (the pure derivation), page-data.js (the page artifacts' read side), routes/copy-desk.js, migrations/copy_desk_001_flags.sql, tests/{copy_flags,copy_queue,copy_no_cms,copy_proposals,copy_page_status}.mjs + tests/fixtures/page-tweak.cjs. Its hall surface lives with hall-ui (public/copy-desk.{html,js,css}), per the one-key-per-web-surface precedent.
|
|
134
|
+
│ ├── copy-desk/ ← CORE-DOMAIN module (task 1003113 / R02 of goal 1000074, default-on): the COPY half of the design contract — ADR 0081 gave design TOKENS a repo-owned source of truth, text had none. Owns the FLAG (anyone in any role marks a string or a whole surface as needing an artist's attention, with a reason required in BOTH the route and a CHECK constraint) and the QUEUE an artist reads it from. READS R01's committed registry (docs/copy-registry.json, generated by scripts/gds/copy-inventory.js) and never writes it. NO LIVE CMS is the hard non-goal: no column here could hold replacement text, and copy_no_cms.mjs pins that. Key is `copy-desk`, not `copy` — the branding contract already owns a `copy` block, so the bare word reds the "core carries no module code" fitness check. R03 (task 1003114, ADR 0233) added the PROPOSAL: an artist writes the replacement wording and it becomes a Bongos task carrying a fenced copy-proposal patch — no row, NO second migration (a proposals table is the forbidden column with extra steps), and scripts/gds/copy-apply.js lands it as a real diff under a claim. BV2.TW05 (task 1004316, ADR 0341 D8) added Tweak Mode's three derived READS — GET /copy-desk/pages, /copy-desk/pages/:pageId, /copy-desk/tally: page status and count, changelog, drift, "N of M tweaked" per surface, and the artist's tally — over the page-tweak tasks (lifecycle port), docs/page-inventory.json and docs/page-readings.json (both now in the publish manifest), with no status table. BV2.TW06 (task 1004317, ADR 0341 D2, D5, D6) added its first two page WRITES: POST /copy-desk/pages/:pageId/claim (an artist-craft builder opens or takes the page's tweak round as a web-claimed task, through the lifecycle port's webClaimPageTweak, under an advisory lock on the page) and POST /copy-desk/pages/:pageId/asks (anyone files a page ask, a copy_desk_flags row with scope 'page', added by copy_desk_002_page_asks.sql). CLAUDE.md, module.json, registry.js, flags.js, proposals.js, pages.js (the page-tweak block format), page-status.js (the pure derivation), page-data.js (the page artifacts' read side), routes/copy-desk.js, migrations/copy_desk_001_flags.sql, migrations/copy_desk_002_page_asks.sql, tests/{copy_flags,copy_queue,copy_no_cms,copy_proposals,copy_page_status}.mjs + tests/fixtures/page-tweak.cjs. Its hall surface lives with hall-ui (public/copy-desk.{html,js,css}), per the one-key-per-web-surface precedent.
|
|
135
135
|
│ ├── npm-release/ ← the deploy page for a project that publishes an npm package from GitHub (task 1002622, default-OFF — on only in the Bongos hall, which publishes @bongos/core). "Where the work is": every task finished in the last 14 days, placed in the stage it has actually reached (not merged · merged, no version yet · published, not running here · running here, not released · released · in no version), plus the version history — each version's tasks. The version↔task join reads the release-notes.json the package itself carries (scripts/gds/release-notes.js writes it at pack time), streamed out of the NEWEST version's npm tarball in-process (no child process, no sync call) when the running core's own copy stops short. module.json, work.js (the reading + the stage placement — the packument, tarball stream and tar reader it uses are the core's src/bongos/package-registry.js, reached through the doorway's readPackageRegistry since task 1004296), routes/work.js (GET /npm-release/work, gated core.pin.move like the page), public/work.{js,css} (the two sections /deploy lends it: #nr-work, #nr-versions). Task 1004301 added the same line on a task's own page: routes/task-where.js (GET /npm-release/task/:id, any signed-in builder — it shows nothing not already public) + public/task-widget.js, injected into task.html by the loader's uiSections seam (hallWidgetScripts file task-widget.js) to fill #task-contrib on otb:task-shown. Tests sit at the repo root — tests/npm_release_{work,page}.mjs — because a default-off module's own tests/ is skipped by the unit runner.
|
|
136
136
|
│ ├── ui-design/ ← CORE-DOMAIN module (task 1003324 / ADR 0197, default-on): the design capability every builder on every instance gets — ships METHOD, never a world. Absorbs ADR 0081's layer: adapters/{claude-design,figma}/index.js (moved from src/ui/adapters/), scripts/{design-sync,figma-design-sync,validate-design}.js (moved from scripts/gds/, which keeps thin shims), docs/design-contract.md (moved from docs/). Declaration-only: contributes.skills design (the /design playbook, new) + design-sync + figma-design-sync; no routes/port/migrations, so disabling it touches no served surface. CLAUDE.md separates the platform FLOORS (the Fifteen Rule, the dark twins, no page :root, the 24px floor, AA in both modes, the kill switch) from the instance's WORLD (its packs + DESIGN.md). kit/ (task 1003320) is the look-before-you-ship kit: lib.js (the floors, the states/probes contracts, the action + expectation vocabularies, the WCAG maths, the stub spawner), serve.js (any surface through the doorway's real transforms + fixtures/), render.js (states × 1440/390/320 × dark/light, audited), probe.js (PASS/FAIL contracts), check-mock.js (platform rules + the instance's DESIGN.md taste bans, then the detector), tells.js (task 1003329 / ADR 0223: the anti-pattern detector as two tiers — floors FAIL, craft tells WARN, kit-ignore waivers per file; the rendered twins live in lib.js factsInPage), contrast.js + png.js; a page's <page>.states.json / <page>.probes.json sit BESIDE the surface (modules/public-landing/public/, modules/hall-ui/public/). Recipe: docs/recipes/ui-look-before-you-ship.md. skills/ (task 1003321 / ADR 0198) is the vendoring policy: policy.json (licence allowlist, verdicts that may land, sidecar fields, preamble markers), PREAMBLE.md (the platform preamble every vendored SKILL.md opens with), README.md (the roster — both origins scanned dangerous on 2026-08-28, landed as rebuild specs; nothing vendored — and the landing recipe); a landable copy goes under skills/vendor/<name>/ with PROVENANCE.md + LICENSE and is materialised into an instance's .claude/skills/ by claude-materialize.js step 1b. skills/<name>/ (task 1003325 / ADR 0220) are the in-house rebuilds from the specs, first-party and counted: design-taste-frontend (the default taste skill), design-taste-frontend-v1 (the earlier generation, kept distinct), high-end-visual-design (the polish pass), redesign-existing-projects (the in-place upgrade); each opens with the same preamble and carries a "Rebuilt from" section instead of a sidecar. impeccable/ (task 1003326 / ADR 0221) is the design-craft method as ONE skill with sub-commands: SKILL.md (the router, the menu, the craft floor, the bounded finish) + reference/<sub-command>.md (eighteen playbooks, one loaded per request); no hooks, no bypass agent, no telemetry, no live server. minimalist-ui/, industrial-brutalist-ui/, gpt-taste/, stitch-design-taste/ (task 1003327 / ADR 0230) are the four looks, composition grammars with no colours of their own: the palette is the instance's pack and the texture is a named entry in styles/; a substrate is an archetype that still ships both modes, gpt-taste's selection is derived from the route rather than rolled, and stitch-design-taste writes a DESIGN.md-shaped contract document whose thirteen are transcribed from the pack. image-to-code/, imagegen-frontend-web/, imagegen-frontend-mobile/, brandkit/ (task 1003328 / ADR 0222) are the image family under the hero-only rule: plates and hero objects only, the pair (JPEG dark plate + WebP alpha cutout) with a <file>.json sidecar beside each, through the instance's art pipeline key; the grove specimen's styles/grove/assets/ is the worked example. style/ (task 1003475 / ADR 0231) is the module's first FIRST-PARTY skill (no upstream, so a `## First party` section instead of `## Rebuilt from`): the /style session in which an owner authors their own look in four bounded steps, rendering the nearest library entries before asking, drafting inside the contract, retuning by measurement, and handing over the one-step adoption without ever writing config/branding.json. styles/ (task 1003323 / ADR 0219) is the style library: <name>/pack.json (the theme.ui overlay, exactly the fifteen) + DESIGN.md (the look's derived recipes, thirteen in lockstep with the pack) + mock.html (the specimen); chrome-world (pinned to the neutral pack), expedition, grove, blueprint (the first cool look, authored through /style at task 1003475); STYLE=<name> on the kit lays a look over the instance's pack through GDS_BRANDING_FILE; tests/ui_design_styles.mjs runs the world/cosmos/hall token suites once per alternate (UI_DESIGN_PACK). config/design-tokens.* + design-sources.json STAY in config/ as the host boundary; public-landing keeps its own key (first customer, not owner).
|
|
137
137
|
│ ├── character-anim/ ← consistent-character generative animation (ADR 0088) — graded painterly frame sets + manifest, the otb-character-review skill. CLAUDE.md, module.json.
|
|
@@ -2603,5 +2603,9 @@ is load-bearing: the script throws rather than guess if it is missing, and
|
|
|
2603
2603
|
landed since 1.19.1056 with no explicit bump. run 36387147130. (task 1002620)
|
|
2604
2604
|
1.19.1058 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
|
|
2605
2605
|
landed since 1.19.1057 with no explicit bump. run 36390971623. (task 1002620)
|
|
2606
|
+
1.19.1059 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
|
|
2607
|
+
landed since 1.19.1058 with no explicit bump. run 36415558760. (task 1002620)
|
|
2608
|
+
1.19.1060 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
|
|
2609
|
+
landed since 1.19.1059 with no explicit bump. run 36418832327. (task 1002620)
|
|
2606
2610
|
---------------------------------------------------------------------------
|
|
2607
2611
|
```
|