@bongos/core 1.21.106 → 1.21.108

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 (50) hide show
  1. package/.bongos-core.json +72 -52
  2. package/.claude/skills/goal-create/SKILL.md +8 -3
  3. package/.claude/skills/idea-triage/SKILL.md +1 -1
  4. package/.claude/skills/planning-session/SKILL.md +6 -4
  5. package/clients/bongos-client/README.md +1 -1
  6. package/clients/bongos-client/bongos-client.global.js +4 -0
  7. package/clients/bongos-client/index.cjs +4 -0
  8. package/clients/bongos-client/index.d.ts +6 -1
  9. package/clients/bongos-client/index.mjs +4 -0
  10. package/docs/api/openapi.json +91 -2
  11. package/docs/api-reference.md +5 -3
  12. package/docs/copy-inventory.md +25 -19
  13. package/docs/copy-registry.json +92 -37
  14. package/docs/module-api-changelog.md +4 -0
  15. package/docs/page-readings.json +189 -188
  16. package/migrations/core_275_claims_auto_pickup.sql +24 -0
  17. package/modules/copy-desk/docx.js +27 -7
  18. package/modules/copy-desk/page-status.js +3 -1
  19. package/modules/copy-desk/pages.js +44 -5
  20. package/modules/copy-desk/routes/copy-desk.js +4 -3
  21. package/modules/copy-desk/tests/copy_docx.mjs +38 -0
  22. package/modules/copy-desk/tests/copy_page_draft.mjs +79 -0
  23. package/modules/government/decision-rules.js +1 -0
  24. package/modules/hall-ui/public/paintbrush.js +152 -12
  25. package/modules/hall-ui/public/studio.js +3 -1
  26. package/modules/hall-ui/public/style.css +16 -0
  27. package/modules/hall-ui/public/tweak-editor-lib.js +24 -12
  28. package/modules/hall-ui/records/craft-mode.md +5 -0
  29. package/modules/hall-ui/records/tweak-editor.md +1 -1
  30. package/modules/lifecycle/autopickup.js +94 -0
  31. package/modules/lifecycle/db-claims.js +18 -4
  32. package/modules/lifecycle/routes/claims.js +12 -1
  33. package/modules/lifecycle/routes/project-settings.js +59 -0
  34. package/package-lock.json +2 -2
  35. package/package.json +1 -1
  36. package/release-notes.json +16 -0
  37. package/scripts/gds/government-walk.js +1 -0
  38. package/scripts/gds/run-unit-tests.js +3 -0
  39. package/scripts/gds/seed-bv2-ideator-surface-tasks.js +12 -21
  40. package/scripts/gds/seed-verify-criteria.js +73 -18
  41. package/src/bongos/project-settings.js +79 -0
  42. package/src/module-api.js +8 -1
  43. package/tests/autopickup_cap.mjs +236 -0
  44. package/tests/autopickup_cap_db.mjs +115 -0
  45. package/tests/copy_desk_page_submit.mjs +36 -0
  46. package/tests/government_act_alone_buildings.mjs +1 -0
  47. package/tests/hall_tweak_editor.mjs +19 -3
  48. package/tests/paintbrush.mjs +151 -2
  49. package/tests/planning_session_skill.mjs +40 -0
  50. package/tests/seed_verify_criteria.mjs +130 -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.21.106",
6
- "core_contract": "1.21.106",
7
- "source_commit": "63d003496fef090a6f77e6cef260282c0cd52038",
5
+ "core_version": "1.21.108",
6
+ "core_contract": "1.21.108",
7
+ "source_commit": "4744afee212fe2a5c5bac890ee578bbaae7e3c5b",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-10-09T15:42:26.743Z",
9
+ "built_at": "2026-10-09T16:36:02.296Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
12
  "docs_redacted": 592,
13
13
  "agent_docs_stubbed": 28,
14
- "functional_verbatim": 3023,
14
+ "functional_verbatim": 3027,
15
15
  "rules": 3,
16
16
  "gate_literals": 3,
17
17
  "gate": "passed"
18
18
  },
