@bongos/core 1.19.692 → 1.19.693

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.692",
6
- "core_contract": "1.19.692",
7
- "source_commit": "012d6894a38ec2863be3f253053d3e6bcb153e6e",
5
+ "core_version": "1.19.693",
6
+ "core_contract": "1.19.693",
7
+ "source_commit": "64897221c9ad47833068dacf7644c0261cbc526b",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-09-13T01:33:50.871Z",
9
+ "built_at": "2026-09-13T01:48:28.390Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
12
  "docs_redacted": 477,
@@ -17,7 +17,7 @@
17
17
  "gate": "passed"
18
18
  },
19
19
  "file_count": 2628,
20
- "tree_sha256": "5094b3b7495543b7ffaed3e1fc5f1b10c24356b3e227ad469461127b5cbefec7",
20
+ "tree_sha256": "8d4afe14f879514c8da9a3f8309944b8d40be680675f2a22a0d6a70d69cb64a8",
21
21
  "files": [
22
22
  {
23
23
  "path": ".claude/skills/ask-for-help/SKILL.md",
@@ -1952,12 +1952,12 @@
1952
1952
  {
1953
1953
  "path": "docs/copy-inventory.md",
1954
1954
  "mode": "0000644",
1955
- "sha256": "06669e4ff16041426605f0a419c090bc1bb703cfe0ca6ee420651d0081424e29"
1955
+ "sha256": "c9678e184319ed2d9d92d1730bf7e5cf33003c03cc5a19c105b87cea7934de38"
1956
1956
  },
1957
1957
  {
1958
1958
  "path": "docs/copy-registry.json",
1959
1959
  "mode": "0000644",
1960
- "sha256": "aae00576adf9a4beb3658a181f0d8b0b2616f7c4c9ddf5809740fd84bd5db45c"
1960
+ "sha256": "27357864ff57cba6fdc4531e7ce5f0868aec67d36ebd0d2b14ae3ab83b91fa87"
1961
1961
  },
1962
1962
  {
1963
1963
  "path": "docs/design/apex-pass-2-direction.md",
@@ -2802,7 +2802,7 @@
2802
2802
  {
2803
2803
  "path": "docs/module-api-changelog.md",
2804
2804
  "mode": "0000644",
2805
- "sha256": "ecd1242e375b1219b305ac16e2c3da7bfd8bdaa6812fd595b1ff9c68e84a8883"
2805
+ "sha256": "f7893e7defc9a2b255d4c3377037279fbc74ddd0900ca84eb23a9ff8d5fc8c5d"
2806
2806
  },
2807
2807
  {
2808
2808
  "path": "docs/modules-contract.md",
@@ -4957,7 +4957,7 @@
4957
4957
  {
4958
4958
  "path": "modules/hall-ui/public/dom-utils.js",
4959
4959
  "mode": "0000644",
4960
- "sha256": "bbe20271613f3e4b6884bd3f7c210246a917523dab845ec52f5f16fad3dc0e29"
4960
+ "sha256": "6fe8b27e5af359e4e69bc66238f913399f75f68eb8775ead88eb782a35fd0c09"
4961
4961
  },
4962
4962
  {
4963
4963
  "path": "modules/hall-ui/public/drachmae.html",
@@ -5012,7 +5012,7 @@
5012
5012
  {
5013
5013
  "path": "modules/hall-ui/public/goals-page.js",
5014
5014
  "mode": "0000644",
5015
- "sha256": "fb606d5d1e2fb4ea6c7f8d6b36cc8bc9a877e91748db06d15b05b72e5140e8eb"
5015
+ "sha256": "34a6fa4c13a88b539d78ff07276bd8e1b6e6b53d1d9b31cc772cd34158b7bfe2"
5016
5016
  },
5017
5017
  {
5018
5018
  "path": "modules/hall-ui/public/goals-render.js",
@@ -5122,12 +5122,12 @@
5122
5122
  {
5123
5123
  "path": "modules/hall-ui/public/ideas.html",
5124
5124
  "mode": "0000644",
5125
- "sha256": "78c92c2d5468cc2b88662a005af756148293817967f51b06c527fbaba8cb74fa"
5125
+ "sha256": "645ba0757c89e328b955565cca3be5c38acdd5412ba5b8726c210aa6486acd1a"
5126
5126
  },
5127
5127
  {
5128
5128
  "path": "modules/hall-ui/public/ideas.js",
5129
5129
  "mode": "0000644",
5130
- "sha256": "e7c788887e118e7a47b57001968a8247a170239a339a43ed7d643536c7d804d1"
5130
+ "sha256": "be562d9cac8180a42cd8b0d9bc0e0a0d369c2703b859eda235645a5bd56a6368"
5131
5131
  },
5132
5132
  {
5133
5133
  "path": "modules/hall-ui/public/ideas.states.json",
@@ -5522,7 +5522,7 @@
5522
5522
  {
5523
5523
  "path": "modules/hall-ui/public/work.js",
5524
5524
  "mode": "0000644",
5525
- "sha256": "4a5f3d8c5168501cc71c9541cb5d4b1457ce61a6e000d4d7aa8af502f0cd485f"
5525
+ "sha256": "f75b218b452f954f5f804be1abfddf171beca4e4f70fd76ebe4c75182a985b17"
5526
5526
  },
5527
5527
  {
5528
5528
  "path": "modules/hall-ui/public/work.states.json",
@@ -5797,7 +5797,7 @@
5797
5797
  {
5798
5798
  "path": "modules/lifecycle/lifecycle.js",
5799
5799
  "mode": "0000644",
5800
- "sha256": "db5e823ab382d44d4ae41266cec8ff76a98d6e636fd175cea0f1a04135eec7c9"
5800
+ "sha256": "bdc23f748853a4a39ae416f731052bd29e4fe5788684cb83a166243d9240a364"
5801
5801
  },
5802
5802
  {
5803
5803
  "path": "modules/lifecycle/merge-lock.js",
@@ -7782,12 +7782,12 @@
7782
7782
  {
7783
7783
  "path": "package-lock.json",
7784
7784
  "mode": "0000644",
7785
- "sha256": "5551c94d2db16d2ca8587eb4eeb10a6a92c03f303c578440ecda87bdbd8d96f8"
7785
+ "sha256": "37f563e1f70d64e638bb3ea45f7808f53a0f5a405c81f78ff9f818f75122f19f"
7786
7786
  },
7787
7787
  {
7788
7788
  "path": "package.json",
7789
7789
  "mode": "0000644",
7790
- "sha256": "ee34bdc1c10e92539590e5df75dddd41aca8db38e79579ba97fb78511f096558"
7790
+ "sha256": "059bbd9276dad23f7d647e3a93d5886abaaf7415c6056cffce375153bce2d8f7"
7791
7791
  },
7792
7792
  {
7793
7793
  "path": "public-docs/index.html",
@@ -9482,7 +9482,7 @@
9482
9482
  {
9483
9483
  "path": "src/bongos/routes/me.js",
9484
9484
  "mode": "0000644",
9485
- "sha256": "c730714c3ac3a8b0f8294bca3d15939bf3c37dc2119f7d2faaf194087022634b"
9485
+ "sha256": "68efd6eb42956a3220d34a727844f27d38b44bd522c174c43842bec81cf1766b"
9486
9486
  },
9487
9487
  {
9488
9488
  "path": "src/bongos/routes/modules.js",
@@ -9552,7 +9552,7 @@
9552
9552
  {
9553
9553
  "path": "src/module-api.js",
9554
9554
  "mode": "0000644",
9555
- "sha256": "2e95562bb87ada79174e5014569717a5583925c9d2de108e1fb2e74763cf531b"
9555
+ "sha256": "bfab1f6315f23c5d1d0ec1e97b4c90ac8f2fa0ce632c39ac15473209076df0fb"
9556
9556
  },
9557
9557
  {
9558
9558
  "path": "src/module-loader/catalog.js",
@@ -12842,7 +12842,7 @@
12842
12842
  {
12843
12843
  "path": "tests/task_classifier_vocab.mjs",
12844
12844
  "mode": "0000644",
12845
- "sha256": "6608e86605ccd97418a0018e5cfb62f6d65c2cfe79d8c62115b24df729a44f18"
12845
+ "sha256": "0d45fa36ac5d6942714f063e12fb431d510d643bf192475f807af32a54768b9c"
12846
12846
  },
12847
12847
  {
12848
12848
  "path": "tests/task_cli.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
- **1761 strings** across 3 surfaces · 1523 distinct pieces of copy · 1761 certain, 0 heuristic · 165 shown in more than one place.
7
+ **1759 strings** across 3 surfaces · 1521 distinct pieces of copy · 1759 certain, 0 heuristic · 165 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` | 81 | 1282 |
13
+ | `builders-hall` | `modules/hall-ui/public` | 81 | 1280 |
14
14
  | `status-dashboard` | `modules/status-ui/public` | 4 | 100 |
15
15
  | `landing` | `modules/public-landing/public` | 5 | 379 |
16
16
 
@@ -78,7 +78,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
78
78
  | `a072071b893c` | 2x | All time | modules/status-ui/public/index.html:286, modules/status-ui/public/index.html:313 |
79
79
  | … | | _125 more in the JSON registry_ | |
80
80
 
81
- ## `builders-hall` — 1282 strings
81
+ ## `builders-hall` — 1280 strings
82
82
 
83
83
  | id | conf | text | where |
84
84
  |---|---|---|---|
@@ -114,7 +114,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
114
114
  | `f1dec47e42d1` | certain | 4 · The complete architecture | `modules/hall-ui/public/diagrams.html:73` |
115
115
  | `477235450d2b` | certain | 5 · Versioning | `modules/hall-ui/public/diagrams.html:82` |
116
116
  | `353fff36068f` | certain | ; a later push must be re-approved. | `modules/hall-ui/public/gate.js:94` |
117
- | `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:107` |
117
+ | `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` |
118
118
  | `3e5a62bc4887` | certain | A GitHub username is needed. | `modules/hall-ui/public/hall-render.js:377` |
119
119
  | `3e5a62bc4887` | certain | A GitHub username is needed. | `modules/hall-ui/public/watch.js:311` |
120
120
  | `568d58fd26cc` | certain | A configured value could not be used: | `modules/hall-ui/public/project-settings.js:103` |
@@ -154,7 +154,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
154
154
  | `e99cc5d37404` | certain | Already a member? | `modules/hall-ui/public/hall-render.js:346` |
155
155
  | `da5368d10f85` | certain | Amendment {…} passed{…}, and the constitution below is not the one it decided: | `modules/hall-ui/public/government.js:633` |
156
156
  | `69f0ca4a4d84` | certain | Analytics scope | `modules/hall-ui/public/hall-render.js:1143` |
157
- | `14bdceaac078` | certain | Answer the five questions and this spark becomes a Full Idea. | `modules/hall-ui/public/ideas.js:586` |
157
+ | `14bdceaac078` | certain | Answer the five questions and this spark becomes a Full Idea. | `modules/hall-ui/public/ideas.js:601` |
158
158
  | `0293418d5e8e` | certain | Answerable for: | `modules/hall-ui/public/profile.js:72` |
159
159
  | `52ed0e2e3470` | certain | Any rank | `modules/hall-ui/public/task-lib.js:62` |
160
160
  | `c89833aa985a` | certain | Approval failed — try again. | `modules/hall-ui/public/pair.js:92` |
@@ -189,7 +189,6 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
189
189
  | `f6bb75b08e98` | certain | Back to {…} | `modules/hall-ui/public/task.js:188` |
190
190
  | `f6bb75b08e98` | certain | Back to {…} | `modules/hall-ui/public/task.js:197` |
191
191
  | `e49da8610a21` | certain | Block lifted. | `modules/hall-ui/public/harbor.js:182` |
192
- | `f0576990e9fc` | certain | Blocker resolution | `modules/hall-ui/public/ideas.html:81` |
193
192
  | `118026595c16` | certain | Board Room | `modules/hall-ui/public/board-room.html:19` |
194
193
  | `118026595c16` | certain | Board Room | `modules/hall-ui/public/board-room.html:19` |
195
194
  | `118026595c16` | certain | Board Room | `modules/hall-ui/public/board-room.html:31` |
@@ -302,15 +301,15 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
302
301
  | `71da00d47492` | certain | Could not invite: {…} | `modules/hall-ui/public/watch.js:321` |
303
302
  | `90691bceaf68` | certain | Could not load | `modules/hall-ui/public/project-settings.js:242` |
304
303
  | `90691bceaf68` | certain | Could not load | `modules/hall-ui/public/task.js:710` |
305
- | `589a4cfc5442` | certain | Could not load idea {…}. | `modules/hall-ui/public/ideas.js:629` |
304
+ | `589a4cfc5442` | certain | Could not load idea {…}. | `modules/hall-ui/public/ideas.js:644` |
306
305
  | `192c893fc64e` | certain | Could not load modules. | `modules/hall-ui/public/modules.js:318` |
307
306
  | `8a4b590fa1a0` | certain | Could not load requests. | `modules/hall-ui/public/collab.js:274` |
308
307
  | `7775fec0fa85` | certain | Could not load sessions. | `modules/hall-ui/public/sessions.js:243` |
309
308
  | `7775fec0fa85` | certain | Could not load sessions. | `modules/hall-ui/public/sessions.js:281` |
310
- | `b2147cc90e36` | certain | Could not load the idea template. Reload, or file from the terminal with capture.js. | `modules/hall-ui/public/ideas.js:611` |
309
+ | `b2147cc90e36` | certain | Could not load the idea template. Reload, or file from the terminal with capture.js. | `modules/hall-ui/public/ideas.js:626` |
311
310
  | `7604af13c40e` | certain | Could not load the profile. | `modules/hall-ui/public/profile.js:790` |
312
311
  | `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:550` |
312
+ | `edd5bafbe075` | certain | Could not load the queue just now. | `modules/hall-ui/public/ideas.js:565` |
314
313
  | `02bb0570996a` | certain | Could not load the ranks. | `modules/hall-ui/public/ranks.js:197` |
315
314
  | `2878778cf9f3` | certain | Could not load this page. | `modules/hall-ui/public/watch.js:1311` |
316
315
  | `4b0c8d94541c` | certain | Could not load your account. Reload the page to try again. | `modules/hall-ui/public/settings.js:1396` |
@@ -355,7 +354,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
355
354
  | `278e8281c82f` | certain | Could not vote: {…} | `modules/hall-ui/public/board-room.js:304` |
356
355
  | `a48e9f098392` | certain | Could not {…} just now. | `modules/hall-ui/public/goals-render.js:1205` |
357
356
  | `cb09ee26014f` | certain | Could not {…}: {…} | `modules/hall-ui/public/government.js:314` |
358
- | `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:167` |
357
+ | `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` |
359
358
  | `38827a954f3b` | certain | Create a custom rank first. | `modules/hall-ui/public/government.js:459` |
360
359
  | `dd8ead7adc9a` | certain | Create rank | `modules/hall-ui/public/government.html:92` |
361
360
  | `d7beb841395e` | certain | Create task | `modules/hall-ui/public/task-detail.js:377` |
@@ -369,12 +368,12 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
369
368
  | `8cac6be8afdf` | certain | Dev box app | `modules/hall-ui/public/settings.html:216` |
370
369
  | `d784d7a258ec` | certain | Dev boxes | `modules/hall-ui/public/harbor.html:47` |
371
370
  | `9c37356c3a04` | certain | Dev-box costs | `modules/hall-ui/public/watch.html:94` |
372
- | `0a4fe7150971` | certain | Develop this idea | `modules/hall-ui/public/ideas.js:585` |
373
- | `11b8266d6aab` | certain | Developing a Big Idea Spark | `modules/hall-ui/public/ideas.html:119` |
371
+ | `0a4fe7150971` | certain | Develop this idea | `modules/hall-ui/public/ideas.js:600` |
372
+ | `11b8266d6aab` | certain | Developing a Big Idea Spark | `modules/hall-ui/public/ideas.html:116` |
374
373
  | `457f4967541b` | certain | Device pairing | `modules/hall-ui/public/pair.html:16` |
375
374
  | `457f4967541b` | certain | Device pairing | `modules/hall-ui/public/pair.html:16` |
376
375
  | `433beff4d202` | certain | Device · dev box · memory · server (authority + prod) · GitHub — and the full box→production ship flow. | `modules/hall-ui/public/diagrams.html:77` |
377
- | `65322ac89221` | certain | Discard draft | `modules/hall-ui/public/ideas.html:145` |
376
+ | `65322ac89221` | certain | Discard draft | `modules/hall-ui/public/ideas.html:142` |
378
377
  | `0f685daf1bd5` | certain | Discord connected ✓ | `modules/hall-ui/public/settings.js:920` |
379
378
  | `d8017b5ca98f` | certain | Discord unlinked. | `modules/hall-ui/public/settings.js:939` |
380
379
  | `f3e09453374f` | certain | Dismissed — looked at, leaving it as it is | `modules/hall-ui/public/copy-desk.html:123` |
@@ -422,10 +421,10 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
422
421
  | `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` |
423
422
  | `d629e152f074` | certain | Expires {…} · refreshes on use. | `modules/hall-ui/public/settings.js:1007` |
424
423
  | `de62f4cc7d2e` | certain | File a bug or idea | `modules/hall-ui/public/ideas.html:59` |
425
- | `0f166311ff3f` | certain | File it | `modules/hall-ui/public/ideas.html:99` |
424
+ | `0f166311ff3f` | certain | File it | `modules/hall-ui/public/ideas.html:96` |
426
425
  | `0c4632f983db` | certain | File the change | `modules/hall-ui/public/copy-desk.html:173` |
427
426
  | `536a7e99640a` | certain | File the flag | `modules/hall-ui/public/copy-desk.html:108` |
428
- | `077cf99f49f6` | certain | File this idea | `modules/hall-ui/public/ideas.html:144` |
427
+ | `077cf99f49f6` | certain | File this idea | `modules/hall-ui/public/ideas.html:141` |
429
428
  | `a7bdd4706975` | certain | Filed as task {…} — this review is closed against it. | `modules/hall-ui/public/studio.js:445` |
430
429
  | `6430ee350486` | certain | Filed to the inbox. | `modules/hall-ui/public/ideas.js:478` |
431
430
  | `1def0e7c716e` | certain | Find something to flag | `modules/hall-ui/public/copy-desk.html:64` |
@@ -436,7 +435,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
436
435
  | `86ef86c5c647` | certain | Fit to view | `modules/hall-ui/public/diagram-viewer.js:97` |
437
436
  | `86ef86c5c647` | certain | Fit to view | `modules/hall-ui/public/diagram-viewer.js:100` |
438
437
  | `78107a76a755` | certain | Five diagrams that show, at a glance, how work flows through {{worldName}}'s development system. | `modules/hall-ui/public/diagrams.html:33` |
439
- | `18ab1be9d3ad` | certain | Five questions, and a score that counts how much of each you actually answered. | `modules/hall-ui/public/ideas.js:621` |
438
+ | `18ab1be9d3ad` | certain | Five questions, and a score that counts how much of each you actually answered. | `modules/hall-ui/public/ideas.js:636` |
440
439
  | `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` |
441
440
  | `b9267033b1f1` | certain | Flag this copy | `modules/hall-ui/public/copy-desk.html:83` |
442
441
  | `82149b1deacd` | certain | Flag this… | `modules/hall-ui/public/copy-desk.js:164` |
@@ -462,7 +461,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
462
461
  | `9e70797b7e97` | certain | Goal id | `modules/hall-ui/public/goals-render.js:824` |
463
462
  | `529460e82058` | certain | Goal invitations to you | `modules/hall-ui/public/goal-inbox.js:113` |
464
463
  | `e2a9e33abe60` | certain | Goal tasks | `modules/hall-ui/public/goals.html:136` |
465
- | `e0bc28d10785` | certain | Goals could not be loaded. Refresh to try again. | `modules/hall-ui/public/goals-page.js:890` |
464
+ | `e0bc28d10785` | certain | Goals could not be loaded. Refresh to try again. | `modules/hall-ui/public/goals-page.js:896` |
466
465
  | `4517f2253d0f` | certain | Goals couldn’t be loaded just now. Refresh to try again. | `modules/hall-ui/public/goals.js:121` |
467
466
  | `6a85997bda21` | certain | Goals created | `modules/hall-ui/public/profile.html:145` |
468
467
  | `2ed2cb8fbffd` | certain | Goals page | `modules/hall-ui/public/goals.js:94` |
@@ -545,7 +544,6 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
545
544
  | `59f0bc78a28f` | certain | Last 90 days | `modules/hall-ui/public/hall-widgets.js:130` |
546
545
  | `13bae4dfb28e` | certain | Last claimed by | `modules/hall-ui/public/task.js:549` |
547
546
  | `1526a7ae8c85` | certain | Latest version: v{…}. | `modules/hall-ui/public/settings.js:1482` |
548
- | `19ad2430937d` | certain | Learning capture | `modules/hall-ui/public/ideas.html:78` |
549
547
  | `7c9b7a89353b` | certain | Leave goal | `modules/hall-ui/public/goals-render.js:931` |
550
548
  | `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:294` |
551
549
  | `d6a78b9e5368` | certain | Let it be for now | `modules/hall-ui/public/studio.js:203` |
@@ -565,7 +563,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
565
563
  | `217f64ef8667` | certain | Loading the catalog… | `modules/hall-ui/public/modules.html:59` |
566
564
  | `a8b3b04b0b4d` | certain | Loading the copy desk… | `modules/hall-ui/public/copy-desk.html:28` |
567
565
  | `2bde9c630fd2` | certain | Loading the directory… | `modules/hall-ui/public/people.html:40` |
568
- | `fcd755e8dd30` | certain | Loading the five questions… | `modules/hall-ui/public/ideas.html:138` |
566
+ | `fcd755e8dd30` | certain | Loading the five questions… | `modules/hall-ui/public/ideas.html:135` |
569
567
  | `e201b4962858` | certain | Loading the idea | `modules/hall-ui/public/idea.html:43` |
570
568
  | `95a5382e5277` | certain | Loading the idea template… | `modules/hall-ui/public/ideas.html:31` |
571
569
  | `9972fc9b4727` | certain | Loading the map… | `modules/hall-ui/public/atlas.html:51` |
@@ -660,7 +658,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
660
658
  | `fec5d78497e8` | certain | Nothing in the backlog right now. | `modules/hall-ui/public/work.js:1106` |
661
659
  | `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:1006` |
662
660
  | `2c6e0dfbd781` | certain | Nothing is waiting on you. Requests reach you by your craft — set yours in | `modules/hall-ui/public/collab.html:44` |
663
- | `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:528` |
661
+ | `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` |
664
662
  | `ad9a17a8a5eb` | certain | Nothing shipped yet. | `modules/hall-ui/public/profile.js:242` |
665
663
  | `ad9a17a8a5eb` | certain | Nothing shipped yet. | `modules/hall-ui/public/work.js:1067` |
666
664
  | `f326632f2013` | certain | Nothing to submit — every module here ships with the core. | `modules/hall-ui/public/modules.js:258` |
@@ -670,7 +668,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
670
668
  | `ea1f179dd878` | certain | On this page | `modules/hall-ui/public/drachmae.html:51` |
671
669
  | `ea1f179dd878` | certain | On this page | `modules/hall-ui/public/drachmae.html:56` |
672
670
  | `c9454da07fc7` | certain | One click, and the app can act as you. | `modules/hall-ui/public/pair.js:52` |
673
- | `d5f0b7156024` | certain | One line. This is what the idea is called everywhere else. | `modules/hall-ui/public/ideas.html:127` |
671
+ | `d5f0b7156024` | certain | One line. This is what the idea is called everywhere else. | `modules/hall-ui/public/ideas.html:124` |
674
672
  | `0bc1d1470e22` | certain | Only an open goal can be managed. | `modules/hall-ui/public/goals-render.js:1218` |
675
673
  | `0bc1d1470e22` | certain | Only an open goal can be managed. | `modules/hall-ui/public/goals-render.js:1234` |
676
674
  | `3e1d0b2334d1` | certain | Only if it needs it — with the AI at your side, or on your own. | `modules/hall-ui/public/studio.js:181` |
@@ -762,7 +760,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
762
760
  | `7df3fd4ebf41` | certain | Reason (shown to the builder) | `modules/hall-ui/public/harbor.js:148` |
763
761
  | `4f619c19a8e7` | certain | Rebase owed | `modules/hall-ui/public/hall-render.js:627` |
764
762
  | `06cbba1440b1` | certain | Rebase owed — new claims paused | `modules/hall-ui/public/hall-render.js:512` |
765
- | `58fb6fe4b47e` | certain | Recent history could not be loaded right now. | `modules/hall-ui/public/work.js:1232` |
763
+ | `58fb6fe4b47e` | certain | Recent history could not be loaded right now. | `modules/hall-ui/public/work.js:1236` |
766
764
  | `0b2d1327608f` | certain | Recently shipped | `modules/hall-ui/public/hall-widgets.js:107` |
767
765
  | `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` |
768
766
  | `986ecda14881` | certain | Record your owner approval for | `modules/hall-ui/public/gate.js:94` |
@@ -853,12 +851,12 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
853
851
  | `0c0a50ba1666` | certain | Shipped {…}{…}, {…}. | `modules/hall-ui/public/task.js:584` |
854
852
  | `14d32a35c15f` | certain | Show my cross-project record | `modules/hall-ui/public/settings.js:584` |
855
853
  | `dc0f9fe50a65` | certain | Show the setup guide again | `modules/hall-ui/public/index.html:64` |
856
- | `2af4c0f2b4b9` | certain | Showing {…} of {…}. | `modules/hall-ui/public/ideas.js:532` |
854
+ | `2af4c0f2b4b9` | certain | Showing {…} of {…}. | `modules/hall-ui/public/ideas.js:547` |
857
855
  | `838b17fa8d93` | certain | Shown on your public profile — it helps others know what you work on. | `modules/hall-ui/public/profile-nudge.js:69` |
858
856
  | `9bea6404e6e1` | certain | Sign in | `modules/hall-ui/public/profile.js:208` |
859
857
  | `9bea6404e6e1` | certain | Sign in | `modules/hall-ui/public/settings.html:42` |
860
858
  | `2f12d46f96ca` | certain | Sign in from the app. | `modules/hall-ui/public/hall-render.js:779` |
861
- | `19ab56cc3932` | certain | Sign in to filter to your goals | `modules/hall-ui/public/goals-page.js:867` |
859
+ | `19ab56cc3932` | certain | Sign in to filter to your goals | `modules/hall-ui/public/goals-page.js:873` |
862
860
  | `969f95f183ca` | certain | Sign in to the platform once to activate your profile before connecting. | `modules/hall-ui/public/profile-connections.js:220` |
863
861
  | `b057dfbf49c5` | certain | Sign in when Claude prompts you. | `modules/hall-ui/public/hall-render.js:779` |
864
862
  | `e57ec24e13ef` | certain | Sign in with GitHub | `modules/hall-ui/public/hall-render.js:275` |
@@ -888,7 +886,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
888
886
  | `6c6544f5c011` | certain | Stored encrypted; never shown again after saving — only its last four digits. | `modules/hall-ui/public/settings.html:193` |
889
887
  | `5831de503015` | certain | Studio — {{worldName}} | `modules/hall-ui/public/studio.html:10` |
890
888
  | `5831de503015` | certain | Studio — {{worldName}} | `modules/hall-ui/public/studio.html:10` |
891
- | `f79e1fb8ebd4` | certain | Suggested as you type; leave it on "no goal" and it waits for triage. | `modules/hall-ui/public/ideas.html:91` |
889
+ | `f79e1fb8ebd4` | certain | Suggested as you type; leave it on "no goal" and it waits for triage. | `modules/hall-ui/public/ideas.html:88` |
892
890
  | `1e40f33483eb` | certain | Switch theme | `modules/hall-ui/public/shell.js:458` |
893
891
  | `93fa2e97dd35` | certain | System default for this skill | `modules/hall-ui/public/settings.js:74` |
894
892
  | `4894b1d9b0de` | certain | System oversight: people, operations and security. | `modules/hall-ui/public/watch.js:1324` |
@@ -965,7 +963,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
965
963
  | `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` |
966
964
  | `599fd0e82d1c` | certain | The task board — all work | `modules/hall-ui/public/studio.html:58` |
967
965
  | `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:703` |
968
- | `34555793f33e` | certain | The task list could not be loaded right now. | `modules/hall-ui/public/work.js:1297` |
966
+ | `34555793f33e` | certain | The task list could not be loaded right now. | `modules/hall-ui/public/work.js:1301` |
969
967
  | `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:328` |
970
968
  | `bcdbded93d4e` | certain | The work board failed to load. Reload to try again. | `modules/hall-ui/public/work.js:1496` |
971
969
  | `25794c439321` | certain | Then copy the project onto your machine and run the one-shot bootstrap (it checks your setup, installs depende | `modules/hall-ui/public/hall-render.js:846` |
@@ -1025,7 +1023,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1025
1023
  | `c1fcfa9b48c2` | certain | Watch — {{worldName}} | `modules/hall-ui/public/watch.html:6` |
1026
1024
  | `c1fcfa9b48c2` | certain | Watch — {{worldName}} | `modules/hall-ui/public/watch.html:6` |
1027
1025
  | `0658f0358ffd` | certain | Welcome back, {…}. | `modules/hall-ui/public/hall-render.js:550` |
1028
- | `04ef2f1bc4c4` | certain | Welcome, {…}. Claim and release tasks and follow work in progress — no terminal needed. | `modules/hall-ui/public/work.js:1223` |
1026
+ | `04ef2f1bc4c4` | certain | Welcome, {…}. Claim and release tasks and follow work in progress — no terminal needed. | `modules/hall-ui/public/work.js:1227` |
1029
1027
  | `d6bae87dc29b` | certain | What builders will see | `modules/hall-ui/public/government.html:86` |
1030
1028
  | `f3d93a872a38` | certain | What counts | `modules/hall-ui/public/drachmae.js:107` |
1031
1029
  | `4a33938611be` | certain | What each builder's dev box has cost — spin-up, compute, and storage. Tracked for oversight; not charged in th | `modules/hall-ui/public/watch.html:95` |
@@ -1063,7 +1061,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1063
1061
  | `986514f35589` | certain | Work board | `modules/hall-ui/public/work.html:31` |
1064
1062
  | `520d139df9eb` | certain | Work is complete but the version is held — no tasks are being claimed here right now. | `modules/hall-ui/public/roadmap.js:243` |
1065
1063
  | `0e6b8e8f26cc` | certain | Works completed | `modules/hall-ui/public/profile.html:140` |
1066
- | `52e5fe3c6075` | certain | Write a Full Idea | `modules/hall-ui/public/ideas.html:106` |
1064
+ | `52e5fe3c6075` | certain | Write a Full Idea | `modules/hall-ui/public/ideas.html:103` |
1067
1065
  | `7664f4373d1f` | certain | Write one | `modules/hall-ui/public/idea.js:258` |
1068
1066
  | `47f61e576454` | certain | Write the wording you want instead. | `modules/hall-ui/public/copy-desk.js:436` |
1069
1067
  | `c368b56ecf40` | certain | Xenos builders start with a focused set of pages — ship your first | `modules/hall-ui/public/not-ready.html:31` |
@@ -1225,7 +1223,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1225
1223
  | `80ddf28baee7` | certain | rank-key (kebab-case) | `modules/hall-ui/public/government.html:82` |
1226
1224
  | `f83f0a9d6b6a` | certain | recorded, on the Operations tab | `modules/hall-ui/public/watch.html:49` |
1227
1225
  | `26da1df6fd4a` | certain | reflects it. | `modules/hall-ui/public/settings.html:136` |
1228
- | `d4bb81532896` | certain | repro steps, context, anything that helps… | `modules/hall-ui/public/ideas.html:87` |
1226
+ | `d4bb81532896` | certain | repro steps, context, anything that helps… | `modules/hall-ui/public/ideas.html:84` |
1229
1227
  | `594962dc9ec3` | certain | s into the view containers below (falling back to | `modules/hall-ui/public/index.html:52` |
1230
1228
  | `2a42549b34ae` | certain | said, when flagged: | `modules/hall-ui/public/copy-desk.js:124` |
1231
1229
  | `9bec9eb4829e` | certain | scope: {…} | `modules/hall-ui/public/goals-render.js:830` |
@@ -1259,11 +1257,11 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1259
1257
  | `f98966dc7cac` | certain | upkeep undeclared | `modules/hall-ui/public/modules.js:92` |
1260
1258
  | `4de556377db2` | certain | verdict {…} | `modules/hall-ui/public/task.js:395` |
1261
1259
  | `969577b937d6` | certain | versions in flight | `modules/hall-ui/public/roadmap.js:305` |
1262
- | `8cd3cc4005fc` | certain | via goal | `modules/hall-ui/public/dom-utils.js:322` |
1260
+ | `8cd3cc4005fc` | certain | via goal | `modules/hall-ui/public/dom-utils.js:364` |
1263
1261
  | `007b28a56031` | certain | view diff | `modules/hall-ui/public/gate.js:145` |
1264
1262
  | `35be9e0923da` | certain | walks the whole path in plain language. | `modules/hall-ui/public/hall-render.js:846` |
1265
1263
  | `17705daf7b85` | certain | what counts as passing | `modules/hall-ui/public/government.html:55` |
1266
- | `b1c5eaa20a9d` | certain | what the idea is, in one line | `modules/hall-ui/public/ideas.html:130` |
1264
+ | `b1c5eaa20a9d` | certain | what the idea is, in one line | `modules/hall-ui/public/ideas.html:127` |
1267
1265
  | `e72c90163726` | certain | what's blocking | `modules/hall-ui/public/goals-render.js:161` |
1268
1266
  | `81f05d9b2bbf` | certain | what's wrong, or what you'd like to see | `modules/hall-ui/public/ideas.html:69` |
1269
1267
  | `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": 1761,
7
- "unique_ids": 1523,
8
- "certain": 1761,
6
+ "strings": 1759,
7
+ "unique_ids": 1521,
8
+ "certain": 1759,
9
9
  "heuristic": 0,
10
10
  "duplicate_ids": 165
11
11
  },
@@ -13,7 +13,7 @@
13
13
  "builders-hall": {
14
14
  "at": "modules/hall-ui/public",
15
15
  "files": 81,
16
- "strings": 1282
16
+ "strings": 1280
17
17
  },
18
18
  "status-dashboard": {
19
19
  "at": "modules/status-ui/public",
@@ -2056,7 +2056,7 @@
2056
2056
  "surface": "builders-hall",
2057
2057
  "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.",
2058
2058
  "file": "modules/hall-ui/public/ideas.html",
2059
- "line": 107,
2059
+ "line": 104,
2060
2060
  "origin": "html-text",
2061
2061
  "confidence": "certain"
2062
2062
  },
@@ -2416,7 +2416,7 @@
2416
2416
  "surface": "builders-hall",
2417
2417
  "text": "Answer the five questions and this spark becomes a Full Idea.",
2418
2418
  "file": "modules/hall-ui/public/ideas.js",
2419
- "line": 586,
2419
+ "line": 601,
2420
2420
  "origin": "js-text-assign",
2421
2421
  "confidence": "certain"
2422
2422
  },
@@ -2726,15 +2726,6 @@
2726
2726
  "origin": "js-notice",
2727
2727
  "confidence": "certain"
2728
2728
  },
2729
- {
2730
- "id": "f0576990e9fc",
2731
- "surface": "builders-hall",
2732
- "text": "Blocker resolution",
2733
- "file": "modules/hall-ui/public/ideas.html",
2734
- "line": 81,
2735
- "origin": "html-text",
2736
- "confidence": "certain"
2737
- },
2738
2729
  {
2739
2730
  "id": "118026595c16",
2740
2731
  "surface": "builders-hall",
@@ -3748,7 +3739,7 @@
3748
3739
  "surface": "builders-hall",
3749
3740
  "text": "Could not load idea {…}.",
3750
3741
  "file": "modules/hall-ui/public/ideas.js",
3751
- "line": 629,
3742
+ "line": 644,
3752
3743
  "origin": "js-text-assign",
3753
3744
  "confidence": "certain"
3754
3745
  },
@@ -3793,7 +3784,7 @@
3793
3784
  "surface": "builders-hall",
3794
3785
  "text": "Could not load the idea template. Reload, or file from the terminal with capture.js.",
3795
3786
  "file": "modules/hall-ui/public/ideas.js",
3796
- "line": 611,
3787
+ "line": 626,
3797
3788
  "origin": "js-text-assign",
3798
3789
  "confidence": "certain"
3799
3790
  },
@@ -3820,7 +3811,7 @@
3820
3811
  "surface": "builders-hall",
3821
3812
  "text": "Could not load the queue just now.",
3822
3813
  "file": "modules/hall-ui/public/ideas.js",
3823
- "line": 550,
3814
+ "line": 565,
3824
3815
  "origin": "js-markup",
3825
3816
  "confidence": "certain"
3826
3817
  },
@@ -4225,7 +4216,7 @@
4225
4216
  "surface": "builders-hall",
4226
4217
  "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.",
4227
4218
  "file": "modules/hall-ui/public/ideas.html",
4228
- "line": 167,
4219
+ "line": 164,
4229
4220
  "origin": "html-text",
4230
4221
  "confidence": "certain"
4231
4222
  },
@@ -4351,7 +4342,7 @@
4351
4342
  "surface": "builders-hall",
4352
4343
  "text": "Develop this idea",
4353
4344
  "file": "modules/hall-ui/public/ideas.js",
4354
- "line": 585,
4345
+ "line": 600,
4355
4346
  "origin": "js-text-assign",
4356
4347
  "confidence": "certain"
4357
4348
  },
@@ -4360,7 +4351,7 @@
4360
4351
  "surface": "builders-hall",
4361
4352
  "text": "Developing a Big Idea Spark",
4362
4353
  "file": "modules/hall-ui/public/ideas.html",
4363
- "line": 119,
4354
+ "line": 116,
4364
4355
  "origin": "html-text",
4365
4356
  "confidence": "certain"
4366
4357
  },
@@ -4396,7 +4387,7 @@
4396
4387
  "surface": "builders-hall",
4397
4388
  "text": "Discard draft",
4398
4389
  "file": "modules/hall-ui/public/ideas.html",
4399
- "line": 145,
4390
+ "line": 142,
4400
4391
  "origin": "html-text",
4401
4392
  "confidence": "certain"
4402
4393
  },
@@ -4828,7 +4819,7 @@
4828
4819
  "surface": "builders-hall",
4829
4820
  "text": "File it",
4830
4821
  "file": "modules/hall-ui/public/ideas.html",
4831
- "line": 99,
4822
+ "line": 96,
4832
4823
  "origin": "html-text",
4833
4824
  "confidence": "certain"
4834
4825
  },
@@ -4855,7 +4846,7 @@
4855
4846
  "surface": "builders-hall",
4856
4847
  "text": "File this idea",
4857
4848
  "file": "modules/hall-ui/public/ideas.html",
4858
- "line": 144,
4849
+ "line": 141,
4859
4850
  "origin": "html-text",
4860
4851
  "confidence": "certain"
4861
4852
  },
@@ -4954,7 +4945,7 @@
4954
4945
  "surface": "builders-hall",
4955
4946
  "text": "Five questions, and a score that counts how much of each you actually answered.",
4956
4947
  "file": "modules/hall-ui/public/ideas.js",
4957
- "line": 621,
4948
+ "line": 636,
4958
4949
  "origin": "js-text-assign",
4959
4950
  "confidence": "certain"
4960
4951
  },
@@ -5188,7 +5179,7 @@
5188
5179
  "surface": "builders-hall",
5189
5180
  "text": "Goals could not be loaded. Refresh to try again.",
5190
5181
  "file": "modules/hall-ui/public/goals-page.js",
5191
- "line": 890,
5182
+ "line": 896,
5192
5183
  "origin": "js-text-assign",
5193
5184
  "confidence": "certain"
5194
5185
  },
