@bongos/core 1.21.77 → 1.21.78

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/gds/package-core.js",
5
- "core_version": "1.21.77",
6
- "core_contract": "1.21.77",
7
- "source_commit": "76d65ce7f1ef50797508ddbdd196f00651d65cba",
5
+ "core_version": "1.21.78",
6
+ "core_contract": "1.21.78",
7
+ "source_commit": "2cb57d19e4b7c3b80e9bf50f7134ddbc2319cc85",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-10-08T18:44:21.731Z",
9
+ "built_at": "2026-10-08T19:01:56.139Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
12
  "docs_redacted": 589,
13
13
  "agent_docs_stubbed": 28,
14
- "functional_verbatim": 2986,
14
+ "functional_verbatim": 2987,
15
15
  "rules": 3,
16
16
  "gate_literals": 3,
17
17
  "gate": "passed"
18
18
  },
19
- "file_count": 3604,
20
- "tree_sha256": "11a1cb2fadb53e862f7dd3306796bf1697f883f7dad2b28fb19aa6af0343d00a",
19
+ "file_count": 3605,
20
+ "tree_sha256": "7ed89722b32c1503c4119aad56a11d69cdd6783c6a32247c1b838e10255d703e",
21
21
  "files": [
22
22
  {
23
23
  "path": ".claude/skills/ask-for-help/SKILL.md",
@@ -2342,12 +2342,12 @@
2342
2342
  {
2343
2343
  "path": "docs/copy-inventory.md",
2344
2344
  "mode": "0000644",
2345
- "sha256": "72f6603ffa1e26dc66ac6625f9e00dc8dea40add9b447e7cd83b4c60bdd53f2d"
2345
+ "sha256": "9409110cfb3c0ad8a5002e6c1d6e0663b67dd27190eb84608d8bcbf577ac0d69"
2346
2346
  },
2347
2347
  {
2348
2348
  "path": "docs/copy-registry.json",
2349
2349
  "mode": "0000644",
2350
- "sha256": "066f9c2905f62afbf25e892406aa20fe73d1fb9e122e4906cf58e65cb9904bab"
2350
+ "sha256": "2700f38f43b85775aa373393bfe9e7313f685ad004576a2f3d1f2711ab02371c"
2351
2351
  },
2352
2352
  {
2353
2353
  "path": "docs/design/apex-pass-2-direction.md",
@@ -2857,7 +2857,7 @@
2857
2857
  {
2858
2858
  "path": "docs/module-api-changelog.md",
2859
2859
  "mode": "0000644",
2860
- "sha256": "56f1782b03b6703fb771c226ad29b5f0aab173501b9786f85a8a27135d398b54"
2860
+ "sha256": "cb77b95f84f2a680682cfd6eaa2243ded0b3857ba9f74d4859bf8fbd8f2c6a0e"
2861
2861
  },
2862
2862
  {
2863
2863
  "path": "docs/modules-contract.md",
@@ -2947,7 +2947,7 @@
2947
2947
  {
2948
2948
  "path": "docs/page-readings.json",
2949
2949
  "mode": "0000644",
2950
- "sha256": "ccd0f50285d5037d0763fbec9c77c2af8af0f7624fcdfa87b47b8a93341a4850"
2950
+ "sha256": "3a1e2231b7e1f52fb0734fa9fb7de14dc214f78a0e3c981185721f1d20e26596"
2951
2951
  },
2952
2952
  {
2953
2953
  "path": "docs/project-context.template.md",
@@ -5752,12 +5752,12 @@
5752
5752
  {
5753
5753
  "path": "modules/hall-ui/public/goals-page.js",
5754
5754
  "mode": "0000644",
5755
- "sha256": "5b45e7128e30d9d3c0b3da17d963c24885b2d05c898032f99a9c35930c5f7b87"
5755
+ "sha256": "9f5944388fa573d7c483a6a690d0de53527a407facc13a9a00b01b06c5772047"
5756
5756
  },
5757
5757
  {
5758
5758
  "path": "modules/hall-ui/public/goals-render.js",
5759
5759
  "mode": "0000644",
5760
- "sha256": "9e7b9b9fdaa84dba3abfe920277a7ac5d188e51b231e53264663ead766539af9"
5760
+ "sha256": "82bbcc5d2b7c098dbf228b30cdccadca6fbb7d3b3a73189f6298b0697c56f110"
5761
5761
  },
5762
5762
  {
5763
5763
  "path": "modules/hall-ui/public/goals.css",
@@ -6327,7 +6327,7 @@
6327
6327
  {
6328
6328
  "path": "modules/hall-ui/public/task-lib.js",
6329
6329
  "mode": "0000644",
6330
- "sha256": "09fe2e5d65a181dc6b3afa8d3d50b17f690ea77896ad16a998e809bc59660c9b"
6330
+ "sha256": "239b8a972f36ea1f7a7df2b75f74205909cd2f07f07885c2715b8298d93b421d"
6331
6331
  },
6332
6332
  {
6333
6333
  "path": "modules/hall-ui/public/task.css",
@@ -10072,12 +10072,12 @@
10072
10072
  {
10073
10073
  "path": "package-lock.json",
10074
10074
  "mode": "0000644",
10075
- "sha256": "0a817d0964c8c54e6a9aecc5a91e461144530c5faf82a1a3f3e34de5d010c043"
10075
+ "sha256": "ff4e111b5c1ea4e150c980fe26e6d4d630deaa050a55f56b5435b30bb853786b"
10076
10076
  },
10077
10077
  {
10078
10078
  "path": "package.json",
10079
10079
  "mode": "0000644",
10080
- "sha256": "171ef8d35c51d0d3d38c9937dc35e133f65fceb1a053c405b71fa7dee91af557"
10080
+ "sha256": "01eefef7e94a2fd1526e9fe22f1052d5bf119bfc90b6f0e24e1e9e434b0a442a"
10081
10081
  },
10082
10082
  {
10083
10083
  "path": "public-docs/index.html",
@@ -10097,7 +10097,7 @@
10097
10097
  {
10098
10098
  "path": "release-notes.json",
10099
10099
  "mode": "0000644",
10100
- "sha256": "3dabfbcad5f569e2916436158ed053bc7e2d549297dd170709d6e4666b32560e"
10100
+ "sha256": "6aa854cf6f9159f03e8f34d8da733d63a3ce296cea8263d9c310c128a860880e"
10101
10101
  },
10102
10102
  {
10103
10103
  "path": "scripts/cron/style_guide_audit.sh",
@@ -12337,7 +12337,7 @@
12337
12337
  {
12338
12338
  "path": "src/module-api.js",
12339
12339
  "mode": "0000644",
12340
- "sha256": "6646a1b05fccdb64959f25ce5ca4cbe8394b63be8f81120bade4fc730defcde3"
12340
+ "sha256": "9e7ab3e5cb2928e5d000d0a732b94c926797420d28ff49451f3e99ccac9366e7"
12341
12341
  },
12342
12342
  {
12343
12343
  "path": "src/module-loader/catalog.js",
@@ -14139,6 +14139,11 @@
14139
14139
  "mode": "0000644",
14140
14140
  "sha256": "9853fe32906b842e6c78dd024e33bee5c00649ed2de2f6b593d736d0155e7832"
14141
14141
  },
14142
+ {
14143
+ "path": "tests/goal_plan_with_claude.mjs",
14144
+ "mode": "0000644",
14145
+ "sha256": "a167f10ea22b169c27d12f882b0b3ef798be723d8e972150a5d9791473ff9f78"
14146
+ },
14142
14147
  {
14143
14148
  "path": "tests/goal_routes.mjs",
14144
14149
  "mode": "0000644",
@@ -4,13 +4,13 @@
4
4
  > Deterministic on a given tree — regenerate and commit rather than hand-editing.
5
5
  > Machine-readable twin: [`copy-registry.json`](copy-registry.json).
6
6
 
7
- **2607 strings** across 3 surfaces · 2214 distinct pieces of copy · 2607 certain, 0 heuristic · 231 shown in more than one place.
7
+ **2610 strings** across 3 surfaces · 2217 distinct pieces of copy · 2610 certain, 0 heuristic · 231 shown in more than one place.
8
8
 
9
9
  ## Surfaces
10
10
 
11
11
  | surface | lives at | files | strings |
12
12
  |---|---|---|---|
13
- | `builders-hall` | `modules/hall-ui/public` | 133 | 1839 |
13
+ | `builders-hall` | `modules/hall-ui/public` | 133 | 1842 |
14
14
  | `status-dashboard` | `modules/status-ui/public` | 4 | 100 |
15
15
  | `landing` | `modules/public-landing/public` | 8 | 668 |
16
16
 
@@ -78,7 +78,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
78
78
  | `f6f68ba322be` | 3x | Open {…} | modules/hall-ui/public/goal-inbox.js:53, modules/hall-ui/public/goal-inbox.js:69, modules/hall-ui/public/goals.js:67 |
79
79
  | … | | _191 more in the JSON registry_ | |
80
80
 
81
- ## `builders-hall` — 1839 strings
81
+ ## `builders-hall` — 1842 strings
82
82
 
83
83
  | id | conf | text | where |
84
84
  |---|---|---|---|
@@ -310,6 +310,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
310
310
  | `c07898571b24` | certain | Connects to | `modules/hall-ui/public/atlas.js:290` |
311
311
  | `999e1955bb1c` | certain | Context layer | `modules/hall-ui/public/atlas.html:47` |
312
312
  | `296eb6da10ca` | certain | Contribution to this goal | `modules/hall-ui/public/goals-render.js:791` |
313
+ | `46296553af84` | certain | Copies a prompt to paste into a Claude Code session | `modules/hall-ui/public/goals-render.js:965` |
313
314
  | `4fb972405d3d` | certain | Copy all {…} for Session Start | `modules/hall-ui/public/collab.js:478` |
314
315
  | `12ee050d0180` | certain | Copy desk | `modules/hall-ui/public/copy-desk.html:15` |
315
316
  | `12ee050d0180` | certain | Copy desk | `modules/hall-ui/public/copy-desk.html:15` |
@@ -340,7 +341,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
340
341
  | `6214998a5ebe` | certain | Could not check for a newer version: {…}. | `modules/hall-ui/public/settings-software-update.js:180` |
341
342
  | `9ab613a308d6` | certain | Could not check for updates: {…}. | `modules/hall-ui/public/settings-software-update.js:255` |
342
343
  | `c3f99e7c6e6b` | certain | Could not copy automatically — select and copy manually. ({…}) | `modules/hall-ui/public/settings.js:815` |
343
- | `e3fd1febf63d` | certain | Could not copy to the clipboard. Try again. | `modules/hall-ui/public/goals-page.js:423` |
344
+ | `e3fd1febf63d` | certain | Could not copy to the clipboard. Try again. | `modules/hall-ui/public/goals-page.js:435` |
344
345
  | `e3fd1febf63d` | certain | Could not copy to the clipboard. Try again. | `modules/hall-ui/public/work.js:649` |
345
346
  | `04824d351824` | certain | Could not copy — select the text and copy it manually. | `modules/hall-ui/public/copy-on-click.js:110` |
346
347
  | `fa309d1d0104` | certain | Could not create rank: {…} | `modules/hall-ui/public/government.js:448` |
@@ -552,7 +553,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
552
553
  | `ec88b946ad16` | certain | Goal {…} | `modules/hall-ui/public/gate.js:360` |
553
554
  | `6f0deb0b667d` | certain | Goal {…} added. | `modules/hall-ui/public/gate.js:480` |
554
555
  | `8a421ae268e6` | certain | Goal {…} removed. | `modules/hall-ui/public/gate.js:504` |
555
- | `e0bc28d10785` | certain | Goals could not be loaded. Refresh to try again. | `modules/hall-ui/public/goals-page.js:883` |
556
+ | `e0bc28d10785` | certain | Goals could not be loaded. Refresh to try again. | `modules/hall-ui/public/goals-page.js:895` |
556
557
  | `4517f2253d0f` | certain | Goals couldn’t be loaded just now. Refresh to try again. | `modules/hall-ui/public/goals.js:121` |
557
558
  | `6a85997bda21` | certain | Goals created | `modules/hall-ui/public/profile.html:154` |
558
559
  | `6bbd703b5aad` | certain | Goals it can work on | `modules/hall-ui/public/gate.js:376` |
@@ -627,7 +628,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
627
628
  | `783853467d52` | certain | Image-generation key | `modules/hall-ui/public/settings.html:198` |
628
629
  | `5c2e2bcbd5fb` | certain | In Progress | `modules/hall-ui/public/work.html:115` |
629
630
  | `75cfcdd41661` | certain | In this primer | `modules/hall-ui/public/primer.html:58` |
630
- | `dad3388b49c9` | certain | Invitation rescinded. | `modules/hall-ui/public/goals-page.js:672` |
631
+ | `dad3388b49c9` | certain | Invitation rescinded. | `modules/hall-ui/public/goals-page.js:684` |
631
632
  | `12561be47da9` | certain | Invitation sent — they join once they accept. | `modules/hall-ui/public/goals-render.js:1300` |
632
633
  | `24f9e88c21f6` | certain | Invite by GitHub username | `modules/hall-ui/public/watch.js:295` |
633
634
  | `33a35c77d372` | certain | Invite expired {…} — invite them again to reopen the door | `modules/hall-ui/public/watch.js:501` |
@@ -911,6 +912,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
911
912
  | `4f87d5b17b54` | certain | Pick one. You can switch any time from the top bar. | `modules/hall-ui/public/craft-mode.js:424` |
912
913
  | `45378ea261f6` | certain | Pick one… | `modules/hall-ui/public/settings.html:257` |
913
914
  | `25815a34d246` | certain | Plain speech | `modules/hall-ui/public/sessions.html:78` |
915
+ | `727ef20b71df` | certain | Plan with Claude | `modules/hall-ui/public/goals-render.js:965` |
914
916
  | `07d7e62640d6` | certain | Post & resolve | `modules/hall-ui/public/collab.js:170` |
915
917
  | `5b08da0632c7` | certain | Post reply | `modules/hall-ui/public/collab.js:175` |
916
918
  | `5b08da0632c7` | certain | Post reply | `modules/hall-ui/public/collab.js:768` |
@@ -937,9 +939,9 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
937
939
  | `1fe749ae5677` | certain | Project settings — {{worldName}} | `modules/hall-ui/public/project-settings.html:6` |
938
940
  | `1fe749ae5677` | certain | Project settings — {{worldName}} | `modules/hall-ui/public/project-settings.html:6` |
939
941
  | `16521a997ade` | certain | Project type | `modules/hall-ui/public/government.js:856` |
940
- | `dd4bc23c7759` | certain | Prompt for #{…} copied to your clipboard. | `modules/hall-ui/public/goals-page.js:416` |
942
+ | `dd4bc23c7759` | certain | Prompt for #{…} copied to your clipboard. | `modules/hall-ui/public/goals-page.js:428` |
941
943
  | `dd4bc23c7759` | certain | Prompt for #{…} copied to your clipboard. | `modules/hall-ui/public/work.js:636` |
942
- | `cd7dc83871b6` | certain | Prompt for #{…} copied. | `modules/hall-ui/public/goals-page.js:422` |
944
+ | `cd7dc83871b6` | certain | Prompt for #{…} copied. | `modules/hall-ui/public/goals-page.js:434` |
943
945
  | `cd7dc83871b6` | certain | Prompt for #{…} copied. | `modules/hall-ui/public/work.js:647` |
944
946
  | `fe7f3488fda8` | certain | Propose new wording | `modules/hall-ui/public/copy-desk.html:152` |
945
947
  | `abee9a18325d` | certain | Propose wording… | `modules/hall-ui/public/copy-desk.js:179` |
@@ -979,7 +981,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
979
981
  | `6d8347c3575a` | certain | Release a thought | `modules/hall-ui/public/goal-map.html:90` |
980
982
  | `6d8347c3575a` | certain | Release a thought | `modules/hall-ui/public/thinking.html:98` |
981
983
  | `58af483d7a84` | certain | Release task {…} | `modules/hall-ui/public/goals-render.js:373` |
982
- | `6f86e17007c6` | certain | Release your claim on #{…}? It returns to the queue and no {…} are earned. | `modules/hall-ui/public/goals-page.js:531` |
984
+ | `6f86e17007c6` | certain | Release your claim on #{…}? It returns to the queue and no {…} are earned. | `modules/hall-ui/public/goals-page.js:543` |
983
985
  | `6f86e17007c6` | certain | Release your claim on #{…}? It returns to the queue and no {…} are earned. | `modules/hall-ui/public/work.js:741` |
984
986
  | `975ffb256651` | certain | Release {…}? {…} to the queue and no {…} are earned. | `modules/hall-ui/public/bulk-toolbar.js:249` |
985
987
  | `c49f9b9f8864` | certain | Remake or tweak | `modules/hall-ui/public/studio.js:211` |
@@ -1104,7 +1106,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1104
1106
  | `b20cd8a4fa21` | certain | Shown to Claude | `modules/hall-ui/public/commands.html:36` |
1105
1107
  | `9bea6404e6e1` | certain | Sign in | `modules/hall-ui/public/profile.js:263` |
1106
1108
  | `9bea6404e6e1` | certain | Sign in | `modules/hall-ui/public/settings.html:45` |
1107
- | `19ab56cc3932` | certain | Sign in to filter to your goals | `modules/hall-ui/public/goals-page.js:853` |
1109
+ | `19ab56cc3932` | certain | Sign in to filter to your goals | `modules/hall-ui/public/goals-page.js:865` |
1108
1110
  | `969f95f183ca` | certain | Sign in to the platform once to activate your profile before connecting. | `modules/hall-ui/public/profile-connections.js:253` |
1109
1111
  | `e57ec24e13ef` | certain | Sign in with GitHub | `modules/hall-ui/public/hall-render.js:278` |
1110
1112
  | `e57ec24e13ef` | certain | Sign in with GitHub | `modules/hall-ui/public/hall-render.js:370` |
@@ -1143,6 +1145,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1143
1145
  | `d3b002f92f1a` | certain | Start governing: enter the street view | `modules/hall-ui/public/city.html:79` |
1144
1146
  | `eaad12cacb9d` | certain | Start over | `modules/hall-ui/public/studio.js:264` |
1145
1147
  | `b01258e8242a` | certain | Starting government | `modules/hall-ui/public/genesis-home.js:131` |
1148
+ | `42a57b62b2fe` | certain | Still loading this goal's tasks. Try again in a moment. | `modules/hall-ui/public/goals-page.js:412` |
1146
1149
  | `efe530c0e3a7` | certain | Still open | `modules/hall-ui/public/profile.js:568` |
1147
1150
  | `92f87ca38190` | certain | Still splitting. It will appear in this page's docs when it is done. | `modules/hall-ui/public/page-notes.js:255` |
1148
1151
  | `490a3cbb8c1c` | certain | Still working on core {…}. It keeps going without this page — reload to see where it got to. | `modules/hall-ui/public/deploy.js:764` |
@@ -3,9 +3,9 @@
3
3
  "generator": "scripts/gds/copy-inventory.js",
4
4
  "goal": 1000074,
5
5
  "counts": {
6
- "strings": 2607,
7
- "unique_ids": 2214,
8
- "certain": 2607,
6
+ "strings": 2610,
7
+ "unique_ids": 2217,
8
+ "certain": 2610,
9
9
  "heuristic": 0,
10
10
  "duplicate_ids": 231
11
11
  },
@@ -13,7 +13,7 @@
13
13
  "builders-hall": {
14
14
  "at": "modules/hall-ui/public",
15
15
  "files": 133,
16
- "strings": 1839
16
+ "strings": 1842
17
17
  },
18
18
  "status-dashboard": {
19
19
  "at": "modules/status-ui/public",
@@ -1016,7 +1016,7 @@
1016
1016
  "text": "Could not copy to the clipboard. Try again.",
1017
1017
  "occurrences": 2,
1018
1018
  "at": [
1019
- "modules/hall-ui/public/goals-page.js:423",
1019
+ "modules/hall-ui/public/goals-page.js:435",
1020
1020
  "modules/hall-ui/public/work.js:649"
1021
1021
  ]
1022
1022
  },
@@ -1586,7 +1586,7 @@
1586
1586
  "text": "Prompt for #{…} copied to your clipboard.",
1587
1587
  "occurrences": 2,
1588
1588
  "at": [
1589
- "modules/hall-ui/public/goals-page.js:416",
1589
+ "modules/hall-ui/public/goals-page.js:428",
1590
1590
  "modules/hall-ui/public/work.js:636"
1591
1591
  ]
1592
1592
  },
@@ -1596,7 +1596,7 @@
1596
1596
  "text": "Prompt for #{…} copied.",
1597
1597
  "occurrences": 2,
1598
1598
  "at": [
1599
- "modules/hall-ui/public/goals-page.js:422",
1599
+ "modules/hall-ui/public/goals-page.js:434",
1600
1600
  "modules/hall-ui/public/work.js:647"
1601
1601
  ]
1602
1602
  },
@@ -1646,7 +1646,7 @@
1646
1646
  "text": "Release your claim on #{…}? It returns to the queue and no {…} are earned.",
1647
1647
  "occurrences": 2,
1648
1648
  "at": [
1649
- "modules/hall-ui/public/goals-page.js:531",
1649
+ "modules/hall-ui/public/goals-page.js:543",
1650
1650
  "modules/hall-ui/public/work.js:741"
1651
1651
  ]
1652
1652
  },
@@ -4564,6 +4564,15 @@
4564
4564
  "origin": "js-markup",
4565
4565
  "confidence": "certain"
4566
4566
  },
4567
+ {
4568
+ "id": "46296553af84",
4569
+ "surface": "builders-hall",
4570
+ "text": "Copies a prompt to paste into a Claude Code session",
4571
+ "file": "modules/hall-ui/public/goals-render.js",
4572
+ "line": 965,
4573
+ "origin": "js-markup",
4574
+ "confidence": "certain"
4575
+ },
4567
4576
  {
4568
4577
  "id": "4fb972405d3d",
4569
4578
  "surface": "builders-hall",
@@ -4839,7 +4848,7 @@
4839
4848
  "surface": "builders-hall",
4840
4849
  "text": "Could not copy to the clipboard. Try again.",
4841
4850
  "file": "modules/hall-ui/public/goals-page.js",
4842
- "line": 423,
4851
+ "line": 435,
4843
4852
  "origin": "js-notice",
4844
4853
  "confidence": "certain"
4845
4854
  },
@@ -6747,7 +6756,7 @@
6747
6756
  "surface": "builders-hall",
6748
6757
  "text": "Goals could not be loaded. Refresh to try again.",
6749
6758
  "file": "modules/hall-ui/public/goals-page.js",
6750
- "line": 883,
6759
+ "line": 895,
6751
6760
  "origin": "js-text-assign",
6752
6761
  "confidence": "certain"
6753
6762
  },
@@ -7422,7 +7431,7 @@
7422
7431
  "surface": "builders-hall",
7423
7432
  "text": "Invitation rescinded.",
7424
7433
  "file": "modules/hall-ui/public/goals-page.js",
7425
- "line": 672,
7434
+ "line": 684,
7426
7435
  "origin": "js-notice",
7427
7436
  "confidence": "certain"
7428
7437
  },
@@ -9973,6 +9982,15 @@
9973
9982
  "origin": "html-text",
9974
9983
  "confidence": "certain"
9975
9984
  },
9985
+ {
9986
+ "id": "727ef20b71df",
9987
+ "surface": "builders-hall",
9988
+ "text": "Plan with Claude",
9989
+ "file": "modules/hall-ui/public/goals-render.js",
9990
+ "line": 965,
9991
+ "origin": "js-markup",
9992
+ "confidence": "certain"
9993
+ },
9976
9994
  {
9977
9995
  "id": "07d7e62640d6",
9978
9996
  "surface": "builders-hall",
@@ -10212,7 +10230,7 @@
10212
10230
  "surface": "builders-hall",
10213
10231
  "text": "Prompt for #{…} copied to your clipboard.",
10214
10232
  "file": "modules/hall-ui/public/goals-page.js",
10215
- "line": 416,
10233
+ "line": 428,
10216
10234
  "origin": "js-notice",
10217
10235
  "confidence": "certain"
10218
10236
  },
@@ -10230,7 +10248,7 @@
10230
10248
  "surface": "builders-hall",
10231
10249
  "text": "Prompt for #{…} copied.",
10232
10250
  "file": "modules/hall-ui/public/goals-page.js",
10233
- "line": 422,
10251
+ "line": 434,
10234
10252
  "origin": "js-notice",
10235
10253
  "confidence": "certain"
10236
10254
  },
@@ -10590,7 +10608,7 @@
10590
10608
  "surface": "builders-hall",
10591
10609
  "text": "Release your claim on #{…}? It returns to the queue and no {…} are earned.",
10592
10610
  "file": "modules/hall-ui/public/goals-page.js",
10593
- "line": 531,
10611
+ "line": 543,
10594
10612
  "origin": "js-notice",
10595
10613
  "confidence": "certain"
10596
10614
  },
@@ -11715,7 +11733,7 @@
11715
11733
  "surface": "builders-hall",
11716
11734
  "text": "Sign in to filter to your goals",
11717
11735
  "file": "modules/hall-ui/public/goals-page.js",
11718
- "line": 853,
11736
+ "line": 865,
11719
11737
  "origin": "js-text-assign",
11720
11738
  "confidence": "certain"
11721
11739
  },
