@bongos/core 1.24.4 → 1.24.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.bongos-core.json CHANGED
@@ -2,22 +2,22 @@
2
2
  "artifact": "bongos-core",
3
3
  "manifest_schema": 1,
4
4
  "generator": "scripts/bongos/package-core.js",
5
- "core_version": "1.24.4",
6
- "core_contract": "1.24.4",
7
- "source_commit": "b25dd0aaa8041380fe6423547c6ad421048f82f5",
5
+ "core_version": "1.24.5",
6
+ "core_contract": "1.24.5",
7
+ "source_commit": "3c88fbd178c93e32bc27e47490d2ea89fd628787",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-10-30T04:44:03.618Z",
9
+ "built_at": "2026-10-30T05:11:49.262Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
12
  "docs_redacted": 628,
13
13
  "agent_docs_stubbed": 32,
14
- "functional_verbatim": 3719,
14
+ "functional_verbatim": 3722,
15
15
  "rules": 3,
16
16
  "gate_literals": 3,
17
17
  "gate": "passed"
18
18
  },
19
- "file_count": 4380,
20
- "tree_sha256": "bc5e1a5e93d60321f5edaa5bf753114297f9a9f82e282584df69af165c51150c",
19
+ "file_count": 4383,
20
+ "tree_sha256": "64ec9b67115939200ddd1d5f3b89f1e941f4da2580d278b86e511986fc017c01",
21
21
  "files": [
22
22
  {
23
23
  "path": ".claude/skills/ask-for-help/SKILL.md",
@@ -2477,12 +2477,12 @@
2477
2477
  {
2478
2478
  "path": "docs/copy-inventory.md",
2479
2479
  "mode": "0000644",
2480
- "sha256": "009f23a1c2a2601201ccb4d9ad91a6d16c4502ccf161dab99039f00d7f435bdf"
2480
+ "sha256": "451e8acde051b614a3d1c788ff8e737f8b15b7c99bebbb6a0e57f0d634de7532"
2481
2481
  },
2482
2482
  {
2483
2483
  "path": "docs/copy-registry.json",
2484
2484
  "mode": "0000644",
2485
- "sha256": "eeb481d009b4f1e2259022852ad084d81bec7d4461a72d5891473f00e12c5515"
2485
+ "sha256": "d0fd1935049c2ecb48aea5a9e974f1725cd56a816b86dd1891e5632ec491fa4f"
2486
2486
  },
2487
2487
  {
2488
2488
  "path": "docs/design/apex-pass-2-direction.md",
@@ -2982,7 +2982,7 @@
2982
2982
  {
2983
2983
  "path": "docs/file-map.md",
2984
2984
  "mode": "0000644",
2985
- "sha256": "3c1e814de2db35c4940dcd505d6a877e2c75f37985f8f669ec2c5001ec3ccf21"
2985
+ "sha256": "7cab47a3053e695b51e0f71fd415c493d36a212fff1d624d032dbeb49bf95378"
2986
2986
  },
2987
2987
  {
2988
2988
  "path": "docs/handoff-template.md",
@@ -2992,7 +2992,7 @@
2992
2992
  {
2993
2993
  "path": "docs/module-api-changelog.md",
2994
2994
  "mode": "0000644",
2995
- "sha256": "3fcb8f5c062f9925f8a3e7d82fb4946d376c25eb51f46e659071b539c4bc32c8"
2995
+ "sha256": "9d657541cca4abb87aea4ea612e2072d025bb40dcd2aa68458322690fd9917d6"
2996
2996
  },
2997
2997
  {
2998
2998
  "path": "docs/modules-contract.md",
@@ -3082,7 +3082,7 @@
3082
3082
  {
3083
3083
  "path": "docs/page-readings.json",
3084
3084
  "mode": "0000644",
3085
- "sha256": "32b5769127bc8ec156e6a56635307c9dc3ce4952f10cda58e3b9b8a579054521"
3085
+ "sha256": "9294370708bcefc1a344e8d383f5b77a0161d4e7abec6111c29995cef93391ed"
3086
3086
  },
3087
3087
  {
3088
3088
  "path": "docs/project-context.template.md",
@@ -4647,7 +4647,7 @@
4647
4647
  {
4648
4648
  "path": "modules/copy-desk/auto-close.js",
4649
4649
  "mode": "0000644",
4650
- "sha256": "f9f4e8e009fab44c47fd3651c5d44da94cec1fd4cb7ad0931515fadbd6526280"
4650
+ "sha256": "413e0bd992b3db551f572c53b9e9074f59aec9700ef2dfba889d3c3edf52bcee"
4651
4651
  },
4652
4652
  {
4653
4653
  "path": "modules/copy-desk/chrome-pages.js",
@@ -4702,7 +4702,7 @@
4702
4702
  {
4703
4703
  "path": "modules/copy-desk/page-status.js",
4704
4704
  "mode": "0000644",
4705
- "sha256": "0d3ae54e54203d62a6b8b7874706a478476d2c22f680ed92dc6d91d2c8285c3e"
4705
+ "sha256": "d56343c59fa538461442a279db620dd1bca9b1545e27ecf4170950c54537948e"
4706
4706
  },
4707
4707
  {
4708
4708
  "path": "modules/copy-desk/pages.js",
@@ -4772,12 +4772,12 @@
4772
4772
  {
4773
4773
  "path": "modules/copy-desk/tests/copy_no_cms.mjs",
4774
4774
  "mode": "0000644",
4775
- "sha256": "74a8241778ef5d0055b555fad41530a92cc88fe5760c25cda033d2898d206d89"
4775
+ "sha256": "dc041a64d8526293eee1c97d13d3c99356d9b4f1c868c36893cb8f22e3425391"
4776
4776
  },
4777
4777
  {
4778
4778
  "path": "modules/copy-desk/tests/copy_page_auto_close.mjs",
4779
4779
  "mode": "0000644",
4780
- "sha256": "f992174839c4f2be3c3a6f942c27493a5a7081e46ce01293f9075ce9a26330be"
4780
+ "sha256": "963c439133ed1e4887d9d21cb657646203e7776fa57af8cd22e04a4e26aaad99"
4781
4781
  },
4782
4782
  {
4783
4783
  "path": "modules/copy-desk/tests/copy_page_draft.mjs",
@@ -4792,7 +4792,7 @@
4792
4792
  {
4793
4793
  "path": "modules/copy-desk/tests/copy_page_status.mjs",
4794
4794
  "mode": "0000644",
4795
- "sha256": "e90260a6fc9b95c65efd1aa1488c88f7344d94e6d315055a52648d4c92f416dc"
4795
+ "sha256": "7191a710850358bac31959ebb2db6c5c899a37654e5069793273cd360398e1fb"
4796
4796
  },
4797
4797
  {
4798
4798
  "path": "modules/copy-desk/tests/copy_proposals.mjs",
@@ -7072,7 +7072,7 @@
7072
7072
  {
7073
7073
  "path": "modules/hall-ui/public/tweak-editor.js",
7074
7074
  "mode": "0000644",
7075
- "sha256": "8067d9dc1a9bc78e600e601d27a317632888165a84b748bb167d1586628cfbb3"
7075
+ "sha256": "01d641e2779e6d75abcbb87ca43e8f05419baa48ee5d16e080dcbbcff7520206"
7076
7076
  },
7077
7077
  {
7078
7078
  "path": "modules/hall-ui/public/tweak-editor.states.json",
@@ -7657,7 +7657,7 @@
7657
7657
  {
7658
7658
  "path": "modules/lifecycle/db-claims.js",
7659
7659
  "mode": "0000644",
7660
- "sha256": "bda081ae281a73ab1ae579da61cbdacb50ef7af0a17ec0ef0481b5c0cbef524c"
7660
+ "sha256": "4b9fa31f8b59d93f0e0a9ae93bf78c8cceb222af7b581f6acc2ba4bd13a5e075"
7661
7661
  },
7662
7662
  {
7663
7663
  "path": "modules/lifecycle/db-deps-criteria.js",
@@ -7702,7 +7702,7 @@
7702
7702
  {
7703
7703
  "path": "modules/lifecycle/db-ship.js",
7704
7704
  "mode": "0000644",
7705
- "sha256": "4f69c70204e8e0a8b0334e1a0b1117ad8c707f46bbabb9a9f333edccc412655d"
7705
+ "sha256": "1be48d4cde5976eef15f1bedc61792cd1a3c799bf86e32acb7f5f3f49848fa4d"
7706
7706
  },
7707
7707
  {
7708
7708
  "path": "modules/lifecycle/db-tasks.js",
@@ -11427,12 +11427,12 @@
11427
11427
  {
11428
11428
  "path": "package-lock.json",
11429
11429
  "mode": "0000644",
11430
- "sha256": "304f4ec63d821407a13b53821d0326738a2d237cfe13df56c0e6898033d8f99e"
11430
+ "sha256": "c8346ef5a2a69cb674976854cd033dc1209c05caa8502d6aec943e36d1d87d61"
11431
11431
  },
11432
11432
  {
11433
11433
  "path": "package.json",
11434
11434
  "mode": "0000644",
11435
- "sha256": "5e313cdcf69ea3657d73f2aaf1291ebb7075dd82396e8562d1611a868af0f067"
11435
+ "sha256": "f2163c967b304cf6d707a11dfdd47960a3490c54c2530dfd245cf7f1d643ea66"
11436
11436
  },
11437
11437
  {
11438
11438
  "path": "public-docs/index.html",
@@ -11452,7 +11452,7 @@
11452
11452
  {
11453
11453
  "path": "release-notes.json",
11454
11454
  "mode": "0000644",
11455
- "sha256": "ce59bce2bedccd143a7af56884d5cfa65a0a850273d7769ba7a105b086dc772c"
11455
+ "sha256": "d2dbd5bbf56312c0f5c1e00c9a73e60591fe85609e1fcb6047ec0e677e3a923a"
11456
11456
  },
11457
11457
  {
11458
11458
  "path": "scripts/bongos/CLAUDE.md",
@@ -11737,7 +11737,7 @@
11737
11737
  {
11738
11738
  "path": "scripts/bongos/codemod-rename-scripts-gds.js",
11739
11739
  "mode": "0000644",
11740
- "sha256": "f9ee5d52c00ea56e98fdda798974e1826888ae0f6da055ed43cb38e04a9ae98e"
11740
+ "sha256": "1d8dcb743c3fd7c2ecf0f1105a7ffe7cf4c82ecf539b71f903f8258501214b08"
11741
11741
  },
11742
11742
  {
11743
11743
  "path": "scripts/bongos/conductor-dispatch.js",
@@ -11827,7 +11827,7 @@
11827
11827
  {
11828
11828
  "path": "scripts/bongos/dev-box-guard.js",
11829
11829
  "mode": "0000644",
11830
- "sha256": "61cdb4f9f21eabe9705ffcbe5346f63e6f369e7e3a08fb29418a9a621bf4172a"
11830
+ "sha256": "0a15634da9a62c3d2908ce8330570d839c0f6accedb4385867fc5c5262426af8"
11831
11831
  },
11832
11832
  {
11833
11833
  "path": "scripts/bongos/dev-lib.js",
@@ -12547,7 +12547,7 @@
12547
12547
  {
12548
12548
  "path": "scripts/bongos/publish-manifest.js",
12549
12549
  "mode": "0000644",
12550
- "sha256": "e418101410e4313438e080f2e96d98611e92b47015cf95e03a4b1db37b662739"
12550
+ "sha256": "7229ea4d05d216d9b4f8b410467c0ca4638e2e0ea215e45157491d57311cdd2d"
12551
12551
  },
12552
12552
  {
12553
12553
  "path": "scripts/bongos/publish-watch.js",
@@ -14794,6 +14794,11 @@
14794
14794
  "mode": "0000644",
14795
14795
  "sha256": "5d7f7b434b8aa8ab5782e7902f42b7103a697a71c95cc6f61beb4f3f0ea561f4"
14796
14796
  },
14797
+ {
14798
+ "path": "src/bongos/agent-standing-rules.js",
14799
+ "mode": "0000644",
14800
+ "sha256": "5a1272767e9b04769c52eeadeb727bc4462d5cc834cb1db8746ea3a75a42392e"
14801
+ },
14797
14802
  {
14798
14803
  "path": "src/bongos/api-errors.js",
14799
14804
  "mode": "0000644",
@@ -14977,7 +14982,7 @@
14977
14982
  {
14978
14983
  "path": "src/bongos/module-scope-map.js",
14979
14984
  "mode": "0000644",
14980
- "sha256": "6596b54300b499386918b29dfb94bd954c4bce0500cf72786f874f53c61e0810"
14985
+ "sha256": "ab7bb8b01ffd40562329a593dea6a2e204e8c7c68671bc372fb9a8dfeb67eba6"
14981
14986
  },
14982
14987
  {
14983
14988
  "path": "src/bongos/module-store.js",
@@ -15167,7 +15172,7 @@
15167
15172
  {
15168
15173
  "path": "src/bongos/routes/me.js",
15169
15174
  "mode": "0000644",
15170
- "sha256": "68a9dcbef462eb9a5ba01154beee2e9abf1ae9f99a885408da006af3805535d8"
15175
+ "sha256": "a481378dea74f29ac1570a4046677cd8d8ffd7deb34f82f3b13d4d783de772a0"
15171
15176
  },
15172
15177
  {
15173
15178
  "path": "src/bongos/routes/modules.js",
@@ -15287,7 +15292,7 @@
15287
15292
  {
15288
15293
  "path": "src/module-api.js",
15289
15294
  "mode": "0000644",
15290
- "sha256": "5ee99bb85ff432ea246c616b4cd4ac76683a09965a70f513d20f6a4ea2b9f3c0"
15295
+ "sha256": "db9f13a1a0bf6937f8b42578eaefe3febbc72ef8c822dbc6abca2e512b4b06db"
15291
15296
  },
15292
15297
  {
15293
15298
  "path": "src/module-loader/catalog.js",
@@ -15484,6 +15489,11 @@
15484
15489
  "mode": "0000644",
15485
15490
  "sha256": "d698f2e3b79c41137679f7413ac458fe8f932930677d74d0c096275060f2849c"
15486
15491
  },
15492
+ {
15493
+ "path": "tests/agent_standing_rules.mjs",
15494
+ "mode": "0000644",
15495
+ "sha256": "5d285355ec2695c50beb7a718a4e287511190b359f1a19f7d28b88ba7ceb8b93"
15496
+ },
15487
15497
  {
15488
15498
  "path": "tests/agents_authoring.mjs",
15489
15499
  "mode": "0000644",
@@ -16187,7 +16197,7 @@
16187
16197
  {
16188
16198
  "path": "tests/claims_batch_routes.mjs",
16189
16199
  "mode": "0000644",
16190
- "sha256": "0801a70ab05df620e540782303065448c52d573de77df636239e561153db97d9"
16200
+ "sha256": "53cdb47f665e27df47f122fc81a554827a7f971ef3fe9b735088d9c691cc18aa"
16191
16201
  },
16192
16202
  {
16193
16203
  "path": "tests/claims_bind_session.mjs",
@@ -16432,7 +16442,7 @@
16432
16442
  {
16433
16443
  "path": "tests/copy_stuck_page_tweaks.mjs",
16434
16444
  "mode": "0000644",
16435
- "sha256": "e53e4b7c768b0e1b5cb2343d174eba8886586678cc3d3a70560d107faa88a1f5"
16445
+ "sha256": "5afcb83b32338d30c0dec85c9caecb57fd928f2129cca23701ced4517f9a1ccc"
16436
16446
  },
16437
16447
  {
16438
16448
  "path": "tests/core_258_box_session_claims_db.mjs",
@@ -17647,7 +17657,7 @@
17647
17657
  {
17648
17658
  "path": "tests/government_laws_session.mjs",
17649
17659
  "mode": "0000644",
17650
- "sha256": "e2f8dd938486233da65f09f005009b5b7e9e689236066c5e3a342de15e33f08f"
17660
+ "sha256": "6eefcba0dbb8a7258ba43800e2340aaa6be9d3bcb18e25b2358e4db0359d9d70"
17651
17661
  },
17652
17662
  {
17653
17663
  "path": "tests/government_leads.mjs",
@@ -18257,7 +18267,7 @@
18257
18267
  {
18258
18268
  "path": "tests/hall_tweak_editor.mjs",
18259
18269
  "mode": "0000644",
18260
- "sha256": "81e03b554851f982aa26d4465bb86b3fea9e67344641e61f618cd06749fd7532"
18270
+ "sha256": "b59fbd2ffcf4d8b19f040165c143a7920d691e864e391c324c64e01c30d66314"
18261
18271
  },
18262
18272
  {
18263
18273
  "path": "tests/hall_work_history_id.mjs",
@@ -18327,7 +18337,7 @@
18327
18337
  {
18328
18338
  "path": "tests/host_topology_skips.mjs",
18329
18339
  "mode": "0000644",
18330
- "sha256": "306ac95d23d5990803ed78ae8ad3c9148b546f89e39b0bdae74263857c94efd9"
18340
+ "sha256": "b6123a4fad5c71d380a2cfea3b74efa1dea7b0e1b5d32628a394c6c16aaa8481"
18331
18341
  },
18332
18342
  {
18333
18343
  "path": "tests/howto_guide.mjs",
@@ -20619,6 +20629,11 @@
20619
20629
  "mode": "0000644",
20620
20630
  "sha256": "96fc57ac449e372e7f762f03a0dcfef1db85492221c8b837638122388499119d"
20621
20631
  },
20632
+ {
20633
+ "path": "tests/run_node_reroute.mjs",
20634
+ "mode": "0000644",
20635
+ "sha256": "800e9e300360a550b902b6eff0c0bd0a15957ca732937345bc09eac8a058cdcd"
20636
+ },
20622
20637
  {
20623
20638
  "path": "tests/run_routine.mjs",
20624
20639
  "mode": "0000644",
@@ -848,7 +848,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
848
848
  | `4f89817b92e5` | certain | No onboarding steps recorded yet. | `modules/hall-ui/public/hall-render.js:893` |
849
849
  | `421ae031594e` | certain | No open goals in this version | `modules/hall-ui/public/task.js:577` |
850
850
  | `2a6d7552e21f` | certain | No other sessions. | `modules/hall-ui/public/settings-sessions.js:64` |
851
- | `90623fec4cfa` | certain | No page is open. | `modules/hall-ui/public/tweak-editor.js:574` |
851
+ | `90623fec4cfa` | certain | No page is open. | `modules/hall-ui/public/tweak-editor.js:575` |
852
852
  | `1a46c31343cb` | certain | No projects are hosted here yet. | `modules/hall-ui/public/fleet-costs.js:69` |
853
853
  | `9f73b3f3dad0` | certain | No rank floor — any builder can claim this task | `modules/hall-ui/public/task-lib.js:77` |
854
854
  | `4ffd939755e0` | certain | No real-world data yet, so it is listed but not ranked. | `modules/hall-ui/public/modules.js:343` |
@@ -874,7 +874,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
874
874
  | `730a248e7888` | certain | No {…} {…} render; showing {…} {…}. | `modules/hall-ui/public/approval-queue.js:141` |
875
875
  | `1967d2176f2e` | certain | Nobody has an open ask right now. | `modules/hall-ui/public/collab.html:95` |
876
876
  | `c65c9f5c02e3` | certain | Nobody is waiting on you. Requests reach you by role — | `modules/hall-ui/public/collab.html:54` |
877
- | `d5cf262e671d` | certain | Nobody is writing this page. Take it, and every line here is yours to type over. | `modules/hall-ui/public/tweak-editor.js:323` |
877
+ | `d5cf262e671d` | certain | Nobody is writing this page. Take it, and every line here is yours to type over. | `modules/hall-ui/public/tweak-editor.js:324` |
878
878
  | `380b924cd4a0` | certain | Nobody recorded — it falls to the owner | `modules/hall-ui/public/government-access.js:35` |
879
879
  | `91c409a4aea5` | certain | Nobody vouched for this name — anyone can file a request naming anyone. Confirm who is asking before you admit | `modules/hall-ui/public/watch.js:397` |
880
880
  | `4016b9cf8d57` | certain | None of your asks have been settled yet. | `modules/hall-ui/public/collab.html:145` |
@@ -1299,7 +1299,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1299
1299
  | `59fcf7f5ac27` | certain | Switch to light mode | `modules/hall-ui/public/street.html:95` |
1300
1300
  | `93fa2e97dd35` | certain | System default for this skill | `modules/hall-ui/public/settings.js:72` |
1301
1301
  | `da9da6e866bd` | certain | Take it offline | `modules/hall-ui/public/project-settings.html:59` |
1302
- | `aa8da34fe237` | certain | Take the next page, or pick one from the studio. | `modules/hall-ui/public/tweak-editor.js:575` |
1302
+ | `aa8da34fe237` | certain | Take the next page, or pick one from the studio. | `modules/hall-ui/public/tweak-editor.js:576` |
1303
1303
  | `fc53e250e86f` | certain | Take this page | `modules/hall-ui/public/paintbrush.js:116` |
1304
1304
  | `8b3cdb88b0f4` | certain | Taken out of the store. Your copy keeps working, but it will get no more updates. | `modules/hall-ui/public/modules.js:134` |
1305
1305
  | `e604fc3ace79` | certain | Task # | `modules/hall-ui/public/blockers.js:138` |
@@ -1353,7 +1353,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1353
1353
  | `51633ea53205` | certain | The doc is now this page's reference. Every idea links back to it. | `modules/hall-ui/public/page-notes.js:195` |
1354
1354
  | `239d641c20fa` | certain | The document | `modules/hall-ui/public/settings-specialities.js:354` |
1355
1355
  | `784618f83a42` | certain | The earlier ideas could not be loaded. Reload the page to try again. | `modules/hall-ui/public/lightbulb.js:118` |
1356
- | `ffaa4df90f66` | certain | The editor could not load. | `modules/hall-ui/public/tweak-editor.js:723` |
1356
+ | `ffaa4df90f66` | certain | The editor could not load. | `modules/hall-ui/public/tweak-editor.js:724` |
1357
1357
  | `6e2554615883` | certain | The event sounds could not be loaded. Reload the page to try again. | `modules/hall-ui/public/settings.js:391` |
1358
1358
  | `6a208d46dd0f` | certain | The founding mark is numbered in the order people joined while the project was founded. It is kept for good an | `modules/hall-ui/public/ranks.html:41` |
1359
1359
  | `7e77b1ed9c86` | certain | The founding wall | `modules/hall-ui/public/hall-widgets.js:133` |
@@ -1380,7 +1380,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1380
1380
  | `27037792dd7d` | certain | The mobile layout can wait until the desktop one ships. | `modules/hall-ui/public/notes-panel.js:68` |
1381
1381
  | `381f29be7497` | certain | The most recently shipped tasks. | `modules/hall-ui/public/work.html:140` |
1382
1382
  | `82479c539fca` | certain | The name shown beside your work — in the roster, the leaderboard, and the work feed. Your sign-in and the cred | `modules/hall-ui/public/settings.html:78` |
1383
- | `4b20ecf5528b` | certain | The next page could not be read. | `modules/hall-ui/public/tweak-editor.js:586` |
1383
+ | `4b20ecf5528b` | certain | The next page could not be read. | `modules/hall-ui/public/tweak-editor.js:587` |
1384
1384
  | `b88dd8b96b72` | certain | The next person to notice this sentence reads your note instead of re-litigating it. | `modules/hall-ui/public/copy-desk.html:135` |
1385
1385
  | `329a1d350f07` | certain | The page changed after your draft was saved, so the draft is not shown over its new words. Rewrite the lines a | `modules/hall-ui/public/tweak-editor.js:319` |
1386
1386
  | `aa716f3dd551` | certain | The page could not be loaded. Try again. | `modules/hall-ui/public/builders.js:1409` |
@@ -1456,7 +1456,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1456
1456
  | `c7d2bc751184` | certain | This goal was added to {…} after it had already started building — an Archon override of the scope gate | `modules/hall-ui/public/goals-render.js:895` |
1457
1457
  | `23f531302e9e` | certain | This is you — | `modules/hall-ui/public/profile.js:363` |
1458
1458
  | `d313d3dfe438` | certain | This move is decided by the project’s government, not by one person here. | `modules/hall-ui/public/deploy.js:583` |
1459
- | `f303bd107422` | certain | This page has been submitted and is on its way to the site. Its words are frozen until it ships or is sent bac | `modules/hall-ui/public/tweak-editor.js:331` |
1459
+ | `f303bd107422` | certain | This page has been submitted and is on its way to the site. Its words are frozen until it ships or is sent bac | `modules/hall-ui/public/tweak-editor.js:332` |
1460
1460
  | `e54578188187` | certain | This page is for members of the board. | `modules/hall-ui/public/board-room.html:43` |
1461
1461
  | `9a685b01e2c6` | certain | This page opens at a higher rank. | `modules/hall-ui/public/deploy.html:33` |
1462
1462
  | `9a685b01e2c6` | certain | This page opens at a higher rank. | `modules/hall-ui/public/fleet.html:32` |
@@ -1740,7 +1740,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1740
1740
  | `a3fd52d9513b` | certain | document{…} you added · learned | `modules/hall-ui/public/settings-specialities.js:322` |
1741
1741
  | `fcec9cad1c69` | certain | download .docx | `modules/hall-ui/public/tweak-editor.html:65` |
1742
1742
  | `7c1f761ff7c0` | certain | download this page again | `modules/hall-ui/public/tweak-editor.html:131` |
1743
- | `87129aa3ab0a` | certain | downloaded .docx | `modules/hall-ui/public/tweak-editor.js:481` |
1743
+ | `87129aa3ab0a` | certain | downloaded .docx | `modules/hall-ui/public/tweak-editor.js:482` |
1744
1744
  | `16d18b40bd23` | certain | drag to pan · ⌘/ctrl + scroll to zoom · ⤢ fullscreen | `modules/hall-ui/public/diagram-viewer.js:125` |
1745
1745
  | `91a14a57b576` | certain | e.g. My open goals | `modules/hall-ui/public/hall-kit.js:409` |
1746
1746
  | `77b0b2b446a1` | certain | e.g. octocat | `modules/hall-ui/public/hall-render.js:300` |
@@ -1890,7 +1890,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1890
1890
  | `70bbd20d223f` | certain | take it | `modules/hall-ui/public/studio.js:743` |
1891
1891
  | `d4f99c118825` | certain | take next | `modules/hall-ui/public/tweak-editor.html:106` |
1892
1892
  | `357cc737dd98` | certain | take the studio page | `modules/hall-ui/public/studio.html:109` |
1893
- | `24fc2b94ea7d` | certain | take this page | `modules/hall-ui/public/tweak-editor.js:324` |
1893
+ | `24fc2b94ea7d` | certain | take this page | `modules/hall-ui/public/tweak-editor.js:325` |
1894
1894
  | `a6e803a31a4d` | certain | task #{…} | `modules/hall-ui/public/copy-desk.js:105` |
1895
1895
  | `eb808f2daba3` | certain | task dependenc{…} · click to chart it · double-click to chart every route from here | `modules/hall-ui/public/sky-interaction.js:37` |
1896
1896
  | `3906fbc07bbe` | certain | task id | `modules/hall-ui/public/task.js:608` |
@@ -1941,7 +1941,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1941
1941
  | `73e8a560927b` | certain | up for a vote | `modules/hall-ui/public/my-agents.js:424` |
1942
1942
  | `f98966dc7cac` | certain | upkeep undeclared | `modules/hall-ui/public/modules.js:104` |
1943
1943
  | `432def6844b7` | certain | upload .docx | `modules/hall-ui/public/tweak-editor.html:66` |
1944
- | `432def6844b7` | certain | upload .docx | `modules/hall-ui/public/tweak-editor.js:506` |
1944
+ | `432def6844b7` | certain | upload .docx | `modules/hall-ui/public/tweak-editor.js:507` |
1945
1945
  | `f26117caa2f1` | certain | usually done in about a minute | `modules/hall-ui/public/ai-studio.js:377` |
1946
1946
  | `4de556377db2` | certain | verdict {…} | `modules/hall-ui/public/task.js:432` |
1947
1947
  | `f20985df3729` | certain | version · {…} | `modules/hall-ui/public/sky-interaction.js:38` |
@@ -1994,8 +1994,8 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1994
1994
  | `78ba2bd4bc44` | certain | {…} criteria · started {…} | `modules/hall-ui/public/roadmap.js:259` |
1995
1995
  | `5ccebd39118e` | certain | {…} deleted. | `modules/hall-ui/public/government.js:324` |
1996
1996
  | `cf89ac85440d` | certain | {…} earned | `modules/hall-ui/public/goals-render.js:821` |
1997
- | `55b949873848` | certain | {…} is in. | `modules/hall-ui/public/tweak-editor.js:577` |
1998
- | `80b4aa799a4b` | certain | {…} is writing this page now. You can read it, download it, or take another page from the studio. | `modules/hall-ui/public/tweak-editor.js:328` |
1997
+ | `55b949873848` | certain | {…} is in. | `modules/hall-ui/public/tweak-editor.js:578` |
1998
+ | `80b4aa799a4b` | certain | {…} is writing this page now. You can read it, download it, or take another page from the studio. | `modules/hall-ui/public/tweak-editor.js:329` |
1999
1999
  | `c80c3434ae36` | certain | {…} key ending {…} | `modules/hall-ui/public/ai-studio.js:272` |
2000
2000
  | `5ad81ff61920` | certain | {…} lands in your balance; your card is charged {…}. | `modules/hall-ui/public/ai-studio.js:517` |
2001
2001
  | `830d2be6f859` | certain | {…} line | `modules/hall-ui/public/tweak-editor.js:235` |
@@ -2845,7 +2845,7 @@
2845
2845
  "occurrences": 2,
2846
2846
  "at": [
2847
2847
  "modules/hall-ui/public/tweak-editor.html:66",
2848
- "modules/hall-ui/public/tweak-editor.js:506"
2848
+ "modules/hall-ui/public/tweak-editor.js:507"
2849
2849
  ]
2850
2850
  },
2851
2851
  {
@@ -9949,7 +9949,7 @@
9949
9949
  "surface": "builders-hall",
9950
9950
  "text": "No page is open.",
9951
9951
  "file": "modules/hall-ui/public/tweak-editor.js",
9952
- "line": 574,
9952
+ "line": 575,
9953
9953
  "origin": "js-text-assign",
9954
9954
  "confidence": "certain"
9955
9955
  },
@@ -10183,7 +10183,7 @@
10183
10183
  "surface": "builders-hall",
10184
10184
  "text": "Nobody is writing this page. Take it, and every line here is yours to type over.",
10185
10185
  "file": "modules/hall-ui/public/tweak-editor.js",
10186
- "line": 323,
10186
+ "line": 324,
10187
10187
  "origin": "js-markup",
10188
10188
  "confidence": "certain"
10189
10189
  },
@@ -14008,7 +14008,7 @@
14008
14008
  "surface": "builders-hall",
14009
14009
  "text": "Take the next page, or pick one from the studio.",
14010
14010
  "file": "modules/hall-ui/public/tweak-editor.js",
14011
- "line": 575,
14011
+ "line": 576,
14012
14012
  "origin": "js-text-assign",
14013
14013
  "confidence": "certain"
14014
14014
  },
@@ -14494,7 +14494,7 @@
14494
14494
  "surface": "builders-hall",
14495
14495
  "text": "The editor could not load.",
14496
14496
  "file": "modules/hall-ui/public/tweak-editor.js",
14497
- "line": 723,
14497
+ "line": 724,
14498
14498
  "origin": "js-notice",
14499
14499
  "confidence": "certain"
14500
14500
  },
@@ -14737,7 +14737,7 @@
14737
14737
  "surface": "builders-hall",
14738
14738
  "text": "The next page could not be read.",
14739
14739
  "file": "modules/hall-ui/public/tweak-editor.js",
14740
- "line": 586,
14740
+ "line": 587,
14741
14741
  "origin": "js-text-assign",
14742
14742
  "confidence": "certain"
14743
14743
  },
@@ -15421,7 +15421,7 @@
15421
15421
  "surface": "builders-hall",
15422
15422
  "text": "This page has been submitted and is on its way to the site. Its words are frozen until it ships or is sent back.",
15423
15423
  "file": "modules/hall-ui/public/tweak-editor.js",
15424
- "line": 331,
15424
+ "line": 332,
15425
15425
  "origin": "js-markup",
15426
15426
  "confidence": "certain"
15427
15427
  },
@@ -17977,7 +17977,7 @@
17977
17977
  "surface": "builders-hall",
17978
17978
  "text": "downloaded .docx",
17979
17979
  "file": "modules/hall-ui/public/tweak-editor.js",
17980
- "line": 481,
17980
+ "line": 482,
17981
17981
  "origin": "js-text-assign",
17982
17982
  "confidence": "certain"
17983
17983
  },
@@ -19327,7 +19327,7 @@
19327
19327
  "surface": "builders-hall",
19328
19328
  "text": "take this page",
19329
19329
  "file": "modules/hall-ui/public/tweak-editor.js",
19330
- "line": 324,
19330
+ "line": 325,
19331
19331
  "origin": "js-markup",
19332
19332
  "confidence": "certain"
19333
19333
  },
@@ -19786,7 +19786,7 @@
19786
19786
  "surface": "builders-hall",
19787
19787
  "text": "upload .docx",
19788
19788
  "file": "modules/hall-ui/public/tweak-editor.js",
19789
- "line": 506,
19789
+ "line": 507,
19790
19790
  "origin": "js-text-assign",
19791
19791
  "confidence": "certain"
19792
19792
  },
@@ -20263,7 +20263,7 @@
20263
20263
  "surface": "builders-hall",
20264
20264
  "text": "{…} is in.",
20265
20265
  "file": "modules/hall-ui/public/tweak-editor.js",
20266
- "line": 577,
20266
+ "line": 578,
20267
20267
  "origin": "js-text-assign",
20268
20268
  "confidence": "certain"
20269
20269
  },
@@ -20272,7 +20272,7 @@
20272
20272
  "surface": "builders-hall",
20273
20273
  "text": "{…} is writing this page now. You can read it, download it, or take another page from the studio.",
20274
20274
  "file": "modules/hall-ui/public/tweak-editor.js",
20275
- "line": 328,
20275
+ "line": 329,
20276
20276
  "origin": "js-markup",
20277
20277
  "confidence": "certain"
20278
20278
  },
package/docs/file-map.md CHANGED
@@ -461,7 +461,7 @@ To install on a new machine, symlink each routine's directory under `~/.claude/s
461
461
  ```
462
462
  .claude/hooks/
463
463
  ├── secret-gate.js ← PreToolUse (Edit|Write|MultiEdit|NotebookEdit|Bash|PowerShell): cooperative, fail-OPEN block of secret-shaped content before it reaches the tree or a shell (task 1003125, ADR 0022)
464
- ├── run-node.sh ← the node resolver every hook command runs through (task 1003548): $OTB_NODE_BIN → PATH → known install dirs → nvm; one actionable line + exit 1 when none is found. 1,055 hook runs had died silently with `node: command not found`
464
+ ├── run-node.sh ← the node resolver every hook command runs through (task 1003548): $OTB_NODE_BIN → PATH → known install dirs → nvm; one actionable line + exit 1 when none is found. 1,055 hook runs had died silently with `node: command not found`. Also runs the SESSION's checkout's copy of a hook when the session sits in a worktree, since Claude Code points $CLAUDE_PROJECT_DIR at the main checkout (task 1005015; off-switch OTB_HOOKS_FROM_PROJECT_DIR=1)
465
465
  ├── edit-hints.js ← PostToolUse (Edit|Write|MultiEdit): lints a saved SKILL.md's frontmatter (scripts/bongos/skill-lint.js) and names the generator an edited path makes stale (copy-registry, repo-map blocks, file-map, openapi, §13 snippet) with its command (task 1003548)
466
466
  ├── git-guard.js ← PreToolUse (Bash|PowerShell): same contract as secret-gate — blocks `git stash` (repo-global stack, learning 1000215), raw `git worktree remove` (follows the node_modules junction, task 1002809), `git push origin main` (PR-only) and `git branch -D`, each with its remedy; kill-switch BONGOS_GIT_GUARD_OFF=1 (task 1003365)
467
467
  ├── allow-rule-guard.js ← PreToolUse (PowerShell): a command that names something the project's allow-list pre-approves ASKS unless it is PLAIN — command names, bare-word arguments, `$name` reads, literal strings, `; | && ||`, `2>&1` / `> $null`, and nothing else. An allowlist of shape, not a denylist of tricks (the denylist cut was evaded eleven ways in review). Never blocks, fails open, silent for commands nobody pre-allowed. Exists because the client ordering that already does this for PowerShell is undocumented (ADR 0304 amendment, task 1004014); kill-switch BONGOS_ALLOW_RULE_GUARD_OFF=1
@@ -483,7 +483,8 @@ To install on a new machine, symlink each routine's directory under `~/.claude/s
483
483
  ├── stuck-strikes.js ← shared helper, not a hook: the per-session strike counter (hashed signatures in os.tmpdir()) + the static instruction text; stuck-detector.js, git-guard.js and worktree-guard.js all count through it (task 1003990)
484
484
  ├── pre-compact.js ← PreCompact: thin reader around eviction-policy.js — emits an eviction directive (blocks to drop + one-line recovery stubs) at the compaction seam (task 1349)
485
485
  ├── eviction-policy.js ← pure deterministic in-session compaction classifier (transcript turns → eviction set + replacement stubs); no I/O, unit-tested in tests/eviction_policy.mjs; consumed by pre-compact.js (task 1348)
486
- └── stop-refcheck.js ← Stop: deterministic backstop that catches a bare `#NNN` Bongos ref in live session text (autolinks to a 404 GitHub issue) and asks for the clickable form (follow-on to task 929)
486
+ ├── stop-refcheck.js ← Stop: deterministic backstop that catches a bare `#NNN` Bongos ref in live session text (autolinks to a 404 GitHub issue) and asks for the clickable form (follow-on to task 929)
487
+ └── stop-slopcheck.js ← Stop: when the agent's last message reverses an earlier belief ("turns out", "I was wrong"), asks once whether a doc/hook/output misled it — the Slop Bongo rule; words from src/bongos/agent-standing-rules.js, with a local copy held equal by tests for a checkout whose core cannot load; reads only the transcript tail (task 1005015)
487
488
  ```
488
489
 
489
490
  > Restored in task 1003365 from the box's pre-re-seed checkout: the tree was lost when core was re-seeded to 1.18.0 (task 1003272 found the sound half; this brought back the rest). `stop-sound.js` was NOT restored — `scripts/bongos/turn-end-sound.js` superseded it. Every hook above is wired in `.claude/settings.json`, which is the authority on what actually runs.
@@ -3266,7 +3266,7 @@ is load-bearing: the script throws rather than guess if it is missing, and
3266
3266
  landed since 1.24.0 with no explicit bump. run 40985289858. (task 1002620)
3267
3267
  1.24.2 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
3268
3268
  landed since 1.24.1 with no explicit bump. run 41000649913. (task 1002620)
3269
- 1.24.4 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
3270
- landed since 1.24.2 with no explicit bump. run 41004393103. (task 1002620)
3269
+ 1.24.5 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
3270
+ landed since 1.24.2 with no explicit bump. run 41006914357. (task 1002620)
3271
3271
  ---------------------------------------------------------------------------
3272
3272
  ```
@@ -4300,7 +4300,7 @@
4300
4300
  "surface": "builders",
4301
4301
  "title": "Tweak a page",
4302
4302
  "states_read": ["doc","typed","chrome","submitted","picking","out"],
4303
- "files_hash": "a2b68a2fa0504a35",
4303
+ "files_hash": "6ea8b7ad13d0121d",
4304
4304
  "reading_hash": "711c540ebc7ef977",
4305
4305
  "counts": {"lines":23,"placed":15,"shared":1,"unplaced":7},
4306
4306
  "omitted": {"data":35},
@@ -8,7 +8,11 @@
8
8
  // hand. Two shapes hold nothing:
9
9
  //
10
10
  // blank `ready`, no draft and no frozen batch: opened in the
11
- // studio, nothing written, the claim dropped.
11
+ // studio, nothing written, the claim dropped. Closes once
12
+ // untouched for page-status's BLANK_CLOSES_AFTER (1 day, the
13
+ // owner's answer on task 1004971; task 1004972). Until then
14
+ // it reads `blank` ("Opened, nothing written yet"), never
15
+ // `unknown`.
12
16
  // nothing_to_apply `ready` with a frozen batch whose `lines` is empty: every
13
17
  // rewrite left the batch for an engineer task at submit
14
18
  // (unplaced, shared or removed lines), so /tweak has no line
@@ -32,18 +36,47 @@ const pageStatus = require('./page-status');
32
36
  const GRACE_MS = Number(process.env.COPY_AUTO_CLOSE_GRACE_MS) || 60 * 60_000;
33
37
 
34
38
  const NOTES = Object.freeze({
35
- blank: 'Closed by itself: the round was opened but nothing was written in it.',
39
+ blank: 'Closed: nothing was written. The round was opened and left blank for a day; claim the page again to start one.',
36
40
  nothing_to_apply: 'Closed by itself: every rewritten line went to an engineer task, so nothing was left to apply on the page.',
37
41
  draft_expired: 'Closed by itself: the draft sat untouched for two weeks. Its words stay on this task; claim the page again to start over.',
42
+ orphaned_apply: 'Released: the apply stopped without finishing. Nobody holds this round any more, so it is back in the queue.',
38
43
  });
39
44
 
40
- function closeReason(task, { now = Date.now(), graceMs = GRACE_MS, draftExpiresMs = pageStatus.DRAFT_EXPIRES_AFTER } = {}) {
45
+ // task 1004972 T2 (task 1004973): an ORPHANED round is `active` with no open
46
+ // claim. The applier's claim was released (the runner's reconcile, a crashed
47
+ // worker, a dropped session) but the status never moved, so it read `unknown`
48
+ // and nothing ever picked it up again. A round someone still holds, a live and
49
+ // heartbeating apply, is never touched: holder_id is the open claim, and the
50
+ // lifecycle port re-checks that no claim was taken under its row lock.
51
+ function orphanReason(task, { now = Date.now(), graceMs = GRACE_MS } = {}) {
52
+ if (!task || task.status !== 'active' || task.holder_id != null) return null;
53
+ const touched = Date.parse(task.updated_at || task.created_at || '');
54
+ if (!Number.isFinite(touched) || now - touched < graceMs) return null;
55
+ return 'orphaned_apply';
56
+ }
57
+
58
+ // The orphan goes back to `ready` with its description kept whole plus the
59
+ // reason, as a sent-back block (pages.appendSentBack, the one writer of that
60
+ // block, which only APPENDS). A frozen batch then reads `submitted` again and the
61
+ // next applier reads why; a draft stays a draft. No word of the draft or the
62
+ // batch is changed.
63
+ function releaseKeeping(note, at, by) {
64
+ return (task) => pages.appendSentBack(task.description, { at, by, note });
65
+ }
66
+
67
+ function closeReason(task, {
68
+ now = Date.now(), graceMs = GRACE_MS,
69
+ draftExpiresMs = pageStatus.DRAFT_EXPIRES_AFTER, blankClosesMs = pageStatus.BLANK_CLOSES_AFTER,
70
+ } = {}) {
41
71
  if (!task || task.status !== 'ready' || task.holder_id != null) return null;
42
72
  const touched = Date.parse(task.updated_at || task.created_at || '');
43
73
  if (!Number.isFinite(touched) || now - touched < graceMs) return null;
44
74
  const p = pages.blockPresence(task.description);
45
- // task 1004901: a draft its artist left untouched for two weeks expires.
46
- if (!p.batch) return p.draft ? (now - touched >= draftExpiresMs ? 'draft_expired' : null) : 'blank';
75
+ const age = now - touched;
76
+ // task 1004901: a draft its artist left untouched expires. task 1004972: a
77
+ // blank round closes after a day. A batch with lines is never touched here,
78
+ // and a draft only by its own expiry.
79
+ if (!p.batch) return p.draft ? (age >= draftExpiresMs ? 'draft_expired' : null) : (age >= blankClosesMs ? 'blank' : null);
47
80
  const b = pages.parseBatchBlock(task.description);
48
81
  if (b.ok && b.batch.lines.length === 0) return 'nothing_to_apply';
49
82
  return null;
@@ -58,16 +91,21 @@ async function runAutoClose({ now = Date.now(), resolve = (k) => (api.resolveOpt
58
91
  return { closed: [], skipped: 'no_lifecycle' };
59
92
  }
60
93
  const tasks = await lifecycle.listPageTweakTasks();
61
- const due = tasks.map((t) => ({ t, why: closeReason(t, { now }) })).filter((x) => x.why);
94
+ const due = tasks.map((t) => ({ t, why: closeReason(t, { now }) || orphanReason(t, { now }) })).filter((x) => x.why);
62
95
  if (!due.length) return { closed: [] };
63
96
  const owner = await founder();
64
97
  if (!owner) return { closed: [], skipped: 'no_owner' };
65
98
  const closed = [];
99
+ const at = new Date(now).toISOString();
66
100
  for (const { t, why } of due) {
67
- const r = await lifecycle.releaseStuckTweak({ taskId: t.id, builderId: owner.id, expectedStatus: 'ready', note: NOTES[why] });
101
+ const orphan = why === 'orphaned_apply';
102
+ const r = await lifecycle.releaseStuckTweak({
103
+ taskId: t.id, builderId: owner.id, expectedStatus: orphan ? 'active' : 'ready', note: NOTES[why],
104
+ ...(orphan ? { compose: releaseKeeping(NOTES[why], at, String(owner.id)) } : {}),
105
+ });
68
106
  closed.push({ task_id: String(t.id), why, outcome: r.outcome });
69
107
  }
70
108
  return { closed };
71
109
  }
72
110
 
73
- module.exports = { closeReason, runAutoClose };
111
+ module.exports = { closeReason, orphanReason, runAutoClose };