@bongos/core 1.19.481 → 1.19.482

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,11 +2,11 @@
2
2
  "artifact": "bongos-core",
3
3
  "manifest_schema": 1,
4
4
  "generator": "scripts/gds/package-core.js",
5
- "core_version": "1.19.481",
6
- "core_contract": "1.19.481",
7
- "source_commit": "1e15c64fea66158d77a525295d8f0de6762a2d09",
5
+ "core_version": "1.19.482",
6
+ "core_contract": "1.19.482",
7
+ "source_commit": "9cebcd3e9e8ddd211ca73963649dfea1d22cb0f6",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-09-02T18:54:38.572Z",
9
+ "built_at": "2026-09-02T19:01:57.200Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
12
  "docs_redacted": 421,
@@ -17,7 +17,7 @@
17
17
  "gate": "passed"
18
18
  },
19
19
  "file_count": 2288,
20
- "tree_sha256": "ee9b67479c48cf815519f65d3dfe69cf1f1b4054aa15100612e6ed03897c27f4",
20
+ "tree_sha256": "b69f8dc450642bd822736e16e5456381812b335c4298bba6371cd49c47d42153",
21
21
  "files": [
22
22
  {
23
23
  "path": ".claude/skills/blocker-review/SKILL.md",
@@ -1702,12 +1702,12 @@
1702
1702
  {
1703
1703
  "path": "docs/copy-inventory.md",
1704
1704
  "mode": "0000644",
1705
- "sha256": "3aecb3448eabb9c945a3455432c80a1913bbc11004e38bed0735c6d763feb6ef"
1705
+ "sha256": "bcd0e4c01bd1cf5f4670e8aa46db0ca84324d8856bdcddc26b6a6aa059e04523"
1706
1706
  },
1707
1707
  {
1708
1708
  "path": "docs/copy-registry.json",
1709
1709
  "mode": "0000644",
1710
- "sha256": "586588197cadf5c8b7f97f3689a1f83333d1c6d21eabbac63d3239ba9d97ed70"
1710
+ "sha256": "f59f3d4679c25c8fb6790979af725adb990e7c1d7c7ef40b361736bd68dc5f1c"
1711
1711
  },
1712
1712
  {
1713
1713
  "path": "docs/design/apex-pass-2-direction.md",
@@ -2157,7 +2157,7 @@
2157
2157
  {
2158
2158
  "path": "docs/module-api-changelog.md",
2159
2159
  "mode": "0000644",
2160
- "sha256": "e6020c99be6acc88d36c8cc3c4cff695a50e2c94d80141dc9b4f7e61468d6739"
2160
+ "sha256": "91a9d2f5b189f15264c24cdfdcfdb3beb37f95d397505b048cf93e2748816293"
2161
2161
  },
2162
2162
  {
2163
2163
  "path": "docs/modules-contract.md",
@@ -4297,17 +4297,17 @@
4297
4297
  {
4298
4298
  "path": "modules/hall-ui/public/idea.css",
4299
4299
  "mode": "0000644",
4300
- "sha256": "fa9384b70c4618826a69b2467773ad16db13a6629afa9b641b2360724b939a95"
4300
+ "sha256": "478a340e9078aff057658bb30f6ff7655c09c9d4a93ba54e3ce5d33d869fa780"
4301
4301
  },
4302
4302
  {
4303
4303
  "path": "modules/hall-ui/public/idea.html",
4304
4304
  "mode": "0000644",
4305
- "sha256": "5cadcbf77a8b986f9735106227e7285d66133c598cf829d6f27fae016eb3c77a"
4305
+ "sha256": "4edb9800c4b7ae528f66dfcfb89f4d8ee765b1923303d29c57984cde933986a1"
4306
4306
  },
4307
4307
  {
4308
4308
  "path": "modules/hall-ui/public/idea.js",
4309
4309
  "mode": "0000644",
4310
- "sha256": "85a882c9c74d09c439ad11f94cef6ab9372009a7c7926b5704c3706af842ab09"
4310
+ "sha256": "73f2d9a4f826f8680cbcf7ba8b5443ef0716a743c4cca0a2b0213057d161c2d9"
4311
4311
  },
4312
4312
  {
4313
4313
  "path": "modules/hall-ui/public/idea.states.json",
@@ -4347,7 +4347,7 @@
4347
4347
  {
4348
4348
  "path": "modules/hall-ui/public/md-reader.js",
4349
4349
  "mode": "0000644",
4350
- "sha256": "89c3def79578cf30ad3757d3cac9c2242dfece978758d7c256c2b4b8963cb201"
4350
+ "sha256": "5f22f247e2547ceafd6858a1a30e5e22439a314c0cae78794f47e73855004c01"
4351
4351
  },
4352
4352
  {
4353
4353
  "path": "modules/hall-ui/public/modules.css",
@@ -4497,7 +4497,7 @@
4497
4497
  {
4498
4498
  "path": "modules/hall-ui/public/record.css",
4499
4499
  "mode": "0000644",
4500
- "sha256": "3aedd8d48e623c47d2bd229ad56f24e963ef9a0f1feb530871c9235539209dc7"
4500
+ "sha256": "f89535682af078651621ff91311fdd24c51f8c8cdebb8aeaa5c08c3c4f36d215"
4501
4501
  },
4502
4502
  {
4503
4503
  "path": "modules/hall-ui/public/roadmap.css",
@@ -4612,12 +4612,12 @@
4612
4612
  {
4613
4613
  "path": "modules/hall-ui/public/task.html",
4614
4614
  "mode": "0000644",
4615
- "sha256": "7644447bc2ef50d21d185de51ec3fc06ca7f8ed78aba71b70658d3869f73563b"
4615
+ "sha256": "4ec03de2909db6f9eff7c79f8eaf93cd0eac3b61e02f4a79b479294b00bb704c"
4616
4616
  },
4617
4617
  {
4618
4618
  "path": "modules/hall-ui/public/task.js",
4619
4619
  "mode": "0000644",
4620
- "sha256": "893cc2b1c621b464fc0e8b350b55e4d6930ca7b27125c85be0b8ad45275e9781"
4620
+ "sha256": "8410d1236a0d990566e1d840a21526ad0baf57344dda469b8faadfc0daaab1ef"
4621
4621
  },
4622
4622
  {
4623
4623
  "path": "modules/hall-ui/public/task.states.json",
@@ -6752,12 +6752,12 @@
6752
6752
  {
6753
6753
  "path": "package-lock.json",
6754
6754
  "mode": "0000644",
6755
- "sha256": "caf8322fc29303944e76c6d9d5ee51d9a953efdd9880160f3ea60f8a44746a9d"
6755
+ "sha256": "c2fa82b8f41a7bfead142e7a3b895de88dff39f7c3142c486da59c7ce7806023"
6756
6756
  },
6757
6757
  {
6758
6758
  "path": "package.json",
6759
6759
  "mode": "0000644",
6760
- "sha256": "46e539eb3e734d2748b85c00b7f81e845d9fe184ef608130e2ff5beba8d14026"
6760
+ "sha256": "6ebc028be7f4acc486e2bc66f581a311b120fce39d55f50c54cb182575636aab"
6761
6761
  },
6762
6762
  {
6763
6763
  "path": "public-docs/index.html",
@@ -8412,7 +8412,7 @@
8412
8412
  {
8413
8413
  "path": "src/module-api.js",
8414
8414
  "mode": "0000644",
8415
- "sha256": "0e13f37b5e4b46d75c5ee21c9f445aaa35dc86d699b7fae8aec1ba83b8199a7d"
8415
+ "sha256": "b88d8c34c44b9d1e70409ae07ee7469c1b111238c4b55974c0ef7eb99c285b21"
8416
8416
  },
8417
8417
  {
8418
8418
  "path": "src/module-loader/catalog.js",
@@ -9837,12 +9837,12 @@
9837
9837
  {
9838
9838
  "path": "tests/hall_reading_world.mjs",
9839
9839
  "mode": "0000644",
9840
- "sha256": "f3e2a8865189646212733ee9a85d295543acc0309b4087a9eaf36d72426c4b4b"
9840
+ "sha256": "4926c2c3d00617b09843e463286bd8428aa3deeddf5b89ab54033d2abe322fb9"
9841
9841
  },
9842
9842
  {
9843
9843
  "path": "tests/hall_record_world.mjs",
9844
9844
  "mode": "0000644",
9845
- "sha256": "b96e31d2de9be8b017e222815a63b3ad92cfc8f24dd5f2b3e9aac7931daeadc7"
9845
+ "sha256": "e58c1f81f68fe6266dfb44d96b0ff1f01f3b1f7fa759cf26b10d8c3ee0ea1344"
9846
9846
  },
9847
9847
  {
9848
9848
  "path": "tests/hall_reference_world.mjs",
@@ -50,21 +50,21 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
50
50
  | `0887725744f2` | 4x | Restricted. | modules/hall-ui/public/gate.js:219, modules/hall-ui/public/government.js:1104, modules/hall-ui/public/harbor.js:337 |
51
51
  | `e57ec24e13ef` | 4x | Sign in with GitHub | modules/hall-ui/public/hall-render.js:259, modules/hall-ui/public/hall-render.js:330, modules/hall-ui/public/hall-render.js:399 |
52
52
  | `2ae36be1c531` | 4x | Start a project | modules/public-landing/public/index.html:727, modules/public-landing/public/index.html:891, modules/public-landing/public/projects.html:475 |
53
- | `eff70e59d12e` | 4x | Task {…} | modules/hall-ui/public/task.js:317, modules/hall-ui/public/task.js:320, modules/hall-ui/public/task.js:486 |
53
+ | `eff70e59d12e` | 4x | Task {…} | modules/hall-ui/public/task.js:336, modules/hall-ui/public/task.js:339, modules/hall-ui/public/task.js:505 |
54
54
  | `9a685b01e2c6` | 4x | This page opens at a higher rank. | modules/hall-ui/public/gate.html:37, modules/hall-ui/public/government.html:37, modules/hall-ui/public/harbor.html:37 |
55
55
  | `b31fc908c962` | 4x | You claimed #{…}. Open a terminal to start work. | modules/hall-ui/public/goals-page.js:418, modules/hall-ui/public/goals-page.js:515, modules/hall-ui/public/work.js:853 |
56
56
  | `1de02052abf2` | 3x | Available from the {…} rank up. | modules/hall-ui/public/gate.js:222, modules/hall-ui/public/government.js:1107, modules/hall-ui/public/harbor.js:340 |
57
57
  | `08afb1257b71` | 3x | Back to home | modules/hall-ui/public/drachmae.html:87, modules/hall-ui/public/primer.html:90, modules/hall-ui/public/primer.js:283 |
58
58
  | `a78477a24a48` | 3x | Builders' Hall | modules/hall-ui/public/index.html:12, modules/hall-ui/public/index.html:12, modules/hall-ui/public/index.html:37 |
59
59
  | `12ee050d0180` | 3x | Copy desk | modules/hall-ui/public/copy-desk.html:15, modules/hall-ui/public/copy-desk.html:15, modules/hall-ui/public/copy-desk.html:27 |
60
- | `a873e7c29d80` | 3x | Copy prompt | modules/hall-ui/public/task.js:439, modules/hall-ui/public/task.js:459, modules/hall-ui/public/work.js:548 |
60
+ | `a873e7c29d80` | 3x | Copy prompt | modules/hall-ui/public/task.js:458, modules/hall-ui/public/task.js:478, modules/hall-ui/public/work.js:548 |
61
61
  | `9c728558d6e7` | 3x | Drachmae & karma | modules/hall-ui/public/drachmae.html:22, modules/hall-ui/public/drachmae.html:22, modules/hall-ui/public/drachmae.html:37 |
62
62
  | `df335a1224ae` | 3x | Member since {…} | modules/hall-ui/public/hall-render.js:493, modules/hall-ui/public/hall-render.js:547, modules/hall-ui/public/profile.js:58 |
63
63
  | `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 |
64
64
  | `aa4db91b5732` | 3x | Released #{…}. It returns to the queue. | modules/hall-ui/public/goals-page.js:538, modules/hall-ui/public/work.js:894, modules/hall-ui/public/work.js:947 |
65
65
  | `df38941b25a6` | 3x | Sign in with GitHub | modules/public-landing/public/projects.html:587, modules/public-landing/public/projects.html:659, modules/public-landing/public/projects.html:838 |
66
66
  | `4e25e6872321` | 3x | Your projects | modules/public-landing/public/index.html:691, modules/public-landing/public/projects.html:414, modules/public-landing/public/projects.html:576 |
67
- | `4d8ee7d68974` | 3x | task {…} | modules/hall-ui/public/gate.js:142, modules/hall-ui/public/idea.js:201, modules/hall-ui/public/watch.js:936 |
67
+ | `4d8ee7d68974` | 3x | task {…} | modules/hall-ui/public/gate.js:142, modules/hall-ui/public/idea.js:207, modules/hall-ui/public/watch.js:936 |
68
68
  | `cc5106af4b35` | 3x | {…} of {…} criteria satisfied | modules/hall-ui/public/goals-lib.js:32, modules/hall-ui/public/goals-render.js:621, modules/hall-ui/public/goals.js:45 |
69
69
  | `7926e30955d2` | 3x | ← Back to goal | modules/hall-ui/public/goals.html:184, modules/hall-ui/public/goals.html:195, modules/hall-ui/public/goals.html:207 |
70
70
  | `a8813c34d20d` | 2x | “Host denied” | modules/hall-ui/public/box-panel.js:160, modules/hall-ui/public/box-panel.js:340 |
@@ -84,11 +84,11 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
84
84
  |---|---|---|---|
85
85
  | `a8813c34d20d` | certain | “Host denied” | `modules/hall-ui/public/box-panel.js:160` |
86
86
  | `a8813c34d20d` | certain | “Host denied” | `modules/hall-ui/public/box-panel.js:340` |
87
- | `b585019e3e1d` | certain | ' lines collapse into one | `modules/hall-ui/public/md-reader.js:186` |
87
+ | `b585019e3e1d` | certain | ' lines collapse into one | `modules/hall-ui/public/md-reader.js:189` |
88
88
  | `44e29d37ddf6` | certain | '); out = out.replace(/(^\|[^*])\*([^*]+)\*(?!\*)/g, '$1 | `modules/hall-ui/public/md-reader.js:140` |
89
- | `66cea7cefa4e` | certain | '; for (const row of bodyRows) { html += ' | `modules/hall-ui/public/md-reader.js:217` |
90
- | `53e4ac514458` | certain | '; out.push(html); continue; } // Lists (unordered '- ' or ordered '1. '); consecutive items collapse. if (/^( | `modules/hall-ui/public/md-reader.js:221` |
91
- | `87fa099f5068` | certain | '; } html += ' | `modules/hall-ui/public/md-reader.js:221` |
89
+ | `66cea7cefa4e` | certain | '; for (const row of bodyRows) { html += ' | `modules/hall-ui/public/md-reader.js:220` |
90
+ | `53e4ac514458` | certain | '; out.push(html); continue; } // Lists (unordered '- ' or ordered '1. '); consecutive items collapse. if (/^( | `modules/hall-ui/public/md-reader.js:224` |
91
+ | `87fa099f5068` | certain | '; } html += ' | `modules/hall-ui/public/md-reader.js:224` |
92
92
  | `cb327c50b079` | certain | 's dev box (state: {…}). Any uncommitted work on that box is lost. The box is destroyed; the builder can open | `modules/hall-ui/public/harbor.js:125` |
93
93
  | `544794f1ec8f` | certain | (later in | `modules/hall-ui/public/index.html:9` |
94
94
  | `3ac2eb36ba97` | certain | (no sections) | `modules/hall-ui/public/drachmae.js:128` |
@@ -120,7 +120,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
120
120
  | `df5eb70b5a05` | certain | A higher rank. Its details are hidden until you reach the rank directly below it. | `modules/hall-ui/public/ranks.js:125` |
121
121
  | `2e17d7e236d9` | certain | A module built here can be submitted upstream for review, so it can join the shared catalog with your name and | `modules/hall-ui/public/modules.html:71` |
122
122
  | `a07c7b335a66` | certain | A protected-scope goal requires a Metic+ member. | `modules/hall-ui/public/goals-render.js:999` |
123
- | `5723baf26b2d` | certain | A quick idea is a thought filed fast. It is not an unfinished Full Idea — only its author can offer it up for | `modules/hall-ui/public/idea.js:254` |
123
+ | `5723baf26b2d` | certain | A quick idea is a thought filed fast. It is not an unfinished Full Idea — only its author can offer it up for | `modules/hall-ui/public/idea.js:260` |
124
124
  | `eff6b977b1d2` | certain | A self-drawing map of the codebase: what each module is, and what depends on it. Redrawn from the code on ever | `modules/hall-ui/public/atlas.html:31` |
125
125
  | `6359b5afbc6b` | certain | A short path to finding your feet. Tick the steps you’ve done; the rest are tracked for you. | `modules/hall-ui/public/hall-widgets.js:60` |
126
126
  | `58f7f6f0d8bd` | certain | A small app for your menu bar (Mac) or system tray (Windows): one switch to start and stop your dev box, with | `modules/hall-ui/public/settings.html:207` |
@@ -155,7 +155,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
155
155
  | `913430a03b62` | certain | Approved. | `modules/hall-ui/public/pair.js:39` |
156
156
  | `9ece0a6d3b4d` | certain | Approved. Re-check pending. | `modules/hall-ui/public/gate.js:149` |
157
157
  | `5fcfdf8975cf` | certain | As configuration: | `modules/hall-ui/public/government.js:751` |
158
- | `01a0f29ff406` | certain | As first filed | `modules/hall-ui/public/idea.js:246` |
158
+ | `01a0f29ff406` | certain | As first filed | `modules/hall-ui/public/idea.js:252` |
159
159
  | `688cc6dd38ee` | certain | Asked of you | `modules/hall-ui/public/collab.html:37` |
160
160
  | `b2656d0b2402` | certain | Asked {…} | `modules/hall-ui/public/collab.js:41` |
161
161
  | `b2656d0b2402` | certain | Asked {…} | `modules/hall-ui/public/watch.js:315` |
@@ -164,7 +164,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
164
164
  | `1de02052abf2` | certain | Available from the {…} rank up. | `modules/hall-ui/public/gate.js:222` |
165
165
  | `1de02052abf2` | certain | Available from the {…} rank up. | `modules/hall-ui/public/government.js:1107` |
166
166
  | `1de02052abf2` | certain | Available from the {…} rank up. | `modules/hall-ui/public/harbor.js:340` |
167
- | `bdbe9ff6a177` | certain | Awaiting the grader, or a confirmation, before it can ship. | `modules/hall-ui/public/task.js:429` |
167
+ | `bdbe9ff6a177` | certain | Awaiting the grader, or a confirmation, before it can ship. | `modules/hall-ui/public/task.js:448` |
168
168
  | `ecfbb10d4ca9` | certain | Awaiting the owner/manager's approval | `modules/hall-ui/public/goals-render.js:843` |
169
169
  | `08afb1257b71` | certain | Back to home | `modules/hall-ui/public/drachmae.html:87` |
170
170
  | `08afb1257b71` | certain | Back to home | `modules/hall-ui/public/primer.html:90` |
@@ -237,7 +237,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
237
237
  | `c72c97dc33fe` | certain | Collab — {{worldName}} | `modules/hall-ui/public/collab.html:6` |
238
238
  | `c72c97dc33fe` | certain | Collab — {{worldName}} | `modules/hall-ui/public/collab.html:6` |
239
239
  | `cfc287c42263` | certain | Complete your profile | `modules/hall-ui/public/profile-nudge.js:62` |
240
- | `2867c85d196d` | certain | Confirm that verification for #{…} actually passed? | `modules/hall-ui/public/task.js:474` |
240
+ | `2867c85d196d` | certain | Confirm that verification for #{…} actually passed? | `modules/hall-ui/public/task.js:493` |
241
241
  | `9b16a22bf24c` | certain | Connect Discord & join the server | `modules/hall-ui/public/hall-render.js:858` |
242
242
  | `9b16a22bf24c` | certain | Connect Discord & join the server | `modules/hall-ui/public/settings.js:921` |
243
243
  | `9f8d8e07224f` | certain | Connect your Claude Desktop to your dev box with a one-time pairing code — the guided flow lives on its own pa | `modules/hall-ui/public/settings.html:233` |
@@ -251,8 +251,8 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
251
251
  | `1214ea8e0d1b` | certain | Copy desk — {{worldName}} | `modules/hall-ui/public/copy-desk.html:6` |
252
252
  | `7cabea700b57` | certain | Copy not supported here — select the value and copy by hand. | `modules/hall-ui/public/box-panel.js:415` |
253
253
  | `ebc8a6c16a22` | certain | Copy parallel prompt | `modules/hall-ui/public/work.html:134` |
254
- | `a873e7c29d80` | certain | Copy prompt | `modules/hall-ui/public/task.js:439` |
255
- | `a873e7c29d80` | certain | Copy prompt | `modules/hall-ui/public/task.js:459` |
254
+ | `a873e7c29d80` | certain | Copy prompt | `modules/hall-ui/public/task.js:458` |
255
+ | `a873e7c29d80` | certain | Copy prompt | `modules/hall-ui/public/task.js:478` |
256
256
  | `a873e7c29d80` | certain | Copy prompt | `modules/hall-ui/public/work.js:548` |
257
257
  | `8e2046777710` | certain | Copy prompt for task {…} | `modules/hall-ui/public/goals-render.js:337` |
258
258
  | `8e2046777710` | certain | Copy prompt for task {…} | `modules/hall-ui/public/work.js:419` |
@@ -277,7 +277,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
277
277
  | `7054cd87b5ec` | certain | Could not end that session: {…} | `modules/hall-ui/public/settings-sessions.js:85` |
278
278
  | `01f0308c66e0` | certain | Could not invite that builder just now. | `modules/hall-ui/public/goals-render.js:1002` |
279
279
  | `71da00d47492` | certain | Could not invite: {…} | `modules/hall-ui/public/watch.js:289` |
280
- | `90691bceaf68` | certain | Could not load | `modules/hall-ui/public/task.js:505` |
280
+ | `90691bceaf68` | certain | Could not load | `modules/hall-ui/public/task.js:524` |
281
281
  | `589a4cfc5442` | certain | Could not load idea {…}. | `modules/hall-ui/public/ideas.js:456` |
282
282
  | `192c893fc64e` | certain | Could not load modules. | `modules/hall-ui/public/modules.js:318` |
283
283
  | `8a4b590fa1a0` | certain | Could not load requests. | `modules/hall-ui/public/collab.js:173` |
@@ -285,7 +285,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
285
285
  | `7775fec0fa85` | certain | Could not load sessions. | `modules/hall-ui/public/sessions.js:226` |
286
286
  | `b2147cc90e36` | certain | Could not load the idea template. Reload, or file from the terminal with capture.js. | `modules/hall-ui/public/ideas.js:438` |
287
287
  | `7604af13c40e` | certain | Could not load the profile. | `modules/hall-ui/public/profile.js:625` |
288
- | `8b69e445592a` | certain | Could not load the question labels; showing the answers as stored. | `modules/hall-ui/public/idea.js:238` |
288
+ | `8b69e445592a` | certain | Could not load the question labels; showing the answers as stored. | `modules/hall-ui/public/idea.js:244` |
289
289
  | `edd5bafbe075` | certain | Could not load the queue just now. | `modules/hall-ui/public/ideas.js:387` |
290
290
  | `02bb0570996a` | certain | Could not load the ranks. | `modules/hall-ui/public/ranks.js:197` |
291
291
  | `2878778cf9f3` | certain | Could not load this page. | `modules/hall-ui/public/watch.js:1011` |
@@ -293,7 +293,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
293
293
  | `2a9fb4046bc4` | certain | Could not load your rank. Return to the hall and try again. | `modules/hall-ui/public/ranks.js:196` |
294
294
  | `9d533e811dec` | certain | Could not load your sessions: {…} | `modules/hall-ui/public/settings-sessions.js:114` |
295
295
  | `64f9d51f0fa2` | certain | Could not load your settings. | `modules/hall-ui/public/settings.js:1369` |
296
- | `de244c45d916` | certain | Could not load {…} | `modules/hall-ui/public/task.js:498` |
296
+ | `de244c45d916` | certain | Could not load {…} | `modules/hall-ui/public/task.js:517` |
297
297
  | `2366356926b4` | certain | Could not mark the primer just now. Try again. | `modules/hall-ui/public/primer.js:260` |
298
298
  | `753987b5da13` | certain | Could not reach the submit endpoint. | `modules/hall-ui/public/modules.js:297` |
299
299
  | `6f500726f0ac` | certain | Could not read the report: {…} | `modules/hall-ui/public/watch.js:452` |
@@ -464,8 +464,8 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
464
464
  | `298ff22576ee` | certain | How your output has changed over time — work shipped, cost and time per work, and how reviews held up. | `modules/hall-ui/public/hall-widgets.js:182` |
465
465
  | `08d3bf741a2c` | certain | I have read it | `modules/hall-ui/public/primer.html:102` |
466
466
  | `08d3bf741a2c` | certain | I have read it | `modules/hall-ui/public/primer.js:259` |
467
- | `a4ff1e9c34e3` | certain | Idea {…} | `modules/hall-ui/public/idea.js:225` |
468
- | `a4ff1e9c34e3` | certain | Idea {…} | `modules/hall-ui/public/idea.js:261` |
467
+ | `a4ff1e9c34e3` | certain | Idea {…} | `modules/hall-ui/public/idea.js:231` |
468
+ | `a4ff1e9c34e3` | certain | Idea {…} | `modules/hall-ui/public/idea.js:267` |
469
469
  | `ba82ec56f1e3` | certain | Idea — {{worldName}} | `modules/hall-ui/public/idea.html:6` |
470
470
  | `ba82ec56f1e3` | certain | Idea — {{worldName}} | `modules/hall-ui/public/idea.html:6` |
471
471
  | `e181637c5a5e` | certain | Ideas awaiting triage | `modules/hall-ui/public/builders.js:850` |
@@ -487,7 +487,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
487
487
  | `2170b74c6526` | certain | Isometric map of the repository | `modules/hall-ui/public/atlas.html:54` |
488
488
  | `bd8d04eb265c` | certain | It cleared the completeness grade at {…}/100. | `modules/hall-ui/public/government.js:932` |
489
489
  | `79791be35018` | certain | It opens this hall in your browser — click one | `modules/hall-ui/public/hall-render.js:653` |
490
- | `b0bcb3f844ec` | certain | Its author marked this as needing development — anyone can turn it into a Full Idea, and they keep the credit | `modules/hall-ui/public/idea.js:252` |
490
+ | `b0bcb3f844ec` | certain | Its author marked this as needing development — anyone can turn it into a Full Idea, and they keep the credit | `modules/hall-ui/public/idea.js:258` |
491
491
  | `34dc2af8664f` | certain | Join a project | `modules/hall-ui/public/my-projects.html:43` |
492
492
  | `b7719e855009` | certain | Join goal | `modules/hall-ui/public/goals-render.js:853` |
493
493
  | `9f9424a5100b` | certain | Join our Discord | `modules/hall-ui/public/hall-render.js:651` |
@@ -506,7 +506,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
506
506
  | `35a15eb0a117` | certain | Last 30 days | `modules/hall-ui/public/hall-widgets.js:129` |
507
507
  | `9be8b839eff8` | certain | Last 7 days | `modules/hall-ui/public/hall-widgets.js:129` |
508
508
  | `59f0bc78a28f` | certain | Last 90 days | `modules/hall-ui/public/hall-widgets.js:130` |
509
- | `13bae4dfb28e` | certain | Last claimed by | `modules/hall-ui/public/task.js:375` |
509
+ | `13bae4dfb28e` | certain | Last claimed by | `modules/hall-ui/public/task.js:394` |
510
510
  | `1526a7ae8c85` | certain | Latest version: v{…}. | `modules/hall-ui/public/settings.js:1452` |
511
511
  | `7c9b7a89353b` | certain | Leave goal | `modules/hall-ui/public/goals-render.js:840` |
512
512
  | `f192ff6563f9` | certain | Leave your GitHub username and an Archon will let you in. No coding needed to start — once you're approved, si | `modules/hall-ui/public/hall-render.js:278` |
@@ -575,7 +575,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
575
575
  | `83f62fc94271` | certain | No builder account found for this sign-in. | `modules/hall-ui/public/settings.js:1374` |
576
576
  | `6d6fd2314248` | certain | No cross-project activity reported yet. | `modules/hall-ui/public/profile.js:239` |
577
577
  | `b1ada579483c` | certain | No custom ranks yet | `modules/hall-ui/public/government.js:365` |
578
- | `6e2d2e11f84a` | certain | No description. | `modules/hall-ui/public/idea.js:120` |
578
+ | `6e2d2e11f84a` | certain | No description. | `modules/hall-ui/public/idea.js:122` |
579
579
  | `881d06b5e79f` | certain | No done-when criteria yet | `modules/hall-ui/public/goals-render.js:149` |
580
580
  | `93c00cb1423a` | certain | No goal | `modules/hall-ui/public/work.js:523` |
581
581
  | `fbb887a9b678` | certain | No goal has criteria met yet — work is in the task queue. | `modules/hall-ui/public/roadmap.js:116` |
@@ -596,7 +596,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
596
596
  | `4654849396a3` | certain | No work reviewed yet. | `modules/hall-ui/public/hall-widgets.js:150` |
597
597
  | `c72e0bdb834a` | certain | Not declared in module.json — this is who ships the module. | `modules/hall-ui/public/modules.js:62` |
598
598
  | `361b353ded5e` | certain | Not enough shipped work yet to chart. | `modules/hall-ui/public/hall-widgets.js:184` |
599
- | `90230572d017` | certain | Not found | `modules/hall-ui/public/task.js:493` |
599
+ | `90230572d017` | certain | Not found | `modules/hall-ui/public/task.js:512` |
600
600
  | `61250b49a90b` | certain | Not scored. | `modules/hall-ui/public/idea.js:84` |
601
601
  | `8d6afe6def47` | certain | Not signed in | `modules/hall-ui/public/settings.html:32` |
602
602
  | `a290f6c14df9` | certain | Not taking requests | `modules/hall-ui/public/goals-render.js:848` |
@@ -631,7 +631,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
631
631
  | `855277dff074` | certain | Open task #{…} | `modules/hall-ui/public/work.js:1065` |
632
632
  | `99c630009152` | certain | Open tasks whose declared files overlap — sequence these before two builders collide. | `modules/hall-ui/public/goals.html:122` |
633
633
  | `99c630009152` | certain | Open tasks whose declared files overlap — sequence these before two builders collide. | `modules/hall-ui/public/goals.html:187` |
634
- | `676361254d92` | certain | Open the idea composer | `modules/hall-ui/public/idea.js:278` |
634
+ | `676361254d92` | certain | Open the idea composer | `modules/hall-ui/public/idea.js:284` |
635
635
  | `e706a4836ce8` | certain | Open the pairing page | `modules/hall-ui/public/settings.html:238` |
636
636
  | `2cad724171e6` | certain | Open your online environment. | `modules/hall-ui/public/hall-render.js:653` |
637
637
  | `f6f68ba322be` | certain | Open {…} | `modules/hall-ui/public/goal-inbox.js:53` |
@@ -772,9 +772,9 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
772
772
  | `62c3ea026095` | certain | Settings sections | `modules/hall-ui/public/settings.html:42` |
773
773
  | `2566a43904cb` | certain | Settings — {{worldName}} | `modules/hall-ui/public/settings.html:6` |
774
774
  | `2566a43904cb` | certain | Settings — {{worldName}} | `modules/hall-ui/public/settings.html:6` |
775
- | `ac44b08aec92` | certain | Ship it | `modules/hall-ui/public/task.js:425` |
775
+ | `ac44b08aec92` | certain | Ship it | `modules/hall-ui/public/task.js:444` |
776
776
  | `b94a6b5b3d8c` | certain | Shipped with the core | `modules/hall-ui/public/modules.html:56` |
777
- | `0c0a50ba1666` | certain | Shipped {…}{…}, {…}. | `modules/hall-ui/public/task.js:410` |
777
+ | `0c0a50ba1666` | certain | Shipped {…}{…}, {…}. | `modules/hall-ui/public/task.js:429` |
778
778
  | `14d32a35c15f` | certain | Show my cross-project record | `modules/hall-ui/public/settings.js:579` |
779
779
  | `dc0f9fe50a65` | certain | Show the setup guide again | `modules/hall-ui/public/index.html:54` |
780
780
  | `2af4c0f2b4b9` | certain | Showing {…} of {…}. | `modules/hall-ui/public/ideas.js:369` |
@@ -813,14 +813,14 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
813
813
  | `10cc12f37636` | certain | Task sections | `modules/hall-ui/public/work.html:53` |
814
814
  | `0e636ea41b29` | certain | Task status | `modules/hall-ui/public/goals-render.js:331` |
815
815
  | `af527fbc48e1` | certain | Task that carried the fix | `modules/hall-ui/public/copy-desk.html:127` |
816
- | `eff70e59d12e` | certain | Task {…} | `modules/hall-ui/public/task.js:317` |
817
- | `eff70e59d12e` | certain | Task {…} | `modules/hall-ui/public/task.js:320` |
818
- | `eff70e59d12e` | certain | Task {…} | `modules/hall-ui/public/task.js:486` |
819
- | `eff70e59d12e` | certain | Task {…} | `modules/hall-ui/public/task.js:498` |
816
+ | `eff70e59d12e` | certain | Task {…} | `modules/hall-ui/public/task.js:336` |
817
+ | `eff70e59d12e` | certain | Task {…} | `modules/hall-ui/public/task.js:339` |
818
+ | `eff70e59d12e` | certain | Task {…} | `modules/hall-ui/public/task.js:505` |
819
+ | `eff70e59d12e` | certain | Task {…} | `modules/hall-ui/public/task.js:517` |
820
820
  | `1d714be820d3` | certain | Task — {{worldName}} | `modules/hall-ui/public/task.html:6` |
821
821
  | `1d714be820d3` | certain | Task — {{worldName}} | `modules/hall-ui/public/task.html:6` |
822
822
  | `860fa4af9917` | certain | Tasks could not be loaded. | `modules/hall-ui/public/goals-render.js:922` |
823
- | `0a471ed243db` | certain | Tasks in the ledger are numbered separately from GitHub pull requests, so this may be a PR number rather than | `modules/hall-ui/public/task.js:486` |
823
+ | `0a471ed243db` | certain | Tasks in the ledger are numbered separately from GitHub pull requests, so this may be a PR number rather than | `modules/hall-ui/public/task.js:505` |
824
824
  | `2fc66e722e33` | certain | Tasks open once you have read the builder primer. | `modules/hall-ui/public/work.html:43` |
825
825
  | `44579eef0c8d` | certain | Tasks — {{worldName}} | `modules/hall-ui/public/work.html:6` |
826
826
  | `44579eef0c8d` | certain | Tasks — {{worldName}} | `modules/hall-ui/public/work.html:6` |
@@ -870,7 +870,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
870
870
  | `5f631f51f29e` | certain | The skill list could not be loaded. Reload the page to try again. | `modules/hall-ui/public/settings.js:129` |
871
871
  | `e9a14eab8e96` | certain | The sounds could not be loaded. Reload the page to try again. | `modules/hall-ui/public/settings.js:271` |
872
872
  | `7d016f4a65bf` | certain | The system is mid-build. These diagrams deliberately separate what stands today from what is yet planned, so t | `modules/hall-ui/public/diagrams.html:40` |
873
- | `198ba9353bf6` | certain | The task feed did not answer. Nothing on the record has changed, only the read failed. Try again in a moment, | `modules/hall-ui/public/task.js:498` |
873
+ | `198ba9353bf6` | certain | The task feed did not answer. Nothing on the record has changed, only the read failed. Try again in a moment, | `modules/hall-ui/public/task.js:517` |
874
874
  | `34555793f33e` | certain | The task list could not be loaded right now. | `modules/hall-ui/public/work.js:1215` |
875
875
  | `a42a37c43bfb` | certain | The words this project shows people — what has been flagged, and what nobody has looked at. | `modules/hall-ui/public/copy-desk.js:290` |
876
876
  | `bcdbded93d4e` | certain | The work board failed to load. Reload to try again. | `modules/hall-ui/public/work.js:1401` |
@@ -898,7 +898,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
898
898
  | `9a685b01e2c6` | certain | This page opens at a higher rank. | `modules/hall-ui/public/watch.html:40` |
899
899
  | `87f1c2e07790` | certain | This page unlocks as you advance. | `modules/hall-ui/public/not-ready.html:24` |
900
900
  | `69e8beced2ff` | certain | This sends the idea back to its author. Say why, and which section. | `modules/hall-ui/public/government.js:962` |
901
- | `c9e50a67988a` | certain | This task has shipped and its credits have landed. Neither Ship it nor Confirm is available. | `modules/hall-ui/public/task.js:434` |
901
+ | `c9e50a67988a` | certain | This task has shipped and its credits have landed. Neither Ship it nor Confirm is available. | `modules/hall-ui/public/task.js:453` |
902
902
  | `7217c4f1769d` | certain | This will {…} | `modules/hall-ui/public/harbor.js:125` |
903
903
  | `2ad5823d2cd7` | certain | Three dials, all settings rather than code: | `modules/hall-ui/public/government.html:55` |
904
904
  | `82367d2122af` | certain | To paste the sign-in code: | `modules/hall-ui/public/hall-render.js:653` |
@@ -957,7 +957,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
957
957
  | `520d139df9eb` | certain | Work is complete but the version is held — no tasks are being claimed here right now. | `modules/hall-ui/public/roadmap.js:223` |
958
958
  | `0e6b8e8f26cc` | certain | Works completed | `modules/hall-ui/public/profile.html:95` |
959
959
  | `52e5fe3c6075` | certain | Write a Full Idea | `modules/hall-ui/public/ideas.html:52` |
960
- | `7664f4373d1f` | certain | Write one | `modules/hall-ui/public/idea.js:252` |
960
+ | `7664f4373d1f` | certain | Write one | `modules/hall-ui/public/idea.js:258` |
961
961
  | `c368b56ecf40` | certain | Xenos builders start with a focused set of pages — ship your first | `modules/hall-ui/public/not-ready.html:25` |
962
962
  | `b6b0fcb2bcee` | certain | You already have a pending request or invitation for this goal. | `modules/hall-ui/public/goals-render.js:1059` |
963
963
  | `52e93bbc07a6` | certain | You are already a member of this goal. | `modules/hall-ui/public/goals-render.js:1060` |
@@ -1001,7 +1001,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1001
1001
  | `3c148c7b9539` | certain | Your work runs on a dev box we host for you — there's almost nothing to install. Choose how to connect: | `modules/hall-ui/public/hall-render.js:653` |
1002
1002
  | `137b07b42203` | certain | Zoom in | `modules/hall-ui/public/diagram-viewer.js:98` |
1003
1003
  | `0d0bfa651b36` | certain | Zoom out | `modules/hall-ui/public/diagram-viewer.js:96` |
1004
- | `cc361cc7333a` | certain | \s?/.test(raw)) { const quoteLines = []; while (i | `modules/hall-ui/public/md-reader.js:186` |
1004
+ | `cc361cc7333a` | certain | \s?/.test(raw)) { const quoteLines = []; while (i | `modules/hall-ui/public/md-reader.js:189` |
1005
1005
  | `44e6e402db94` | certain | account, then open | `modules/hall-ui/public/hall-render.js:653` |
1006
1006
  | `ae43396446ed` | certain | account. | `modules/hall-ui/public/hall-render.js:653` |
1007
1007
  | `9612c983451f` | certain | achieved · | `modules/hall-ui/public/roadmap.js:263` |
@@ -1049,7 +1049,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1049
1049
  | `17ab8db79e1f` | certain | holds the worker, the code, and your local memory; the | `modules/hall-ui/public/diagrams.html:74` |
1050
1050
  | `7d5cbe3d81e4` | certain | how long a vote stays open | `modules/hall-ui/public/government.html:55` |
1051
1051
  | `dacb901c4f10` | certain | idea number | `modules/hall-ui/public/task-detail.js:458` |
1052
- | `7df22e74c87a` | certain | idea {…} | `modules/hall-ui/public/idea.js:204` |
1052
+ | `7df22e74c87a` | certain | idea {…} | `modules/hall-ui/public/idea.js:210` |
1053
1053
  | `7df22e74c87a` | certain | idea {…} | `modules/hall-ui/public/ideas.js:334` |
1054
1054
  | `2123a62d69e3` | certain | if this stays empty. | `modules/hall-ui/public/collab.html:45` |
1055
1055
  | `b2b399fdd6a4` | certain | in progress | `modules/hall-ui/public/roadmap.js:108` |
@@ -1068,7 +1068,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1068
1068
  | `754bdec368ed` | certain | lowest credits | `modules/hall-ui/public/hall-widgets.js:136` |
1069
1069
  | `cffba8409070` | certain | manage its visibility in Settings → Cross-project record | `modules/hall-ui/public/profile.js:206` |
1070
1070
  | `5c3fdd34cd02` | certain | means expressible through the real configuration — a rank-based membership plus a pass rule — with no new code | `modules/hall-ui/public/government.js:721` |
1071
- | `0eefd625d954` | certain | merged into | `modules/hall-ui/public/idea.js:204` |
1071
+ | `0eefd625d954` | certain | merged into | `modules/hall-ui/public/idea.js:210` |
1072
1072
  | `70c234985d42` | certain | most recent first | `modules/hall-ui/public/hall-widgets.js:134` |
1073
1073
  | `f61d8fc1516d` | certain | new SSH identity | `modules/hall-ui/public/harbor.js:125` |
1074
1074
  | `fdfb8b2ce948` | certain | new identity | `modules/hall-ui/public/box-panel.js:160` |
@@ -1113,7 +1113,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1113
1113
  | `da30b952a60b` | certain | system / unattributed | `modules/hall-ui/public/work.js:498` |
1114
1114
  | `a6e803a31a4d` | certain | task #{…} | `modules/hall-ui/public/copy-desk.js:101` |
1115
1115
  | `4d8ee7d68974` | certain | task {…} | `modules/hall-ui/public/gate.js:142` |
1116
- | `4d8ee7d68974` | certain | task {…} | `modules/hall-ui/public/idea.js:201` |
1116
+ | `4d8ee7d68974` | certain | task {…} | `modules/hall-ui/public/idea.js:207` |
1117
1117
  | `4d8ee7d68974` | certain | task {…} | `modules/hall-ui/public/watch.js:936` |
1118
1118
  | `a41659dc2bee` | certain | tasks remaining | `modules/hall-ui/public/roadmap.js:273` |
1119
1119
  | `bd3402efa59e` | certain | task{…} shipped | `modules/hall-ui/public/goals-render.js:737` |
@@ -1182,7 +1182,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1182
1182
  | `085f93f3f775` | certain | {…} — see all standings | `modules/hall-ui/public/hall-render.js:80` |
1183
1183
  | `f75ee96a7511` | certain | {…} — total payout from shipped work. | `modules/hall-ui/public/profile.js:58` |
1184
1184
  | `2a2728a4ec4f` | certain | {…}% of tasks complete | `modules/hall-ui/public/roadmap.js:70` |
1185
- | `15e545eb3ce2` | certain | {…}, no such task | `modules/hall-ui/public/task.js:486` |
1185
+ | `15e545eb3ce2` | certain | {…}, no such task | `modules/hall-ui/public/task.js:505` |
1186
1186
  | `c43050b62297` | certain | {…}/100 complete | `modules/hall-ui/public/idea.js:87` |
1187
1187
  | `8e8c7da4f7f5` | certain | {…}criteria met · awaiting review | `modules/hall-ui/public/goals-render.js:155` |
1188
1188
  | `1e275ee0299c` | certain | {…}s only | `modules/hall-ui/public/government.js:1121` |
@@ -222,10 +222,10 @@
222
222
  "text": "Task {…}",
223
223
  "occurrences": 4,
224
224
  "at": [
225
- "modules/hall-ui/public/task.js:317",
226
- "modules/hall-ui/public/task.js:320",
227
- "modules/hall-ui/public/task.js:486",
228
- "modules/hall-ui/public/task.js:498"
225
+ "modules/hall-ui/public/task.js:336",
226
+ "modules/hall-ui/public/task.js:339",
227
+ "modules/hall-ui/public/task.js:505",
228
+ "modules/hall-ui/public/task.js:517"
229
229
  ]
230
230
  },
231
231
  {
@@ -302,8 +302,8 @@
302
302
  "text": "Copy prompt",
303
303
  "occurrences": 3,
304
304
  "at": [
305
- "modules/hall-ui/public/task.js:439",
306
- "modules/hall-ui/public/task.js:459",
305
+ "modules/hall-ui/public/task.js:458",
306
+ "modules/hall-ui/public/task.js:478",
307
307
  "modules/hall-ui/public/work.js:548"
308
308
  ]
309
309
  },
@@ -380,7 +380,7 @@
380
380
  "occurrences": 3,
381
381
  "at": [
382
382
  "modules/hall-ui/public/gate.js:142",
383
- "modules/hall-ui/public/idea.js:201",
383
+ "modules/hall-ui/public/idea.js:207",
384
384
  "modules/hall-ui/public/watch.js:936"
385
385
  ]
386
386
  },
@@ -802,8 +802,8 @@
802
802
  "text": "Idea {…}",
803
803
  "occurrences": 2,
804
804
  "at": [
805
- "modules/hall-ui/public/idea.js:225",
806
- "modules/hall-ui/public/idea.js:261"
805
+ "modules/hall-ui/public/idea.js:231",
806
+ "modules/hall-ui/public/idea.js:267"
807
807
  ]
808
808
  },
809
809
  {
@@ -1402,7 +1402,7 @@
1402
1402
  "text": "idea {…}",
1403
1403
  "occurrences": 2,
1404
1404
  "at": [
1405
- "modules/hall-ui/public/idea.js:204",
1405
+ "modules/hall-ui/public/idea.js:210",
1406
1406
  "modules/hall-ui/public/ideas.js:334"
1407
1407
  ]
1408
1408
  },
@@ -1631,7 +1631,7 @@
1631
1631
  "surface": "builders-hall",
1632
1632
  "text": "' lines collapse into one",
1633
1633
  "file": "modules/hall-ui/public/md-reader.js",
1634
- "line": 186,
1634
+ "line": 189,
1635
1635
  "origin": "js-markup",
1636
1636
  "confidence": "certain"
1637
1637
  },
@@ -1649,7 +1649,7 @@
1649
1649
  "surface": "builders-hall",
1650
1650
  "text": "'; for (const row of bodyRows) { html += '",
1651
1651
  "file": "modules/hall-ui/public/md-reader.js",
1652
- "line": 217,
1652
+ "line": 220,
1653
1653
  "origin": "js-markup",
1654
1654
  "confidence": "certain"
1655
1655
  },
@@ -1658,7 +1658,7 @@
1658
1658
  "surface": "builders-hall",
1659
1659
  "text": "'; out.push(html); continue; } // Lists (unordered '- ' or ordered '1. '); consecutive items collapse. if (/^(-|\\d+\\.)\\s+/.test(raw)) { const ordered = /^\\d+\\.\\s+/.test(raw); const items = []; while (i",
1660
1660
  "file": "modules/hall-ui/public/md-reader.js",
1661
- "line": 221,
1661
+ "line": 224,
1662
1662
  "origin": "js-markup",
1663
1663
  "confidence": "certain"
1664
1664
  },
@@ -1667,7 +1667,7 @@
1667
1667
  "surface": "builders-hall",
1668
1668
  "text": "'; } html += '",
1669
1669
  "file": "modules/hall-ui/public/md-reader.js",
1670
- "line": 221,
1670
+ "line": 224,
1671
1671
  "origin": "js-markup",
1672
1672
  "confidence": "certain"
1673
1673
  },
@@ -1955,7 +1955,7 @@
1955
1955
  "surface": "builders-hall",
1956
1956
  "text": "A quick idea is a thought filed fast. It is not an unfinished Full Idea — only its author can offer it up for development.",
1957
1957
  "file": "modules/hall-ui/public/idea.js",
1958
- "line": 254,
1958
+ "line": 260,
1959
1959
  "origin": "js-markup",
1960
1960
  "confidence": "certain"
1961
1961
  },
@@ -2270,7 +2270,7 @@
2270
2270
  "surface": "builders-hall",
2271
2271
  "text": "As first filed",
2272
2272
  "file": "modules/hall-ui/public/idea.js",
2273
- "line": 246,
2273
+ "line": 252,
2274
2274
  "origin": "js-markup",
2275
2275
  "confidence": "certain"
2276
2276
  },
@@ -2351,7 +2351,7 @@
2351
2351
  "surface": "builders-hall",
2352
2352
  "text": "Awaiting the grader, or a confirmation, before it can ship.",
2353
2353
  "file": "modules/hall-ui/public/task.js",
2354
- "line": 429,
2354
+ "line": 448,
2355
2355
  "origin": "js-markup",
2356
2356
  "confidence": "certain"
2357
2357
  },
@@ -3008,7 +3008,7 @@
3008
3008
  "surface": "builders-hall",
3009
3009
  "text": "Confirm that verification for #{…} actually passed?",
3010
3010
  "file": "modules/hall-ui/public/task.js",
3011
- "line": 474,
3011
+ "line": 493,
3012
3012
  "origin": "js-notice",
3013
3013
  "confidence": "certain"
3014
3014
  },
@@ -3134,7 +3134,7 @@
3134
3134
  "surface": "builders-hall",
3135
3135
  "text": "Copy prompt",
3136
3136
  "file": "modules/hall-ui/public/task.js",
3137
- "line": 439,
3137
+ "line": 458,
3138
3138
  "origin": "js-markup",
3139
3139
  "confidence": "certain"
3140
3140
  },
@@ -3143,7 +3143,7 @@
3143
3143
  "surface": "builders-hall",
3144
3144
  "text": "Copy prompt",
3145
3145
  "file": "modules/hall-ui/public/task.js",
3146
- "line": 459,
3146
+ "line": 478,
3147
3147
  "origin": "js-text-assign",
3148
3148
  "confidence": "certain"
3149
3149
  },
@@ -3368,7 +3368,7 @@
3368
3368
  "surface": "builders-hall",
3369
3369
  "text": "Could not load",
3370
3370
  "file": "modules/hall-ui/public/task.js",
3371
- "line": 505,
3371
+ "line": 524,
3372
3372
  "origin": "js-text-assign",
3373
3373
  "confidence": "certain"
3374
3374
  },
@@ -3440,7 +3440,7 @@
3440
3440
  "surface": "builders-hall",
3441
3441
  "text": "Could not load the question labels; showing the answers as stored.",
3442
3442
  "file": "modules/hall-ui/public/idea.js",
3443
- "line": 238,
3443
+ "line": 244,
3444
3444
  "origin": "js-markup",
3445
3445
  "confidence": "certain"
3446
3446
  },
@@ -3512,7 +3512,7 @@
3512
3512
  "surface": "builders-hall",
3513
3513
  "text": "Could not load {…}",
3514
3514
  "file": "modules/hall-ui/public/task.js",
3515
- "line": 498,
3515
+ "line": 517,
3516
3516
  "origin": "js-markup",
3517
3517
  "confidence": "certain"
3518
3518
  },
@@ -5051,7 +5051,7 @@
5051
5051
  "surface": "builders-hall",
5052
5052
  "text": "Idea {…}",
5053
5053
  "file": "modules/hall-ui/public/idea.js",
5054
- "line": 225,
5054
+ "line": 231,
5055
5055
  "origin": "js-markup",
5056
5056
  "confidence": "certain"
5057
5057
  },
@@ -5060,7 +5060,7 @@
5060
5060
  "surface": "builders-hall",
5061
5061
  "text": "Idea {…}",
5062
5062
  "file": "modules/hall-ui/public/idea.js",
5063
- "line": 261,
5063
+ "line": 267,
5064
5064
  "origin": "js-text-assign",
5065
5065
  "confidence": "certain"
5066
5066
  },
@@ -5258,7 +5258,7 @@
5258
5258
  "surface": "builders-hall",
5259
5259
  "text": "Its author marked this as needing development — anyone can turn it into a Full Idea, and they keep the credit for having had it.",
5260
5260
  "file": "modules/hall-ui/public/idea.js",
5261
- "line": 252,
5261
+ "line": 258,
5262
5262
  "origin": "js-markup",
5263
5263
  "confidence": "certain"
5264
5264
  },
@@ -5429,7 +5429,7 @@
5429
5429
  "surface": "builders-hall",
5430
5430
  "text": "Last claimed by",
5431
5431
  "file": "modules/hall-ui/public/task.js",
5432
- "line": 375,
5432
+ "line": 394,
5433
5433
  "origin": "js-markup",
5434
5434
  "confidence": "certain"
5435
5435
  },
@@ -6050,7 +6050,7 @@
6050
6050
  "surface": "builders-hall",
6051
6051
  "text": "No description.",
6052
6052
  "file": "modules/hall-ui/public/idea.js",
6053
- "line": 120,
6053
+ "line": 122,
6054
6054
  "origin": "js-markup",
6055
6055
  "confidence": "certain"
6056
6056
  },
@@ -6239,7 +6239,7 @@
6239
6239
  "surface": "builders-hall",
6240
6240
  "text": "Not found",
6241
6241
  "file": "modules/hall-ui/public/task.js",
6242
- "line": 493,
6242
+ "line": 512,
6243
6243
  "origin": "js-text-assign",
6244
6244
  "confidence": "certain"
6245
6245
  },
@@ -6554,7 +6554,7 @@
6554
6554
  "surface": "builders-hall",
6555
6555
  "text": "Open the idea composer",
6556
6556
  "file": "modules/hall-ui/public/idea.js",
6557
- "line": 278,
6557
+ "line": 284,
6558
6558
  "origin": "js-markup",
6559
6559
  "confidence": "certain"
6560
6560
  },
@@ -7823,7 +7823,7 @@
7823
7823
  "surface": "builders-hall",
7824
7824
  "text": "Ship it",
7825
7825
  "file": "modules/hall-ui/public/task.js",
7826
- "line": 425,
7826
+ "line": 444,
7827
7827
  "origin": "js-markup",
7828
7828
  "confidence": "certain"
7829
7829
  },
@@ -7841,7 +7841,7 @@
7841
7841
  "surface": "builders-hall",
7842
7842
  "text": "Shipped {…}{…}, {…}.",
7843
7843
  "file": "modules/hall-ui/public/task.js",
7844
- "line": 410,
7844
+ "line": 429,
7845
7845
  "origin": "js-markup",
7846
7846
  "confidence": "certain"
7847
7847
  },
@@ -8192,7 +8192,7 @@
8192
8192
  "surface": "builders-hall",
8193
8193
  "text": "Task {…}",
8194
8194
  "file": "modules/hall-ui/public/task.js",
8195
- "line": 317,
8195
+ "line": 336,
8196
8196
  "origin": "js-text-assign",
8197
8197
  "confidence": "certain"
8198
8198
  },
@@ -8201,7 +8201,7 @@
8201
8201
  "surface": "builders-hall",
8202
8202
  "text": "Task {…}",
8203
8203
  "file": "modules/hall-ui/public/task.js",
8204
- "line": 320,
8204
+ "line": 339,
8205
8205
  "origin": "js-markup",
8206
8206
  "confidence": "certain"
8207
8207
  },
@@ -8210,7 +8210,7 @@
8210
8210
  "surface": "builders-hall",
8211
8211
  "text": "Task {…}",
8212
8212
  "file": "modules/hall-ui/public/task.js",
8213
- "line": 486,
8213
+ "line": 505,
8214
8214
  "origin": "js-markup",
8215
8215
  "confidence": "certain"
8216
8216
  },
@@ -8219,7 +8219,7 @@
8219
8219
  "surface": "builders-hall",
8220
8220
  "text": "Task {…}",
8221
8221
  "file": "modules/hall-ui/public/task.js",
8222
- "line": 498,
8222
+ "line": 517,
8223
8223
  "origin": "js-markup",
8224
8224
  "confidence": "certain"
8225
8225
  },
@@ -8255,7 +8255,7 @@
8255
8255
  "surface": "builders-hall",
8256
8256
  "text": "Tasks in the ledger are numbered separately from GitHub pull requests, so this may be a PR number rather than a task. The work board lists everything that does exist.",
8257
8257
  "file": "modules/hall-ui/public/task.js",
8258
- "line": 486,
8258
+ "line": 505,
8259
8259
  "origin": "js-markup",
8260
8260
  "confidence": "certain"
8261
8261
  },
@@ -8705,7 +8705,7 @@
8705
8705
  "surface": "builders-hall",
8706
8706
  "text": "The task feed did not answer. Nothing on the record has changed, only the read failed. Try again in a moment, or go back.",
8707
8707
  "file": "modules/hall-ui/public/task.js",
8708
- "line": 498,
8708
+ "line": 517,
8709
8709
  "origin": "js-markup",
8710
8710
  "confidence": "certain"
8711
8711
  },
@@ -8957,7 +8957,7 @@
8957
8957
  "surface": "builders-hall",
8958
8958
  "text": "This task has shipped and its credits have landed. Neither Ship it nor Confirm is available.",
8959
8959
  "file": "modules/hall-ui/public/task.js",
8960
- "line": 434,
8960
+ "line": 453,
8961
8961
  "origin": "js-markup",
8962
8962
  "confidence": "certain"
8963
8963
  },
@@ -9488,7 +9488,7 @@
9488
9488
  "surface": "builders-hall",
9489
9489
  "text": "Write one",
9490
9490
  "file": "modules/hall-ui/public/idea.js",
9491
- "line": 252,
9491
+ "line": 258,
9492
9492
  "origin": "js-markup",
9493
9493
  "confidence": "certain"
9494
9494
  },
@@ -9884,7 +9884,7 @@
9884
9884
  "surface": "builders-hall",
9885
9885
  "text": "\\s?/.test(raw)) { const quoteLines = []; while (i",
9886
9886
  "file": "modules/hall-ui/public/md-reader.js",
9887
- "line": 186,
9887
+ "line": 189,
9888
9888
  "origin": "js-markup",
9889
9889
  "confidence": "certain"
9890
9890
  },
@@ -10316,7 +10316,7 @@
10316
10316
  "surface": "builders-hall",
10317
10317
  "text": "idea {…}",
10318
10318
  "file": "modules/hall-ui/public/idea.js",
10319
- "line": 204,
10319
+ "line": 210,
10320
10320
  "origin": "js-markup",
10321
10321
  "confidence": "certain"
10322
10322
  },
@@ -10487,7 +10487,7 @@
10487
10487
  "surface": "builders-hall",
10488
10488
  "text": "merged into",
10489
10489
  "file": "modules/hall-ui/public/idea.js",
10490
- "line": 204,
10490
+ "line": 210,
10491
10491
  "origin": "js-markup",
10492
10492
  "confidence": "certain"
10493
10493
  },
@@ -10892,7 +10892,7 @@
10892
10892
  "surface": "builders-hall",
10893
10893
  "text": "task {…}",
10894
10894
  "file": "modules/hall-ui/public/idea.js",
10895
- "line": 201,
10895
+ "line": 207,
10896
10896
  "origin": "js-markup",
10897
10897
  "confidence": "certain"
10898
10898
  },
@@ -11513,7 +11513,7 @@
11513
11513
  "surface": "builders-hall",
11514
11514
  "text": "{…}, no such task",
11515
11515
  "file": "modules/hall-ui/public/task.js",
11516
- "line": 486,
11516
+ "line": 505,
11517
11517
  "origin": "js-markup",
11518
11518
  "confidence": "certain"
11519
11519
  },
@@ -1399,5 +1399,7 @@ is load-bearing: the script throws rather than guess if it is missing, and
1399
1399
  landed since 1.19.479 with no explicit bump. run 33668172411. (task 1002620)
1400
1400
  1.19.481 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
1401
1401
  landed since 1.19.480 with no explicit bump. run 33670051626. (task 1002620)
1402
+ 1.19.482 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
1403
+ landed since 1.19.481 with no explicit bump. run 33670786915. (task 1002620)
1402
1404
  ---------------------------------------------------------------------------
1403
1405
  ```
@@ -116,13 +116,14 @@
116
116
  }
117
117
 
118
118
  /* ---- the prose ----------------------------------------------------------- */
119
+ /* No pre-wrap: the body renders as markdown through the shared reader and takes
120
+ record.css's .rec-md prose rules (task 1003465). */
119
121
  .ig-body {
120
122
  margin: var(--sp-xs) 0 0;
121
123
  max-width: var(--measure);
122
124
  font-size: 15px;
123
125
  line-height: 1.65;
124
126
  color: var(--ink-soft);
125
- white-space: pre-wrap;
126
127
  }
127
128
  .ig-body[data-empty="1"] { color: var(--ink-faint); font-style: italic; }
128
129
  .ig-empty { margin: 0; font-size: 14px; color: var(--ink-faint); }
@@ -59,6 +59,7 @@
59
59
  written inside an idea's own prose keeps resolving from this page. -->
60
60
  <script src="/builders/task-detail.js?v=2026-07-03-taskdetail2" defer></script>
61
61
  <script src="/builders/brand-apply.js?v=2026-06-19-r56" defer></script>
62
+ <script src="/builders/md-reader.js" defer></script>
62
63
  <script src="/builders/idea.js?v=2026-08-22-r153" defer></script>
63
64
  </body>
64
65
  </html>
@@ -113,11 +113,17 @@
113
113
  return `<div class="ig-credit">${rows.join('')}</div>`;
114
114
  }
115
115
 
116
+ // The body is markdown and renders through the hall's one parser, the way the
117
+ // task record's description does (task 1003465); a bare #NNN is a GDS id and
118
+ // drops its hash so it cannot read as a GitHub issue. Without the reader the
119
+ // text still shows, escaped.
116
120
  function prose(text) {
117
121
  const s = String(text == null ? '' : text).trim();
118
- return s
119
- ? `<p class="ig-body">${escapeHtml(s)}</p>`
120
- : '<p class="ig-body" data-empty="1">No description.</p>';
122
+ if (!s) return '<p class="ig-body" data-empty="1">No description.</p>';
123
+ const MD = window.OTBMdReader;
124
+ if (!MD) return `<p class="ig-body">${escapeHtml(s)}</p>`;
125
+ const md = s.replace(/(^|\s)#(\d+)\b/g, '$1$2');
126
+ return `<div class="ig-body rec-md">${MD.parseMarkdown(md, MD.makeResolveLinkHref({ baseDir: '' })).html}</div>`;
121
127
  }
122
128
 
123
129
  // The five answers, in TEMPLATE order, each under its own question. Missing
@@ -143,7 +143,10 @@
143
143
  // (the "**It's the API *list* price**" line showed its asterisks before).
144
144
  out = out.replace(/\*\*(.+?)\*\*/g, '<strong>$1</strong>');
145
145
  out = out.replace(/(^|[^*])\*([^*]+)\*(?!\*)/g, '$1<em>$2</em>');
146
- out = out.replace(/ CODE(\d+) /g, (_m, idx) => `<code>${escapeHtml(codeSpans[Number(idx)])}</code>`);
146
+ // The spans were lifted out of text the block pass had ALREADY escaped, so
147
+ // they go back as they are: escaping again rendered `a && b` as its entities
148
+ // (idea 1000889, folded into task 1003465).
149
+ out = out.replace(/ CODE(\d+) /g, (_m, idx) => `<code>${codeSpans[Number(idx)]}</code>`);
147
150
  return out;
148
151
  }
149
152
 
@@ -238,16 +238,76 @@
238
238
  /* The description as filed. `--measure` is MEASURED (48ch renders ~60 characters
239
239
  in Manrope) — a `ch` is the zero glyph's width, not a character, so do not do
240
240
  fresh ch arithmetic here. */
241
+ /* No pre-wrap: the description is RENDERED markdown now (task 1003465), and its
242
+ paragraphs wrap themselves. pre-wrap kept the DB's ~78-column hard breaks and
243
+ the measure broke each line a second time — the ragged short-then-long read. */
241
244
  .rec-desc {
242
245
  margin: 0;
243
246
  font-size: 15px;
244
247
  line-height: 1.65;
245
248
  color: var(--ink-soft);
246
249
  max-width: var(--measure);
247
- white-space: pre-wrap;
248
250
  overflow-wrap: anywhere;
249
251
  }
250
252
 
253
+ /* Rendered markdown inside a record — the task description and the idea body.
254
+ The room's prose rules at the record's density: heads in the body face one
255
+ weight up (a record is not a document; its heads are labels), tight lists,
256
+ the same code and quote treatment. A link takes the room's floor recipe. */
257
+ .rec-md > :first-child { margin-top: 0; }
258
+ .rec-md > :last-child { margin-bottom: 0; }
259
+ .rec-md p { margin: 0 0 var(--sp-sm); }
260
+ .rec-md h1, .rec-md h2, .rec-md h3, .rec-md h4 {
261
+ margin: var(--sp-md) 0 var(--sp-xs);
262
+ font-family: var(--font-body);
263
+ font-size: 15px;
264
+ font-weight: 600;
265
+ line-height: 1.4;
266
+ letter-spacing: -0.01em;
267
+ color: var(--ink);
268
+ }
269
+ .rec-md ul, .rec-md ol { margin: 0 0 var(--sp-sm); padding-left: 1.4em; }
270
+ .rec-md li { margin: 0 0 4px; }
271
+ .rec-md li:last-child { margin-bottom: 0; }
272
+ .rec-md li::marker { color: var(--ink-faint); }
273
+ .rec-md strong { font-weight: 600; color: var(--ink); }
274
+ .rec-md a {
275
+ display: inline-block;
276
+ min-height: 24px;
277
+ padding: 1px 0;
278
+ color: var(--accent-ink);
279
+ text-decoration: underline;
280
+ text-underline-offset: 3px;
281
+ text-decoration-thickness: 1px;
282
+ }
283
+ .rec-md a:hover { color: var(--ink); }
284
+ .rec-md code {
285
+ font: 400 .85em/1.4 var(--font-mono);
286
+ background: var(--glass);
287
+ padding: 2px 6px;
288
+ border-radius: 4px;
289
+ }
290
+ .rec-md pre {
291
+ margin: 0 0 var(--sp-sm);
292
+ padding: var(--sp-sm) var(--sp-md);
293
+ overflow-x: auto;
294
+ background: var(--glass);
295
+ border: var(--line) solid var(--glass-edge);
296
+ border-radius: var(--radius);
297
+ }
298
+ .rec-md pre code { background: none; padding: 0; border-radius: 0; font-size: 13px; line-height: 1.7; }
299
+ .rec-md blockquote {
300
+ margin: 0 0 var(--sp-sm);
301
+ padding: var(--sp-xs) var(--sp-md);
302
+ border-left: 2px solid var(--rule);
303
+ color: var(--ink-soft);
304
+ }
305
+ .rec-md blockquote p { margin: 0; }
306
+ .rec-md hr { border: none; border-top: var(--line) solid var(--rule-soft); margin: var(--sp-md) 0; }
307
+ .rec-md table { width: 100%; border-collapse: collapse; margin: 0 0 var(--sp-sm); font-size: 14px; }
308
+ .rec-md th, .rec-md td { text-align: left; vertical-align: top; padding: 6px 10px 6px 0; border-top: var(--line) solid var(--rule-soft); }
309
+ .rec-md th { color: var(--ink-faint); font-weight: 500; }
310
+
251
311
  /* v1's bare ledger inside a v3 panel: a hairline on top, air, and the first row
252
312
  drops both. The paths are the machine's words, so they take the mono face. */
253
313
  .rec-files { list-style: none; margin: 0; padding: 0; }
@@ -67,6 +67,7 @@
67
67
  links still resolve from this page. -->
68
68
  <script src="/builders/task-detail.js?v=2026-07-03-taskdetail2" defer></script>
69
69
  <script src="/builders/brand-apply.js?v=2026-06-19-r56" defer></script>
70
+ <script src="/builders/md-reader.js" defer></script>
70
71
  <script src="/builders/task.js?v=2026-07-03-taskpage1" defer></script>
71
72
  </body>
72
73
  </html>
@@ -303,9 +303,28 @@
303
303
  }
304
304
  }
305
305
 
306
+ // A bare #NNN in a description is a GDS id, and anywhere it is pasted or
307
+ // rendered it would autolink to a GitHub issue that does not exist (CLAUDE.md's
308
+ // no-bare-#NNN rule) — so both the copy and the rendered paths drop the hash.
309
+ const delinkRefs = (s) => String(s || '').replace(/(^|\s)#(\d+)\b/g, '$1$2');
310
+
311
+ // The description IS markdown (headings, bold, code spans, lists) and was
312
+ // escaped straight into a <p> under white-space: pre-wrap, so the markup showed
313
+ // as characters and the DB's ~78-column hard wrap fought the measure (task
314
+ // 1003465). It renders through the hall's one parser now; a relative path in a
315
+ // description is repo-root-relative, and the repo bases arrive with load().
316
+ let repoBlobBase = null;
317
+ let repoTreeBase = null;
318
+ function descriptionHtml(md) {
319
+ const MD = window.OTBMdReader;
320
+ if (!MD) return `<p>${escapeHtml(md)}</p>`;
321
+ const resolve = MD.makeResolveLinkHref({ baseDir: '', getBlobBase: () => repoBlobBase, getTreeBase: () => repoTreeBase });
322
+ return MD.parseMarkdown(delinkRefs(md), resolve).html;
323
+ }
324
+
306
325
  function buildPrompt(t) {
307
326
  const url = `${location.origin}${hallBase()}/task/${t.id}`;
308
- const desc = String(t.description || '').replace(/(^|\s)#(\d+)\b/g, '$1$2');
327
+ const desc = delinkRefs(t.description);
309
328
  return `I am working on GDS task ${t.id} (${t.title || ''}) — ${url}\n\n` +
310
329
  `Claim it with \`/builder-claim ${t.id}\`, build it, then \`/builder-ship ${t.id}\`.\n\n` +
311
330
  `Task description:\n${desc}`;
@@ -388,7 +407,7 @@
388
407
  if (t.visual_url) parts.push(`<section class="rec-sec">${taskVisualHtml(t)}</section>`);
389
408
 
390
409
  if (t.description) {
391
- parts.push(`<section class="rec-sec"><p class="rec-sec__h">Description</p><p class="rec-desc">${escapeHtml(t.description)}</p></section>`);
410
+ parts.push(`<section class="rec-sec"><p class="rec-sec__h">Description</p><div class="rec-desc rec-md">${descriptionHtml(t.description)}</div></section>`);
392
411
  }
393
412
 
394
413
  const touches = Array.isArray(t.touches) ? t.touches : [];
@@ -530,6 +549,13 @@
530
549
  goal = (g && g.goal) ? g.goal : null;
531
550
  } catch (_) { /* cosmetic — the goal link still resolves without it */ }
532
551
  }
552
+ // The repo bases a description's relative paths resolve onto (the primer's
553
+ // and drachmae's pattern). Best-effort: without them a path passes through.
554
+ try {
555
+ const ri = await getJSON(`${API}/public/repo-info`, { softAuth: true });
556
+ if (ri && typeof ri.blob_base === 'string') repoBlobBase = ri.blob_base;
557
+ if (ri && typeof ri.tree_base === 'string') repoTreeBase = ri.tree_base;
558
+ } catch (_) { /* links degrade to the original href */ }
533
559
  renderTask(d.task, d.last_claim || null, viewer, goal);
534
560
  } catch (err) {
535
561
  if (err && err.code === AUTH_NEEDED) { toAuth(); return; }
package/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@bongos/core",
3
- "version": "1.19.481",
3
+ "version": "1.19.482",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@bongos/core",
9
- "version": "1.19.481",
9
+ "version": "1.19.482",
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.19.481",
3
+ "version": "1.19.482",
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",
package/src/module-api.js CHANGED
@@ -34,7 +34,7 @@ const { validateOrRespond, LIMITS, parseId, asyncHandler, corsPublicGet, parsePa
34
34
  // there. scripts/gds/bump-version.js still rewrites the literal below; it appends
35
35
  // the entry to that file. Look for a version's history there, not here.
36
36
  // ---------------------------------------------------------------------------
37
- const CORE_VERSION = '1.19.481'; // CI auto-patch carrier (ADR 0161); changelog: docs/module-api-changelog.md
37
+ const CORE_VERSION = '1.19.482'; // CI auto-patch carrier (ADR 0161); changelog: docs/module-api-changelog.md
38
38
 
39
39
  // A namespaced logger so a module's log lines are attributable + consistent.
40
40
  // Usage: const log = api.logger('dev-box'); log.info('mounted');
@@ -408,6 +408,18 @@ test('it slugs h2s the way the table of contents and the in-doc anchors expect',
408
408
  'the anchor in the markup and the id the TOC links to come from one call, so they cannot drift');
409
409
  });
410
410
 
411
+ test('a code span round-trips & < > " \' to exactly ONE entity each', () => {
412
+ // renderInline receives text the block pass has already escaped and lifted
413
+ // each span into a placeholder; restoring it through escapeHtml again showed
414
+ // `a && b` as "a &amp;&amp; b" (idea 1000889, folded into task 1003465).
415
+ const MD = loadReader();
416
+ const { html } = MD.parseMarkdown('use `a && b < c > "d" \'e\'` here\n', (h) => h);
417
+ assert.match(html, /<code>a &amp;&amp; b &lt; c &gt; &quot;d&quot; &#39;e&#39;<\/code>/);
418
+ assert.doesNotMatch(html, /&amp;(amp|lt|gt|quot|#39);/, 'no entity is encoded twice');
419
+ const li = MD.parseMarkdown('- run `x & y`\n', (h) => h).html;
420
+ assert.match(li, /<li>run <code>x &amp; y<\/code><\/li>/, 'and the same inside a list item');
421
+ });
422
+
411
423
  test('the primer\'s link resolver sends a repo-relative doc to GitHub and leaves the rest alone', () => {
412
424
  const MD = loadReader();
413
425
  const resolve = MD.makeResolveLinkHref({
@@ -258,8 +258,11 @@ test('the preview harness can reach both record pages', () => {
258
258
  // string-building, so this exercises the real render path rather than a
259
259
  // re-implementation of it.
260
260
  const TASK_SRC = read('task.js');
261
+ // task.html loads md-reader.js ahead of task.js (task 1003465), so the sandbox
262
+ // does the same: the description renders through it.
263
+ const MD_SRC = read('md-reader.js');
261
264
 
262
- function renderTask(task, { lastClaim = null, viewer = null, goal = null, status = 200, search = '', referrer = '' } = {}) {
265
+ function renderTask(task, { lastClaim = null, viewer = null, goal = null, status = 200, search = '', referrer = '', withReader = true } = {}) {
263
266
  const els = new Map();
264
267
  const makeEl = () => ({
265
268
  dataset: {}, style: {}, textContent: '', hidden: false, disabled: false, _html: '',
@@ -311,6 +314,7 @@ function renderTask(task, { lastClaim = null, viewer = null, goal = null, status
311
314
  const sandbox = { window: windowObj, document: documentObj, location: windowObj.location, console, setTimeout, clearTimeout, Date, URL, URLSearchParams };
312
315
  sandbox.globalThis = sandbox;
313
316
  vm.createContext(sandbox);
317
+ if (withReader) vm.runInContext(MD_SRC, sandbox, { filename: 'md-reader.js' });
314
318
  vm.runInContext(TASK_SRC, sandbox, { filename: 'task.js' });
315
319
  assert.ok(onReady, 'task.js registers its DOMContentLoaded boot');
316
320
  return {
@@ -489,3 +493,79 @@ test('the crumb is an element task.js can point, with its label apart from the i
489
493
  assert.match(taskHtml, /<a class="rec-back" id="task-back" href="\/work">/, 'the static href is the fallback the page ships with');
490
494
  assert.match(taskHtml, /<span id="task-back-label">Back to tasks<\/span>/, 'the label is its own node, so the icon survives a relabel');
491
495
  });
496
+
497
+ // ---- 11. the description is markdown, and renders as it (task 1003465) --------
498
+ //
499
+ // The owner's screenshot: ## headings, **bold**, `code` and - bullets as literal
500
+ // characters, in a column where every line wrapped twice. The description was
501
+ // escaped into a <p> under white-space: pre-wrap; the DB hard-wraps at ~78
502
+ // columns and the re-skin's --measure (~60) broke each line again. It renders
503
+ // through md-reader.js now, on both record pages, and pre-wrap is gone.
504
+
505
+ test('both record pages load the shared reader BEFORE their page script', () => {
506
+ for (const [name, html, page] of [['task.html', taskHtml, 'task.js'], ['idea.html', ideaHtml, 'idea.js']]) {
507
+ const reader = html.indexOf('<script src="/builders/md-reader.js" defer>');
508
+ const script = html.indexOf(`<script src="/builders/${page}`);
509
+ assert.ok(reader > -1, `${name} loads md-reader.js`);
510
+ assert.ok(script > reader, `${name}: both deferred, so document order is execution order — the reader comes first`);
511
+ }
512
+ });
513
+
514
+ test('neither prose container is pre-wrap any more — rendered paragraphs wrap themselves', () => {
515
+ assert.doesNotMatch(rule(recordCss, '.rec-desc') || '', /white-space:\s*pre-wrap/, '.rec-desc: pre-wrap is exactly what fought the measure');
516
+ assert.doesNotMatch(rule(ideaCss, '.ig-body') || '', /white-space:\s*pre-wrap/, '.ig-body: the idea body renders the same way');
517
+ assert.match(rule(recordCss, '.rec-desc') || '', /max-width:\s*var\(--measure\)/, 'the measure stays — it is correct once the source wrap is gone');
518
+ for (const sel of ['.rec-md p', '.rec-md code', '.rec-md ul, .rec-md ol']) {
519
+ assert.ok(rule(recordCss, sel), `record.css styles what the parser emits: ${sel}`);
520
+ }
521
+ });
522
+
523
+ const MD_DESC = [
524
+ '## What is wrong',
525
+ '',
526
+ 'The **description** shows `a && b < c` as text, and folds ideas #1000891',
527
+ 'and #1000889 — a bare hash that would autolink to a GitHub issue.',
528
+ '',
529
+ '- one bullet',
530
+ '- [a doc](docs/adr/0229-the-way-out.md) and [a trap](javascript:alert(1))',
531
+ ].join('\n');
532
+
533
+ test('the description renders as markup: headings, bold, code, bullets — not their characters', async () => {
534
+ const r = renderTask({ ...BASE_TASK, description: MD_DESC });
535
+ await r.boot(); await settle();
536
+ const html = r.html();
537
+ const m = html.match(/<div class="rec-desc rec-md">([\s\S]*?)<\/div><\/section>/);
538
+ assert.ok(m, 'the description is a block container, not a <p> — a paragraph cannot hold a heading or a list');
539
+ const desc = m[1];
540
+ assert.match(desc, /<h2 id="what-is-wrong">What is wrong<\/h2>/, 'the heading is a heading');
541
+ assert.match(desc, /<strong>description<\/strong>/, 'bold is bold');
542
+ assert.match(desc, /<code>a &amp;&amp; b &lt; c<\/code>/, 'a code span with & and < round-trips to ONE entity each');
543
+ assert.match(desc, /<li>one bullet<\/li>/, 'the bullet is a list item');
544
+ assert.doesNotMatch(desc, /##|\*\*|`/, 'no markdown character survives as text');
545
+ assert.doesNotMatch(desc, /white-space/, 'nothing is inlined to fake the old wrap');
546
+ });
547
+
548
+ test('the rendered path drops the hash from a bare #NNN, as the copied prompt already did', async () => {
549
+ const r = renderTask({ ...BASE_TASK, description: MD_DESC });
550
+ await r.boot(); await settle();
551
+ const desc = r.html().match(/<div class="rec-desc rec-md">([\s\S]*?)<\/div><\/section>/)[1];
552
+ assert.match(desc, /folds ideas 1000891\s+and 1000889/, 'the ids read as ids');
553
+ assert.doesNotMatch(desc, /#10008/, 'no bare #NNN reaches the page');
554
+ });
555
+
556
+ test('a description\'s links resolve repo-root-relative, and a hostile target is text', async () => {
557
+ const r = renderTask({ ...BASE_TASK, description: MD_DESC });
558
+ await r.boot(); await settle();
559
+ const desc = r.html().match(/<div class="rec-desc rec-md">([\s\S]*?)<\/div><\/section>/)[1];
560
+ assert.match(desc, /<a href="docs\/adr\/0229-the-way-out\.md">a doc<\/a>/,
561
+ 'no docs/onboarding/ base: a task path is repo-root-relative, and without the repo bases it passes through');
562
+ assert.doesNotMatch(desc, /javascript:/, 'the reader\'s allowlist (task 1003482) holds on the record page too');
563
+ assert.match(desc, /a trap/, 'the label survives as text');
564
+ });
565
+
566
+ test('the description still reads when the reader is absent', async () => {
567
+ const r = renderTask({ ...BASE_TASK, description: 'plain <b>text</b>' }, { withReader: false });
568
+ await r.boot(); await settle();
569
+ assert.match(r.html(), /<div class="rec-desc rec-md"><p>plain &lt;b&gt;text&lt;\/b&gt;<\/p><\/div>/,
570
+ 'escaped into one paragraph — a missing script must never blank the record');
571
+ });