19
- "file_count": 3644,
20
- "tree_sha256": "70321783d2b92a25ef3a8ab8844c5ef91e9d1f995c39890d61ef3a830c7731d2",
19
+ "file_count": 3648,
20
+ "tree_sha256": "62c2521f5de99bd666286fed934e1c0e7269d9b22a9953b772b54b1fa3a738e2",
21
21
  "files": [
22
22
  {
23
23
  "path": ".claude/skills/ask-for-help/SKILL.md",
@@ -152,7 +152,7 @@
152
152
  {
153
153
  "path": ".claude/skills/goal-create/SKILL.md",
154
154
  "mode": "0000644",
155
- "sha256": "db1878c912e45baea9bffef3e920ad95d7f9b4f0bc5d185805e9ab2d53a818e0"
155
+ "sha256": "5fb0e00c6d6d8f1d1cc87136dd0a42cfc9379ffc55b8b5bdbbd736541e50c299"
156
156
  },
157
157
  {
158
158
  "path": ".claude/skills/goal-review/SKILL.md",
@@ -187,7 +187,7 @@
187
187
  {
188
188
  "path": ".claude/skills/idea-triage/SKILL.md",
189
189
  "mode": "0000644",
190
- "sha256": "628a9880309ba370151becbebd7497972006716ec955d06bb51a79d335dbd54f"
190
+ "sha256": "c5698c6c3dbfed91186afde9297a165445269e9c9862f2b5c1908a0e2d6df5a1"
191
191
  },
192
192
  {
193
193
  "path": ".claude/skills/merge-mode/SKILL.md",
@@ -207,7 +207,7 @@
207
207
  {
208
208
  "path": ".claude/skills/planning-session/SKILL.md",
209
209
  "mode": "0000644",
210
- "sha256": "0447f0526aaf9735f47cb52fe7423914f8aba4cfbeb0f9b56fa49e0d4e5073fd"
210
+ "sha256": "07383a95bda58d86c833d963c421a9792b5fb879fa7fc75aba7b18b318e59b6e"
211
211
  },
212
212
  {
213
213
  "path": ".claude/skills/priority-session/SKILL.md",
@@ -317,12 +317,12 @@
317
317
  {
318
318
  "path": "clients/bongos-client/README.md",
319
319
  "mode": "0000644",
320
- "sha256": "be92a792c9e31d1e9ed27daa7100b4690d1daf3058696773faa5e027fa1217f9"
320
+ "sha256": "91c5efc7dccdd2f340a3614b34c2a2819abc13416e960b53d141f1813c1b99db"
321
321
  },
322
322
  {
323
323
  "path": "clients/bongos-client/bongos-client.global.js",
324
324
  "mode": "0000644",
325
- "sha256": "38ce1804582b7c52760bcef0165d8717b12c63ec07458e758c35cfb15cd825cd"
325
+ "sha256": "69e333da3eb4e9b56be940bcf96a8ea15c9b01743c7a1897a388ce9d12bb7808"
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": "9c53971b3f18dd7e4bc98e76259909bfc992a382bc6f8d1e771856ae88908aa9"
335
+ "sha256": "cbcff06b2e51bc07dc9bb86267a163edd59ea3a90410a2a7cf32f54689d6dc11"
336
336
  },
337
337
  {
338
338
  "path": "clients/bongos-client/index.d.ts",
339
339
  "mode": "0000644",
340
- "sha256": "eb0e60d817b14b4e301e0cf1356c2df5b4ee3064b28584cd54552a4db88bdd94"
340
+ "sha256": "87a3e5f52908abab175b07d614fcfe59ffa2e45905bb48d4aee760412cd571d2"
341
341
  },
342
342
  {
343
343
  "path": "clients/bongos-client/index.mjs",
344
344
  "mode": "0000644",
345
- "sha256": "04f464358035a3d57a7840319acce0012ec5585cab9393a9a8b7ada8dc08acd9"
345
+ "sha256": "151e3d04622f5ea4ed18e8994a1e0054250d9cd47dea2d4cc6757fa3430ed7a0"
346
346
  },
347
347
  {
348
348
  "path": "clients/bongos-client/package.json",
@@ -2327,12 +2327,12 @@
2327
2327
  {
2328
2328
  "path": "docs/api-reference.md",
2329
2329
  "mode": "0000644",
2330
- "sha256": "ed7f8d58d6d1524cc80208d6658723d77f78edc612315f7c8e81df8ff77639e6"
2330
+ "sha256": "2664221c9a2b16fde834338979647972cb2ff8d65e223a08edccd90b2427186f"
2331
2331
  },
2332
2332
  {
2333
2333
  "path": "docs/api/openapi.json",
2334
2334
  "mode": "0000644",
2335
- "sha256": "e1042de87b32e2c0c4846a1718776d3f9397555c765c1bcbc4d3f0c25df08c9c"
2335
+ "sha256": "5458c8e5fe23d697de50e4fd6317cb8868208e2e6026f6fa74c0f1a291ab586e"
2336
2336
  },
2337
2337
  {
2338
2338
  "path": "docs/architecture.md",
@@ -2357,12 +2357,12 @@
2357
2357
  {
2358
2358
  "path": "docs/copy-inventory.md",
2359
2359
  "mode": "0000644",
2360
- "sha256": "1c30d65d8133fa310b628a8749ee52746eefa37918c7ef6303202c9a67a8a941"
2360
+ "sha256": "1d38789dcf8ea53dfc188e72896d346c1324494ab9f80aec4fc2aeef3907766e"
2361
2361
  },
2362
2362
  {
2363
2363
  "path": "docs/copy-registry.json",
2364
2364
  "mode": "0000644",
2365
- "sha256": "b39bb4b05ed4bb5b4bca66e0f558849dcc7b9bca4c47b758f9ad81d05f368349"
2365
+ "sha256": "a93000df72e34c83bdf0ab43817a754f7db6f4d7dcdd6f436422426a2cc57a1f"
2366
2366
  },
2367
2367
  {
2368
2368
  "path": "docs/design/apex-pass-2-direction.md",
@@ -2872,7 +2872,7 @@
2872
2872
  {
2873
2873
  "path": "docs/module-api-changelog.md",
2874
2874
  "mode": "0000644",
2875
- "sha256": "d7a76048114891799ae8461ce0683d4de855db2173562647fa5085ad9d40c5b4"
2875
+ "sha256": "591ca6f09789a658cec2c0442d76fff5b80c3af4c620fb6b197499aa276d21fc"
2876
2876
  },
2877
2877
  {
2878
2878
  "path": "docs/modules-contract.md",
@@ -2962,7 +2962,7 @@
2962
2962
  {
2963
2963
  "path": "docs/page-readings.json",
2964
2964
  "mode": "0000644",
2965
- "sha256": "88302070d897c9a1745a99fd0a99e30ec16cdceb08db33dd7340a4bb6a157a27"
2965
+ "sha256": "b23bcbca4f4689129a3c589c867c7f9b6191ca855d9b458f34155f41531f47ce"
2966
2966
  },
2967
2967
  {
2968
2968
  "path": "docs/project-context.template.md",
@@ -4099,6 +4099,11 @@
4099
4099
  "mode": "0000644",
4100
4100
  "sha256": "48266ddb9168d1240029ecf6e69572010512dddc219d0f0cb4d6b373775752eb"
4101
4101
  },
4102
+ {
4103
+ "path": "migrations/core_275_claims_auto_pickup.sql",
4104
+ "mode": "0000644",
4105
+ "sha256": "75381af0ac96645f2f8fe254f609c75d2fa83bc2fc1f13887c23165fc8eed58e"
4106
+ },
4102
4107
  {
4103
4108
  "path": "modules/agents/CLAUDE.md",
4104
4109
  "mode": "0000644",
@@ -4362,7 +4367,7 @@
4362
4367
  {
4363
4368
  "path": "modules/copy-desk/docx.js",
4364
4369
  "mode": "0000644",
4365
- "sha256": "9b65f9fb493e63d86010f4a955a14a0b86e11dbfdb152f744aba8dcc37f870bd"
4370
+ "sha256": "06457c960bbb0e498990a6886a50c80df834c0829c2259023bdfa350e95ef18b"
4366
4371
  },
4367
4372
  {
4368
4373
  "path": "modules/copy-desk/flags.js",
@@ -4397,12 +4402,12 @@
4397
4402
  {
4398
4403
  "path": "modules/copy-desk/page-status.js",
4399
4404
  "mode": "0000644",
4400
- "sha256": "b31f8c94a4768bb690dd2e983b404c8bf022c33c343ee0d15747953359df9d36"
4405
+ "sha256": "b963858bb03b92e283ecc3fe7eae02caafeeac873edc1ff464dbc886695712b5"
4401
4406
  },
4402
4407
  {
4403
4408
  "path": "modules/copy-desk/pages.js",
4404
4409
  "mode": "0000644",
4405
- "sha256": "8653c26ad951f831163cb2b8db4b424c76959cdfcd27ebda5af5d13193361ad0"
4410
+ "sha256": "412dbbf26ccdaa3034f013ecace5e79fdb2adcdb2e0ab72148a2587329dc85b3"
4406
4411
  },
4407
4412
  {
4408
4413
  "path": "modules/copy-desk/proposals.js",
@@ -4422,7 +4427,7 @@
4422
4427
  {
4423
4428
  "path": "modules/copy-desk/routes/copy-desk.js",
4424
4429
  "mode": "0000644",
4425
- "sha256": "b54ec33524894db892f81aa57d6feec568af3feea2d06b6dd85df0a1894ae256"
4430
+ "sha256": "ad80a629d5f65dd9d0f01d5bb144a7eac6cff907ee00906a79b9f364c014b51d"
4426
4431
  },
4427
4432
  {
4428
4433
  "path": "modules/copy-desk/skills/tweak/SKILL.md",
@@ -4432,7 +4437,7 @@
4432
4437
  {
4433
4438
  "path": "modules/copy-desk/tests/copy_docx.mjs",
4434
4439
  "mode": "0000644",
4435
- "sha256": "79b0ec372109f3f484f02b0bf3d6d9323eb06262c57c3270cd5396404ea1ee27"
4440
+ "sha256": "8fbbf4fb118eb0d2422a3073cb7b5bffcfbf41e308ac293b0e8770cf349f2e50"
4436
4441
  },
4437
4442
  {
4438
4443
  "path": "modules/copy-desk/tests/copy_flags.mjs",
@@ -4447,7 +4452,7 @@
4447
4452
  {
4448
4453
  "path": "modules/copy-desk/tests/copy_page_draft.mjs",
4449
4454
  "mode": "0000644",
4450
- "sha256": "7bae773b6f8e3c4d5dced4d689237f59d421fc34f9d6c809d50e81f610e9eafb"
4455
+ "sha256": "7dfd56688ebd3611b88dacd35da58bc34db9329670937a7da1d64b4e19a9d979"
4451
4456
  },
4452
4457
  {
4453
4458
  "path": "modules/copy-desk/tests/copy_page_next.mjs",
@@ -4947,7 +4952,7 @@
4947
4952
  {
4948
4953
  "path": "modules/government/decision-rules.js",
4949
4954
  "mode": "0000644",
4950
- "sha256": "942304d1b77cc7f428a5f4f2462e28a96accc23de2e081ba7c62d9a8a61f44cf"
4955
+ "sha256": "7e0191b9b20cdbf2f74f6149235b53bb9f4fb9167507c742d8bedc477610c4f4"
4951
4956
  },
4952
4957
  {
4953
4958
  "path": "modules/government/docket-floors.js",
@@ -5972,7 +5977,7 @@
5972
5977
  {
5973
5978
  "path": "modules/hall-ui/public/paintbrush.js",
5974
5979
  "mode": "0000644",
5975
- "sha256": "da8f7ff290647b1b50ee6e7061c01fa03d3be2883f3054add6fb2aa9767179a7"
5980
+ "sha256": "6b55647a30b321705a5ef932bdc68175262c0e891d9239615617aa8a9c3d5c99"
5976
5981
  },
5977
5982
  {
5978
5983
  "path": "modules/hall-ui/public/palette.js",
@@ -6337,7 +6342,7 @@
6337
6342
  {
6338
6343
  "path": "modules/hall-ui/public/studio.js",
6339
6344
  "mode": "0000644",
6340
- "sha256": "f3a9fa920f732bddf245148c4faff10a52e88724b33800ae440b37e9aa1cd1da"
6345
+ "sha256": "3b3ce62f0d41d21be2cf073f03f8d3e860fb025d1b1a286589405df9b233106e"
6341
6346
  },
6342
6347
  {
6343
6348
  "path": "modules/hall-ui/public/studio.states.json",
@@ -6347,7 +6352,7 @@
6347
6352
  {
6348
6353
  "path": "modules/hall-ui/public/style.css",
6349
6354
  "mode": "0000644",
6350
- "sha256": "a06426f48327bfabe9222ed24fcd55eb0897473cb578c30e10cbd53a069f98c9"
6355
+ "sha256": "ed3c2a242d279e61bfe11e8c4218f72fac2227ced9b5bdc1211b21e2720d860f"
6351
6356
  },
6352
6357
  {
6353
6358
  "path": "modules/hall-ui/public/task-detail.js",
@@ -6407,7 +6412,7 @@
6407
6412
  {
6408
6413
  "path": "modules/hall-ui/public/tweak-editor-lib.js",
6409
6414
  "mode": "0000644",
6410
- "sha256": "0cc42c06e988b9d54d4443023d92c56b2fef8779823560735265c1e0f1a45ab7"
6415
+ "sha256": "2edf90d8c1664bdc774d2af9758d5e504621d244a35194e8b8d1a367bf85f244"
6411
6416
  },
6412
6417
  {
6413
6418
  "path": "modules/hall-ui/public/tweak-editor.css",
@@ -6507,7 +6512,7 @@
6507
6512
  {
6508
6513
  "path": "modules/hall-ui/records/craft-mode.md",
6509
6514
  "mode": "0000644",
6510
- "sha256": "e8a9cae9a79fd1ec44d0d66e4fe9f31dab25497acbfa863e68f1a6b52f68ba64"
6515
+ "sha256": "1d4499e1dde2b7f4d88e621a47b164e913ab99878ccf73c7d3398f231cf70bfe"
6511
6516
  },
6512
6517
  {
6513
6518
  "path": "modules/hall-ui/records/filter-views.md",
@@ -6602,7 +6607,7 @@
6602
6607
  {
6603
6608
  "path": "modules/hall-ui/records/tweak-editor.md",
6604
6609
  "mode": "0000644",
6605
- "sha256": "6667b86da5c9e9259c047254866ee69f4b281ba3a941117eab7106a9f4aec513"
6610
+ "sha256": "0f991a75a272d533911072acb4cc87d618c352eb39b4d14307257db041b66ec3"
6606
6611
  },
6607
6612
  {
6608
6613
  "path": "modules/ideas/CLAUDE.md",
@@ -6824,6 +6829,11 @@
6824
6829
  "mode": "0000644",
6825
6830
  "sha256": "e7c7db8a6faf50f3b75cb26ac33caa8357c462293e64318212ace69b0b654507"
6826
6831
  },
6832
+ {
6833
+ "path": "modules/lifecycle/autopickup.js",
6834
+ "mode": "0000644",
6835
+ "sha256": "e1a135cd31cff98754c3d9eab3c1d8f5e77a18b19b0e6ba6687b58babab4ce49"
6836
+ },
6827
6837
  {
6828
6838
  "path": "modules/lifecycle/cascade.js",
6829
6839
  "mode": "0000644",
@@ -6897,7 +6907,7 @@
6897
6907
  {
6898
6908
  "path": "modules/lifecycle/db-claims.js",
6899
6909
  "mode": "0000644",
6900
- "sha256": "56e718a165a9f3d126efc91128bd5e41a2bb490e584f35db4a271020f2903a42"
6910
+ "sha256": "bfdaf979059f10ff3d2f94d5d7f9d7fa377f1a2756967c84f7008fb1b68c83eb"
6901
6911
  },
6902
6912
  {
6903
6913
  "path": "modules/lifecycle/db-deps-criteria.js",
@@ -7297,7 +7307,7 @@
7297
7307
  {
7298
7308
  "path": "modules/lifecycle/routes/claims.js",
7299
7309
  "mode": "0000644",
7300
- "sha256": "08003dc8a2c691a74a6279c17980d21a2406eb302da7546b332083038fcf279e"
7310
+ "sha256": "6b872458c5d872cc84f48b173cb4480da73223c8f3284df886dbf4acb0837467"
7301
7311
  },
7302
7312
  {
7303
7313
  "path": "modules/lifecycle/routes/closeness.js",
@@ -7372,7 +7382,7 @@
7372
7382
  {
7373
7383
  "path": "modules/lifecycle/routes/project-settings.js",
7374
7384
  "mode": "0000644",
7375
- "sha256": "e892c118488d028f5a0203b5560fb8efa0047e2a4bbac9faafe5ee2132027c54"
7385
+ "sha256": "779b4865cb7792b1d03661d1b6212d9e99aa0691a79664f4bd923a6a5777d5e5"
7376
7386
  },
7377
7387
  {
7378
7388
  "path": "modules/lifecycle/routes/recommendations.js",
@@ -10147,12 +10157,12 @@
10147
10157
  {
10148
10158
  "path": "package-lock.json",
10149
10159
  "mode": "0000644",
10150
- "sha256": "67552216995dcf69136a5e6918b5cf8d96d7832af82448473c6f03099d3d72a8"
10160
+ "sha256": "6a7262e960db14a5a541c0735d0f41d9e5f436e0c434a6fd77dd01e177e6fb34"
10151
10161
  },
10152
10162
  {
10153
10163
  "path": "package.json",
10154
10164
  "mode": "0000644",
10155
- "sha256": "3a8dfeed7453004aea1343f0b269db0bb7a2d0ac5269b2f7dc42b60e341e45ef"
10165
+ "sha256": "bd46dfa1e2c3169155d64d561b31e229137c85c66271ac2f0003ab47bedffdcd"
10156
10166
  },
10157
10167
  {
10158
10168
  "path": "public-docs/index.html",
@@ -10172,7 +10182,7 @@
10172
10182
  {
10173
10183
  "path": "release-notes.json",
10174
10184
  "mode": "0000644",
10175
- "sha256": "6a3928b97650616ec0cf2c742e1b596a32ea7e32e7cc9117f59221ddcee75680"
10185
+ "sha256": "71cdec4456ab1476dce44818b9d3f10cee7c0a8a8d67ad70c1adfc96debcf47b"
10176
10186
  },
10177
10187
  {
10178
10188
  "path": "scripts/cron/style_guide_audit.sh",
@@ -10857,7 +10867,7 @@
10857
10867
  {
10858
10868
  "path": "scripts/gds/government-walk.js",
10859
10869
  "mode": "0000644",
10860
- "sha256": "f7a6091ce0621fdfdf69f667e44e52aaf96f6a1222f52f9e5730ff003e162383"
10870
+ "sha256": "c456509abfc61709bb1613a63493312560014e236ca12a5f022c4cec9e6ad832"
10861
10871
  },
10862
10872
  {
10863
10873
  "path": "scripts/gds/grade-correlation-audit.js",
@@ -11397,7 +11407,7 @@
11397
11407
  {
11398
11408
  "path": "scripts/gds/run-unit-tests.js",
11399
11409
  "mode": "0000644",
11400
- "sha256": "22dfb39178515162ef7c4f9be943d5b4f520925e8f401a2e38394d363f503173"
11410
+ "sha256": "e9324b2fe5b23acb8b45723ba7d11d708cbdf92b63e70d0387246eb6fd1a5ac9"
11401
11411
  },
11402
11412
  {
11403
11413
  "path": "scripts/gds/runner-drift.js",
@@ -11522,7 +11532,7 @@
11522
11532
  {
11523
11533
  "path": "scripts/gds/seed-bv2-ideator-surface-tasks.js",
11524
11534
  "mode": "0000644",
11525
- "sha256": "1e74a2b1582922bbab8be30e62f8276f9d22e69d42210783940abcfcb618c603"
11535
+ "sha256": "e85983f4c59b88674758ea6dc3b074ddbb900c86734038989dfea6b53b46a18d"
11526
11536
  },
11527
11537
  {
11528
11538
  "path": "scripts/gds/seed-bv2-tweak-mode-tasks.js",
@@ -11582,7 +11592,7 @@
11582
11592
  {
11583
11593
  "path": "scripts/gds/seed-verify-criteria.js",
11584
11594
  "mode": "0000644",
11585
- "sha256": "928c4c9b9c6e6925b9870baebc86328f9cb66d2cc3385b01bd46942b786ba0d8"
11595
+ "sha256": "d6300f04b48fcb3abfe1c7b102a3f3180b0afd7eb0bac44b31d503514611542e"
11586
11596
  },
11587
11597
  {
11588
11598
  "path": "scripts/gds/sequence.js",
@@ -12267,7 +12277,7 @@
12267
12277
  {
12268
12278
  "path": "src/bongos/project-settings.js",
12269
12279
  "mode": "0000644",
12270
- "sha256": "7b7911f4a301926fa6227cfddab7d5aac41eb79cd3487625c90c3adfb1b46b2b"
12280
+ "sha256": "4a8235d9a6b6dbd4dd876bc8681074fa9dfad36c6ca2f620012b89c27083e910"
12271
12281
  },
12272
12282
  {
12273
12283
  "path": "src/bongos/repo-info.js",
@@ -12447,7 +12457,7 @@
12447
12457
  {
12448
12458
  "path": "src/module-api.js",
12449
12459
  "mode": "0000644",
12450
- "sha256": "c67059298f9da4994aa855a30dbe99fbabf1d246732bb26614a0d2c4af43357c"
12460
+ "sha256": "f208a278069baf39f28e39ddc85193af5cda7d17095dfe1edbbb89f2e7568350"
12451
12461
  },
12452
12462
  {
12453
12463
  "path": "src/module-loader/catalog.js",
@@ -12989,6 +12999,16 @@
12989
12999
  "mode": "0000644",
12990
13000
  "sha256": "1c1c7b862d134033ef8cdfef8288f989be6a25c25dade657c5b57e4f1bd2c46c"
12991
13001
  },
13002
+ {
13003
+ "path": "tests/autopickup_cap.mjs",
13004
+ "mode": "0000644",
13005
+ "sha256": "c447ac65b59cd60ed0924cf95ce50d56d745fd42d5ad48e468387707ff01188a"
13006
+ },
13007
+ {
13008
+ "path": "tests/autopickup_cap_db.mjs",
13009
+ "mode": "0000644",
13010
+ "sha256": "23833e26b2424ad58e6af3b4bec8c67f938d413b232cde7f2e58b97cf6ec210d"
13011
+ },
12992
13012
  {
12993
13013
  "path": "tests/backfill_sessions.mjs",
12994
13014
  "mode": "0000644",
@@ -13417,7 +13437,7 @@
13417
13437
  {
13418
13438
  "path": "tests/copy_desk_page_submit.mjs",
13419
13439
  "mode": "0000644",
13420
- "sha256": "c77d8c60449bad805d048ec78e43169b5ec87283a3f91e29edba9e88352f4c51"
13440
+ "sha256": "5c1267b5426a49b453039cd4e02a9d5acda823dde58a4116398d44a644e69653"
13421
13441
  },
13422
13442
  {
13423
13443
  "path": "tests/copy_inventory.mjs",
@@ -14362,7 +14382,7 @@
14362
14382
  {
14363
14383
  "path": "tests/government_act_alone_buildings.mjs",
14364
14384
  "mode": "0000644",
14365
- "sha256": "22ee46f430e4443cb4946aa27608a442c23599c338602b70f0de602635257f77"
14385
+ "sha256": "c2760e6d0d830de8178bca5a3eead05a799290d241451b5d4a15afbbdc4a4de2"
14366
14386
  },
14367
14387
  {
14368
14388
  "path": "tests/government_board_amendment.mjs",
@@ -14987,7 +15007,7 @@
14987
15007
  {
14988
15008
  "path": "tests/hall_tweak_editor.mjs",
14989
15009
  "mode": "0000644",
14990
- "sha256": "32164a5039c5989e25ff1c6dac77a9cb2d55daa3879fb638aa9b991e9cce5a84"
15010
+ "sha256": "98adbded73abf08ac1a0267f38e668c0bcccc55c35c90161f480754ed8d43a22"
14991
15011
  },
14992
15012
  {
14993
15013
  "path": "tests/handle_machinery.mjs",
@@ -16162,7 +16182,7 @@
16162
16182
  {
16163
16183
  "path": "tests/paintbrush.mjs",
16164
16184
  "mode": "0000644",
16165
- "sha256": "62e61d65d297b32168a3c7a11eff496c2c1ecab55ed29a7ae8b27f5cae53ccb8"
16185
+ "sha256": "0d5f6cfcdd842e90a0b258e49b12d722ddf9df186d741846ac8d3c964bfd448a"
16166
16186
  },
16167
16187
  {
16168
16188
  "path": "tests/parallel-load.mjs",
@@ -16232,7 +16252,7 @@
16232
16252
  {
16233
16253
  "path": "tests/planning_session_skill.mjs",
16234
16254
  "mode": "0000644",
16235
- "sha256": "8116334efbc40954c00137f5945f0eab89178b24bd6bb8f49e88381223b9a17f"
16255
+ "sha256": "05bf5a11c0cb334d5da1b14f976f9e8ed8459ffec609f418c752ad72d87b7345"
16236
16256
  },
16237
16257
  {
16238
16258
  "path": "tests/platform_boot.mjs",
@@ -17157,7 +17177,7 @@
17157
17177
  {
17158
17178
  "path": "tests/seed_verify_criteria.mjs",
17159
17179
  "mode": "0000644",
17160
- "sha256": "3e0cc665466d81bf51477b5461ea1e4b9f4d8d992fc36222fba76f4b96041ce8"
17180
+ "sha256": "b23270ac3c7d530a781337e49c0871cbd4ba6fde584774ef65435527edca48de"
17161
17181
  },
17162
17182
  {
17163
17183
  "path": "tests/sequence.mjs",
@@ -124,9 +124,14 @@ node scripts/gds/api.js POST /api/bongos/tasks --body-file <path-to-task.json>
124
124
  # 5d — dependency edges, only where a real gate exists.
125
125
  node scripts/gds/api.js POST /api/bongos/tasks/<id>/dependencies --body '{"depends_on_task_id":<id>}' # ids only
126
126
 
127
- # 5e — promote the zero-dependency layer. Every new task lands status='backlog', and
128
- # auto-promotion only fires when a DEPENDENCY ships — so a task with no deps would
129
- # sit unclaimable forever. Leave spikes in backlog.
127
+ # 5e — check, then promote only what is still waiting. POST /tasks answers 'backlog',
128
+ # but the reconciler's backlog sweep moves a task with no unshipped dependency to
129
+ # 'ready' within about a minute (task 1003932), so most are already there. Re-read
130
+ # the statuses; promote only a non-spike still at 'backlog' (an already-ready one
131
+ # answers 409 cannot_promote). 'ready' is not 'claimable': the claim-time
132
+ # dependency gate refuses a task whose dependency is unshipped, whatever its status
133
+ # (task 1004668). Leave spikes in backlog.
134
+ node scripts/gds/api.js GET "/api/bongos/tasks?goal_id=<gid>"
130
135
  node scripts/gds/api.js POST /api/bongos/tasks/<id>/promote
131
136
 
132
137
  # 6 — verify + report.
@@ -223,7 +223,7 @@ at the triage end, where the judgement is.)
223
223
 
224
224
  **Promote → pick the tier (BV1.R64 / ADR 0086).** An idea no longer only becomes a *task* — it can promote into any tier of the work hierarchy: a **goal** (a whole module-scoped workspace), a **criterion** (a new done-when test), or a **task** (a single unit of work). Choose by the idea's size: a broad objective → goal; a "we should also require X to be done" → criterion; a concrete piece of work → task. Frame the choice to the user in those terms, then create the right record and mark the idea promoted.
225
225
 
226
- - **Promote → task** (the common case). Ask for version, title, est_minutes, priority, credits_reward (`touches[]` optional — [ADR 0049](../../../docs/adr/0049-split-parallel-safety-contract.md)). `POST /api/bongos/tasks` lands the new task in `backlog`, **not** `active` — it still needs `POST /tasks/:id/promote` (Metic+) before it's claimable. **Pass `goal_id` on the create** so the task lands in a real goal rather than the version's `"<version> — general"` catch-all — `POST /tasks` has accepted it since task 1763, and the 201 now returns a `goal_advisory` when the task ends up with no proper home. If no existing goal fits, run [`/goal-create`](../goal-create/SKILL.md) instead of filing it loose.
226
+ - **Promote → task** (the common case). Ask for version, title, est_minutes, priority, credits_reward (`touches[]` optional — [ADR 0049](../../../docs/adr/0049-split-parallel-safety-contract.md)). `POST /api/bongos/tasks` answers `backlog`, but a new task with no unshipped dependency and no open blocker is **auto-promoted to `ready` within about a minute** by the reconciler's backlog sweep (task 1003932) — so do not tell the owner it is waiting for their go. **Re-read its status after creating** (`GET /tasks/<id>`) and `POST /tasks/:id/promote` (Metic+) only the ones still at `backlog`; promoting one already at `ready` answers `409 cannot_promote` (task 1004668: all 15 tasks from one triage hit that). **Pass `goal_id` on the create** so the task lands in a real goal rather than the version's `"<version> — general"` catch-all — `POST /tasks` has accepted it since task 1763, and the 201 now returns a `goal_advisory` when the task ends up with no proper home. If no existing goal fits, run [`/goal-create`](../goal-create/SKILL.md) instead of filing it loose.
227
227
 
228
228
  ```
229
229
  # 1. Create the task (--body-file avoids shell-quoting the touches[]/description).
@@ -301,13 +301,15 @@ Once the spec is finalized (Phase 4), **read `docs/specs/<ver>-<goal-slug>.md` a
301
301
 
302
302
  > **Seeding contract — validated on goal 1000045 (2026-07-16):** proof-tasks use `kind='verify'` (a deliverable that IS a verification; can't be prematurely confirmed), spikes `kind='spike'`; `POST /tasks` accepts `criterion_ids` + `goal_id` inline and disciplines include `ui`; there is **no `promoted_idea_id`** field on `POST /tasks` — mark a promoted idea via `PATCH /inbox/:id`; **descoping a criterion has no API** (done-when is create/satisfy/unsatisfy only) — remove the row via a direct DB delete (`ssh … "sudo -u postgres psql -d <db> -c \"DELETE FROM done_when_criteria WHERE id=…\""`) under the meta-task claim, capturing the SQL in its notes; and a seed script **must throttle + honor `429` `retry_after`** (per-IP rate limit) — add a base delay between calls and back off on 429, or a large seed dies halfway. A completed reference seed: `scripts/gds/<redacted>.js`.
303
303
  >
304
- > **Every seed script verifies its own criterion links — fail loudly on any mismatch, zero included (task 1003076, retro on goal 1000071).** The goal-1000071 seeder linked all 15 tasks to the WRONG criteria (a positional `"Cn"` token resolved against the whole VERSION's criterion order, not the goal's — learning 1000188) and still printed success; only a manual `GET /goals` rollup caught it, after the fact. Every seed script's `main()` must end by tallying the `criterion_ids` it actually POSTed per task, then calling `verifySeedCriteriaLinks` from [`scripts/gds/seed-verify-criteria.js`](../../../scripts/gds/seed-verify-criteria.js) — it fetches `GET /api/bongos/goals/<id>`, diffs the returned `criteria[].linked_tasks` against that plan, and `exit(1)`s with a loud per-criterion diff on any mismatch (see `expectedCriterionCounts` + `verifySeedCriteriaLinks`). Reference implementation: `scripts/gds/<redacted>.js`. This is a script-level check, independent of whatever caused the mislink — it catches the *symptom* (a criterion silently under- or over-linked) whichever bug produces it.
304
+ > **Every seed script verifies its own criterion links — fail loudly on any mismatch, zero included (task 1003076, retro on goal 1000071).** The goal-1000071 seeder linked all 15 tasks to the WRONG criteria (a positional `"Cn"` token resolved against the whole VERSION's criterion order, not the goal's — learning 1000188) and still printed success; only a manual `GET /goals` rollup caught it, after the fact. Every seed script's `main()` must end by tallying the `criterion_ids` it actually POSTed per task, then calling `verifySeedCriteriaLinks` from [`scripts/gds/seed-verify-criteria.js`](../../../scripts/gds/seed-verify-criteria.js) — it fetches `GET /api/bongos/goals/<id>`, diffs the returned `criteria[].linked_tasks` against that plan, and `exit(1)`s with a loud per-criterion diff on any mismatch (see `expectedCriterionCounts` + `verifySeedCriteriaLinks`). Reference implementation: `scripts/gds/<redacted>.js`. **Seeding into a goal that already has linked tasks?** Call `baselineSeedCriteria` BEFORE the first write and pass its result as `baseline` to the verify (task 1004668; reference: `scripts/gds/<redacted>.js`) — the check then covers every criterion on the goal, pre-existing counts included, and still catches a stray link on one the seed never meant to touch. With a baseline, tally only the tasks this run CREATED — skip any create that answers `idempotent: true`, since a re-run's replayed task is already inside the baseline and counting it again expects its links twice. Without a baseline only the plan's own criteria are checked. This is a script-level check, independent of whatever caused the mislink — it catches the *symptom* (a criterion silently under- or over-linked) whichever bug produces it.
305
305
 
306
306
  4. **Apply the migration** (commit + push + deploy, or direct psql via SSH for hot-fix style).
307
307
 
308
308
  5. **Run the seed script.** Verify exit code 0 — the seed's own final step (the Seeding contract's `verifySeedCriteriaLinks` call, above) already fails loudly if any criterion's linked task count doesn't match the plan, so a 0 exit means the links landed correctly, not just that the POSTs didn't error. Also spot-check totals via `GET /api/bongos/public/progress` and `GET /api/bongos/versions/<ver>/done-when`.
309
309
 
310
- 6. **Promote the zero-dep layer to `ready` — scoped to the tasks you just seeded.** Every newly-seeded task lands `status='backlog'`. The auto-promotion trigger only fires when a *dependency* ships — so a task with zero deps has nothing to wait for and would sit unclaimable forever.
310
+ 6. **Promote the zero-dep layer to `ready` — scoped to the tasks you just seeded, and only what is still at `backlog`.** Do **not** assume the seed landed at `backlog`: read the seeded rows' statuses and report them (task 1004668). `POST /tasks` answers `backlog`, but the reconciler's backlog sweep (`PROMOTABLE_BACKLOG_WHERE` in `modules/lifecycle/db-tasks.js`, task 1003932) promotes any task with no unmet dependency and no open blocker within about a minute — seeding 27 tasks into goal 1000095 found 24 already at `ready`, spikes included, and the promote below had almost nothing to do. A zero-dep task the sweep has not reached yet is the only thing this step is for.
311
+
312
+ **`ready` is not "claimable".** The sweep can reach a task before the seed wires its dependency edges (the seed creates every task first, then the edges), so a task that should wait can read `ready`. The **claim-time dependency gate** (`DEPS_NOT_SHIPPED`) is the enforcement, not the status — it refuses a claim while any dependency is unshipped, whatever the row says. Check the edges landed (`GET /api/bongos/goals/<id>` → `dependencies`), not the statuses.
311
313
 
312
314
  **Scope this to your own seed, and never to the whole version** (task 1001438). `version_id + status='backlog' + kind<>'spike' + no dep edge` also describes rows that are sitting at `backlog` **on purpose**, and promoting those is a silent, unlogged override of another subsystem's decision:
313
315
  - **cascade-filed tasks** — `cascade.js` files generated work at `backlog`, **never** `ready`, as one of its four pinned properties (`modules/lifecycle/CLAUDE.md`; task 1003549). A cascade task has no dependency edge, so an unscoped promote flips exactly the rows that guarantee says it never will.
@@ -328,7 +330,7 @@ Once the spec is finalized (Phase 4), **read `docs/specs/<ver>-<goal-slug>.md` a
328
330
  AND id NOT IN (SELECT task_id FROM task_dependencies);
329
331
  ```
330
332
 
331
- The count must match the zero-dep tasks your seed script just created. If it is larger, your `source_ref` prefix is catching an earlier seed — narrow it (or fall back to the explicit list, `AND id = ANY('{<seeded ids>}')`) before writing anything. Then re-run it as the UPDATE:
333
+ The count is the zero-dep tasks the sweep has not promoted yet — often zero, which is not an error. It can never exceed the zero-dep tasks your seed just created; if it does, your `source_ref` prefix is catching an earlier seed — narrow it (or fall back to the explicit list, `AND id = ANY('{<seeded ids>}')`) before writing anything. Then re-run it as the UPDATE:
332
334
 
333
335
  ```sql
334
336
  UPDATE tasks
@@ -342,7 +344,7 @@ Once the spec is finalized (Phase 4), **read `docs/specs/<ver>-<goal-slug>.md` a
342
344
  RETURNING id, title, priority, kind;
343
345
  ```
344
346
 
345
- Capture the `RETURNING` rows — the max `priority` value is the input for step 7. Spikes are intentionally excluded; they never auto-promote (kind='spike' convention, [ADR 0015](../../../docs/adr/0015-task-dependencies-and-auto-promotion.md)).
347
+ Capture the `RETURNING` rows, plus the seeded rows the sweep had already promoted — the max `priority` across both is the input for step 7. Spikes are intentionally excluded; they never auto-promote (kind='spike' convention, [ADR 0015](../../../docs/adr/0015-task-dependencies-and-auto-promotion.md)).
346
348
 
347
349
  7. **Surface higher-priority spikes still in backlog.** Spikes don't auto-flow because their output reshapes downstream work — that's a feature, not a bug. But the planning session just decided the priority order, so a high-priority spike sitting unstarted while lower-priority non-spike work flows to `ready` is a coordination smell worth one explicit mention. Query:
348
350
 
@@ -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
- - 539 operations across 76 resource groups
8
+ - 541 operations across 76 resource groups
9
9
 
10
10
  ## Use it from your project
11
11
 
@@ -871,6 +871,10 @@ function createClient(opts = {}) {
871
871
  getProjectSettingsShipMode: (args) => request("GET", "/project-settings/ship-mode", { hasBody: false }, args),
872
872
  // PATCH /project-settings/ship-mode — rank: metic+archon — PATCH /project-settings/ship-mode
873
873
  patchProjectSettingsShipMode: (args) => request("PATCH", "/project-settings/ship-mode", { hasBody: true }, args),
874
+ // GET /project-settings/tweak-autopickup — rank: any-builder — GET /project-settings/tweak-autopickup
875
+ getProjectSettingsTweakAutopickup: (args) => request("GET", "/project-settings/tweak-autopickup", { hasBody: false }, args),
876
+ // PATCH /project-settings/tweak-autopickup — rank: metic+archon — PATCH /project-settings/tweak-autopickup
877
+ patchProjectSettingsTweakAutopickup: (args) => request("PATCH", "/project-settings/tweak-autopickup", { hasBody: true }, args),
874
878
  },
875
879
  "projects": {
876
880
  // GET /projects — rank: metic+archon — GET /projects
@@ -870,6 +870,10 @@ function createClient(opts = {}) {
870
870
  getProjectSettingsShipMode: (args) => request("GET", "/project-settings/ship-mode", { hasBody: false }, args),
871
871
  // PATCH /project-settings/ship-mode — rank: metic+archon — PATCH /project-settings/ship-mode
872
872
  patchProjectSettingsShipMode: (args) => request("PATCH", "/project-settings/ship-mode", { hasBody: true }, args),
873
+ // GET /project-settings/tweak-autopickup — rank: any-builder — GET /project-settings/tweak-autopickup
874
+ getProjectSettingsTweakAutopickup: (args) => request("GET", "/project-settings/tweak-autopickup", { hasBody: false }, args),
875
+ // PATCH /project-settings/tweak-autopickup — rank: metic+archon — PATCH /project-settings/tweak-autopickup
876
+ patchProjectSettingsTweakAutopickup: (args) => request("PATCH", "/project-settings/tweak-autopickup", { hasBody: true }, args),
873
877
  },
874
878
  "projects": {
875
879
  // GET /projects — rank: metic+archon — GET /projects
@@ -241,6 +241,7 @@ export interface PatchProjectSettingsRotDaysRequest { days: number }
241
241
  export interface PatchProjectSettingsRotDaysResponse { ok: boolean; rot_days: unknown; source: unknown; describe: unknown }
242
242
  export interface PatchProjectSettingsShipModeRequest { mode: string }
243
243
  export interface PatchProjectSettingsShipModeResponse { ok: boolean; mode: unknown; chosen: unknown; source: unknown; sentence: unknown }
244
+ export interface PatchProjectSettingsTweakAutopickupRequest { mode?: string; cap?: number }
244
245
  export interface PatchProjectsIdFeaturedRequest { featured: boolean }
245
246
  export interface PatchProjectsIdFeaturedResponse { project: unknown }
246
247
  export interface PatchProjectsIdStatusRequest { status: string }
@@ -297,7 +298,7 @@ export interface PostClaimsBatchResponse { claims: unknown }
297
298
  export interface PostClaimsBatchValidateRequest { task_ids: unknown[] }
298
299
  export interface PostClaimsIdReleaseOnBehalfRequest { reason: string }
299
300
  export interface PostClaimsIdResolveRequest { outcome: "shipped" | "abandoned" | "partial"; notes_md?: string; value_summary?: string; verification?: Record<string, unknown>; force?: boolean; committed_files?: string[]; sandbox_review?: Record<string, unknown>; resolver_worktree?: string }
300
- export interface PostClaimsRequest { task_id: StringifiableId; worktree_name?: string; head_sha?: string; bind_session?: boolean; enforce_touches?: boolean }
301
+ export interface PostClaimsRequest { task_id: StringifiableId; worktree_name?: string; head_sha?: string; bind_session?: boolean; enforce_touches?: boolean; auto_pickup?: boolean }
301
302
  export interface PostClaimsResponse { claim: unknown; task: unknown; just_unlocked: unknown; overlap_warning: unknown; sibling_overlap_warning: unknown; reward: unknown }
302
303
  export interface PostConnectionsIdAcceptResponse { status: unknown }
303
304
  export interface PostConnectionsRequest { handle: string; note?: string }
@@ -1380,6 +1381,10 @@ export interface BongosClient {
1380
1381
  getProjectSettingsShipMode(args?: RequestArgs): Promise<GetProjectSettingsShipModeResponse>;
1381
1382
  /** PATCH /project-settings/ship-mode — rank: metic+archon */
1382
1383
  patchProjectSettingsShipMode(args: RequestArgs & { body: PatchProjectSettingsShipModeRequest }): Promise<PatchProjectSettingsShipModeResponse>;
1384
+ /** GET /project-settings/tweak-autopickup — rank: any-builder */
1385
+ getProjectSettingsTweakAutopickup(args?: RequestArgs): Promise<ApiResponse>;
1386
+ /** PATCH /project-settings/tweak-autopickup — rank: metic+archon */
1387
+ patchProjectSettingsTweakAutopickup(args?: RequestArgs & { body?: PatchProjectSettingsTweakAutopickupRequest }): Promise<ApiResponse>;
1383
1388
  };
1384
1389
  "projects": {
1385
1390
  /** GET /projects — rank: metic+archon */
@@ -867,6 +867,10 @@ export function createClient(opts = {}) {
867
867
  getProjectSettingsShipMode: (args) => request("GET", "/project-settings/ship-mode", { hasBody: false }, args),
868
868
  // PATCH /project-settings/ship-mode — rank: metic+archon — PATCH /project-settings/ship-mode
869
869
  patchProjectSettingsShipMode: (args) => request("PATCH", "/project-settings/ship-mode", { hasBody: true }, args),
870
+ // GET /project-settings/tweak-autopickup — rank: any-builder — GET /project-settings/tweak-autopickup
871
+ getProjectSettingsTweakAutopickup: (args) => request("GET", "/project-settings/tweak-autopickup", { hasBody: false }, args),
872
+ // PATCH /project-settings/tweak-autopickup — rank: metic+archon — PATCH /project-settings/tweak-autopickup
873
+ patchProjectSettingsTweakAutopickup: (args) => request("PATCH", "/project-settings/tweak-autopickup", { hasBody: true }, args),
870
874
  },
871
875
  "projects": {
872
876
  // GET /projects — rank: metic+archon — GET /projects