@@ -12061,6 +12079,15 @@
12061
12079
  "origin": "js-markup",
12062
12080
  "confidence": "certain"
12063
12081
  },
12082
+ {
12083
+ "id": "42a57b62b2fe",
12084
+ "surface": "builders-hall",
12085
+ "text": "Still loading this goal's tasks. Try again in a moment.",
12086
+ "file": "modules/hall-ui/public/goals-page.js",
12087
+ "line": 412,
12088
+ "origin": "js-notice",
12089
+ "confidence": "certain"
12090
+ },
12064
12091
  {
12065
12092
  "id": "efe530c0e3a7",
12066
12093
  "surface": "builders-hall",
@@ -2986,5 +2986,7 @@ is load-bearing: the script throws rather than guess if it is missing, and
2986
2986
  landed since 1.21.75 with no explicit bump. run 37822098196. (task 1002620)
2987
2987
  1.21.77 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
2988
2988
  landed since 1.21.76 with no explicit bump. run 37826500194. (task 1002620)
2989
+ 1.21.78 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
2990
+ landed since 1.21.77 with no explicit bump. run 37828775583. (task 1002620)
2989
2991
  ---------------------------------------------------------------------------
2990
2992
  ```
@@ -1205,7 +1205,7 @@
1205
1205
  "surface": "builders",
1206
1206
  "title": "Goals",
1207
1207
  "states_read": ["list","filters","cards","detail","out","uat","uat-panel"],
1208
- "files_hash": "c649218bdf2a967c",
1208
+ "files_hash": "01e89cbb57fa9575",
1209
1209
  "reading_hash": "890aa4243bfe1db6",
1210
1210
  "counts": {"lines":161,"placed":48,"shared":9,"unplaced":104},
1211
1211
  "omitted": {"data":235},
@@ -3932,7 +3932,7 @@
3932
3932
  "surface": "builders",
3933
3933
  "title": "Tasks",
3934
3934
  "states_read": ["ready","in-progress","backlog","completed","filters-open","out","founding"],
3935
- "files_hash": "210833e18b2d16ac",
3935
+ "files_hash": "93fd64e31444c222",
3936
3936
  "reading_hash": "e796426a4a9d9526",
3937
3937
  "counts": {"lines":193,"placed":55,"shared":9,"unplaced":129},
3938
3938
  "omitted": {"data":259},
@@ -31,7 +31,7 @@
31
31
  // below reads exactly as before; the single copy lives in task-lib.js.
32
32
  const {
33
33
  priorityRank, touchesConflict, rankTagHtml, deHashRefs,
34
- creditsPerMinute, buildPromptForTask, friendlyBatchReason,
34
+ creditsPerMinute, buildPromptForTask, buildPlanPromptForGoal, friendlyBatchReason,
35
35
  } = window.OTBTaskLib;
36
36
  // Shared component kit (hall-kit.js, task 2166): pager, filter bar, tabs,
37
37
  // empty/skeleton states — adopted here by task 2171.
@@ -404,6 +404,18 @@
404
404
  } catch (_e) { return false; }
405
405
  }
406
406
  }
407
+ // task 1004587 (ADR 0366 D4) — the optional "Plan with Claude" hand-off; every planning form works without it.
408
+ async function planWithClaude() {
409
+ const d = state.details.get(String(state.current));
410
+ if (!d) return;
411
+ // The spec task is found in the goal's task list, so wait for it: copying early would hand back the fallback prompt for a goal that has a spec task.
412
+ if (!state.workLoaded) return toast("Still loading this goal's tasks. Try again in a moment.");
413
+ const g = d.goal;
414
+ const ok = await copyText(buildPlanPromptForGoal(g, state.work.todo));
415
+ toast(ok ? 'Prompt copied. Paste it into a Claude Code session to plan this goal.' : 'Could not copy to the clipboard. Try again.');
416
+ }
417
+ // The button is drawn by renderActions (which re-draws it), so the click is delegated.
418
+ document.addEventListener('click', (e) => { if (e.target.closest && e.target.closest('#goal-plan-btn')) planWithClaude(); });
407
419
  async function copyPromptForTask(taskId, btn) {
408
420
  const t = state.work.todo.find((x) => String(x.id) === String(taskId));
409
421
  if (!t) return;
@@ -962,7 +962,7 @@
962
962
  if (canManage && g.status === 'open') {
963
963
  parts.push('<button class="btn-ghost" id="goal-archive-btn" type="button" title="Retire this goal — you will be asked what happens to any unfinished work">Archive goal</button>');
964
964
  }
965
- if (g.status === 'open') {
965
+ if (g.status === 'open') { parts.push('<button class="btn-ghost" id="goal-plan-btn" type="button" title="Copies a prompt to paste into a Claude Code session">Plan with Claude</button>'); // task 1004587
966
966
  if (joined) {
967
967
  parts.push('<button class="btn-ghost" id="goal-leave-btn" type="button">Leave goal</button>');
968
968
  } else if ((g.visibility === 'private' || g.scope_protected) && !isArchon()) {
@@ -109,10 +109,15 @@
109
109
  return c / m;
110
110
  }
111
111
 
112
+ // Where the hall lives: the builders. subdomain's own origin, else the apex /builders tree.
113
+ function hallBaseUrl() {
114
+ return location.hostname.startsWith('builders.') ? location.origin : `${location.origin}/builders`;
115
+ }
116
+
112
117
  // The paste-into-your-agent prompt for one task.
113
118
  function buildPromptForTask(t) {
114
119
  const desc = deHashRefs((t.description || '').trim());
115
- const hallBase = location.hostname.startsWith('builders.') ? location.origin : `${location.origin}/builders`;
120
+ const hallBase = hallBaseUrl();
116
121
  const hallUrl = `${hallBase}#/task/${t.id}`;
117
122
  return [
118
123
  `I am working on Bongos task ${t.id} (${t.title}) — ${hallUrl}`,
@@ -123,6 +128,20 @@
123
128
  ].join('\n');
124
129
  }