@@ -5930,15 +5921,6 @@
5930
5921
  "origin": "js-text-assign",
5931
5922
  "confidence": "certain"
5932
5923
  },
5933
- {
5934
- "id": "19ad2430937d",
5935
- "surface": "builders-hall",
5936
- "text": "Learning capture",
5937
- "file": "modules/hall-ui/public/ideas.html",
5938
- "line": 78,
5939
- "origin": "html-text",
5940
- "confidence": "certain"
5941
- },
5942
5924
  {
5943
5925
  "id": "7c9b7a89353b",
5944
5926
  "surface": "builders-hall",
@@ -6115,7 +6097,7 @@
6115
6097
  "surface": "builders-hall",
6116
6098
  "text": "Loading the five questions…",
6117
6099
  "file": "modules/hall-ui/public/ideas.html",
6118
- "line": 138,
6100
+ "line": 135,
6119
6101
  "origin": "html-text",
6120
6102
  "confidence": "certain"
6121
6103
  },
@@ -6970,7 +6952,7 @@
6970
6952
  "surface": "builders-hall",
6971
6953
  "text": "Nothing is waiting. A spark appears here when its author offers a quick idea up for development.",
6972
6954
  "file": "modules/hall-ui/public/ideas.js",
6973
- "line": 528,
6955
+ "line": 543,
6974
6956
  "origin": "js-markup",
