@bongos/core 1.19.906 → 1.19.907

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.906",
6
- "core_contract": "1.19.906",
7
- "source_commit": "292f91e86ee9b852efe6c0e93158f5815ccdfa42",
5
+ "core_version": "1.19.907",
6
+ "core_contract": "1.19.907",
7
+ "source_commit": "71cb07155a010b68421b31a9154436b140d5557d",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-09-20T13:41:10.148Z",
9
+ "built_at": "2026-09-20T13:52:16.387Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
12
  "docs_redacted": 502,
@@ -17,7 +17,7 @@
17
17
  "gate": "passed"
18
18
  },
19
19
  "file_count": 2811,
20
- "tree_sha256": "160619c1eb4a21d556e0ed9151463e10b29b88a5aeb1249d213d371aaae5402a",
20
+ "tree_sha256": "b58d926d1a79850ef28b158610d628958dbbf0c143ba5327cabbcd5ad2f527d3",
21
21
  "files": [
22
22
  {
23
23
  "path": ".claude/skills/ask-for-help/SKILL.md",
@@ -2097,12 +2097,12 @@
2097
2097
  {
2098
2098
  "path": "docs/copy-inventory.md",
2099
2099
  "mode": "0000644",
2100
- "sha256": "3e657714f3647bfb041f4eda9e4982a2b60747c4aceec0d8d8cbf8ee0de6eb47"
2100
+ "sha256": "b018bdef70a2e46e00fa7e88d4ee489255d8d1ff9eaeecba18eb3c39ec41878d"
2101
2101
  },
2102
2102
  {
2103
2103
  "path": "docs/copy-registry.json",
2104
2104
  "mode": "0000644",
2105
- "sha256": "1ba7f556256ee4cbb637b9809698c69aff529c080131949b4055058f8fb4716b"
2105
+ "sha256": "88c3ac9d52e16fef3c82e09f4a8b4e8d8fa46f490e68bf370d2fd49a90bfbdee"
2106
2106
  },
2107
2107
  {
2108
2108
  "path": "docs/design/apex-pass-2-direction.md",
@@ -2632,7 +2632,7 @@
2632
2632
  {
2633
2633
  "path": "docs/module-api-changelog.md",
2634
2634
  "mode": "0000644",
2635
- "sha256": "d329f2a3999d8bc88ce4715be5ee51d9e7a60ba0e0f0a9e06163c12ff94d87ba"
2635
+ "sha256": "efe7ce69b4aed84c057d34db6b6bd2bcbb8a8f7b326bab16320277f314db5a46"
2636
2636
  },
2637
2637
  {
2638
2638
  "path": "docs/modules-contract.md",
@@ -4912,17 +4912,17 @@
4912
4912
  {
4913
4913
  "path": "modules/hall-ui/public/ideas.css",
4914
4914
  "mode": "0000644",
4915
- "sha256": "4da2ff00354a825d32f2f55e3db5f1d18a112ddc9d1056220e73683766b952b3"
4915
+ "sha256": "80edba7f2ea1343a72b1885d13d7411c4b1f127e38a2ccffa85f50a4f3cc8dfd"
4916
4916
  },
4917
4917
  {
4918
4918
  "path": "modules/hall-ui/public/ideas.html",
4919
4919
  "mode": "0000644",
4920
- "sha256": "645ba0757c89e328b955565cca3be5c38acdd5412ba5b8726c210aa6486acd1a"
4920
+ "sha256": "05116249b8cc983297c126c1d1803cb94210d885841b06b2b1667a771cfe866a"
4921
4921
  },
4922
4922
  {
4923
4923
  "path": "modules/hall-ui/public/ideas.js",
4924
4924
  "mode": "0000644",
4925
- "sha256": "be562d9cac8180a42cd8b0d9bc0e0a0d369c2703b859eda235645a5bd56a6368"
4925
+ "sha256": "3496ae8afbf111bff89198146e1b079cb5e7da3f3bd425ab9972ec7b034fbd7d"
4926
4926
  },
4927
4927
  {
4928
4928
  "path": "modules/hall-ui/public/ideas.states.json",
@@ -7782,12 +7782,12 @@
7782
7782
  {
7783
7783
  "path": "package-lock.json",
7784
7784
  "mode": "0000644",
7785
- "sha256": "6a2f94c668864dc88fdc003473496102838182e8d18636930537c32bd67c7e47"
7785
+ "sha256": "55fbc4950d743f2078280ad1311903120e44c8b93a84d7403fa1107321aee16c"
7786
7786
  },
7787
7787
  {
7788
7788
  "path": "package.json",
7789
7789
  "mode": "0000644",
7790
- "sha256": "1ddcd43de722cb5eff00c36a440b0df181f1c8168a8c8b3193fc3d9a586afdbd"
7790
+ "sha256": "6b23fd601399995c8b9b2dfc1881d2e4047b2345c61549f0a9661c4cb31ed0c5"
7791
7791
  },
7792
7792
  {
7793
7793
  "path": "public-docs/index.html",
@@ -9782,7 +9782,7 @@
9782
9782
  {
9783
9783
  "path": "src/module-api.js",
9784
9784
  "mode": "0000644",
9785
- "sha256": "4593c8749b7b52a5bb6116e0d3dbe6004dc24346bb79ca0a5757359e98dc259e"
9785
+ "sha256": "e7dbc1db9bf741ba4a85b171e30b9b5f05a4cf38b3b7422d8df81943c66eb7bb"
9786
9786
  },
9787
9787
  {
9788
9788
  "path": "src/module-loader/catalog.js",
@@ -11877,7 +11877,7 @@
11877
11877
  {
11878
11878
  "path": "tests/idea_spark_hall.mjs",
11879
11879
  "mode": "0000644",
11880
- "sha256": "3c62df24b4fc184ac9669fcdc150f7fdde1d60eb007d888bfba502a7890a1e02"
11880
+ "sha256": "c7125e9c139999e48a778e7d149068e94da1e817ce737446f2312e75aaad4388"
11881
11881
  },
11882
11882
  {
11883
11883
  "path": "tests/idea_spark_mark.mjs",
@@ -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
- **1826 strings** across 3 surfaces · 1584 distinct pieces of copy · 1826 certain, 0 heuristic · 166 shown in more than one place.
7
+ **1828 strings** across 3 surfaces · 1585 distinct pieces of copy · 1828 certain, 0 heuristic · 166 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` | 84 | 1336 |
13
+ | `builders-hall` | `modules/hall-ui/public` | 84 | 1338 |
14
14
  | `status-dashboard` | `modules/status-ui/public` | 4 | 100 |
15
15
  | `landing` | `modules/public-landing/public` | 5 | 390 |
16
16
 
@@ -40,13 +40,13 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
40
40
  | `8c234d5c8bd4` | 8x | Could not save. Try again. | modules/hall-ui/public/settings-interaction.js:96, modules/hall-ui/public/settings-render.js:108, modules/hall-ui/public/settings.js:101 |
41
41
  | `eeda19200aeb` | 7x | Cloud Bongos | modules/public-landing/public/projects.html:399, modules/public-landing/public/projects.html:501, modules/public-landing/public/projects.html:546 |
42
42
  | `5a2b73968b36` | 6x | Blocker # | modules/hall-ui/public/blockers.js:362, modules/hall-ui/public/blockers.js:366, modules/hall-ui/public/blockers.js:369 |
43
+ | `4d8ee7d68974` | 6x | task {…} | modules/hall-ui/public/gate.js:157, modules/hall-ui/public/hall-render.js:669, modules/hall-ui/public/idea.js:207 |
43
44
  | `5df2baabf82e` | 6x | ← Back | modules/public-landing/public/projects.html:1067, modules/public-landing/public/projects.html:1098, modules/public-landing/public/projects.html:1137 |
44
45
  | `afe83bbbd0d4` | 5x | A non-profit, capture-resistant commons. | modules/public-landing/public/contact.html:71, modules/public-landing/public/index.html:900, modules/public-landing/public/privacy.html:80 |
45
46
  | `c661548d5140` | 5x | Next → | modules/public-landing/public/projects.html:1068, modules/public-landing/public/projects.html:1101, modules/public-landing/public/projects.html:1140 |
46
47
  | `cbfdd6ac4ec8` | 5x | Open source (AGPL-3.0) | modules/public-landing/public/contact.html:71, modules/public-landing/public/index.html:900, modules/public-landing/public/privacy.html:80 |
47
48
  | `e57ec24e13ef` | 5x | Sign in with GitHub | modules/hall-ui/public/hall-render.js:275, modules/hall-ui/public/hall-render.js:367, modules/hall-ui/public/hall-render.js:391 |
48
49
  | `9a685b01e2c6` | 5x | This page opens at a higher rank. | modules/hall-ui/public/deploy.html:31, modules/hall-ui/public/gate.html:37, modules/hall-ui/public/government.html:37 |
49
- | `4d8ee7d68974` | 5x | task {…} | modules/hall-ui/public/gate.js:157, modules/hall-ui/public/hall-render.js:669, modules/hall-ui/public/idea.js:207 |
50
50
  | `90a128c97eae` | 4x | Builders' hall | modules/public-landing/public/index.html:906, modules/public-landing/public/projects.html:550, modules/public-landing/public/projects.html:550 |
51
51
  | `bd315dd71ea7` | 4x | Built by agents, on Cloud Bongos. | modules/public-landing/public/contact.html:71, modules/public-landing/public/index.html:900, modules/public-landing/public/privacy.html:80 |
52
52
  | `a5257c88eb07` | 4x | GitHub username | modules/public-landing/public/projects.html:886, modules/public-landing/public/projects.html:887, modules/public-landing/public/projects.html:1296 |
@@ -78,7 +78,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
78
78
  | `996edffc1966` | 2x | Access requests | modules/hall-ui/public/watch.html:46, modules/hall-ui/public/watch.html:61 |
79
79
  | … | | _126 more in the JSON registry_ | |
80
80
 
81
- ## `builders-hall` — 1336 strings
81
+ ## `builders-hall` — 1338 strings
82
82
 
83
83
  | id | conf | text | where |
84
84
  |---|---|---|---|
@@ -111,7 +111,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
111
111
  | `f1dec47e42d1` | certain | 4 · The complete architecture | `modules/hall-ui/public/diagrams.html:73` |
112
112
  | `477235450d2b` | certain | 5 · Versioning | `modules/hall-ui/public/diagrams.html:82` |
113
113
  | `353fff36068f` | certain | ; a later push must be re-approved. | `modules/hall-ui/public/gate.js:109` |
114
- | `8ffdf4995e81` | certain | A Full Idea answers five questions, so that someone else can deliver against it without having to interview yo | `modules/hall-ui/public/ideas.html:104` |
114
+ | `8ffdf4995e81` | certain | A Full Idea answers five questions, so that someone else can deliver against it without having to interview yo | `modules/hall-ui/public/ideas.html:115` |
115
115
  | `3e5a62bc4887` | certain | A GitHub username is needed. | `modules/hall-ui/public/hall-render.js:423` |
116
116
  | `3e5a62bc4887` | certain | A GitHub username is needed. | `modules/hall-ui/public/watch.js:311` |
117
117
  | `568d58fd26cc` | certain | A configured value could not be used: | `modules/hall-ui/public/project-settings.js:103` |
@@ -161,7 +161,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
161
161
  | `e99cc5d37404` | certain | Already a member? | `modules/hall-ui/public/hall-render.js:367` |
162
162
  | `da5368d10f85` | certain | Amendment {…} passed{…}, and the constitution below is not the one it decided: | `modules/hall-ui/public/government.js:633` |
163
163
  | `69f0ca4a4d84` | certain | Analytics scope | `modules/hall-ui/public/hall-render.js:1236` |
164
- | `14bdceaac078` | certain | Answer the five questions and this spark becomes a Full Idea. | `modules/hall-ui/public/ideas.js:601` |
164
+ | `14bdceaac078` | certain | Answer the five questions and this spark becomes a Full Idea. | `modules/hall-ui/public/ideas.js:692` |
165
165
  | `0293418d5e8e` | certain | Answerable for: | `modules/hall-ui/public/profile.js:72` |
166
166
  | `05761b08ec8f` | certain | Answering is optional and declining costs nothing. Nobody is assigned by being asked. | `modules/hall-ui/public/collab.html:97` |
167
167
  | `52ed0e2e3470` | certain | Any rank | `modules/hall-ui/public/task-lib.js:62` |
@@ -301,16 +301,16 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
301
301
  | `71da00d47492` | certain | Could not invite: {…} | `modules/hall-ui/public/watch.js:321` |
302
302
  | `90691bceaf68` | certain | Could not load | `modules/hall-ui/public/project-settings.js:242` |
303
303
  | `90691bceaf68` | certain | Could not load | `modules/hall-ui/public/task.js:982` |
304
- | `589a4cfc5442` | certain | Could not load idea {…}. | `modules/hall-ui/public/ideas.js:644` |
304
+ | `589a4cfc5442` | certain | Could not load idea {…}. | `modules/hall-ui/public/ideas.js:735` |
305
305
  | `192c893fc64e` | certain | Could not load modules. | `modules/hall-ui/public/modules.js:318` |
306
306
  | `9912c3835136` | certain | Could not load requests — reload to try again. | `modules/hall-ui/public/collab.js:529` |
307
307
  | `7775fec0fa85` | certain | Could not load sessions. | `modules/hall-ui/public/sessions.js:399` |
308
308
  | `7775fec0fa85` | certain | Could not load sessions. | `modules/hall-ui/public/sessions.js:437` |
309
309
  | `a2f2e8babef5` | certain | Could not load that page. Try again. | `modules/hall-ui/public/blockers.js:274` |
310
- | `b2147cc90e36` | certain | Could not load the idea template. Reload, or file from the terminal with capture.js. | `modules/hall-ui/public/ideas.js:626` |
310
+ | `b2147cc90e36` | certain | Could not load the idea template. Reload, or file from the terminal with capture.js. | `modules/hall-ui/public/ideas.js:717` |
311
311
  | `7604af13c40e` | certain | Could not load the profile. | `modules/hall-ui/public/profile.js:873` |
312
312
  | `8b69e445592a` | certain | Could not load the question labels; showing the answers as stored. | `modules/hall-ui/public/idea.js:244` |
313
- | `edd5bafbe075` | certain | Could not load the queue just now. | `modules/hall-ui/public/ideas.js:565` |
313
+ | `edd5bafbe075` | certain | Could not load the queue just now. | `modules/hall-ui/public/ideas.js:656` |
314
314
  | `02bb0570996a` | certain | Could not load the ranks. | `modules/hall-ui/public/ranks.js:197` |
315
315
  | `2878778cf9f3` | certain | Could not load this page. | `modules/hall-ui/public/watch.js:1322` |
316
316
  | `4b0c8d94541c` | certain | Could not load your account. Reload the page to try again. | `modules/hall-ui/public/settings.js:1310` |
@@ -359,7 +359,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
359
359
  | `a48e9f098392` | certain | Could not {…} just now. | `modules/hall-ui/public/goals-render.js:1324` |
360
360
  | `cb09ee26014f` | certain | Could not {…}: {…} | `modules/hall-ui/public/government.js:314` |
361
361
  | `737bef533845` | certain | Couldn’t refresh the queue — try reloading the page. | `modules/hall-ui/public/blockers.js:283` |
362
- | `28ec06f6060a` | certain | Counted, not judged: each question is worth the same, and earns its share in proportion to how much real text | `modules/hall-ui/public/ideas.html:164` |
362
+ | `28ec06f6060a` | certain | Counted, not judged: each question is worth the same, and earns its share in proportion to how much real text | `modules/hall-ui/public/ideas.html:175` |
363
363
  | `38827a954f3b` | certain | Create a custom rank first. | `modules/hall-ui/public/government.js:459` |
364
364
  | `20459b66303a` | certain | Create one | `modules/hall-ui/public/settings.html:264` |
365
365
  | `dd8ead7adc9a` | certain | Create rank | `modules/hall-ui/public/government.html:92` |
@@ -375,10 +375,10 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
375
375
  | `7ec7dc1adaa6` | certain | Deploy — {{worldName}} | `modules/hall-ui/public/deploy.html:6` |
376
376
  | `7ec7dc1adaa6` | certain | Deploy — {{worldName}} | `modules/hall-ui/public/deploy.html:6` |
377
377
  | `8cac6be8afdf` | certain | Dev box app | `modules/hall-ui/public/settings.html:202` |
378
- | `0a4fe7150971` | certain | Develop this idea | `modules/hall-ui/public/ideas.js:600` |
379
- | `11b8266d6aab` | certain | Developing a Big Idea Spark | `modules/hall-ui/public/ideas.html:116` |
378
+ | `0a4fe7150971` | certain | Develop this idea | `modules/hall-ui/public/ideas.js:691` |
379
+ | `11b8266d6aab` | certain | Developing a Big Idea Spark | `modules/hall-ui/public/ideas.html:127` |
380
380
  | `433beff4d202` | certain | Device · dev box · memory · server (authority + prod) · GitHub — and the full box→production ship flow. | `modules/hall-ui/public/diagrams.html:77` |
381
- | `65322ac89221` | certain | Discard draft | `modules/hall-ui/public/ideas.html:142` |
381
+ | `65322ac89221` | certain | Discard draft | `modules/hall-ui/public/ideas.html:153` |
382
382
  | `0f685daf1bd5` | certain | Discord connected ✓ | `modules/hall-ui/public/settings.js:832` |
383
383
  | `d8017b5ca98f` | certain | Discord unlinked. | `modules/hall-ui/public/settings.js:851` |
384
384
  | `f3e09453374f` | certain | Dismissed — looked at, leaving it as it is | `modules/hall-ui/public/copy-desk.html:123` |
@@ -396,7 +396,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
396
396
  | `9c728558d6e7` | certain | Drachmae & karma | `modules/hall-ui/public/drachmae.html:37` |
397
397
  | `9d9cc4ef8557` | certain | Drachmae & karma — {{worldName}} | `modules/hall-ui/public/drachmae.html:6` |
398
398
  | `9d9cc4ef8557` | certain | Drachmae & karma — {{worldName}} | `modules/hall-ui/public/drachmae.html:6` |
399
- | `2f8d0404039e` | certain | Draft discarded. | `modules/hall-ui/public/ideas.js:361` |
399
+ | `2f8d0404039e` | certain | Draft discarded. | `modules/hall-ui/public/ideas.js:446` |
400
400
  | `d59beed97d58` | certain | Drag to pan, scroll to zoom | `modules/hall-ui/public/diagrams.html:33` |
401
401
  | `67f09099c2d3` | certain | Duplicate — should be said once, in one place | `modules/hall-ui/public/copy-desk.html:93` |
402
402
  | `77b7e3abfb07` | certain | Each one touched a protected surface and stopped at the gate check. Approving records your seal on that commit | `modules/hall-ui/public/gate.html:64` |
@@ -425,12 +425,12 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
425
425
  | `efdb46f76b02` | certain | Everything this instance can run: what the core ships, what this project built, and who keeps each one true as | `modules/hall-ui/public/modules.html:32` |
426
426
  | `de62f4cc7d2e` | certain | File a bug or idea | `modules/hall-ui/public/ideas.html:59` |
427
427
  | `0f166311ff3f` | certain | File it | `modules/hall-ui/public/blockers.js:311` |
428
- | `0f166311ff3f` | certain | File it | `modules/hall-ui/public/ideas.html:96` |
428
+ | `0f166311ff3f` | certain | File it | `modules/hall-ui/public/ideas.html:107` |
429
429
  | `0c4632f983db` | certain | File the change | `modules/hall-ui/public/copy-desk.html:173` |
430
430
  | `536a7e99640a` | certain | File the flag | `modules/hall-ui/public/copy-desk.html:108` |
431
- | `077cf99f49f6` | certain | File this idea | `modules/hall-ui/public/ideas.html:141` |
431
+ | `077cf99f49f6` | certain | File this idea | `modules/hall-ui/public/ideas.html:152` |
432
432
  | `a7bdd4706975` | certain | Filed as task {…} — this review is closed against it. | `modules/hall-ui/public/studio.js:446` |
433
- | `6430ee350486` | certain | Filed to the inbox. | `modules/hall-ui/public/ideas.js:478` |
433
+ | `6430ee350486` | certain | Filed to the inbox. | `modules/hall-ui/public/ideas.js:564` |
434
434
  | `0f10a69cabb7` | certain | Filed. | `modules/hall-ui/public/blockers.js:371` |
435
435
  | `08ba8e3c1701` | certain | Filing is open to anyone. Linking to a task needs Metic+ — if you name one and aren’t, the blocker still files | `modules/hall-ui/public/blockers.js:318` |
436
436
  | `e8dd9a8f3a7e` | certain | Filter sessions by kind | `modules/hall-ui/public/sessions.html:67` |
@@ -442,7 +442,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
442
442
  | `86ef86c5c647` | certain | Fit to view | `modules/hall-ui/public/diagram-viewer.js:97` |
443
443
  | `86ef86c5c647` | certain | Fit to view | `modules/hall-ui/public/diagram-viewer.js:100` |
444
444
  | `78107a76a755` | certain | Five diagrams that show, at a glance, how work flows through {{worldName}}'s development system. | `modules/hall-ui/public/diagrams.html:33` |
445
- | `18ab1be9d3ad` | certain | Five questions, and a score that counts how much of each you actually answered. | `modules/hall-ui/public/ideas.js:636` |
445
+ | `18ab1be9d3ad` | certain | Five questions, and a score that counts how much of each you actually answered. | `modules/hall-ui/public/ideas.js:727` |
446
446
  | `c6c9d3129ab2` | certain | Five things every project settles. Two of them are knobs you can turn here; the other three are decided in com | `modules/hall-ui/public/project-settings.html:41` |
447
447
  | `b9267033b1f1` | certain | Flag this copy | `modules/hall-ui/public/copy-desk.html:83` |
448
448
  | `82149b1deacd` | certain | Flag this… | `modules/hall-ui/public/copy-desk.js:164` |
@@ -578,7 +578,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
578
578
  | `217f64ef8667` | certain | Loading the catalog… | `modules/hall-ui/public/modules.html:59` |
579
579
  | `a8b3b04b0b4d` | certain | Loading the copy desk… | `modules/hall-ui/public/copy-desk.html:28` |
580
580
  | `2bde9c630fd2` | certain | Loading the directory… | `modules/hall-ui/public/people.html:40` |
581
- | `fcd755e8dd30` | certain | Loading the five questions… | `modules/hall-ui/public/ideas.html:135` |
581
+ | `fcd755e8dd30` | certain | Loading the five questions… | `modules/hall-ui/public/ideas.html:146` |
582
582
  | `e201b4962858` | certain | Loading the idea | `modules/hall-ui/public/idea.html:43` |
583
583
  | `95a5382e5277` | certain | Loading the idea template… | `modules/hall-ui/public/ideas.html:31` |
584
584
  | `9972fc9b4727` | certain | Loading the map… | `modules/hall-ui/public/atlas.html:51` |
@@ -640,7 +640,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
640
640
  | `6e2d2e11f84a` | certain | No description. | `modules/hall-ui/public/idea.js:122` |
641
641
  | `881d06b5e79f` | certain | No done-when criteria yet | `modules/hall-ui/public/goals-render.js:149` |
642
642
  | `93c00cb1423a` | certain | No goal | `modules/hall-ui/public/work.js:575` |
643
- | `d10dca462260` | certain | No goal (homeless) | `modules/hall-ui/public/ideas.js:382` |
643
+ | `d10dca462260` | certain | No goal (homeless) | `modules/hall-ui/public/ideas.js:467` |
644
644
  | `fbb887a9b678` | certain | No goal has criteria met yet — work is in the task queue. | `modules/hall-ui/public/roadmap.js:128` |
645
645
  | `6771a8966ec3` | certain | No goals declared yet — this version is tracked by its {…} done-when criteria. | `modules/hall-ui/public/roadmap.js:106` |
646
646
  | `abc64639b134` | certain | No goals seeded yet. | `modules/hall-ui/public/roadmap.js:205` |
@@ -682,7 +682,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
682
682
  | `cd652d04d616` | certain | Nothing changes yet. This files a task carrying your wording; whoever claims it lands the diff, and it ships g | `modules/hall-ui/public/copy-desk.html:168` |
683
683
  | `fec5d78497e8` | certain | Nothing in the backlog right now. | `modules/hall-ui/public/work.js:1107` |
684
684
  | `905e99f158c2` | certain | Nothing is discarded by omission: every task needs a decision before this can be submitted. Abandoning stamps | `modules/hall-ui/public/goals-render.js:1012` |
685
- | `2ec0fbb20a42` | certain | Nothing is waiting. A spark appears here when its author offers a quick idea up for development. | `modules/hall-ui/public/ideas.js:543` |
685
+ | `2ec0fbb20a42` | certain | Nothing is waiting. A spark appears here when its author offers a quick idea up for development. | `modules/hall-ui/public/ideas.js:634` |
686
686
  | `9ac63d97239a` | certain | Nothing newer is published that this box can take. There is nothing to deploy. | `modules/hall-ui/public/deploy.js:140` |
687
687
  | `ad9a17a8a5eb` | certain | Nothing shipped yet. | `modules/hall-ui/public/profile.js:242` |
688
688
  | `ad9a17a8a5eb` | certain | Nothing shipped yet. | `modules/hall-ui/public/work.js:1068` |
@@ -692,7 +692,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
692
692
  | `11a1905c76b2` | certain | On the board | `modules/hall-ui/public/hall-render.js:626` |
693
693
  | `ea1f179dd878` | certain | On this page | `modules/hall-ui/public/drachmae.html:51` |
694
694
  | `ea1f179dd878` | certain | On this page | `modules/hall-ui/public/drachmae.html:56` |
695
- | `d5f0b7156024` | certain | One line. This is what the idea is called everywhere else. | `modules/hall-ui/public/ideas.html:124` |
695
+ | `d5f0b7156024` | certain | One line. This is what the idea is called everywhere else. | `modules/hall-ui/public/ideas.html:135` |
696
696
  | `0bc1d1470e22` | certain | Only an open goal can be managed. | `modules/hall-ui/public/goals-render.js:1337` |
697
697
  | `0bc1d1470e22` | certain | Only an open goal can be managed. | `modules/hall-ui/public/goals-render.js:1353` |
698
698
  | `3e1d0b2334d1` | certain | Only if it needs it — with the AI at your side, or on your own. | `modules/hall-ui/public/studio.js:182` |
@@ -788,6 +788,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
788
788
  | `9ea556e7b78b` | certain | Reason (optional) | `modules/hall-ui/public/task-detail.js:615` |
789
789
  | `4f619c19a8e7` | certain | Rebase owed | `modules/hall-ui/public/hall-render.js:673` |
790
790
  | `06cbba1440b1` | certain | Rebase owed — new claims paused | `modules/hall-ui/public/hall-render.js:558` |
791
+ | `d65a380a71c4` | certain | Recent filings | `modules/hall-ui/public/ideas.html:101` |
791
792
  | `58fb6fe4b47e` | certain | Recent history could not be loaded right now. | `modules/hall-ui/public/work.js:1236` |
792
793
  | `0b2d1327608f` | certain | Recently shipped | `modules/hall-ui/public/hall-widgets.js:107` |
793
794
  | `cd2bffe2e5b9` | certain | Recognize your peers’ finished work. A vote up (+) or down (−) shapes their karma after a one-week cooling per | `modules/hall-ui/public/hall-widgets.js:169` |
@@ -884,7 +885,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
884
885
  | `6dde12eb0c78` | certain | Show all {…} | `modules/hall-ui/public/collab.js:253` |
885
886
  | `14d32a35c15f` | certain | Show my cross-project record | `modules/hall-ui/public/settings.js:514` |
886
887
  | `dc0f9fe50a65` | certain | Show the setup guide again | `modules/hall-ui/public/index.html:64` |
887
- | `2af4c0f2b4b9` | certain | Showing {…} of {…}. | `modules/hall-ui/public/ideas.js:547` |
888
+ | `2af4c0f2b4b9` | certain | Showing {…} of {…}. | `modules/hall-ui/public/ideas.js:638` |
888
889
  | `838b17fa8d93` | certain | Shown on your public profile — it helps others know what you work on. | `modules/hall-ui/public/profile-nudge.js:69` |
889
890
  | `9bea6404e6e1` | certain | Sign in | `modules/hall-ui/public/profile.js:208` |
890
891
  | `9bea6404e6e1` | certain | Sign in | `modules/hall-ui/public/settings.html:42` |
@@ -1117,7 +1118,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1117
1118
  | `986514f35589` | certain | Work board | `modules/hall-ui/public/work.html:31` |
1118
1119
  | `520d139df9eb` | certain | Work is complete but the version is held — no tasks are being claimed here right now. | `modules/hall-ui/public/roadmap.js:236` |
1119
1120
  | `0e6b8e8f26cc` | certain | Works completed | `modules/hall-ui/public/profile.html:140` |
1120
- | `52e5fe3c6075` | certain | Write a Full Idea | `modules/hall-ui/public/ideas.html:103` |
1121
+ | `52e5fe3c6075` | certain | Write a Full Idea | `modules/hall-ui/public/ideas.html:114` |
1121
1122
  | `7664f4373d1f` | certain | Write one | `modules/hall-ui/public/idea.js:258` |
1122
1123
  | `47f61e576454` | certain | Write the wording you want instead. | `modules/hall-ui/public/copy-desk.js:436` |
1123
1124
  | `b6b0fcb2bcee` | certain | You already have a pending request or invitation for this goal. | `modules/hall-ui/public/goals-render.js:1365` |
@@ -1224,7 +1225,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1224
1225
  | `7d5cbe3d81e4` | certain | how long a vote stays open | `modules/hall-ui/public/government.html:55` |
1225
1226
  | `dacb901c4f10` | certain | idea number | `modules/hall-ui/public/task-detail.js:562` |
1226
1227
  | `7df22e74c87a` | certain | idea {…} | `modules/hall-ui/public/idea.js:210` |
1227
- | `7df22e74c87a` | certain | idea {…} | `modules/hall-ui/public/ideas.js:348` |
1228
+ | `7df22e74c87a` | certain | idea {…} | `modules/hall-ui/public/ideas.js:433` |
1228
1229
  | `b2b399fdd6a4` | certain | in progress | `modules/hall-ui/public/roadmap.js:120` |
1229
1230
  | `b2b399fdd6a4` | certain | in progress | `modules/hall-ui/public/roadmap.js:207` |
1230
1231
  | `0af147b7fd54` | certain | in progress · | `modules/hall-ui/public/roadmap.js:288` |
@@ -1296,7 +1297,8 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1296
1297
  | `4d8ee7d68974` | certain | task {…} | `modules/hall-ui/public/gate.js:157` |
1297
1298
  | `4d8ee7d68974` | certain | task {…} | `modules/hall-ui/public/hall-render.js:669` |
1298
1299
  | `4d8ee7d68974` | certain | task {…} | `modules/hall-ui/public/idea.js:207` |
1299
- | `4d8ee7d68974` | certain | task {…} | `modules/hall-ui/public/ideas.js:476` |
1300
+ | `4d8ee7d68974` | certain | task {…} | `modules/hall-ui/public/ideas.js:183` |
1301
+ | `4d8ee7d68974` | certain | task {…} | `modules/hall-ui/public/ideas.js:561` |
1300
1302
  | `4d8ee7d68974` | certain | task {…} | `modules/hall-ui/public/watch.js:1242` |
1301
1303
  | `a41659dc2bee` | certain | tasks remaining | `modules/hall-ui/public/roadmap.js:298` |
1302
1304
  | `bd3402efa59e` | certain | task{…} shipped | `modules/hall-ui/public/goals-render.js:799` |
@@ -1321,7 +1323,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1321
1323
  | `96a8971a5c44` | certain | what got un-stuck | `modules/hall-ui/public/blockers.js:127` |
1322
1324
  | `96a8971a5c44` | certain | what got un-stuck | `modules/hall-ui/public/task-detail.js:208` |
1323
1325
  | `3126bb540c89` | certain | what needs the owner’s decision | `modules/hall-ui/public/blockers.js:305` |
1324
- | `b1c5eaa20a9d` | certain | what the idea is, in one line | `modules/hall-ui/public/ideas.html:127` |
1326
+ | `b1c5eaa20a9d` | certain | what the idea is, in one line | `modules/hall-ui/public/ideas.html:138` |
1325
1327
  | `e72c90163726` | certain | what's blocking | `modules/hall-ui/public/goals-render.js:161` |
1326
1328
  | `81f05d9b2bbf` | certain | what's wrong, or what you'd like to see | `modules/hall-ui/public/ideas.html:69` |
1327
1329
  | `1651cb1876f5` | certain | who sits on the board | `modules/hall-ui/public/government.html:55` |
@@ -3,9 +3,9 @@
3
3
  "generator": "scripts/gds/copy-inventory.js",
4
4
  "goal": 1000074,
5
5
  "counts": {
6
- "strings": 1826,
7
- "unique_ids": 1584,
8
- "certain": 1826,
6
+ "strings": 1828,
7
+ "unique_ids": 1585,
8
+ "certain": 1828,
9
9
  "heuristic": 0,
10
10
  "duplicate_ids": 166
11
11
  },
@@ -13,7 +13,7 @@
13
13
  "builders-hall": {
14
14
  "at": "modules/hall-ui/public",
15
15
  "files": 84,
16
- "strings": 1336
16
+ "strings": 1338
17
17
  },
18
18
  "status-dashboard": {
19
19
  "at": "modules/status-ui/public",
@@ -100,6 +100,20 @@
100
100
  "modules/hall-ui/public/task-detail.js:226"
101
101
  ]
102
102
  },
103
+ {
104
+ "id": "4d8ee7d68974",
105
+ "surface": "builders-hall",
106
+ "text": "task {…}",
107
+ "occurrences": 6,
108
+ "at": [
109
+ "modules/hall-ui/public/gate.js:157",
110
+ "modules/hall-ui/public/hall-render.js:669",
111
+ "modules/hall-ui/public/idea.js:207",
112
+ "modules/hall-ui/public/ideas.js:183",
113
+ "modules/hall-ui/public/ideas.js:561",
114
+ "modules/hall-ui/public/watch.js:1242"
115
+ ]
116
+ },
103
117
  {
104
118
  "id": "5df2baabf82e",
105
119
  "surface": "landing",
@@ -179,19 +193,6 @@
179
193
  "modules/hall-ui/public/watch.html:40"
180
194
  ]
181
195
  },
182
- {
183
- "id": "4d8ee7d68974",
184
- "surface": "builders-hall",
185
- "text": "task {…}",
186
- "occurrences": 5,
187
- "at": [
188
- "modules/hall-ui/public/gate.js:157",
189
- "modules/hall-ui/public/hall-render.js:669",
190
- "modules/hall-ui/public/idea.js:207",
191
- "modules/hall-ui/public/ideas.js:476",
192
- "modules/hall-ui/public/watch.js:1242"
193
- ]
194
- },
195
196
  {
196
197
  "id": "90a128c97eae",
197
198
  "surface": "landing",
@@ -811,7 +812,7 @@
811
812
  "occurrences": 2,
812
813
  "at": [
813
814
  "modules/hall-ui/public/blockers.js:311",
814
- "modules/hall-ui/public/ideas.html:96"
815
+ "modules/hall-ui/public/ideas.html:107"
815
816
  ]
816
817
  },
817
818
  {
@@ -1551,7 +1552,7 @@
1551
1552
  "occurrences": 2,
1552
1553
  "at": [
1553
1554
  "modules/hall-ui/public/idea.js:210",
1554
- "modules/hall-ui/public/ideas.js:348"
1555
+ "modules/hall-ui/public/ideas.js:433"
1555
1556
  ]
1556
1557
  },
1557
1558
  {
@@ -2042,7 +2043,7 @@
2042
2043
  "surface": "builders-hall",
2043
2044
  "text": "A Full Idea answers five questions, so that someone else can deliver against it without having to interview you first. Open to every role — the score below is the only filter, and it counts substance, not who you are.",
2044
2045
  "file": "modules/hall-ui/public/ideas.html",
2045
- "line": 104,
2046
+ "line": 115,
2046
2047
  "origin": "html-text",
2047
2048
  "confidence": "certain"
2048
2049
  },
@@ -2492,7 +2493,7 @@
2492
2493
  "surface": "builders-hall",
2493
2494
  "text": "Answer the five questions and this spark becomes a Full Idea.",
2494
2495
  "file": "modules/hall-ui/public/ideas.js",
2495
- "line": 601,
2496
+ "line": 692,
2496
2497
  "origin": "js-text-assign",
2497
2498
  "confidence": "certain"
2498
2499
  },
@@ -3752,7 +3753,7 @@
3752
3753
  "surface": "builders-hall",
3753
3754
  "text": "Could not load idea {…}.",
3754
3755
  "file": "modules/hall-ui/public/ideas.js",
3755
- "line": 644,
3756
+ "line": 735,
3756
3757
  "origin": "js-text-assign",
3757
3758
  "confidence": "certain"
3758
3759
  },
@@ -3806,7 +3807,7 @@
3806
3807
  "surface": "builders-hall",
3807
3808
  "text": "Could not load the idea template. Reload, or file from the terminal with capture.js.",
3808
3809
  "file": "modules/hall-ui/public/ideas.js",
3809
- "line": 626,
3810
+ "line": 717,
3810
3811
  "origin": "js-text-assign",
3811
3812
  "confidence": "certain"
3812
3813
  },
@@ -3833,7 +3834,7 @@
3833
3834
  "surface": "builders-hall",
3834
3835
  "text": "Could not load the queue just now.",
3835
3836
  "file": "modules/hall-ui/public/ideas.js",
3836
- "line": 565,
3837
+ "line": 656,
3837
3838
  "origin": "js-markup",
3838
3839
  "confidence": "certain"
3839
3840
  },
@@ -4274,7 +4275,7 @@
4274
4275
  "surface": "builders-hall",
4275
4276
  "text": "Counted, not judged: each question is worth the same, and earns its share in proportion to how much real text it carries. Whitespace and padding score nothing.",
4276
4277
  "file": "modules/hall-ui/public/ideas.html",
4277
- "line": 164,
4278
+ "line": 175,
4278
4279
  "origin": "html-text",
4279
4280
  "confidence": "certain"
4280
4281
  },
@@ -4418,7 +4419,7 @@
4418
4419
  "surface": "builders-hall",
4419
4420
  "text": "Develop this idea",
4420
4421
  "file": "modules/hall-ui/public/ideas.js",
4421
- "line": 600,
4422
+ "line": 691,
4422
4423
  "origin": "js-text-assign",
4423
4424
  "confidence": "certain"
4424
4425
  },
@@ -4427,7 +4428,7 @@
4427
4428
  "surface": "builders-hall",
4428
4429
  "text": "Developing a Big Idea Spark",
4429
4430
  "file": "modules/hall-ui/public/ideas.html",
4430
- "line": 116,
4431
+ "line": 127,
4431
4432
  "origin": "html-text",
4432
4433
  "confidence": "certain"
4433
4434
  },
@@ -4445,7 +4446,7 @@
4445
4446
  "surface": "builders-hall",
4446
4447
  "text": "Discard draft",
4447
4448
  "file": "modules/hall-ui/public/ideas.html",
4448
- "line": 142,
4449
+ "line": 153,
4449
4450
  "origin": "html-text",
4450
4451
  "confidence": "certain"
4451
4452
  },
@@ -4607,7 +4608,7 @@
4607
4608
  "surface": "builders-hall",
4608
4609
  "text": "Draft discarded.",
4609
4610
  "file": "modules/hall-ui/public/ideas.js",
4610
- "line": 361,
4611
+ "line": 446,
4611
4612
  "origin": "js-notice",
4612
4613
  "confidence": "certain"
4613
4614
  },
@@ -4868,7 +4869,7 @@
4868
4869
  "surface": "builders-hall",
4869
4870
  "text": "File it",
4870
4871
  "file": "modules/hall-ui/public/ideas.html",
4871
- "line": 96,
4872
+ "line": 107,
4872
4873
  "origin": "html-text",
4873
4874
  "confidence": "certain"
4874
4875
  },
@@ -4895,7 +4896,7 @@
4895
4896
  "surface": "builders-hall",
4896
4897
  "text": "File this idea",
4897
4898
  "file": "modules/hall-ui/public/ideas.html",
4898
- "line": 141,
4899
+ "line": 152,
4899
4900
  "origin": "html-text",
4900
4901
  "confidence": "certain"
4901
4902
  },
@@ -4913,7 +4914,7 @@
4913
4914
  "surface": "builders-hall",
4914
4915
  "text": "Filed to the inbox.",
4915
4916
  "file": "modules/hall-ui/public/ideas.js",
4916
- "line": 478,
4917
+ "line": 564,
4917
4918
  "origin": "js-text-assign",
4918
4919
  "confidence": "certain"
4919
4920
  },
@@ -5021,7 +5022,7 @@
5021
5022
  "surface": "builders-hall",
5022
5023
  "text": "Five questions, and a score that counts how much of each you actually answered.",
5023
5024
  "file": "modules/hall-ui/public/ideas.js",
5024
- "line": 636,
5025
+ "line": 727,
5025
5026
  "origin": "js-text-assign",
5026
5027
  "confidence": "certain"
5027
5028
  },
@@ -6245,7 +6246,7 @@
6245
6246
  "surface": "builders-hall",
6246
6247
  "text": "Loading the five questions…",
6247
6248
  "file": "modules/hall-ui/public/ideas.html",
6248
- "line": 135,
6249
+ "line": 146,
6249
6250
  "origin": "html-text",
6250
6251
  "confidence": "certain"
6251
6252
  },
@@ -6803,7 +6804,7 @@
6803
6804
  "surface": "builders-hall",
6804
6805
  "text": "No goal (homeless)",
6805
6806
  "file": "modules/hall-ui/public/ideas.js",
6806
- "line": 382,
6807
+ "line": 467,
6807
6808
  "origin": "js-markup",
6808
6809
  "confidence": "certain"
6809
6810
  },
@@ -7181,7 +7182,7 @@
7181
7182
  "surface": "builders-hall",
7182
7183
  "text": "Nothing is waiting. A spark appears here when its author offers a quick idea up for development.",
7183
7184
  "file": "modules/hall-ui/public/ideas.js",
7184
- "line": 543,
7185
+ "line": 634,
7185
7186
  "origin": "js-markup",
7186
7187
  "confidence": "certain"
7187
7188
  },
@@ -7271,7 +7272,7 @@
7271
7272
  "surface": "builders-hall",
7272
7273
  "text": "One line. This is what the idea is called everywhere else.",
7273
7274
  "file": "modules/hall-ui/public/ideas.html",
7274
- "line": 124,
7275
+ "line": 135,
7275
7276
  "origin": "html-text",
7276
7277
  "confidence": "certain"
7277
7278
  },
@@ -8130,6 +8131,15 @@
8130
8131
  "origin": "js-markup",
8131
8132
  "confidence": "certain"
8132
8133
  },
8134
+ {
8135
+ "id": "d65a380a71c4",
8136
+ "surface": "builders-hall",
8137
+ "text": "Recent filings",
8138
+ "file": "modules/hall-ui/public/ideas.html",
8139
+ "line": 101,
8140
+ "origin": "html-text",
8141
+ "confidence": "certain"
8142
+ },
8133
8143
  {
8134
8144
  "id": "58fb6fe4b47e",
8135
8145
  "surface": "builders-hall",
@@ -8999,7 +9009,7 @@
8999
9009
  "surface": "builders-hall",
9000
9010
  "text": "Showing {…} of {…}.",
9001
9011
  "file": "modules/hall-ui/public/ideas.js",
9002
- "line": 547,
9012
+ "line": 638,
9003
9013
  "origin": "js-markup",
9004
9014
  "confidence": "certain"
9005
9015
  },
@@ -11096,7 +11106,7 @@
11096
11106
  "surface": "builders-hall",
11097
11107
  "text": "Write a Full Idea",
11098
11108
  "file": "modules/hall-ui/public/ideas.html",
11099
- "line": 103,
11109
+ "line": 114,
11100
11110
  "origin": "html-text",
11101
11111
  "confidence": "certain"
11102
11112
  },
@@ -12059,7 +12069,7 @@
12059
12069
  "surface": "builders-hall",
12060
12070
  "text": "idea {…}",
12061
12071
  "file": "modules/hall-ui/public/ideas.js",
12062
- "line": 348,
12072
+ "line": 433,
12063
12073
  "origin": "js-markup",
12064
12074
  "confidence": "certain"
12065
12075
  },
@@ -12707,7 +12717,16 @@
12707
12717
  "surface": "builders-hall",
12708
12718
  "text": "task {…}",
12709
12719
  "file": "modules/hall-ui/public/ideas.js",
12710
- "line": 476,
12720
+ "line": 183,
12721
+ "origin": "js-markup",
12722
+ "confidence": "certain"
12723
+ },
12724
+ {
12725
+ "id": "4d8ee7d68974",
12726
+ "surface": "builders-hall",
12727
+ "text": "task {…}",
12728
+ "file": "modules/hall-ui/public/ideas.js",
12729
+ "line": 561,
12711
12730
  "origin": "js-markup",
12712
12731
  "confidence": "certain"
12713
12732
  },
@@ -12932,7 +12951,7 @@
12932
12951
  "surface": "builders-hall",
12933
12952
  "text": "what the idea is, in one line",
12934
12953
  "file": "modules/hall-ui/public/ideas.html",
12935
- "line": 127,
12954
+ "line": 138,
12936
12955
  "origin": "html-attr:placeholder",
12937
12956
  "confidence": "certain"
12938
12957
  },
@@ -2286,5 +2286,7 @@ is load-bearing: the script throws rather than guess if it is missing, and
2286
2286
  landed since 1.19.904 with no explicit bump. run 35513060618. (task 1002620)
2287
2287
  1.19.906 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
2288
2288
  landed since 1.19.905 with no explicit bump. run 35514202453. (task 1002620)
2289
+ 1.19.907 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
2290
+ landed since 1.19.906 with no explicit bump. run 35514739370. (task 1002620)
2289
2291
  ---------------------------------------------------------------------------
2290
2292
  ```
@@ -79,6 +79,19 @@
79
79
  .fi-result { margin: var(--sp-sm) 0 0; max-width: var(--measure); font-size: 14px; line-height: 1.5; color: var(--ink-soft); }
80
80
  .fi-result a { display: inline-block; min-height: 24px; padding: 3px 0; line-height: 18px; box-sizing: border-box; color: inherit; }
81
81
 
82
+ /* The durable receipts list (task 1004082 / spec R01). Deliberately quieter than
83
+ .fi-result: that line is the answer to "did it land?", this is the answer to
84
+ "what happened to the last few?" — reference, not confirmation. Same 24px row
85
+ recipe on its links as every other list in the world. */
86
+ .fi-receipts { margin: var(--sp-md) 0 0; max-width: var(--measure); }
87
+ .fi-receipts__h { margin: 0; font-size: 12.5px; font-weight: 600; color: var(--ink-faint); }
88
+ .fi-receipts__list { margin: 6px 0 0; padding: 0; list-style: none; }
89
+ .fi-receipts__item { font-size: 13.5px; line-height: 1.5; color: var(--ink-soft); }
90
+ .fi-receipts__item + .fi-receipts__item { margin-top: 4px; }
91
+ .fi-receipts__item a { display: inline-block; min-height: 24px; padding: 3px 0; line-height: 18px; box-sizing: border-box; color: inherit; }
92
+ .fi-receipts__what { color: var(--ink-faint); }
93
+ .fi-receipts__note { margin: 6px 0 0; font-size: 12.5px; color: var(--ink-faint); }
94
+
82
95
  .fi-actions { display: flex; flex-wrap: wrap; gap: 10px 12px; align-items: center; margin-top: var(--sp-md); }
83
96
  .fi-draft { font-size: 12.5px; color: var(--ink-faint); }
84
97
 
@@ -92,6 +92,17 @@
92
92
  <p class="fi-err" id="fq-err" role="alert"></p>
93
93
  <p class="fi-result" id="fq-result" role="status" aria-live="polite"></p>
94
94
 
95
+ <!-- The receipt that outlives the confirmation above (task 1004082 /
96
+ spec R01). #fq-result is the live announcement for the filing
97
+ just made and dies with the page; this list is the durable
98
+ record of the last few, read back from localStorage on load so
99
+ a thought filed before a reload is still traceable here. -->
100
+ <section class="fi-receipts" id="fq-receipts" aria-labelledby="fq-receipts-h" hidden>
101
+ <h3 class="fi-receipts__h" id="fq-receipts-h">Recent filings</h3>
102
+ <ol class="fi-receipts__list" id="fq-receipts-list"></ol>
103
+ <p class="fi-receipts__note" id="fq-receipts-note" hidden></p>
104
+ </section>
105
+
95
106
  <div class="fi-actions">
96
107
  <button type="submit" class="btn" id="fq-submit">File it</button>
97
108
  </div>
@@ -127,6 +127,91 @@
127
127
  try { window.localStorage.removeItem(DRAFT_KEY); } catch (_) { /* nothing to clear */ }
128
128
  }
129
129
 
130
+ // ---------------------------------------------------------------------------
131
+ // filing receipts (task 1004082 / spec R01 — "the receipt persists")
132
+ // ---------------------------------------------------------------------------
133
+
134
+ // WHAT WAS ACTUALLY BROKEN. Not the keystroke clearing the line — nothing does
135
+ // that, and the task text was amended at build time to say so. The gaps were
136
+ // that only ONE outcome ever existed (the next filing overwrote it), and that
137
+ // it was DOM-only, so a reload lost it. So this is not a guard added to
138
+ // #fq-result; it is the record #fq-result never was.
139
+ //
140
+ // WHY LOCAL, and why that is honest here. A receipt is "what I was told when I
141
+ // filed", which is per-person and per-browser by nature — and the durable
142
+ // record of the ideas themselves already exists server-side on the profile
143
+ // trail. Re-reading the trail here would be a second copy of a read this page
144
+ // does not own (the same reasoning that keeps the scorer out of this file).
145
+ // Guarded exactly like the draft above: storage that throws must never take
146
+ // the composer down, and must never be reported as having saved.
147
+ const RECEIPTS_KEY = 'hall-filing-receipts';
148
+ const RECEIPTS_MAX = 5;
149
+ let receiptsStorageRefused = false;
150
+
151
+ function readReceipts() {
152
+ try {
153
+ const raw = window.localStorage.getItem(RECEIPTS_KEY);
154
+ if (!raw) return [];
155
+ const list = JSON.parse(raw);
156
+ if (!Array.isArray(list)) return [];
157
+ // Shape-check every row rather than trusting the key: a stale or
158
+ // hand-edited value must degrade to "no receipts", never to a thrown
159
+ // render that takes the filing form with it.
160
+ return list.filter((r) => r && typeof r === 'object' && typeof r.title === 'string')
161
+ .slice(0, RECEIPTS_MAX);
162
+ } catch (_) { return []; }
163
+ }
164
+
165
+ function pushReceipt(receipt) {
166
+ const next = [receipt].concat(readReceipts()).slice(0, RECEIPTS_MAX);
167
+ try {
168
+ window.localStorage.setItem(RECEIPTS_KEY, JSON.stringify(next));
169
+ receiptsStorageRefused = false;
170
+ } catch (_) {
171
+ // Same discipline as writeDraft: say it is not being kept rather than
172
+ // letting someone believe a receipt will be there after a reload.
173
+ receiptsStorageRefused = true;
174
+ }
175
+ return next;
176
+ }
177
+
178
+ function receiptLine(r) {
179
+ const when = r.at ? `<time datetime="${escapeHtml(String(r.at))}">${escapeHtml(formatReceiptTime(r.at))}</time> · ` : '';
180
+ const what = `<span class="fi-receipts__what">${escapeHtml(r.title)}</span>`;
181
+ if (r.task_id && r.href) {
182
+ const goal = r.goal_name ? ` under ${escapeHtml(r.goal_name)}` : '';
183
+ return `${when}${what} — filed as <a href="${escapeHtml(r.href)}">task ${escapeHtml(String(r.task_id))}</a>${goal}.`;
184
+ }
185
+ return `${when}${what} — filed to the inbox.`;
186
+ }
187
+
188
+ function formatReceiptTime(iso) {
189
+ const d = new Date(iso);
190
+ if (Number.isNaN(d.getTime())) return '';
191
+ try {
192
+ return d.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });
193
+ } catch (_) { return ''; }
194
+ }
195
+
196
+ function renderReceipts(list) {
197
+ const wrap = $('#fq-receipts');
198
+ const ol = $('#fq-receipts-list');
199
+ const noteEl = $('#fq-receipts-note');
200
+ if (!wrap || !ol) return;
201
+ const receipts = Array.isArray(list) ? list : readReceipts();
202
+ if (!receipts.length) { wrap.hidden = true; ol.innerHTML = ''; return; }
203
+ wrap.hidden = false;
204
+ ol.innerHTML = receipts
205
+ .map((r) => `<li class="fi-receipts__item">${receiptLine(r)}</li>`)
206
+ .join('');
207
+ if (noteEl) {
208
+ noteEl.hidden = !receiptsStorageRefused;
209
+ noteEl.textContent = receiptsStorageRefused
210
+ ? 'This browser is not keeping receipts — they will go when the tab does.'
211
+ : '';
212
+ }
213
+ }
214
+
130
215
  function note(msg) {
131
216
  const el = $('#fi-draft');
132
217
  if (el) el.textContent = msg;
@@ -474,8 +559,10 @@
474
559
  const goal = allGoalsById.get(String(routing.goal_id));
475
560
  const goalName = goal ? goal.title : `goal ${routing.goal_id}`;
476
561
  $('#fq-result').innerHTML = `Filed as <a href="${href}">task ${escapeHtml(String(routedTask.id))}</a> under ${escapeHtml(goalName)}.`;
562
+ renderReceipts(pushReceipt({ title, task_id: routedTask.id, goal_name: goalName, href, at: new Date().toISOString() }));
477
563
  } else {
478
564
  $('#fq-result').textContent = 'Filed to the inbox.';
565
+ renderReceipts(pushReceipt({ title, task_id: null, goal_name: null, href: null, at: new Date().toISOString() }));
479
566
  }
480
567
 
481
568
  fqTitleEl().value = '';
@@ -493,6 +580,10 @@
493
580
  fqGoalEl().addEventListener('change', () => { goalTouchedByUser = true; });
494
581
  $('#fq-form').addEventListener('submit', fileQuick);
495
582
 
583
+ // Before any network call: the receipts are local, so a builder who reloads
584
+ // sees what became of earlier thoughts even if every read below fails.
585
+ renderReceipts();
586
+
496
587
  try {
497
588
  const [versionsRes, goalsRes] = await Promise.all([
498
589
  api.versions.getVersions({}),
package/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@bongos/core",
3
- "version": "1.19.906",
3
+ "version": "1.19.907",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@bongos/core",
9
- "version": "1.19.906",
9
+ "version": "1.19.907",
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.906",
3
+ "version": "1.19.907",
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
@@ -71,7 +71,7 @@ const { responsibilityFor, ROLE_RESPONSIBILITIES } = require('./role-responsibil
71
71
  // there. scripts/gds/bump-version.js still rewrites the literal below; it appends
72
72
  // the entry to that file. Look for a version's history there, not here.
73
73
  // ---------------------------------------------------------------------------
74
- const CORE_VERSION = '1.19.906'; // CI auto-patch carrier (ADR 0161); changelog: docs/module-api-changelog.md
74
+ const CORE_VERSION = '1.19.907'; // CI auto-patch carrier (ADR 0161); changelog: docs/module-api-changelog.md
75
75
 
76
76
  // A namespaced logger so a module's log lines are attributable + consistent.
77
77
  // Usage: const log = api.logger('dev-box'); log.info('mounted');
@@ -400,5 +400,120 @@ await test('the kind control travels with the filing', async () => {
400
400
  assert.equal(call[1].body.kind, 'refactor');
401
401
  });
402
402
 
403
+ // ---------------------------------------------------------------------------
404
+ // task 1004082 / spec R01 — the receipt persists
405
+ //
406
+ // The task as written blamed a keystroke for clearing #fq-result. It does not;
407
+ // the description was amended at build time. What was actually missing: only
408
+ // ONE outcome ever existed (the next filing overwrote it) and it was DOM-only,
409
+ // so a reload lost it. These cases pin the record, not the confirmation line.
410
+ //
411
+ // READ THIS BEFORE TRUSTING THE ONES BELOW: this file's DOM stub MANUFACTURES an
412
+ // element for any id it is handed (getElementById sets on miss), so a test that
413
+ // merely asserts on #fq-receipts-list would stay green if ideas.html never
414
+ // declared it. The markup pin is therefore the load-bearing case here.
415
+ // ---------------------------------------------------------------------------
416
+
417
+ await test('ideas.html actually declares the receipts markup (the stub would fake it otherwise)', async () => {
418
+ const html = fs.readFileSync(path.join(HALL, 'ideas.html'), 'utf8');
419
+ assert.match(html, /id="fq-receipts"/, 'the receipts container is in the real markup');
420
+ assert.match(html, /id="fq-receipts-list"/, 'and the list the items render into');
421
+ assert.match(html, /id="fq-result"/, 'the live confirmation line is untouched beside it');
422
+ });
423
+
424
+ await test('a routed filing writes a receipt that outlives the confirmation line', async () => {
425
+ const r = boot();
426
+ await settle(); await settle();
427
+ r.el('fq-title').value = 'the widget is broken';
428
+ r.el('fq-goal').value = '77';
429
+ r.el('fq-goal')._handlers.change();
430
+ await r.submitQuick();
431
+ await settle();
432
+ const stored = JSON.parse(r.store['hall-filing-receipts']);
433
+ assert.equal(stored.length, 1);
434
+ assert.equal(stored[0].task_id, '5555');
435
+ assert.equal(stored[0].title, 'the widget is broken');
436
+ assert.equal(stored[0].goal_name, 'Goal Seventy Seven');
437
+ const rendered = r.el('fq-receipts-list').innerHTML;
438
+ assert.match(rendered, /task 5555/);
439
+ assert.match(rendered, /Goal Seventy Seven/);
440
+ assert.equal(r.el('fq-receipts').hidden, false, 'and the section is shown');
441
+ });
442
+
443
+ await test('a SECOND filing does not overwrite the first — the bug this task exists for', async () => {
444
+ const r = boot();
445
+ await settle(); await settle();
446
+ r.el('fq-title').value = 'the first thought';
447
+ await r.submitQuick();
448
+ await settle();
449
+ r.el('fq-title').value = 'the second thought';
450
+ await r.submitQuick();
451
+ await settle();
452
+ const stored = JSON.parse(r.store['hall-filing-receipts']);
453
+ assert.equal(stored.length, 2, 'both are kept');
454
+ assert.equal(stored[0].title, 'the second thought', 'newest first');
455
+ assert.equal(stored[1].title, 'the first thought', 'and the earlier one survived');
456
+ const rendered = r.el('fq-receipts-list').innerHTML;
457
+ assert.match(rendered, /the first thought/, 'the earlier filing is still reachable on the surface');
458
+ });
459
+
460
+ await test('receipts are read back on load — a filing survives a reload', async () => {
461
+ const earlier = [{ title: 'filed before the reload', task_id: '4242', goal_name: 'Goal Seventy Seven', href: '/task/4242', at: '2026-09-20T09:00:00Z' }];
462
+ const r = boot({ store: { 'hall-filing-receipts': JSON.stringify(earlier) } });
463
+ await settle(); await settle();
464
+ const rendered = r.el('fq-receipts-list').innerHTML;
465
+ assert.match(rendered, /filed before the reload/, 'rendered from storage with no filing this session');
466
+ assert.match(rendered, /task 4242/);
467
+ assert.equal(r.el('fq-result').textContent, '', 'and the live line is correctly empty — it is not the record');
468
+ });
469
+
470
+ await test('an unrouted filing is receipted too — "filed to the inbox" is an outcome', async () => {
471
+ const r = boot();
472
+ await settle(); await settle();
473
+ r.el('fq-title').value = 'a homeless thought';
474
+ await r.submitQuick();
475
+ await settle();
476
+ const stored = JSON.parse(r.store['hall-filing-receipts']);
477
+ assert.equal(stored[0].task_id, null);
478
+ assert.match(r.el('fq-receipts-list').innerHTML, /filed to the inbox/);
479
+ });
480
+
481
+ await test('the list is capped at five, keeping the newest', async () => {
482
+ const old = Array.from({ length: 5 }, (_, i) => ({ title: `old ${i}`, task_id: null, at: '2026-09-20T09:00:00Z' }));
483
+ const r = boot({ store: { 'hall-filing-receipts': JSON.stringify(old) } });
484
+ await settle(); await settle();
485
+ r.el('fq-title').value = 'the newest thought';
486
+ await r.submitQuick();
487
+ await settle();
488
+ const stored = JSON.parse(r.store['hall-filing-receipts']);
489
+ assert.equal(stored.length, 5, 'still five');
490
+ assert.equal(stored[0].title, 'the newest thought');
491
+ assert.ok(!stored.some((x) => x.title === 'old 4'), 'the oldest fell off');
492
+ });
493
+
494
+ await test('storage that refuses never takes the composer down, and says it is not keeping them', async () => {
495
+ // The failure a private window / blocked site data actually produces: the
496
+ // write throws. The filing itself must still complete, and the page must not
497
+ // claim a receipt it did not keep.
498
+ const blocked = boot({ store: new Proxy({}, { set() { throw new Error('blocked'); } }) });
499
+ await settle(); await settle();
500
+ blocked.el('fq-title').value = 'a thought in a private window';
501
+ await blocked.submitQuick();
502
+ await settle();
503
+ assert.equal(blocked.el('fq-result').textContent, 'Filed to the inbox.', 'the filing still completed');
504
+ assert.match(blocked.el('fq-receipts-note').textContent, /not keeping receipts/, 'and it says so rather than pretending');
505
+ });
506
+
507
+ // Every guard was reverted and each redded its named case (run, not assumed):
508
+ // drop pushReceipt from the routed branch -> 1 red (the routed case)
509
+ // write instead of prepend (overwrite the list) -> 2 red (second-filing + the cap)
510
+ // drop renderReceipts() from bootQuickComposer -> 1 red (the reload case)
511
+ // rename the id in ideas.html -> 1 red (the markup pin ONLY)
512
+ //
513
+ // That last line is the one worth reading twice: every DOM-asserting case above
514
+ // stayed GREEN while the real markup was broken, because the stub manufactured
515
+ // the element. Without the markup pin this file would have certified a page
516
+ // that renders nothing.
517
+
403
518
  console.log(`\nidea_spark_hall: ${passed} passed, ${failed} failed`);
404
519
  if (failed > 0) process.exit(1);