125
130
 
131
+ // task 1004587 (ADR 0366 D4) — the "Plan with Claude" prompt for one goal. When the
132
+ // goal has an unshipped spec task (source_ref goal-<id>-spec, made by the hall form)
133
+ // the prompt is that task's; otherwise it asks a session to run /goal-create against
134
+ // the goal. `todoTasks` is the goal's unshipped tasks. An extra, never a requirement.
135
+ function buildPlanPromptForGoal(goal, todoTasks) {
136
+ const spec = (todoTasks || []).find((t) => t.source_ref === `goal-${goal.id}-spec`);
137
+ if (spec) return buildPromptForTask(spec);
138
+ const hallBase = hallBaseUrl();
139
+ return [
140
+ `I want to plan Bongos goal ${goal.id} (${deHashRefs(goal.title || '')}) — ${hallBase}#/goal/${goal.id}`,
141
+ `Run /goal-create against this existing goal to add its seed tasks. Do not create a new goal.`,
142
+ ].join('\n');
143
+ }
144
+
126
145
  // Turn a batch-claim refusal into a sentence. THE DEFAULT MATTERS: an unmapped
127
146
  // code falls through to the raw string, which is how the missing MODULE_CONFLICT
128
147
  // case leaked a machine code into the Goals page UI. Adding a server-side reason