6975
6957
  "confidence": "certain"
6976
6958
  },
@@ -7060,7 +7042,7 @@
7060
7042
  "surface": "builders-hall",
7061
7043
  "text": "One line. This is what the idea is called everywhere else.",
7062
7044
  "file": "modules/hall-ui/public/ideas.html",
7063
- "line": 127,
7045
+ "line": 124,
7064
7046
  "origin": "html-text",
7065
7047
  "confidence": "certain"
7066
7048
  },
@@ -7888,7 +7870,7 @@
7888
7870
  "surface": "builders-hall",
7889
7871
  "text": "Recent history could not be loaded right now.",
7890
7872
  "file": "modules/hall-ui/public/work.js",
7891
- "line": 1232,
7873
+ "line": 1236,
7892
7874
  "origin": "js-markup",
7893
7875
  "confidence": "certain"
7894
7876
  },
@@ -8707,7 +8689,7 @@
8707
8689
  "surface": "builders-hall",
8708
8690
  "text": "Showing {…} of {…}.",
8709
8691
  "file": "modules/hall-ui/public/ideas.js",
8710
- "line": 532,
8692
+ "line": 547,
8711
8693
  "origin": "js-markup",
8712
8694
  "confidence": "certain"
8713
8695
  },
@@ -8752,7 +8734,7 @@
8752
8734
  "surface": "builders-hall",
