@bongos/core 1.19.1064 → 1.19.1066

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.
Files changed (49) hide show
  1. package/.bongos-core.json +96 -46
  2. package/clients/bongos-client/README.md +1 -1
  3. package/clients/bongos-client/bongos-client.global.js +6 -0
  4. package/clients/bongos-client/index.cjs +6 -0
  5. package/clients/bongos-client/index.d.ts +11 -1
  6. package/clients/bongos-client/index.mjs +6 -0
  7. package/docs/adr/0341-the-page-is-the-unit-of-tweak-mode.md +1 -0
  8. package/docs/api/openapi.json +237 -4
  9. package/docs/api-reference.md +5 -2
  10. package/docs/branding-contract.md +1 -1
  11. package/docs/copy-inventory.md +60 -41
  12. package/docs/copy-registry.json +228 -47
  13. package/docs/module-api-changelog.md +4 -0
  14. package/docs/page-inventory.json +11 -2
  15. package/docs/page-readings.json +45 -22
  16. package/modules/copy-desk/page-decisions.js +71 -0
  17. package/modules/copy-desk/page-status.js +100 -2
  18. package/modules/copy-desk/pages.js +30 -0
  19. package/modules/copy-desk/routes/copy-desk.js +156 -2
  20. package/modules/copy-desk/tests/copy_no_cms.mjs +40 -4
  21. package/modules/economy/credits.js +77 -0
  22. package/modules/economy/reward-policy.js +7 -1
  23. package/modules/economy/reward.js +4 -0
  24. package/modules/hall-ui/public/approval-queue-lib.js +156 -0
  25. package/modules/hall-ui/public/approval-queue.css +286 -0
  26. package/modules/hall-ui/public/approval-queue.js +338 -0
  27. package/modules/hall-ui/public/studio.css +33 -0
  28. package/modules/hall-ui/public/studio.html +18 -1
  29. package/modules/hall-ui/public/studio.js +30 -0
  30. package/modules/hall-ui/public/studio.states.json +198 -0
  31. package/modules/hall-ui/records/approval-queue.md +32 -0
  32. package/modules/lifecycle/db-grade.js +80 -58
  33. package/modules/lifecycle/db-ship.js +14 -5
  34. package/modules/lifecycle/github-pr-close.js +41 -0
  35. package/modules/lifecycle/github-push.js +5 -2
  36. package/modules/lifecycle/lifecycle.js +12 -0
  37. package/modules/lifecycle/page-tweak-approve.js +242 -0
  38. package/modules/lifecycle/routes/gate-approvals.js +17 -2
  39. package/package-lock.json +2 -2
  40. package/package.json +1 -1
  41. package/release-notes.json +12 -0
  42. package/scripts/hall-preview/server.js +18 -0
  43. package/src/module-api.js +1 -1
  44. package/tests/artist_page_credit.mjs +272 -0
  45. package/tests/copy_desk_page_approve.mjs +307 -0
  46. package/tests/fixtures/page-ledger.mjs +41 -1
  47. package/tests/gate_approvals.mjs +93 -0
  48. package/tests/hall_approval_queue.mjs +327 -0
  49. package/tests/hall_audit.mjs +4 -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.1064",
6
- "core_contract": "1.19.1064",
7
- "source_commit": "4a2268b3adb3b7fc2f2a02e18f44b093bd9521ad",
5
+ "core_version": "1.19.1066",
6
+ "core_contract": "1.19.1066",
7
+ "source_commit": "75a6b51abf5c23eb683f15eb0d4f8a7387803a8f",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-09-28T15:12:17.421Z",
9
+ "built_at": "2026-09-28T16:56:08.158Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
- "docs_redacted": 545,
12
+ "docs_redacted": 546,
13
13
  "agent_docs_stubbed": 26,
14
- "functional_verbatim": 2548,
14
+ "functional_verbatim": 2557,
15
15
  "rules": 3,
16
16
  "gate_literals": 3,
17
17
  "gate": "passed"
18
18
  },