@@ -195,7 +214,7 @@
195
214
  focusVersionDefault,
196
215
  msOf, taskActivityMs, STALE_CHOICES, isStale,
197
216
  priorityRank, touchesConflict, conflictPeers, conflictChipHtml, rankTagHtml, deHashRefs,
198
- creditsPerMinute, buildPromptForTask, friendlyBatchReason,
217
+ creditsPerMinute, buildPromptForTask, buildPlanPromptForGoal, friendlyBatchReason,
199
218
  };
200
219
  if (typeof window !== 'undefined') window.OTBTaskLib = api;
201
220
  if (typeof module !== 'undefined' && module.exports) module.exports = api;
package/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@bongos/core",
3
- "version": "1.21.77",
3
+ "version": "1.21.78",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@bongos/core",
9
- "version": "1.21.77",
9
+ "version": "1.21.78",
10
10
  "license": "AGPL-3.0-or-later",
11
11
  "dependencies": {
12
12
  "express": "^4.21.2",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bongos/core",
3
- "version": "1.21.77",
3
+ "version": "1.21.78",
4
4
  "description": "Cloud Bongos — the AI-first build platform core (GDS + platform surfaces + module system), installed as a versioned dependency (ADR 0108).",
5
5
  "license": "AGPL-3.0-or-later",
6
6
  "main": "src/platform-server.js",
@@ -9272,5 +9272,11 @@
9272
9272
  "id": "1004638",
9273
9273
  "text": "The hall sidebar now has a solid background, so the page title no longer shows through the Builders' Hall name in light mode."
9274
9274
  }