8753
8735
  "text": "Sign in to filter to your goals",
8754
8736
  "file": "modules/hall-ui/public/goals-page.js",
8755
- "line": 867,
8737
+ "line": 873,
8756
8738
  "origin": "js-text-assign",
8757
8739
  "confidence": "certain"
8758
8740
  },
@@ -9022,7 +9004,7 @@
9022
9004
  "surface": "builders-hall",
9023
9005
  "text": "Suggested as you type; leave it on \"no goal\" and it waits for triage.",
9024
9006
  "file": "modules/hall-ui/public/ideas.html",
9025
- "line": 91,
9007
+ "line": 88,
9026
9008
  "origin": "html-text",
9027
9009
  "confidence": "certain"
9028
9010
  },
@@ -9715,7 +9697,7 @@
9715
9697
  "surface": "builders-hall",
9716
9698
  "text": "The task list could not be loaded right now.",
9717
9699
  "file": "modules/hall-ui/public/work.js",
9718
- "line": 1297,
9700
+ "line": 1301,
9719
9701
  "origin": "js-markup",
9720
9702
  "confidence": "certain"
9721
9703
  },
@@ -10255,7 +10237,7 @@
10255
10237
  "surface": "builders-hall",
10256
10238
  "text": "Welcome, {…}. Claim and release tasks and follow work in progress — no terminal needed.",