19
- "file_count": 3120,
20
- "tree_sha256": "91535cdce26563549612b84d47725ec9e311aceeb7f454140906f669eb1828da",
19
+ "file_count": 3130,
20
+ "tree_sha256": "2f41769464ed9567654e2b042a9946102caa4a0e4cdf1d9bf93ccee84aa79855",
21
21
  "files": [
22
22
  {
23
23
  "path": ".claude/skills/ask-for-help/SKILL.md",
@@ -322,12 +322,12 @@
322
322
  {
323
323
  "path": "clients/bongos-client/README.md",
324
324
  "mode": "0000644",
325
- "sha256": "acebc6442067f5791f70dba02ddbf13fcb0d52838f8eaa1b4f9a15753be6d107"
325
+ "sha256": "fb00c2f5b6df5eb888e4f19c30d94fc621292616ce34ff42b0709e1f46d3c393"
326
326
  },
327
327
  {
328
328
  "path": "clients/bongos-client/bongos-client.global.js",
329
329
  "mode": "0000644",
330
- "sha256": "eed9f450432045c97bf573a62a134be3511d3f19d0ba9d98606bcd89542684b0"
330
+ "sha256": "5a286a18ff11cd19728fdec144e8dae76c649784e160238a9102aac636d4af2e"
331
331
  },
332
332
  {
333
333
  "path": "clients/bongos-client/examples/hello-world.mjs",
@@ -337,17 +337,17 @@
337
337
  {
338
338
  "path": "clients/bongos-client/index.cjs",
339
339
  "mode": "0000644",
340
- "sha256": "011c065c0f5d36cf8f0e523daf88db34b6aef682875de6433472aae17248c88f"
340
+ "sha256": "fe4f030c5f79376100d3b67f4187b24907e92821eca1125155916a33dc855daa"
341
341
  },
342
342
  {
343
343
  "path": "clients/bongos-client/index.d.ts",
344
344
  "mode": "0000644",
345
- "sha256": "b022c09759c76e538d7217d780f169af42445394ef93c36d8ee64ec845eac6bf"
345
+ "sha256": "5d9915f3fc6fadca68a778c93e2cacfe739e7c23ce81e97b718e703e1249daac"
346
346
  },
347
347
  {
348
348
  "path": "clients/bongos-client/index.mjs",
349
349
  "mode": "0000644",
350
- "sha256": "ba64e23fdb0999b6d6bc143df8a35e9efbf1a7c59363429560d2a48c151c47e5"
350
+ "sha256": "d3833293ed31827e3884f6bcb310e4c9661e2b540de9d8903aebad044585a336"
351
351
  },
352
352
  {
353
353
  "path": "clients/bongos-client/package.json",
@@ -2172,7 +2172,7 @@
2172
2172
  {
2173
2173
  "path": "docs/adr/0341-the-page-is-the-unit-of-tweak-mode.md",
2174
2174
  "mode": "0000644",
2175
- "sha256": "ab4cefdfbe2505dabe75298a1f2ac98adee1dcbb205c3879d91813d242bdf60f"
2175
+ "sha256": "058c9eb62763fd8c0459277a7ab904010d79589027f8f4920dd6de6ad938dc3b"
2176
2176
  },
2177
2177
  {
2178
2178
  "path": "docs/adr/README.md",
@@ -2182,12 +2182,12 @@
2182
2182
  {
2183
2183
  "path": "docs/api-reference.md",
2184
2184
  "mode": "0000644",
2185
- "sha256": "a34f2760cbd848714a29bb88182f9389245bbf1948b29b5bff983b877d5726ea"
2185
+ "sha256": "b3429f16f723721cc25d839b751f8e2039d6bb9deb3cfcdeca5b4b982bc25c58"
2186
2186
  },
2187
2187
  {
2188
2188
  "path": "docs/api/openapi.json",
2189
2189
  "mode": "0000644",
2190
- "sha256": "42b64c512c4da177324911f644b17a3f39879bed5eac72da34c654c3e20b6fcd"
2190
+ "sha256": "db083c90b24ea9af3a3203600ea601ff570619dd20ce0228c045e3debcdda1c7"
2191
2191
  },
2192
2192
  {
2193
2193
  "path": "docs/architecture.md",
@@ -2197,7 +2197,7 @@
2197
2197
  {
2198
2198
  "path": "docs/branding-contract.md",
2199
2199
  "mode": "0000644",
2200
- "sha256": "ac14c9d29de36fdcc10553c603d9768e4dccd315a0815f6201439ee80e7177f2"
2200
+ "sha256": "40630abe085d54562abbeea3b8c046c03b4245363a2a37c4eea086940684e19f"
2201
2201
  },
2202
2202
  {
2203
2203
  "path": "docs/branding-fill-prompt.md",
@@ -2212,12 +2212,12 @@
2212
2212
  {
2213
2213
  "path": "docs/copy-inventory.md",
2214
2214
  "mode": "0000644",
2215
- "sha256": "0bfc5ea9c331d2797c45cbfaeec7e9b5e264c2feb692a2132ac3dd804d05ea15"
2215
+ "sha256": "a7ca7da1c59a34bb2262ab04592b5fb7e412357a7bfe4088a971ff1fa5a27436"
2216
2216
  },
2217
2217
  {
2218
2218
  "path": "docs/copy-registry.json",
2219
2219
  "mode": "0000644",
2220
- "sha256": "2a35ebbece01958ac642faf2a3680d724b3aa7d3179d690fd9583aaf53cf9cb3"
2220
+ "sha256": "99c1c632a879b69fc60ebcc56843d791dd9b25ec08d2de77140365237b077ccb"
2221
2221
  },
2222
2222
  {
2223
2223
  "path": "docs/design/apex-pass-2-direction.md",
@@ -2747,7 +2747,7 @@
2747
2747
  {
2748
2748
  "path": "docs/module-api-changelog.md",
2749
2749
  "mode": "0000644",
2750
- "sha256": "454cb832572f05ba13a9f8e6efcd0f37f504645a57f5e281c91638d2fe6c4a90"
2750
+ "sha256": "ea2d1bdda788f09e2665dd8a924c78e9618197b6e602ef1f2dfaddd96b8ca938"
2751
2751
  },
2752
2752
  {
2753
2753
  "path": "docs/modules-contract.md",
@@ -2837,12 +2837,12 @@
2837
2837
  {
2838
2838
  "path": "docs/page-inventory.json",
2839
2839
  "mode": "0000644",
2840
- "sha256": "27683df3ef3062442b5a2b3d0d814a2e0d4cfb0c666bf58b96af0f8f5c4bd97e"
2840
+ "sha256": "e50e191636ac7c7baa8ebebce6d93e550aae7a3de13bfdecedd779b17006ebe5"
2841
2841
  },
2842
2842
  {
2843
2843
  "path": "docs/page-readings.json",
2844
2844
  "mode": "0000644",
2845
- "sha256": "d5f8ac454357067ac14cb3550c9d12b2b04143e1e796facce51f0510900f0795"
2845
+ "sha256": "b3b0a741594ce218eca2dcaf25384d8c0db56745c759104bf043ad45925e5075"
2846
2846
  },
2847
2847
  {
2848
2848
  "path": "docs/project-context.template.md",
@@ -4144,15 +4144,20 @@
4144
4144
  "mode": "0000644",
4145
4145
  "sha256": "0233603cfe56b52380fe5470ed0062b742c2f67dc5ea40a7876d0d9d9c0c5085"
4146
4146
  },
4147
+ {
4148
+ "path": "modules/copy-desk/page-decisions.js",
4149
+ "mode": "0000644",
4150
+ "sha256": "b1c8258e9827b17cb5d0548f43cc746e2140ba4e67b9b22ec9fcfd97d584758a"
4151
+ },
4147
4152
  {
4148
4153
  "path": "modules/copy-desk/page-status.js",
4149
4154
  "mode": "0000644",
4150
- "sha256": "e54fe2358641ab6bf157f3a434131a48eda175309480fa402290d8d4e6a431d1"
4155
+ "sha256": "0b96c931e6e0f8a22a3c4de287f698b9f74a45183f1b4314f66b8dfe643d33f2"
4151
4156
  },
4152
4157
  {
4153
4158
  "path": "modules/copy-desk/pages.js",
4154
4159
  "mode": "0000644",
4155
- "sha256": "76141638d80c0f7ba2046fa84f4e1309e020f065ef39c893d77da04ff2a2da73"
4160
+ "sha256": "8653c26ad951f831163cb2b8db4b424c76959cdfcd27ebda5af5d13193361ad0"
4156
4161
  },
4157
4162
  {
4158
4163
  "path": "modules/copy-desk/proposals.js",
@@ -4167,7 +4172,7 @@
4167
4172
  {
4168
4173
  "path": "modules/copy-desk/routes/copy-desk.js",
4169
4174
  "mode": "0000644",
4170
- "sha256": "aab0b4221b092333ac6bc502d1bb45229410c270957025c8af20b4e33c776304"
4175
+ "sha256": "175a45af668fbe7405dddfba3ea922e0021dbd2d59dcfdfb6e947351c5bfcfe8"
4171
4176
  },
4172
4177
  {
4173
4178
  "path": "modules/copy-desk/tests/copy_docx.mjs",
@@ -4182,7 +4187,7 @@
4182
4187
  {
4183
4188
  "path": "modules/copy-desk/tests/copy_no_cms.mjs",
4184
4189
  "mode": "0000644",
4185
- "sha256": "7d4354fea2dc435e1783cdfbcb07024b40f732d700cbaf7764a79ef2d9f53456"
4190
+ "sha256": "68e3e04bc0330bfd86e895ace1f998e73591f3882e5e6bf15084556890e30d73"
4186
4191
  },
4187
4192
  {
4188
4193
  "path": "modules/copy-desk/tests/copy_page_draft.mjs",
@@ -4402,7 +4407,7 @@
4402
4407
  {
4403
4408
  "path": "modules/economy/credits.js",
4404
4409
  "mode": "0000644",
4405
- "sha256": "6b5700a6e1d7689496e93d5f1de9f9c32766842a389571135b4f3af950278ce0"
4410
+ "sha256": "f26603fecd1771d8286fc471f9c9c51ad96774b23967811de621bbf96dd482fc"
4406
4411
  },
4407
4412
  {
4408
4413
  "path": "modules/economy/idea-brightness.js",
@@ -4437,12 +4442,12 @@
4437
4442
  {
4438
4443
  "path": "modules/economy/reward-policy.js",
4439
4444
  "mode": "0000644",
4440
- "sha256": "817f400faa29aabcfdeb98eabeca45790203dff2dbca2ed01336d69078dd2be2"
4445
+ "sha256": "39b06cfa5ae58fce68633f6b2aef74eb9421bf3346cc54a0658b0186136551cf"
4441
4446
  },
4442
4447
  {
4443
4448
  "path": "modules/economy/reward.js",
4444
4449
  "mode": "0000644",
4445
- "sha256": "79f225665dfc84fce1c50d01a25bbf81986c91047732d04113f24a68f766d29a"
4450
+ "sha256": "4c54857aea9bc12c59e712410b0b98124d0274dece739bfbd844f52dc6ac6880"
4446
4451
  },
4447
4452
  {
4448
4453
  "path": "modules/economy/routes/cost.js",
@@ -4834,6 +4839,21 @@
4834
4839
  "mode": "0000644",
4835
4840
  "sha256": "d175874039e054abf211670908b33080438ffdf7d3a38b9f9a715c6d066fc21a"
4836
4841
  },
4842
+ {
4843
+ "path": "modules/hall-ui/public/approval-queue-lib.js",
4844
+ "mode": "0000644",
4845
+ "sha256": "72832795ac625a68df8cce268acf68be78a14532032fe23aa85b764930353026"
4846
+ },
4847
+ {
4848
+ "path": "modules/hall-ui/public/approval-queue.css",
4849
+ "mode": "0000644",
4850
+ "sha256": "d3ea53cf9b2354ce2097415e0cb8e1dd602bfbbc267691d462b2854e50ab4aec"
4851
+ },
4852
+ {
4853
+ "path": "modules/hall-ui/public/approval-queue.js",
4854
+ "mode": "0000644",
4855
+ "sha256": "47de327e4d9f369066c3f951e56f5c8d08d678f299e2279d8116d9493776262c"
4856
+ },
4837
4857
  {
4838
4858
  "path": "modules/hall-ui/public/atlas.css",
4839
4859
  "mode": "0000644",
@@ -5547,22 +5567,22 @@
5547
5567
  {
5548
5568
  "path": "modules/hall-ui/public/studio.css",
5549
5569
  "mode": "0000644",
5550
- "sha256": "6dccbf9dcdcef09851d0fe53a15e41e28d7909d67d131f1a7fcfe5db09d28417"
5570
+ "sha256": "5cd07aa4047e1886bbea78edce9419db4dae324088141d51e7a479418af33e85"
5551
5571
  },
5552
5572
  {
5553
5573
  "path": "modules/hall-ui/public/studio.html",
5554
5574
  "mode": "0000644",
5555
- "sha256": "fde371e37896066aa3965af83570c1622dded7a7b85613940b3eb4f816920ece"
5575
+ "sha256": "e364125e01631f8cce6c379bcdfda826d9b6a0af1efac015365eeac44f2de2bf"
5556
5576
  },
5557
5577
  {
5558
5578
  "path": "modules/hall-ui/public/studio.js",
5559
5579
  "mode": "0000644",
5560
- "sha256": "201e0b69b0be0ce88b85ee7404c2fe2d13b839b1ae5f44ddde65f6c22b73b975"
5580
+ "sha256": "a08061eab9759f667d3f164dc82fcfaab6f29738ca3f7bf912a53dac2068b7cd"
5561
5581
  },
5562
5582
  {
5563
5583
  "path": "modules/hall-ui/public/studio.states.json",
5564
5584
  "mode": "0000644",
5565
- "sha256": "e3be6c87f46b62b83336d860bc9678b07aeaac4945190ddcf48a049e3aeea18d"
5585
+ "sha256": "8212a0a0b6ac85add5b7736a0395a879682e7d6943f267bee6948f129e8a2654"
5566
5586
  },
5567
5587
  {
5568
5588
  "path": "modules/hall-ui/public/style.css",
@@ -5694,6 +5714,11 @@
5694
5714
  "mode": "0000644",
5695
5715
  "sha256": "786373b132587480ff58452286f950d246eae430f7531f0ccf4d01f290fdc435"
5696
5716
  },
5717
+ {
5718
+ "path": "modules/hall-ui/records/approval-queue.md",
5719
+ "mode": "0000644",
5720
+ "sha256": "ec7cc5302e39ca68a102dde351cb12f024ffbb423c0035c076bfb76e7066c677"
5721
+ },
5697
5722
  {
5698
5723
  "path": "modules/hall-ui/records/builders-roster.md",
5699
5724
  "mode": "0000644",
@@ -6047,7 +6072,7 @@
6047
6072
  {
6048
6073
  "path": "modules/lifecycle/db-grade.js",
6049
6074
  "mode": "0000644",
6050
- "sha256": "c8f07ab3ac6088c03b85b631628e93ed294b2284ec25460248effac78fe80ca0"
6075
+ "sha256": "fc7d9df0df448d208a2efd7dacee0b190dad5e798793fe53e826892ae415cf3e"
6051
6076
  },
6052
6077
  {
6053
6078
  "path": "modules/lifecycle/db-overrides.js",
@@ -6067,7 +6092,7 @@
6067
6092
  {
6068
6093
  "path": "modules/lifecycle/db-ship.js",
6069
6094
  "mode": "0000644",
6070
- "sha256": "a774d51dd8bc9d6b1e1bd52f9b0da0f240d0881ff2ab4218a2ffe7af56366fc6"
6095
+ "sha256": "7d43343a2db27ab3a281bb301cc2f3071698aa9a0b66b280b88fe348b7a61b16"
6071
6096
  },
6072
6097
  {
6073
6098
  "path": "modules/lifecycle/db-tasks.js",
@@ -6109,10 +6134,15 @@
6109
6134
  "mode": "0000644",
6110
6135
  "sha256": "70be81206f577910d250e70ed0841466bbe329691324156b5b15bb75abcd93d3"
6111
6136
  },
6137
+ {
6138
+ "path": "modules/lifecycle/github-pr-close.js",
6139
+ "mode": "0000644",
6140
+ "sha256": "0b4851ec3c891d522778b14833e2d5d8a53fc93eeb0436ce1a0f06865f020a8b"
6141
+ },
6112
6142
  {
6113
6143
  "path": "modules/lifecycle/github-push.js",
6114
6144
  "mode": "0000644",
6115
- "sha256": "84114ecaf06c6ac52b7d7e4b5eaff97086908d6f7df0a3e07e4be3aa923935bc"
6145
+ "sha256": "00f4e760c922bf0bd8ac7f3dde2f5195e1948e283d8aab651535382cce12dc22"
6116
6146
  },
6117
6147
  {
6118
6148
  "path": "modules/lifecycle/goal-advisory.js",
@@ -6187,7 +6217,7 @@
6187
6217
  {
6188
6218
  "path": "modules/lifecycle/lifecycle.js",
6189
6219
  "mode": "0000644",
6190
- "sha256": "8ed95b63975ec4aceb34ddeb31fa147194b38c26242530c83a5ed144214b5150"
6220
+ "sha256": "e0847d726c2e3a6b554c0c069912176c75cd4377c09eb376fd91dc6ce677b588"
6191
6221
  },
6192
6222
  {
6193
6223
  "path": "modules/lifecycle/merge-lock.js",
@@ -6269,6 +6299,11 @@
6269
6299
  "mode": "0000644",
6270
6300
  "sha256": "472161627fdeb33b628eb3d9b4d4d58eba13dc74dacee1f661fc79856496cff8"
6271
6301
  },
6302
+ {
6303
+ "path": "modules/lifecycle/page-tweak-approve.js",
6304
+ "mode": "0000644",
6305
+ "sha256": "ffd912f5d88e729f7d6cb86235737788b62deebde24551a21e349d164f24d0cf"
6306
+ },
6272
6307
  {
6273
6308
  "path": "modules/lifecycle/page-tweak-claim.js",
6274
6309
  "mode": "0000644",
@@ -6367,7 +6402,7 @@
6367
6402
  {
6368
6403
  "path": "modules/lifecycle/routes/gate-approvals.js",
6369
6404
  "mode": "0000644",
6370
- "sha256": "edc71d69d25fa1b4e01db5a02cbed235215ab59b6216699cd55d384237b1787d"
6405
+ "sha256": "474b9fa9e13a731f39ab15de74a75ee4878155eb2236d25b0f12011c1df99583"
6371
6406
  },
6372
6407
  {
6373
6408
  "path": "modules/lifecycle/routes/goal-route-authz.js",
@@ -8592,12 +8627,12 @@
8592
8627
  {
8593
8628
  "path": "package-lock.json",
8594
8629
  "mode": "0000644",
8595
- "sha256": "944076d2d68c56ab145d480f992d18e32ef80f2395d0945a2fca3a8099b273d0"
8630
+ "sha256": "dedef6af9441180d979a552db8177040fe36401288584d25a19af72bddb17785"
8596
8631
  },
8597
8632
  {
8598
8633
  "path": "package.json",
8599
8634
  "mode": "0000644",
8600
- "sha256": "e21816b43bd315e58c41026c064aba41957bf2001202b52382b6fa17675abcff"
8635
+ "sha256": "5351891c0be6644fc56740ac01c2c52d8fb7bc84b202b351cfb239f4b34dcff1"
8601
8636
  },
8602
8637
  {
8603
8638
  "path": "public-docs/index.html",
@@ -8617,7 +8652,7 @@
8617
8652
  {
8618
8653
  "path": "release-notes.json",
8619
8654
  "mode": "0000644",
8620
- "sha256": "b63b5af38cfc586570ada8ba36ca8bed7541541bb37923b2ff57b3c030f3bf07"
8655
+ "sha256": "08071a7100ca28392f74d548016d7cb2ed0e354b7d0d2bce1a0a9c565cea4f10"
8621
8656
  },
8622
8657
  {
8623
8658
  "path": "scripts/bongos-mcp.js",
@@ -10292,7 +10327,7 @@
10292
10327
  {
10293
10328
  "path": "scripts/hall-preview/server.js",
10294
10329
  "mode": "0000644",
10295
- "sha256": "1e1aa2e636b388c791eccd8c4bf8ad2b1365820594258579b945858fa1646831"
10330
+ "sha256": "9d5a86871bdde4ff12502a054b03c1113236cb2eeb0f32ddb431fd7840fa5704"
10296
10331
  },
10297
10332
  {
10298
10333
  "path": "scripts/hall-preview/task-visual.js",
@@ -10707,7 +10742,7 @@
10707
10742
  {
10708
10743
  "path": "src/module-api.js",
10709
10744
  "mode": "0000644",
10710
- "sha256": "e2f8f04fc10d0771e46b4849c7691ad103836400049e2852056d87b2d0d57ef0"
10745
+ "sha256": "45f6883c5bc140e80f36240647a5ab4ec0840a9967c504ea959f7eadb7257a1d"
10711
10746
  },
10712
10747
  {
10713
10748
  "path": "src/module-loader/catalog.js",
@@ -11034,6 +11069,11 @@
11034
11069
  "mode": "0000644",
11035
11070
  "sha256": "3337ab686f2fa4bef95d0eabcf9b134a9b919d40480750e07a500b8007ae9659"
11036
11071
  },
11072
+ {
11073
+ "path": "tests/artist_page_credit.mjs",
11074
+ "mode": "0000644",
11075
+ "sha256": "df3266f78209e0ca45fa9cc6be2b52bc299bfb4bf93dd360196054812166e5cc"
11076
+ },
11037
11077
  {
11038
11078
  "path": "tests/asset_version.mjs",
11039
11079
  "mode": "0000644",
@@ -11659,6 +11699,11 @@
11659
11699
  "mode": "0000644",
11660
11700
  "sha256": "739bbd623955742864ac712a5f119968ebac671c005054a07a8521c7770a929b"
11661
11701
  },
11702
+ {
11703
+ "path": "tests/copy_desk_page_approve.mjs",
11704
+ "mode": "0000644",
11705
+ "sha256": "a418493a633ce89aa0919d7f5f00c8e64eab79602036dc9d883a0c83861c3fbb"
11706
+ },
11662
11707
  {
11663
11708
  "path": "tests/copy_desk_page_claim.mjs",
11664
11709
  "mode": "0000644",
@@ -12172,7 +12217,7 @@
12172
12217
  {
12173
12218
  "path": "tests/fixtures/page-ledger.mjs",
12174
12219
  "mode": "0000644",
12175
- "sha256": "9087b5a76ddc3d11e5b7a8bf23ac56c824e763e63d302ac457d9515707f0c7a5"
12220
+ "sha256": "b3a9a8cb1f396760302b0b85e53ccca66145061002dabda1c1d94254a2ded399"
12176
12221
  },
12177
12222
  {
12178
12223
  "path": "tests/fixtures/session-506-digest.json",
@@ -12187,7 +12232,7 @@
12187
12232
  {
12188
12233
  "path": "tests/gate_approvals.mjs",
12189
12234
  "mode": "0000644",
12190
- "sha256": "d8c078b127386a55f2df18412b592b95e211d1e535ab09888ba3b6422bf8492b"
12235
+ "sha256": "56f4b5a90894a8cd1a390198a9155241c5ebced712145b07768e163fd5dfeb27"
12191
12236
  },
12192
12237
  {
12193
12238
  "path": "tests/gate_review.mjs",
@@ -12769,10 +12814,15 @@
12769
12814
  "mode": "0000644",
12770
12815
  "sha256": "f4d974c9fd565ff6b81f3a3183e2c933e93b35d731b87505513b32ddd3daf337"
12771
12816
  },
12817
+ {
12818
+ "path": "tests/hall_approval_queue.mjs",
12819
+ "mode": "0000644",
12820
+ "sha256": "a70fe8643bf0d32088ec9957b403518c84b8742e1c3f7b0b42b4852beec02fb2"
12821
+ },
12772
12822
  {
12773
12823
  "path": "tests/hall_audit.mjs",
12774
12824
  "mode": "0000644",
12775
- "sha256": "56a0822be45f279aa2be982ff17d405ac059a1db0199a3cf1febec20dd92c699"
12825
+ "sha256": "14d963a3bb9d30d14a619c65c6e7a32ace57cd6be2424c16f62062a7aeb1c034"
12776
12826
  },
12777
12827
  {
12778
12828
  "path": "tests/hall_board_world.mjs",
@@ -5,7 +5,7 @@ A **generated**, zero-dependency typed client for the Bongos API — produced fr
5
5
  by hand; it regenerates when the spec changes, so it can never drift from the routes.
6
6
 
7
7
  - API version: **v1** (served at `/api/bongos/v1`)
8
- - 457 operations across 68 resource groups
8
+ - 460 operations across 68 resource groups
9
9
 
10
10
  ## Use it from your project
11
11
 
@@ -339,6 +339,8 @@ function createClient(opts = {}) {
339
339
  getConnectionsSuggestions: (args) => request("GET", "/connections/suggestions", { hasBody: false }, args),
340
340
  },
341
341
  "copyDesk": {
342
+ // GET /copy-desk/approvals — rank: any-builder — GET /copy-desk/approvals
343
+ getCopyDeskApprovals: (args) => request("GET", "/copy-desk/approvals", { hasBody: false }, args),
342
344
  // POST /copy-desk/flags — rank: any-builder — POST /copy-desk/flags
343
345
  postCopyDeskFlags: (args) => request("POST", "/copy-desk/flags", { hasBody: true }, args),
344
346
  // POST /copy-desk/flags/{id}/close — rank: any-builder — POST /copy-desk/flags/:id/close
@@ -349,6 +351,8 @@ function createClient(opts = {}) {
349
351
  getCopyDeskPages: (args) => request("GET", "/copy-desk/pages", { hasBody: false }, args),
350
352
  // GET /copy-desk/pages/{pageId} — rank: any-builder — GET /copy-desk/pages/:pageId
351
353
  getCopyDeskPagesPageId: (args) => request("GET", "/copy-desk/pages/{pageId}", { hasBody: false }, args),
354
+ // POST /copy-desk/pages/{pageId}/approve — rank: any-builder — POST /copy-desk/pages/:pageId/approve
355
+ postCopyDeskPagesPageIdApprove: (args) => request("POST", "/copy-desk/pages/{pageId}/approve", { hasBody: true }, args),
352
356
  // POST /copy-desk/pages/{pageId}/asks — rank: any-builder — POST /copy-desk/pages/:pageId/asks
353
357
  postCopyDeskPagesPageIdAsks: (args) => request("POST", "/copy-desk/pages/{pageId}/asks", { hasBody: true }, args),
354
358
  // POST /copy-desk/pages/{pageId}/claim — rank: any-builder — POST /copy-desk/pages/:pageId/claim
@@ -361,6 +365,8 @@ function createClient(opts = {}) {
361
365
  getCopyDeskPagesPageIdDraftDocx: (args) => request("GET", "/copy-desk/pages/{pageId}/draft.docx", { hasBody: false }, args),
362
366
  // POST /copy-desk/pages/{pageId}/draft.docx — rank: any-builder — POST /copy-desk/pages/:pageId/draft.docx
363
367
  postCopyDeskPagesPageIdDraftDocx: (args) => request("POST", "/copy-desk/pages/{pageId}/draft.docx", { hasBody: true }, args),
368
+ // POST /copy-desk/pages/{pageId}/send-back — rank: any-builder — POST /copy-desk/pages/:pageId/send-back
369
+ postCopyDeskPagesPageIdSendBack: (args) => request("POST", "/copy-desk/pages/{pageId}/send-back", { hasBody: true }, args),
364
370
  // POST /copy-desk/pages/{pageId}/submit — rank: any-builder — POST /copy-desk/pages/:pageId/submit
365
371
  postCopyDeskPagesPageIdSubmit: (args) => request("POST", "/copy-desk/pages/{pageId}/submit", { hasBody: true }, args),
366
372
  // POST /copy-desk/proposals — rank: any-builder — POST /copy-desk/proposals
@@ -338,6 +338,8 @@ function createClient(opts = {}) {
338
338
  getConnectionsSuggestions: (args) => request("GET", "/connections/suggestions", { hasBody: false }, args),
339
339
  },
340
340
  "copyDesk": {
341
+ // GET /copy-desk/approvals — rank: any-builder — GET /copy-desk/approvals
342
+ getCopyDeskApprovals: (args) => request("GET", "/copy-desk/approvals", { hasBody: false }, args),
341
343
  // POST /copy-desk/flags — rank: any-builder — POST /copy-desk/flags
342
344
  postCopyDeskFlags: (args) => request("POST", "/copy-desk/flags", { hasBody: true }, args),
343
345
  // POST /copy-desk/flags/{id}/close — rank: any-builder — POST /copy-desk/flags/:id/close
@@ -348,6 +350,8 @@ function createClient(opts = {}) {
348
350
  getCopyDeskPages: (args) => request("GET", "/copy-desk/pages", { hasBody: false }, args),
349
351
  // GET /copy-desk/pages/{pageId} — rank: any-builder — GET /copy-desk/pages/:pageId
350
352
  getCopyDeskPagesPageId: (args) => request("GET", "/copy-desk/pages/{pageId}", { hasBody: false }, args),
353
+ // POST /copy-desk/pages/{pageId}/approve — rank: any-builder — POST /copy-desk/pages/:pageId/approve
354
+ postCopyDeskPagesPageIdApprove: (args) => request("POST", "/copy-desk/pages/{pageId}/approve", { hasBody: true }, args),
351
355
  // POST /copy-desk/pages/{pageId}/asks — rank: any-builder — POST /copy-desk/pages/:pageId/asks
352
356
  postCopyDeskPagesPageIdAsks: (args) => request("POST", "/copy-desk/pages/{pageId}/asks", { hasBody: true }, args),
353
357
  // POST /copy-desk/pages/{pageId}/claim — rank: any-builder — POST /copy-desk/pages/:pageId/claim
@@ -360,6 +364,8 @@ function createClient(opts = {}) {
360
364
  getCopyDeskPagesPageIdDraftDocx: (args) => request("GET", "/copy-desk/pages/{pageId}/draft.docx", { hasBody: false }, args),
361
365
  // POST /copy-desk/pages/{pageId}/draft.docx — rank: any-builder — POST /copy-desk/pages/:pageId/draft.docx
362
366
  postCopyDeskPagesPageIdDraftDocx: (args) => request("POST", "/copy-desk/pages/{pageId}/draft.docx", { hasBody: true }, args),
367
+ // POST /copy-desk/pages/{pageId}/send-back — rank: any-builder — POST /copy-desk/pages/:pageId/send-back
368
+ postCopyDeskPagesPageIdSendBack: (args) => request("POST", "/copy-desk/pages/{pageId}/send-back", { hasBody: true }, args),
363
369
  // POST /copy-desk/pages/{pageId}/submit — rank: any-builder — POST /copy-desk/pages/:pageId/submit
364
370
  postCopyDeskPagesPageIdSubmit: (args) => request("POST", "/copy-desk/pages/{pageId}/submit", { hasBody: true }, args),
365
371
  // POST /copy-desk/proposals — rank: any-builder — POST /copy-desk/proposals
@@ -299,8 +299,12 @@ export interface PostCopyDeskFlagsIdCloseRequest { status: string; resolution_no
299
299
  export interface PostCopyDeskFlagsIdCloseResponse { ok: boolean; flag: unknown }
300
300
  export interface PostCopyDeskFlagsRequest { scope?: string; surface: string; string_id?: string; reason: string; kind?: string }
301
301
  export interface PostCopyDeskFlagsResponse { ok: boolean; flag: unknown }
302
+ export interface PostCopyDeskPagesPageIdApproveRequest { task_id?: string }
303
+ export interface PostCopyDeskPagesPageIdApproveResponse { ok: boolean; outcome: unknown; page_id: unknown; round: unknown; status_after: unknown; land: unknown; next: unknown }
302
304
  export interface PostCopyDeskPagesPageIdAsksRequest { reason: string }
303
305
  export interface PostCopyDeskPagesPageIdDraftDocxResponse { ok: boolean; outcome: unknown; page_id: unknown; round: unknown; draft: unknown; counter: unknown; merge: unknown }
306
+ export interface PostCopyDeskPagesPageIdSendBackRequest { note: string; task_id?: string }
307
+ export interface PostCopyDeskPagesPageIdSendBackResponse { ok: boolean; outcome: unknown; page_id: unknown; round: unknown; sent_back: unknown; pr: unknown; next: unknown }
304
308
  export interface PostCopyDeskProposalsRequest { string_id: string; proposed_text: string; why: string; file?: string; line?: number; flag_id?: number }
305
309
  export interface PostCopyDeskProposalsResponse { ok: boolean; task: unknown; created: boolean; patch?: unknown }
306
310
  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 }
@@ -309,7 +313,7 @@ export interface PostDependenciesResponse { ok: boolean; dependency: unknown }
309
313
  export interface PostDiscordChannelsReconcileResponse { ok: boolean; applied: unknown; failed: unknown; total: unknown; warnings: unknown }
310
314
  export interface PostDoneWhenCriterionIdSatisfyRequest { satisfied_by_task_id?: number }
311
315
  export interface PostDoneWhenCriterionIdUnsatisfyResponse { criterion: unknown }
312
- export interface PostGateApprovalsPrApproveResponse { ok: boolean; pr: unknown; already_clear?: boolean; message: unknown; head_sha?: unknown; status_set?: boolean; recheck?: unknown }
316
+ export interface PostGateApprovalsPrApproveResponse { ok: boolean; pr: unknown; already_clear?: boolean; message: unknown; head_sha?: unknown; status_set?: boolean; recheck?: unknown; held_for_artist?: unknown }
313
317
  export interface PostGithubRepoVisibilityRequest { repo: string; visibility: "public" | "private" }
314
318
  export interface PostGithubRepoVisibilityResponse { ok: boolean; repo: unknown; private_deployable: boolean }
315
319
  export interface PostGithubReposRequest { name: string }
@@ -763,6 +767,8 @@ export interface BongosClient {
763
767
  getConnectionsSuggestions(args?: RequestArgs): Promise<GetConnectionsSuggestionsResponse>;
764
768
  };
765
769
  "copyDesk": {
770
+ /** GET /copy-desk/approvals — rank: any-builder */
771
+ getCopyDeskApprovals(args?: RequestArgs): Promise<ApiResponse>;
766
772
  /** POST /copy-desk/flags — rank: any-builder */
767
773
  postCopyDeskFlags(args: RequestArgs & { body: PostCopyDeskFlagsRequest }): Promise<PostCopyDeskFlagsResponse>;
768
774
  /** POST /copy-desk/flags/{id}/close — rank: any-builder */
@@ -773,6 +779,8 @@ export interface BongosClient {
773
779
  getCopyDeskPages(args?: RequestArgs): Promise<ApiResponse>;
774
780
  /** GET /copy-desk/pages/{pageId} — rank: any-builder */
775
781
  getCopyDeskPagesPageId(args?: RequestArgs): Promise<ApiResponse>;
782
+ /** POST /copy-desk/pages/{pageId}/approve — rank: any-builder */
783
+ postCopyDeskPagesPageIdApprove(args?: RequestArgs & { body?: PostCopyDeskPagesPageIdApproveRequest }): Promise<PostCopyDeskPagesPageIdApproveResponse>;
776
784
  /** POST /copy-desk/pages/{pageId}/asks — rank: any-builder */
777
785
  postCopyDeskPagesPageIdAsks(args: RequestArgs & { body: PostCopyDeskPagesPageIdAsksRequest }): Promise<ApiResponse>;
778
786
  /** POST /copy-desk/pages/{pageId}/claim — rank: any-builder */
@@ -785,6 +793,8 @@ export interface BongosClient {
785
793
  getCopyDeskPagesPageIdDraftDocx(args?: RequestArgs): Promise<ApiResponse>;
786
794
  /** POST /copy-desk/pages/{pageId}/draft.docx — rank: any-builder */
787
795
  postCopyDeskPagesPageIdDraftDocx(args?: RequestArgs): Promise<PostCopyDeskPagesPageIdDraftDocxResponse>;
796
+ /** POST /copy-desk/pages/{pageId}/send-back — rank: any-builder */
797
+ postCopyDeskPagesPageIdSendBack(args: RequestArgs & { body: PostCopyDeskPagesPageIdSendBackRequest }): Promise<PostCopyDeskPagesPageIdSendBackResponse>;
788
798
  /** POST /copy-desk/pages/{pageId}/submit — rank: any-builder */
789
799
  postCopyDeskPagesPageIdSubmit(args?: RequestArgs): Promise<ApiResponse>;
790
800
  /** POST /copy-desk/proposals — rank: any-builder */
@@ -335,6 +335,8 @@ export function createClient(opts = {}) {
335
335
  getConnectionsSuggestions: (args) => request("GET", "/connections/suggestions", { hasBody: false }, args),
336
336
  },
337
337
  "copyDesk": {
338
+ // GET /copy-desk/approvals — rank: any-builder — GET /copy-desk/approvals
339
+ getCopyDeskApprovals: (args) => request("GET", "/copy-desk/approvals", { hasBody: false }, args),
338
340
  // POST /copy-desk/flags — rank: any-builder — POST /copy-desk/flags
339
341
  postCopyDeskFlags: (args) => request("POST", "/copy-desk/flags", { hasBody: true }, args),
340
342
  // POST /copy-desk/flags/{id}/close — rank: any-builder — POST /copy-desk/flags/:id/close
@@ -345,6 +347,8 @@ export function createClient(opts = {}) {
345
347
  getCopyDeskPages: (args) => request("GET", "/copy-desk/pages", { hasBody: false }, args),
346
348
  // GET /copy-desk/pages/{pageId} — rank: any-builder — GET /copy-desk/pages/:pageId
347
349
  getCopyDeskPagesPageId: (args) => request("GET", "/copy-desk/pages/{pageId}", { hasBody: false }, args),
350
+ // POST /copy-desk/pages/{pageId}/approve — rank: any-builder — POST /copy-desk/pages/:pageId/approve
351
+ postCopyDeskPagesPageIdApprove: (args) => request("POST", "/copy-desk/pages/{pageId}/approve", { hasBody: true }, args),
348
352
  // POST /copy-desk/pages/{pageId}/asks — rank: any-builder — POST /copy-desk/pages/:pageId/asks
349
353
  postCopyDeskPagesPageIdAsks: (args) => request("POST", "/copy-desk/pages/{pageId}/asks", { hasBody: true }, args),
350
354
  // POST /copy-desk/pages/{pageId}/claim — rank: any-builder — POST /copy-desk/pages/:pageId/claim
@@ -357,6 +361,8 @@ export function createClient(opts = {}) {
357
361
  getCopyDeskPagesPageIdDraftDocx: (args) => request("GET", "/copy-desk/pages/{pageId}/draft.docx", { hasBody: false }, args),
358
362
  // POST /copy-desk/pages/{pageId}/draft.docx — rank: any-builder — POST /copy-desk/pages/:pageId/draft.docx
359
363
  postCopyDeskPagesPageIdDraftDocx: (args) => request("POST", "/copy-desk/pages/{pageId}/draft.docx", { hasBody: true }, args),
364
+ // POST /copy-desk/pages/{pageId}/send-back — rank: any-builder — POST /copy-desk/pages/:pageId/send-back
365
+ postCopyDeskPagesPageIdSendBack: (args) => request("POST", "/copy-desk/pages/{pageId}/send-back", { hasBody: true }, args),
360
366
  // POST /copy-desk/pages/{pageId}/submit — rank: any-builder — POST /copy-desk/pages/:pageId/submit
361
367
  postCopyDeskPagesPageIdSubmit: (args) => request("POST", "/copy-desk/pages/{pageId}/submit", { hasBody: true }, args),
362
368
  // POST /copy-desk/proposals — rank: any-builder — POST /copy-desk/proposals
@@ -141,6 +141,7 @@ An artist working in the studio runs no session, so stream 2 can never reach the
141
141
  - **The applier keeps its normal build reward** (the cost-plus session reward, on land, unchanged). **The shipper's per-task estimate is not paid on a page-tweak task**, because the artist lane takes that stream, so the total is conserved in both reward modes.
142
142
  - **Self-applied** (the artist also ran `/tweak`): one artist row plus their own session reward. Nothing is doubled.
143
143
  - The tally (D8) reads these rows.
144
+ - **As built** (task 1004324, BV2.TW13): `awardArtistPageCredit` in `modules/economy/credits.js`, called from `awardLandingCredit` in `modules/lifecycle/db-ship.js` in place of the estimate on a `page-tweak` task. The idempotency guard keys on `(task_id, reason)`, one payment per round, which is stricter than "(builder, reason)" and implies it, since a round has one payee. The row must read `shipped` in the ship transaction, so a sent-back round is never paid. A round with no web claim, or a zero priced value, books nothing.
144
145
 
145
146
  ### D11. The routes, in one place
146
147