9275
+ ],
9276
+ "1.21.78": [
9277
+ {
9278
+ "id": "1004587",
9279
+ "text": "Goal pages now have a Plan with Claude button that copies a ready-made planning prompt."
9280
+ }
9275
9281
  ]
9276
9282
  }
package/src/module-api.js CHANGED
@@ -75,7 +75,7 @@ const { responsibilityFor, ROLE_RESPONSIBILITIES } = require('./role-responsibil
75
75
  // MAJOR (see allowBoxScope below): passes the request through untouched.
76
76
  function deprecatedNoopMiddleware(_req, _res, next) { next(); }
77
77
 
78
- const CORE_VERSION = '1.21.77'; // CI auto-patch carrier (ADR 0161); changelog: docs/module-api-changelog.md
78
+ const CORE_VERSION = '1.21.78'; // CI auto-patch carrier (ADR 0161); changelog: docs/module-api-changelog.md
79
79
 
80
80
  // A namespaced logger so a module's log lines are attributable + consistent.
81
81
  // Usage: const log = api.logger('discord'); log.info('mounted');
@@ -0,0 +1,41 @@
1
+ // tests/goal_plan_with_claude.mjs — the goal page's "Plan with Claude" hand-off (task 1004587, ADR 0366 D4).
2
+ //
3
+ // Run: node --test tests/goal_plan_with_claude.mjs
4
+
5
+ import assert from 'node:assert/strict';
6
+ import { test } from 'node:test';
7
+ import { readFileSync } from 'node:fs';
8
+ import { createRequire } from 'node:module';
9
+
10
+ const require = createRequire(import.meta.url);
11
+ globalThis.location = { hostname: 'builders.example.com', origin: 'https://builders.example.com' };
12
+ const { buildPlanPromptForGoal, buildPromptForTask } = require('../modules/hall-ui/public/task-lib.js');
13
+ const src = (rel) => readFileSync(new URL('../' + rel, import.meta.url), 'utf8');
14
+
15
+ const goal = { id: 42, title: 'Ship the thing' };
16
+ const spec = { id: 900, title: 'Spec goal 42: its scope', description: 'Do the interview.', source_ref: 'goal-42-spec' };
17
+ const other = { id: 901, title: 'Other', description: 'x', source_ref: null };
18
+
19
+ test('with an unshipped spec task the prompt is that task\'s', () => {
20
+ assert.equal(buildPlanPromptForGoal(goal, [other, spec]), buildPromptForTask(spec));
21
+ });
22
+
23
+ test('another goal\'s spec task is not this goal\'s', () => {
24
+ const p = buildPlanPromptForGoal(goal, [{ ...spec, source_ref: 'goal-43-spec' }]);
25
+ assert.match(p, /\/goal-create/);
26
+ });
27
+
28
+ test('without a spec task the prompt asks for /goal-create against the goal', () => {
29
+ const p = buildPlanPromptForGoal(goal, [other]);
30
+ assert.match(p, /\/goal-create/);
31
+ assert.match(p, /goal 42/);
32
+ assert.match(p, /#\/goal\/42/);
33
+ assert.equal(buildPlanPromptForGoal(goal, undefined), p);
34
+ });
35
+
36
+ test('the button is on the goal page and copies the goal prompt', () => {
37
+ const r = src('modules/hall-ui/public/goals-render.js');
38
+ const pg = src('modules/hall-ui/public/goals-page.js');
39
+ assert.match(r, /id="goal-plan-btn"/);
40
+ assert.ok(pg.includes('buildPlanPromptForGoal(g, state.work.todo)'));
41
+ });