10257
10239
  "file": "modules/hall-ui/public/work.js",
10258
- "line": 1223,
10240
+ "line": 1227,
10259
10241
  "origin": "js-text-assign",
10260
10242
  "confidence": "certain"
10261
10243
  },
@@ -10597,7 +10579,7 @@
10597
10579
  "surface": "builders-hall",
10598
10580
  "text": "Write a Full Idea",
10599
10581
  "file": "modules/hall-ui/public/ideas.html",
10600
- "line": 106,
10582
+ "line": 103,
10601
10583
  "origin": "html-text",
10602
10584
  "confidence": "certain"
10603
10585
  },
@@ -12055,7 +12037,7 @@
12055
12037
  "surface": "builders-hall",
12056
12038
  "text": "repro steps, context, anything that helps…",
12057
12039
  "file": "modules/hall-ui/public/ideas.html",
12058
- "line": 87,
12040
+ "line": 84,
12059
12041
  "origin": "html-attr:placeholder",
12060
12042
  "confidence": "certain"
12061
12043
  },
@@ -12361,7 +12343,7 @@
12361
12343
  "surface": "builders-hall",
12362
12344
  "text": "via goal",
12363
12345
  "file": "modules/hall-ui/public/dom-utils.js",
12364
- "line": 322,
12346
+ "line": 364,
12365
12347
  "origin": "js-markup",
12366
12348
  "confidence": "certain"
12367
12349
  },
@@ -12397,7 +12379,7 @@
12397
12379
  "surface": "builders-hall",
12398
12380
  "text": "what the idea is, in one line",
12399
12381
  "file": "modules/hall-ui/public/ideas.html",
12400
- "line": 130,
12382
+ "line": 127,
12401
12383
  "origin": "html-attr:placeholder",
12402
12384
  "confidence": "certain"
12403
12385
  },
@@ -1843,5 +1843,7 @@ is load-bearing: the script throws rather than guess if it is missing, and
1843
1843
  landed since 1.19.690 with no explicit bump. run 34729018766. (task 1002620)
1844
1844
  1.19.692 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
1845
1845
  landed since 1.19.691 with no explicit bump. run 34730821372. (task 1002620)
1846
+ 1.19.693 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
1847
+ landed since 1.19.692 with no explicit bump. run 34731402927. (task 1002620)
1846
1848
  ---------------------------------------------------------------------------
1847
1849
  ```
@@ -120,6 +120,48 @@
120
120
  return list && list.length ? list.slice() : ['engineer', 'ideator'];
121
121
  }
122
122
 
123
+ // Fill a Kind <select> from the vocabulary the SERVER serves (GET /me
124
+ // `task_kinds`, sourced from the lifecycle port's VALID_KINDS) — task 1003453.
125
+ // The board and the goals page each carried their own hardcoded copy and both
126
+ // had gone stale against the DB CHECK: 'verify' tasks existed, were claimable,
127
+ // and could not be filtered for on either. One filler here is what stops a
128
+ // third copy being the easiest option, the same reasoning `disciplines()`
129
+ // above was written on.
130
+ //
131
+ // Leading '— any —' is the page's own markup and is KEPT (`sel.length = 1`,
132
+ // the populateGoalFilter idiom). An absent or empty list leaves the select
133
+ // with just that row rather than a wrong list — an older server that serves no
134
+ // vocabulary should offer no lens, not a stale one.
135
+ // `keepFirst` is how many markup options survive: 1 for a FILTER, whose leading
136
+ // '— any —' belongs to the page, and 0 for a FILING select, which is cleared and
137
+ // rebuilt — its markup option is the degraded fallback that still lets someone
138
+ // file if the read never lands. `label` names a kind for a reader (the filters
139
+ // show the raw value, as their literals did; the filing select shows kindLabel).
140
+ function fillKindFilter(sel, kinds, { keepFirst = 1, label = (k) => k, selected = null } = {}) {
141
+ if (!sel) return;
142
+ const list = Array.isArray(kinds) ? kinds.filter((k) => typeof k === 'string' && k) : [];
143
+ if (!list.length) return; // no vocabulary served → leave the markup alone
144
+ const cur = sel.value;
145
+ sel.length = keepFirst;
146
+ for (const k of list) {
147
+ const opt = document.createElement('option');
148
+ opt.value = k;
149
+ opt.textContent = label(k);
150
+ sel.appendChild(opt);
151
+ }
152
+ // A refill must not drop the reader's pick; `selected` is the filing default.
153
+ const want = (cur && list.includes(cur)) ? cur : (list.includes(selected) ? selected : null);
154
+ if (want) sel.value = want;
155
+ }
156
+
157
+ // How a kind is named in a picker — 'blocker-resolution' → 'Blocker resolution'.
158
+ // The same shape disciplineLabel takes below, and it reproduces every label the
159
+ // hand-written <option> list in ideas.html carried, so no copy changes.
160
+ function kindLabel(k) {
161
+ const s = String(k || '').replace(/-/g, ' ');
162
+ return s ? s.charAt(0).toUpperCase() + s.slice(1) : '';
163
+ }
164
+
123
165
  // How a craft is named in a picker. An acronym stays upper-case ('ui' → 'UI');
124
166
  // anything else is Title Case, so a craft a module adds later needs no new entry.
125
167
  function disciplineLabel(d) {
@@ -324,6 +366,7 @@
324
366
 
325
367
  window.OTB = {
326
368
  escapeHtml, $, fmtNum, num, fmtInt, fmtCompact, fmtDate, rankLabel, toast, moduleOn, disciplines, disciplineLabel,
369
+ fillKindFilter, kindLabel, // task 1003453 — one Kind filler, all three surfaces
327
370
  errCode, errMessage, errDetails, // task 1002462 — ADR 0116 envelope readers
328
371
  contributeSettingsPanel, settingsPanels,
329
372
  contributeHallWidget, hallWidgets, hallWidgetIds,
@@ -862,6 +862,12 @@
862
862
  }
863
863
  try {
864
864
  state.me = await getJSON(`${API}/me`).catch(() => null);
865
+ // task 1003453 — the Kind lens is built from the served vocabulary.
866
+ // Optional-called on purpose: a browser holding an older cached dom-utils.js
867
+ // must lose one LENS, not the whole page. boot() is a single try block, so an
868
+ // unguarded call here throws before anything renders — which is exactly what
869
+ // it did to every goals render until this guard went in.
870
+ window.OTB.fillKindFilter?.($('#f-goal-kind'), state.me && state.me.task_kinds);
865
871
  // task 1828 — "My goals" needs an identity; disable it when signed out.
866
872
  const mineSel = $('#f-goal-mine');
867
873
  if (mineSel && !state.me) { mineSel.disabled = true; mineSel.title = 'Sign in to filter to your goals'; }
@@ -1028,9 +1034,10 @@
1028
1034
  ] },
1029
1035
  ],
1030
1036
  overflow: [
1031
- { id: 'f-goal-kind', label: 'Kind', options: [{ value: '', label: '— any —' },
1032
- 'feature', 'bug', 'infra', 'refactor', 'spike', 'learning-capture',
1033
- 'cleanup', 'decision', 'blocker-resolution', 'unclassified'] },
1037
+ // task 1003453: filled from /me.task_kinds once boot lands it, never typed
1038
+ // here this copy had gone stale against the DB CHECK exactly as the
1039
+ // board's had, so 'verify' work could not be filtered for on either.
1040
+ { id: 'f-goal-kind', label: 'Kind', options: [{ value: '', label: '— any —' }] },
1034
1041
  { id: 'f-goal-discipline', label: 'Discipline', options: [{ value: '', label: '— any —' }, 'engineer', 'artist', 'ideator', 'ui', 'unclassified'] },
1035
1042
  { id: 'f-goal-newcomer', label: 'Newcomer', options: [{ value: '', label: '— any —' }, { value: 'yes', label: 'newcomer-friendly only' }] },
1036
1043
  { id: 'f-goal-fit', label: 'Run mode', options: [{ value: '', label: '— any —' },
@@ -69,17 +69,14 @@
69
69
  placeholder="what's wrong, or what you'd like to see">
70
70
 
71
71
  <label class="fi-label" for="fq-kind">Kind</label>
72
+ <!-- task 1003453: the options are FILLED from /me.task_kinds at boot
73
+ (ideas.js), not written here. This markup used to spell the whole
74
+ vocabulary and had gone stale against the DB CHECK exactly as the
75
+ two board filters had — a third copy nobody was watching. The one
76
+ option left is the degraded fallback: if the read never lands, a
77
+ bug can still be filed. -->
72
78
  <select id="fq-kind" class="fi-input">
73
79
  <option value="bug" selected>Bug</option>
74
- <option value="feature">Feature</option>
75
- <option value="infra">Infra</option>
76
- <option value="refactor">Refactor</option>
77
- <option value="spike">Spike</option>
78
- <option value="learning-capture">Learning capture</option>
79
- <option value="cleanup">Cleanup</option>
80
- <option value="decision">Decision</option>
81
- <option value="blocker-resolution">Blocker resolution</option>
82
- <option value="unclassified">Unclassified</option>
83
80
  </select>
84
81
 
85
82
  <label class="fi-label" for="fq-body">Details <span class="fi-hint">(optional)</span></label>
@@ -508,6 +508,21 @@
508
508
  // The picker degrades to "homeless only" — filing itself never depends
509
509
  // on this read succeeding.
510
510
  }
511
+
512
+ // task 1003453 — the kind vocabulary, so this select is not a third hardcoded
513
+ // copy. Its OWN try, deliberately not folded into the Promise.all above: the
514
+ // goal picker is what this form is FOR and the kind list is cosmetic, so a
515
+ // vocabulary read must never be able to take the picker down with it. (It can:
516
+ // put it in that Promise.all and one rejection strands buildingVersionIds and
517
+ // allOpenGoals in the shared catch — two suites caught exactly that.)
518
+ // keepFirst 0 clears the markup's fallback and rebuilds with the served list,
519
+ // keeping 'bug' as the default this form has always opened on.
520
+ try {
521
+ const meRes = await api.me.getMe({});
522
+ window.OTB.fillKindFilter?.(fqKindEl(), meRes.ok && meRes.data && meRes.data.task_kinds, {
523
+ keepFirst: 0, label: window.OTB.kindLabel, selected: 'bug',
524
+ });
525
+ } catch (_) { /* the markup's Bug option stands — a report can still be filed */ }
511
526
  }
512
527
 
513
528
  // ---------------------------------------------------------------------------
@@ -1217,6 +1217,10 @@
1217
1217
  throw err;
1218
1218
  }
1219
1219
  viewer.id = me?.builder?.id ?? null;
1220
+ // task 1003453 — the Kind lens, from the served vocabulary. Optional-called so an
1221
+ // older cached dom-utils.js costs one lens, not the board; see OTB.fillKindFilter.
1222
+ window.OTB.fillKindFilter?.($('#f-kind'), me?.task_kinds);
1223
+ restoreUrlFilter('f-kind'); // a shared URL's kind applies once the options exist
1220
1224
  const sub = $('#work-sub');
1221
1225
  if (sub) {
1222
1226
  const name = me?.builder?.display_name || me?.builder?.github_login || 'builder';
@@ -1364,13 +1368,9 @@
1364
1368
  ],
1365
1369
  overflow: [
1366
1370
  { id: 'f-goal', label: 'Goal', options: [{ value: '', label: '— all goals —' }] },
1367
- {
1368
- id: 'f-kind',
1369
- label: 'Kind',
1370
- options: [{ value: '', label: '— any —' },
1371
- 'feature', 'bug', 'infra', 'refactor', 'spike', 'learning-capture',
1372
- 'cleanup', 'decision', 'blocker-resolution', 'unclassified'],
1373
- },
1371
+ // task 1003453: FILLED from /me.task_kinds at boot, never typed here — the
1372
+ // literal was stale against the DB CHECK, so 'verify' was unfilterable.
1373
+ { id: 'f-kind', label: 'Kind', options: [{ value: '', label: '— any —' }] },
1374
1374
  {
1375
1375
  id: 'f-newcomer',
1376
1376
  label: 'Newcomer',
@@ -37,6 +37,12 @@ module.exports = {
37
37
  // (consumer: core cascade-dispatch.js, the dormant System-3 lib).
38
38
  get VOTABLE_TASK_STATUSES() { return classifier.VOTABLE_TASK_STATUSES; },
39
39
  classifyTaskKind: (...a) => classifier.classifyTaskKind(...a),
40
+ // TASK_KINDS: the kind vocabulary, as an ordered array (consumer: GET /me,
41
+ // which hands it to the hall so a filter can be BUILT from it instead of
42
+ // retyped — task 1003453). VALID_KINDS is a Set and Sets do not survive
43
+ // JSON.stringify, so the port hands over the array rather than making every
44
+ // caller remember to spread it.
45
+ get TASK_KINDS() { return [...classifier.VALID_KINDS]; },
40
46
  // suggestGoalForCapture: ONE goal for a filing that named none, or null (task
41
47
  // 1003067). Consumer: the discord #bugs vector, which files through the ideas
42
48
  // routing path and needs a home to offer it. Lives behind the port because
package/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@bongos/core",
3
- "version": "1.19.692",
3
+ "version": "1.19.693",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@bongos/core",
9
- "version": "1.19.692",
9
+ "version": "1.19.693",
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.692",
3
+ "version": "1.19.693",
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",
@@ -433,6 +433,14 @@ module.exports = function buildMeRouter() {
433
433
  // builder is uncapped (no cap set — the default; ADR 0085), in which case
434
434
  // level is always 'ok'. The whole object is null only if the read errored.
435
435
  cost: costStatus,
436
+ // task 1003453: the task-kind vocabulary, so a surface that offers a kind
437
+ // filter BUILDS it from the enum instead of retyping it. The board and the
438
+ // goals page each carried their own hardcoded copy, and both had gone stale
439
+ // against the DB — 'verify' existed, was claimable, and could not be
440
+ // filtered for. The lifecycle port's VALID_KINDS is the SSOT; [] when the
441
+ // lifecycle module is off, which reads as "no vocabulary served" and leaves
442
+ // the filter with just its '— any —' row rather than a wrong list.
443
+ task_kinds: lc() ? lc().TASK_KINDS : [],
436
444
  // task 1268: the per-builder "wandering" knob, resolved to an effective
437
445
  // level (clamped by rank) + its behavior contract. The Conductor + the
438
446
  // /settings UI read this; the builder-settings port's describeWandering is
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.692'; // CI auto-patch carrier (ADR 0161); changelog: docs/module-api-changelog.md
74
+ const CORE_VERSION = '1.19.693'; // 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');
@@ -5,8 +5,12 @@
5
5
  // drive the pure builder + the generic core rule with no disk I/O.
6
6
  import assert from 'node:assert/strict';
7
7
  import { test } from 'node:test';
8
+ import { readFileSync, readdirSync } from 'node:fs';
9
+ import { createRequire } from 'node:module';
8
10
  import classifier from '../modules/lifecycle/task-classifier.js';
9
11
 
12
+ const require = createRequire(import.meta.url);
13
+
10
14
  const { classifyTaskKind, buildBlockerVendorRe } = classifier;
11
15
 
12
16
  test('buildBlockerVendorRe: empty / non-array → null (vanilla has no vendors)', () => {
@@ -39,3 +43,53 @@ test('generic blocker terms still classify without any vendor config', () => {
39
43
  assert.equal(classifyTaskKind('Unblock the release', '').kind, 'blocker-resolution');
40
44
  assert.equal(classifyTaskKind('Rotate the API key', '').kind, 'blocker-resolution');
41
45
  });
46
+
47
+ // ---- the kind vocabulary is ONE list, and everything reads it (task 1003453) --
48
+ //
49
+ // The board's Kind filter hardcoded its options and had gone stale: 'verify' was
50
+ // added to VALID_KINDS (and to the DB CHECK by migration 187) but never to the
51
+ // filter, so verify tasks existed, were claimable, and could not be filtered for.
52
+ // The goals page carried a second copy of the same stale list. Both now build the
53
+ // lens from the vocabulary the server serves, and these pin every hop of that.
54
+
55
+ test('the DB CHECK constraint lists exactly VALID_KINDS', () => {
56
+ // Migration 187's own header records this drift in the other direction — the
57
+ // app gained 'verify', the CHECK did not, and POST /tasks 500'd for months.
58
+ // Comparing the two is the guard neither side had.
59
+ const sql = readFileSync(new URL('../migrations/187_tasks_kind_check_add_verify.sql', import.meta.url), 'utf8');
60
+ const inClause = /CHECK \(kind IN \(([\s\S]*?)\)\)/.exec(sql);
61
+ assert.ok(inClause, 'the CHECK constraint is still written as `kind IN (...)`');
62
+ const fromSql = [...inClause[1].matchAll(/'([a-z-]+)'/g)].map((m) => m[1]);
63
+ assert.deepEqual([...fromSql].sort(), [...classifier.VALID_KINDS].sort(),
64
+ 'the DB CHECK and VALID_KINDS must name the same kinds — this is the drift migration 187 exists to record');
65
+ });
66
+
67
+ test('the lifecycle port serves the vocabulary as a JSON-safe array', () => {
68
+ const lifecycle = require('../modules/lifecycle/lifecycle.js');
69
+ const kinds = lifecycle.TASK_KINDS;
70
+ assert.ok(Array.isArray(kinds), 'an array — a Set does not survive JSON.stringify, which is how it reaches the hall');
71
+ assert.deepEqual([...kinds].sort(), [...classifier.VALID_KINDS].sort());
72
+ assert.ok(kinds.includes('verify'), 'the kind this whole task is about');
73
+ assert.notEqual(kinds, lifecycle.TASK_KINDS, 'a fresh copy each read — a caller must not be able to mutate the vocabulary');
74
+ });
75
+
76
+ // Scans the WHOLE surface — every .js AND .html — because the first cut of this
77
+ // test read .js only and matched a JS array literal, so it could not see the third
78
+ // copy: a static <option> list in ideas.html carrying the identical stale
79
+ // vocabulary. A guard that cannot see one of the places the bug lives is worse
80
+ // than no guard, because it is read as coverage. The grader caught that; this is
81
+ // the shape that would have caught it first.
82
+ test('no hall page carries its own copy of the kind list', () => {
83
+ const dir = new URL('../modules/hall-ui/public/', import.meta.url);
84
+ const pages = readdirSync(dir).filter((f) => f.endsWith('.js') || f.endsWith('.html'));
85
+ assert.ok(pages.length > 20, 'the surface was found — an empty scan must not pass silently');
86
+ // Three kinds in sequence is the signature of a spelled-out vocabulary, in a JS
87
+ // array ('cleanup', 'decision', …) or in markup (value="cleanup" … value="decision").
88
+ const SPELLED = /(['"])cleanup\1[\s\S]{0,80}?(['"])decision\2[\s\S]{0,120}?(['"])blocker-resolution\3/;
89
+ for (const page of pages) {
90
+ if (page === 'dom-utils.js') continue; // the one filler is allowed to name them
91
+ const src = readFileSync(new URL(page, dir), 'utf8');
92
+ assert.doesNotMatch(src, SPELLED,
93
+ `${page} spells out the kind vocabulary — fill it from /me task_kinds via OTB.fillKindFilter instead`);
94
+ }
95
+ });