@bongos/core 1.19.467 → 1.19.469

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.
Files changed (33) hide show
  1. package/.bongos-core.json +86 -36
  2. package/docs/adr/0225-privacy-suppresses-cross-project-surfaces-only.md +84 -0
  3. package/docs/adr/0227-a-task-network-map-is-refused-the-goal-graph-is-the-map.md +169 -0
  4. package/docs/adr/README.md +2 -0
  5. package/docs/copy-inventory.md +5 -10
  6. package/docs/copy-registry.json +15 -92
  7. package/docs/file-map.md +5 -1
  8. package/docs/module-api-changelog.md +4 -0
  9. package/docs/research/task-network-map/a-every-task-p2.png +0 -0
  10. package/docs/research/task-network-map/a-every-task-p40.png +0 -0
  11. package/docs/research/task-network-map/b-dependency-forest-p2.png +0 -0
  12. package/docs/research/task-network-map/b-dependency-forest-p40.png +0 -0
  13. package/docs/research/task-network-map/c-goals-p2.png +0 -0
  14. package/docs/research/task-network-map/c-goals-p40.png +0 -0
  15. package/docs/research/task-network-map/d-joined-by-goal.png +0 -0
  16. package/docs/research/task-network-map-readability.md +191 -0
  17. package/modules/hall-ui/public/people.css +3 -2
  18. package/modules/hall-ui/public/people.html +2 -2
  19. package/modules/hall-ui/public/people.js +5 -4
  20. package/modules/hall-ui/public/people.states.json +1 -1
  21. package/modules/hall-ui/public/settings.js +1 -1
  22. package/modules/hall-ui/public/style.css +4 -3
  23. package/package-lock.json +2 -2
  24. package/package.json +1 -1
  25. package/scripts/gds/spike-task-map.js +730 -0
  26. package/src/bongos/serve-internal.js +20 -8
  27. package/src/module-api.js +1 -1
  28. package/tests/hall_page_gate_map.mjs +4 -2
  29. package/tests/hall_reading_world.mjs +2 -2
  30. package/tests/hall_roster_world.mjs +40 -12
  31. package/tests/spike_task_map.mjs +0 -0
  32. package/modules/hall-ui/public/scouting.html +0 -69
  33. package/modules/hall-ui/public/scouting.states.json +0 -59
package/.bongos-core.json CHANGED
@@ -2,22 +2,22 @@
2
2
  "artifact": "bongos-core",
3
3
  "manifest_schema": 1,
4
4
  "generator": "scripts/gds/package-core.js",
5
- "core_version": "1.19.467",
6
- "core_contract": "1.19.467",
7
- "source_commit": "ca27d74624afc9f0a8310e29b2efaa2c5bb993c8",
5
+ "core_version": "1.19.469",
6
+ "core_contract": "1.19.469",
7
+ "source_commit": "4ebfd4f9703e666d920948608912e842cf3bbd8a",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-09-02T13:55:51.607Z",
9
+ "built_at": "2026-09-02T14:39:17.041Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
- "docs_redacted": 407,
12
+ "docs_redacted": 410,
13
13
  "agent_docs_stubbed": 24,
14
- "functional_verbatim": 1823,
14
+ "functional_verbatim": 1830,
15
15
  "rules": 3,
16
16
  "gate_literals": 3,
17
17
  "gate": "passed"
18
18
  },
19
- "file_count": 2254,
20
- "tree_sha256": "8d432d170e40887e5a113bf2531114e2e0b29f4e8dd8aada1b61ae25b764b597",
19
+ "file_count": 2264,
20
+ "tree_sha256": "5de5a57136ff2ae1d72ee1185ba98ddb524ca2748250f3acef9feba01a967668",
21
21
  "files": [
22
22
  {
23
23
  "path": ".claude/skills/blocker-review/SKILL.md",
@@ -1629,10 +1629,20 @@
1629
1629
  "mode": "0000644",
1630
1630
  "sha256": "717bdc174891ccf5bc8756b25f53eca016d4d6dfaeebec8d12bb2a6bfef56976"
1631
1631
  },
1632
+ {
1633
+ "path": "docs/adr/0225-privacy-suppresses-cross-project-surfaces-only.md",
1634
+ "mode": "0000644",
1635
+ "sha256": "f9f3a0b8ebe2d161e17e1c632bbbda71842c9476958294330420f28c6301f7db"
1636
+ },
1637
+ {
1638
+ "path": "docs/adr/0227-a-task-network-map-is-refused-the-goal-graph-is-the-map.md",
1639
+ "mode": "0000644",
1640
+ "sha256": "19a6e49700fa63ef781c3fa9b96d868785995c4037b078543b354e45c6db823f"
1641
+ },
1632
1642
  {
1633
1643
  "path": "docs/adr/README.md",
1634
1644
  "mode": "0000644",
1635
- "sha256": "ec731cb900dc5b30287a370325042a4ead509759aba5688c32d91f293047c491"
1645
+ "sha256": "4c6f66d10d34f4c1c1e0ab6376868281b87e28a9f3b16ccfb75fafc004dcf8e2"
1636
1646
  },
1637
1647
  {
1638
1648
  "path": "docs/api-reference.md",
@@ -1667,12 +1677,12 @@
1667
1677
  {
1668
1678
  "path": "docs/copy-inventory.md",
1669
1679
  "mode": "0000644",
1670
- "sha256": "c90d1a197950bc627f1a44ae32a476703029be688997aa7ad5e00ba4e4f8a692"
1680
+ "sha256": "c8fef1f6767e30c55da1c2cc229ad13358468d663e55135c78dae0f2dd19d9ec"
1671
1681
  },
1672
1682
  {
1673
1683
  "path": "docs/copy-registry.json",
1674
1684
  "mode": "0000644",
1675
- "sha256": "5a86bf71ba2d6f83943464ee676241bec655892c52c4d5742cb259971a66a591"
1685
+ "sha256": "fac4ade86832f3b7a047946da16c5c185b5aa2d0cfe784a93de1c70add5882ce"
1676
1686
  },
1677
1687
  {
1678
1688
  "path": "docs/design/apex-pass-2-direction.md",
@@ -2112,7 +2122,7 @@
2112
2122
  {
2113
2123
  "path": "docs/file-map.md",
2114
2124
  "mode": "0000644",
2115
- "sha256": "6aa7d3d13404a55afe9ab461eb404d86a4072b70e1565dd89e9d71b5e636364f"
2125
+ "sha256": "ad3830c5ce7650d78c18dbd03c03c0544cbdc9f0dc018c4e09da1cf5bdf67d21"
2116
2126
  },
2117
2127
  {
2118
2128
  "path": "docs/handoff-template.md",
@@ -2122,7 +2132,7 @@
2122
2132
  {
2123
2133
  "path": "docs/module-api-changelog.md",
2124
2134
  "mode": "0000644",
2125
- "sha256": "f5622e8a177e977aedade86d47f76e7669f2f417a1d88d5cd63c66949fe9d8c2"
2135
+ "sha256": "107a6f32f688e387ec1d51d929df4bbadcb897e9993ed647171dc6c0aa4525e9"
2126
2136
  },
2127
2137
  {
2128
2138
  "path": "docs/modules-contract.md",
@@ -2379,6 +2389,46 @@
2379
2389
  "mode": "0000644",
2380
2390
  "sha256": "b8eb5d248cf36a95c5d72a683d056cea80ded13a9fc79504e4865da91cc01a1a"
2381
2391
  },
2392
+ {
2393
+ "path": "docs/research/task-network-map-readability.md",
2394
+ "mode": "0000644",
2395
+ "sha256": "335d8013fce50dd8e6905fffa02017714442bb19ce8a95e00706a4d99c4243b9"
2396
+ },
2397
+ {
2398
+ "path": "docs/research/task-network-map/a-every-task-p2.png",
2399
+ "mode": "0000644",
2400
+ "sha256": "a8244dc72e654510116b6862a9d45df4236f98d22122cf7f7cb10ad556ee205d"
2401
+ },
2402
+ {
2403
+ "path": "docs/research/task-network-map/a-every-task-p40.png",
2404
+ "mode": "0000644",
2405
+ "sha256": "a6a3e4bde72c2786318dc40d1dc2ebe211931d6270eed9d805ad501cafb2cefc"
2406
+ },
2407
+ {
2408
+ "path": "docs/research/task-network-map/b-dependency-forest-p2.png",
2409
+ "mode": "0000644",
2410
+ "sha256": "ba46c265ce9d63dd861f51e5abccf908fbfccc85da5e54a0c0bcefa233b71099"
2411
+ },
2412
+ {
2413
+ "path": "docs/research/task-network-map/b-dependency-forest-p40.png",
2414
+ "mode": "0000644",
2415
+ "sha256": "9e80f7462576cf5d6e7e5b8cca4d119c014bb3a1b7424f046077e7ef5bb4473c"
2416
+ },
2417
+ {
2418
+ "path": "docs/research/task-network-map/c-goals-p2.png",
2419
+ "mode": "0000644",
2420
+ "sha256": "86d66eaf7c215548f8372e264b031519e72b3492992c0daefd7fd38f409b759e"
2421
+ },
2422
+ {
2423
+ "path": "docs/research/task-network-map/c-goals-p40.png",
2424
+ "mode": "0000644",
2425
+ "sha256": "daa6b17253f3c55e5ca40536aa2b26730b935d50b502b2589478755da56fd5f2"
2426
+ },
2427
+ {
2428
+ "path": "docs/research/task-network-map/d-joined-by-goal.png",
2429
+ "mode": "0000644",
2430
+ "sha256": "df987e84d3a031c680d8248fcc2be649277c475a8e315a4df04f46b7709d8dd6"
2431
+ },
2382
2432
  {
2383
2433
  "path": "migrations/003_pms.sql",
2384
2434
  "mode": "0000644",
@@ -4337,22 +4387,22 @@
4337
4387
  {
4338
4388
  "path": "modules/hall-ui/public/people.css",
4339
4389
  "mode": "0000644",
4340
- "sha256": "b3462a0363dec36994e3760f3382cbd810c9ca3b6dc0bc8ae4ba29131ce4adf8"
4390
+ "sha256": "2965667df5cf982295fcf2b58135aa84452b9d45c5f082c73bf26ede17736091"
4341
4391
  },
4342
4392
  {
4343
4393
  "path": "modules/hall-ui/public/people.html",
4344
4394
  "mode": "0000644",
4345
- "sha256": "8990aff8d4ffbad5fc81dc747aa3cda14c61aba24db52ad97cf025c0e87c1709"
4395
+ "sha256": "5e5c99eab08f89feb05ab4db5015d6db3a78324777ffad245aa03c91a633032e"
4346
4396
  },
4347
4397
  {
4348
4398
  "path": "modules/hall-ui/public/people.js",
4349
4399
  "mode": "0000644",
4350
- "sha256": "3945369a9afe93b377ec5297f5bbd3b67cb3a702efa60e388c2a9e81b502cd3c"
4400
+ "sha256": "145f767f473b11c222bde97e5de519c9eb0a9be0ddb2f75969d35dff086b3e01"
4351
4401
  },
4352
4402
  {
4353
4403
  "path": "modules/hall-ui/public/people.states.json",
4354
4404
  "mode": "0000644",
4355
- "sha256": "9c38735e4f4489d7de5bf15e175b2d39f936e7a0788ab169d343b0e83c038b3b"
4405
+ "sha256": "6f7612bf9ef7da53e2f66337921ee30a13f8a28bde61044f9263bc45a8074edc"
4356
4406
  },
4357
4407
  {
4358
4408
  "path": "modules/hall-ui/public/primer.css",
@@ -4444,16 +4494,6 @@
4444
4494
  "mode": "0000644",
4445
4495
  "sha256": "ae7f02a8145e6e6f98f5428dcb48a1a82caec227af95a8c3a0c32e662af8167b"
4446
4496
  },
4447
- {
4448
- "path": "modules/hall-ui/public/scouting.html",
4449
- "mode": "0000644",
4450
- "sha256": "3eb3f73fe668fdd99031f71e2a761b3d3584873728960f116e45845ad5d12d76"
4451
- },
4452
- {
4453
- "path": "modules/hall-ui/public/scouting.states.json",
4454
- "mode": "0000644",
4455
- "sha256": "80efccfcf2963bc360853ded4618f59ca50ee055249e37891310c11dea1c55cf"
4456
- },
4457
4497
  {
4458
4498
  "path": "modules/hall-ui/public/sessions.css",
4459
4499
  "mode": "0000644",
@@ -4492,7 +4532,7 @@
4492
4532
  {
4493
4533
  "path": "modules/hall-ui/public/settings.js",
4494
4534
  "mode": "0000644",
4495
- "sha256": "3d5881896057de05daba30382b7ebf5aeb9f61cba55aae75916594ed3dc1a80f"
4535
+ "sha256": "d8dd818d13e8efe11aa6b92870c44499d8510f22df1a3af5fad48d5f9a5c7b9d"
4496
4536
  },
4497
4537
  {
4498
4538
  "path": "modules/hall-ui/public/shell.js",
@@ -4507,7 +4547,7 @@
4507
4547
  {
4508
4548
  "path": "modules/hall-ui/public/style.css",
4509
4549
  "mode": "0000644",
4510
- "sha256": "07dbe7bdedfa0c3264682a1d51180a5da475c9328418a46378d459e66d982560"
4550
+ "sha256": "06be0a11ea5573e28c6baf25d38e7eb6b7a9f054942dfc0ebc7a2ac125376bba"
4511
4551
  },
4512
4552
  {
4513
4553
  "path": "modules/hall-ui/public/task-detail.js",
@@ -6622,12 +6662,12 @@
6622
6662
  {
6623
6663
  "path": "package-lock.json",
6624
6664
  "mode": "0000644",
6625
- "sha256": "fecffff8fe1b80ab540c5212c13d5056d722e897b824afdc2ebeaae24738935b"
6665
+ "sha256": "78b081005f7f38ddfd05d2f6f045ea3d9a7a74b43f91985819cc4e4989bca548"
6626
6666
  },
6627
6667
  {
6628
6668
  "path": "package.json",
6629
6669
  "mode": "0000644",
6630
- "sha256": "f4a08b3e124eba41cb2e39cea9a79ede0858c5e1496f2ce1531030814df04d12"
6670
+ "sha256": "562c6f06e56963c7e49bc2b2c0d56c76d5129d471805e87732e21f7f58d4dae5"
6631
6671
  },
6632
6672
  {
6633
6673
  "path": "public-docs/index.html",
@@ -7809,6 +7849,11 @@
7809
7849
  "mode": "0000755",
7810
7850
  "sha256": "dfd5aa72caa26eb2c8cf3063e1b4f51e1f4bcd7fddcdd93d243279c130850628"
7811
7851
  },
7852
+ {
7853
+ "path": "scripts/gds/spike-task-map.js",
7854
+ "mode": "0000644",
7855
+ "sha256": "cd09675638143232121d028f2ba55dcdde47c9d8d5d2466f52d09bc2cb650cc9"
7856
+ },
7812
7857
  {
7813
7858
  "path": "scripts/gds/stale-worktrees.js",
7814
7859
  "mode": "0000644",
@@ -8242,7 +8287,7 @@
8242
8287
  {
8243
8288
  "path": "src/bongos/serve-internal.js",
8244
8289
  "mode": "0000644",
8245
- "sha256": "4a047000f4de21a464fe590c85f9e0ab1d7f653392a0eae4f59c11e94b4bc5ad"
8290
+ "sha256": "d914b8304d5de3b325ef5996d30ca47c8ae91db26f561646271f11f77c3c37f0"
8246
8291
  },
8247
8292
  {
8248
8293
  "path": "src/bongos/stealth-gate.js",
@@ -8277,7 +8322,7 @@
8277
8322
  {
8278
8323
  "path": "src/module-api.js",
8279
8324
  "mode": "0000644",
8280
- "sha256": "30e8f24ef0a0f45e8c4172c98daee61756ba74acf0d55f100ae8cc6c7b7540e2"
8325
+ "sha256": "e9d0e0cc580123c2f593e84c39889bb08bcc88407ac5cd4ab3a546b6ceaf02a5"
8281
8326
  },
8282
8327
  {
8283
8328
  "path": "src/module-loader/catalog.js",
@@ -9672,7 +9717,7 @@
9672
9717
  {
9673
9718
  "path": "tests/hall_page_gate_map.mjs",
9674
9719
  "mode": "0000644",
9675
- "sha256": "6e20f87284374b3f70ad09128ad8368cf77b0d29787fdb897494180ce6e239c0"
9720
+ "sha256": "a66273f4a3e376d0055afb0e41fac308e84eb30b2f468f8e36831f3aad662f98"
9676
9721
  },
9677
9722
  {
9678
9723
  "path": "tests/hall_palette.mjs",
@@ -9687,7 +9732,7 @@
9687
9732
  {
9688
9733
  "path": "tests/hall_reading_world.mjs",
9689
9734
  "mode": "0000644",
9690
- "sha256": "e03ff52ec428e27e30632019565999634e9a428b1d0423c6ebe11b8438da0b87"
9735
+ "sha256": "0639e14742626f0f75400a5dd462418ff4dba9ab9f28aa517a165f63c65046c3"
9691
9736
  },
9692
9737
  {
9693
9738
  "path": "tests/hall_record_world.mjs",
@@ -9697,7 +9742,7 @@
9697
9742
  {
9698
9743
  "path": "tests/hall_roster_world.mjs",
9699
9744
  "mode": "0000644",
9700
- "sha256": "1791571b220385664394e77546cdf7359147c3f3d32b56938290bec4294c6020"
9745
+ "sha256": "66ce52ea8ff217a089a420792322bc322fe1e332458779f8c6da6c57f74b4bf2"
9701
9746
  },
9702
9747
  {
9703
9748
  "path": "tests/hall_signout.mjs",
@@ -11019,6 +11064,11 @@
11019
11064
  "mode": "0000644",
11020
11065
  "sha256": "70228aa4be345cc09664b3b725e30c3a1e0eacf4c39573db1304fb219d3245e7"
11021
11066
  },
11067
+ {
11068
+ "path": "tests/spike_task_map.mjs",
11069
+ "mode": "0000644",
11070
+ "sha256": "714d7a3c6d3247bcd4412c12db7a905a4c7a351ed8d835c606a4d43b9d7249b3"
11071
+ },
11022
11072
  {
11023
11073
  "path": "tests/sso_checkin_identity_spoof.mjs",
11024
11074
  "mode": "0000644",
@@ -0,0 +1,84 @@
1
+ # 0225 — Privacy suppresses cross-project surfaces only: a private builder still appears on their own project's roster
2
+
3
+ - **Status:** Accepted
4
+ - **Date:** 2026-09-02
5
+ - **Tasks:** [#1003443](https://cloudbongos.com/builders#/task/1003443) (goal 1000075 — collaboration and the social hall; criterion `community-is-one-builders-page`)
6
+ - **Related:** [ADR 0171](<redacted>.md) (owns `hide_stats` + `profile_state`, fail-closed consent in the READ path) · [`docs/specs/<redacted>.md`](../specs/<redacted>.md) (the spec this amends)
7
+
8
+ ## 1. Why this ADR exists
9
+
10
+ The privacy spec is **accepted**, and for one case it defined its two flags
11
+ inconsistently. Found 2026-08-30 while scoping the Builders page:
12
+
13
+ - `hide_stats` suppresses *"everything derived from the **cross-project rollup**"* —
14
+ qualified, so a project's own in-hall leaderboard is plainly out of scope.
15
+ - `account_visibility: private` said *"absent from search, **leaderboards**, sitemap"* —
16
+ **not** qualified, so it read as covering the in-project leaderboard too.
17
+
18
+ Two readers could act on the same accepted spec and build opposite behaviour. Worse,
19
+ PV2 requires *"ONE shared predicate used by every public read: … leaderboards …"*,
20
+ while `modules/economy/credits.js`'s `leaderboard()` is a bare
21
+ `SELECT … FROM builders ORDER BY total_credits DESC` — no join to
22
+ `platform_identity_accounts`, no predicate at all. Read one way that is an unshipped
23
+ PV2 violation sitting in main; read the other way it is correct. Nothing in the
24
+ documents settled which.
25
+
26
+ ## 2. The decision
27
+
28
+ **Privacy suppresses CROSS-PROJECT surfaces only.** Owner, 2026-08-30.
29
+
30
+ A builder marked `private` is absent from `/u/<handle>`, platform search, the sitemap,
31
+ Explore-adjacent surfaces and the recruiting reach — every surface that is *about the
32
+ platform*. They still appear on the roster and leaderboard of a project they actually
33
+ build on, because **a project's record of its own work is the project's business**. The
34
+ flag governs how far a builder's identity travels, not whether the work they did for
35
+ you is yours to show.
36
+
37
+ Two things follow, and they are the point of writing this down:
38
+
39
+ - **`credits.leaderboard()` is correct as written and needs no change.** Adding a
40
+ visibility predicate there would be a regression, not a fix — which is exactly what
41
+ a future session reading PV2 literally would have done.
42
+ - **PV2's "every public read … leaderboards" means the cross-project leaderboards.**
43
+ The shared predicate still owns every surface it names; the in-project ledger was
44
+ never one of them.
45
+
46
+ ## 3. What changed
47
+
48
+ The spec was amended rather than left to be re-litigated — the ambiguity was in its
49
+ wording, so the wording is the fix (task 1003443):
50
+
51
+ - the D1 `account_visibility` row now says *cross-project* leaderboards, and says
52
+ outright that the flag does not reach a project's own roster;
53
+ - the two `active · private` matrix rows no longer say **"absent everywhere"** — the
54
+ single most misreadable phrase in the file — but "absent from every cross-project
55
+ surface";
56
+ - the `active · public` rows qualify their "leaderboards" the same way, so the matrix
57
+ cannot be read against the table;
58
+ - PV2's own ship-table row is qualified too;
59
+ - and the boundary is stated as the **third rule** under D2, beside "`hide_stats`
60
+ beats everything", because that block is where a reader looks for the rules the
61
+ matrix encodes.
62
+
63
+ ## 4. Rejected
64
+
65
+ **Making `private` hide a builder from the projects they build on.** It reads as the
66
+ more privacy-protective option and is the reason the ambiguity was worth an owner
67
+ decision rather than a coin flip. Rejected because it breaks the ledger: a project
68
+ whose roster silently omits contributors cannot show who built it, credits and karma
69
+ would be awarded to someone invisible on the surface that explains them, and the
70
+ in-hall leaderboard would disagree with the task history any builder can already read.
71
+ Privacy about *the platform* does not imply anonymity *inside a project you joined*.
72
+
73
+ **Leaving it as a dated note in the spec.** The task offered this and it is the wrong
74
+ shape: the decision resolves a stated ambiguity in an accepted spec and pins a piece
75
+ of shipped code as deliberately predicate-free. That is an ADR's job — a note in a
76
+ spec is not what a future session greps when it wonders why one leaderboard query has
77
+ no visibility join.
78
+
79
+ ## 5. What this does not decide
80
+
81
+ Whether an in-project roster may be made public to the world (a per-project
82
+ visibility question the platform owns — goal 1000058's `platformVisibility`), and
83
+ whether a builder can leave a project's roster entirely. Both are about the
84
+ *project's* surface, not the account flag this ADR scopes.
@@ -0,0 +1,169 @@
1
+ # 0227 — A task network map is refused; the goal graph is the map, and search answers findability
2
+
3
+ - **Status:** Accepted
4
+ - **Date:** 2026-09-02
5
+ - **Tasks:** [#1003282](https://cloudbongos.com/builders#/task/1003282)
6
+ - **Goal:** [#1000072](https://cloudbongos.com/builders#/goal/1000072) — Human legibility, criterion `legibility-project-map`, which gates itself on this spike.
7
+ - **Evidence:** [`docs/research/task-network-map-readability.md`](../research/task-network-map-readability.md) and the figures in [`docs/research/task-network-map/`](../research/task-network-map/), rendered by [`scripts/gds/spike-task-map.js`](../../scripts/gds/spike-task-map.js).
8
+ - **Sibling goal:** [#1000027](https://cloudbongos.com/builders#/goal/1000027) — Findability, "the grep path" (ADR 0095, ADR 0060).
9
+
10
+ ## 1. The decision
11
+
12
+ **No whole-corpus task map, at any dependency density.** The measured verdict holds
13
+ across a swept range (p=2% to p=40% of tasks carrying a dependency): a node-link view of
14
+ ~1,357 tasks is confetti, not structure, and the obvious fix — drawing it denser — draws
15
+ forty goals badly while claiming to show a thousand tasks. A confident picture of nothing
16
+ is the opposite of legibility, which is the goal this criterion serves.
17
+
18
+ What is readable is **the ~40-node goal graph as the entry point**, with a **per-goal
19
+ dependency forest as the drill-down**, queried when a goal is opened rather than zoomed
20
+ out of a global map.
21
+
22
+ **This is a negative result, and it is the deliverable.** The criterion said so in
23
+ advance: a network view that becomes unreadable at 1,300 tasks is not a solution, and the
24
+ spike's output is an ADR plus a task list, not a prototype.
25
+
26
+ ## 2. What the edges are, and which already exist in the DB
27
+
28
+ Every edge a map could draw is already stored. None needs a new table.
29
+
30
+ | Edge | Storage | Notes |
31
+ |---|---|---|
32
+ | task → task dependency | `task_dependencies` (migration 020) | The load-bearing one; gates claims (`409 DEPS_NOT_SHIPPED`, ADR 0015). This is view B. |
33
+ | task → subtask | `tasks.parent_task_id` | Tree, not graph. Cheap. |
34
+ | task → goal | `tasks.goal_id` → `goals` | The aggregation key for view C's node weights. |
35
+ | task → criterion → goal | `task_criteria` → `done_when_criteria` | The done-when rollup `/status` already walks (ADR 0025). |
36
+ | idea → task (promotion) | `idea_inbox.promoted_to_task_id` → `tasks` | Triage lineage, forward direction. |
37
+ | idea → idea (merge) | `idea_inbox.merged_into_idea_id` (`migrations/<redacted>.sql`) | The merge target; chain-free by CHECK constraint. |
38
+ | task → version | `tasks.version_id` → `versions` | Membership, not connection — a filter, never an edge to draw. |
39
+
40
+ The triage-lineage edges (the last three) are the ones the owner's question actually
41
+ reaches for — what became of the thing I was brainstorming — and they form **short
42
+ chains, not a network**. That distinction drives §4.
43
+
44
+ ## 3. How it survives the number
45
+
46
+ - **View C is aggregated at the query.** One `goalRollups` query plus a cross-goal
47
+ dependency count. ~40 nodes; the payload is bytes.
48
+ - **View B is lazy and scoped.** A separate small query per opened goal. It covers 3–40%
49
+ of the corpus and never 100% — and the tasks it omits are precisely those with nothing
50
+ to connect them to, so the omission is the finding rather than a gap.
51
+ - **Views A (every task) and D (densified) are never drawn** — not as a default, not
52
+ behind an "advanced" toggle.
53
+ - **Density is measured before anything is built.** Two numbers decide the shape: the
54
+ share of tasks carrying a dependency, and the share of dependencies crossing a goal
55
+ boundary. If cross-goal dependencies are near zero, view C is forty disconnected dots
56
+ and the honest deliverable is a grid of goal cards — which the hall's Goals page
57
+ already is. **That outcome would mean the right amount of new map is none**, and it is
58
+ why the first task in §6 is a measurement, not a build.
59
+
60
+ ## 4. Findability (goal 1000027) answers the owner's question more cheaply than a map
61
+
62
+ Read first, as the criterion required. Goal 1000027 is the grep path: a repo navigated by
63
+ literal search, with meaning written into the source (ADR 0095), plus the rank-scoped
64
+ lexical search over repo docs and indexed DB prose that `/recall` serves (ADR 0060).
65
+
66
+ The owner's question splits in two, and only one half is a map:
67
+
68
+ - **Find what I was brainstorming.** This is search, and it already exists. `/recall`
69
+ plus the lineage columns in §2 answers it end to end: find the idea, follow
70
+ `promoted_to_task_id` / `merged_into_idea_id` to what became of it. What is missing is
71
+ not a picture but a **lineage trail** — one thing and its ancestry, rendered as an
72
+ ordered list. That is a text surface, cheap, accessible for free, and it does not
73
+ degrade at 1,357 rows because it never shows more than one chain.
74
+ - **See the shape of the portfolio.** Search cannot answer this, and this is the only
75
+ half a graph earns. It is view C, and it is about ~40 goals — not about tasks.
76
+
77
+ **Therefore the lineage trail outranks the map.** It is the cheaper answer to the question
78
+ actually asked, and it is sequenced first in §6. A whole-corpus picture was never the
79
+ cheap way to find a thing.
80
+
81
+ ## 5. Accessibility and the no-sideways-scroll rule
82
+
83
+ Whatever ships lands in the hall, so it inherits the hall's rules, and a node-link graph
84
+ is the hardest surface to make accessible.
85
+
86
+ 1. **The table is the primary surface; the graph is the enhancement.** Every graph view
87
+ ships with a semantic equivalent (goal name, task count, category, dependency count) —
88
+ not an `aria-label` bolted onto an SVG blob, and not a "view as table" toggle that
89
+ hides the accessible path behind a click. A keyboard-only or screen-reader user gets
90
+ the same facts by default.
91
+ 2. **No sideways scroll on the page.** A graph that cannot fit the width scrolls inside
92
+ its own `overflow-x: auto` container; the page body never scrolls horizontally.
93
+ 3. **Colour is never the only channel.** View C encodes category as colour; category must
94
+ also be text on the node or in the row, since the ADR 0192 category set is not
95
+ colour-distinguishable at forty nodes.
96
+ 4. **The lineage trail has none of these problems**, which is a further reason it is
97
+ sequenced first.
98
+
99
+ ## 6. The ranked task list
100
+
101
+ Ranked, and deliberately front-loaded with the cheap text surfaces so the graph is built
102
+ only if the measurement says it would carry anything.
103
+
104
+ 1. **Measure the real density** — [#1003477](https://cloudbongos.com/builders#/task/1003477) — against the live DB (`--from`), recording the two
105
+ numbers from §3. Gates items 3 and 4; may cancel them outright.
106
+ 2. **The lineage trail** — [#1003478](https://cloudbongos.com/builders#/task/1003478) — an idea's ancestry and what became of it, as an ordered text
107
+ surface on the existing search path (§4). Independent of the graph, and the answer to
108
+ the owner's actual question.
109
+ 3. **The goal graph (view C)** — [#1003479](https://cloudbongos.com/builders#/task/1003479) — ~40 nodes, cross-goal dependency edges, task-count
110
+ weight, category as colour *and* text, table equivalent shipped with it. Only if
111
+ item 1 finds cross-goal edges.
112
+ 4. **The per-goal dependency forest (view B)** — [#1003480](https://cloudbongos.com/builders#/task/1003480) — the drill-down, queried per goal. Only
113
+ if item 1 finds a meaningful share of tasks carrying dependencies.
114
+
115
+ ## 7. What was rejected
116
+
117
+ - **The task graph, zoomed out (view A).** A thousand dots whose positions are noise.
118
+ - **Densifying to make it look structured (view D).** Forty dots presented as a thousand;
119
+ it invites belief in structure that is not there.
120
+ - **A prototype as this spike's output.** The criterion forbade it. `spike-task-map.js` is
121
+ a measuring instrument that renders figures from a synthetic sweep — it ships as
122
+ evidence under `docs/research/`, is wired to no route and no page, and nothing in the
123
+ hall imports it.
124
+ - **Building the map before measuring.** The two numbers in §3 can cancel items 3 and 4,
125
+ and discovering that after building would be the expensive order.
126
+
127
+ ## 8. The honest limit
128
+
129
+ **The measured corpus is synthetic.** The live DB was unreachable from the environment the
130
+ harness ran in, so it sweeps a plausible range instead of observing one truth. The sweep
131
+ is what makes the *verdict* robust — every conclusion above holds from p=2% to p=40% —
132
+ but the specific numbers are model output, not observation, and the ~40 goal count and the
133
+ 85% within-goal edge preference are modelled from the repo's own record. This is exactly
134
+ why item 1 of §6 is a measurement against the real DB and why it gates the rest. A
135
+ negative result that saves building an unreadable graph is a successful spike; a negative
136
+ result that also names the one query that could overturn it is a finished one.
137
+
138
+ ## 9. Conceded: the harness over-built for the question
139
+
140
+ The adversarial review of this work made a point worth keeping rather than arguing with,
141
+ so it is recorded here instead of in a session log that nobody re-reads.
142
+
143
+ **The verdict above rests on arithmetic, not on the renderer.** The two load-bearing
144
+ findings — the share of nodes with degree 0, and the ink budget (screen area ÷ nodes
145
+ against a minimum dot pitch and label width) — are division. They need no force
146
+ simulation and no PNG. Yet `spike-task-map.js` carries a Barnes-Hut layout and a
147
+ hand-rolled PNG encoder (CRC32, zlib framing, canvas primitives), and the write-up itself
148
+ concedes that in view A "every dot's location is an accident of the seed". Building an
149
+ accurate physics simulation to place points whose positions are then declared
150
+ meaningless is disproportionate to a decision document.
151
+
152
+ **What the renderer does still earn:** the figures are what make overplotting legible to
153
+ a human reader, which a table of `marks` counts genuinely does not do — and item 1 of §6
154
+ re-runs this same harness against the live DB, so it is the instrument that closes the
155
+ spike, not dead weight. That is why it is kept rather than deleted.
156
+
157
+ **What was fixed rather than argued:** the encoder had no test coverage at all, which is
158
+ the sharper version of the same criticism — the figures are cited as evidence, so a
159
+ stride, CRC or alpha-blend bug would have corrupted the evidence *silently*. `crc32`,
160
+ `chunk`, `writePng`, `canvas`, `goalColor` and `render` are now exported and pinned by
161
+ `tests/spike_task_map.mjs` (canonical CRC-32 vectors plus a cross-check against
162
+ `zlib.crc32`, chunk framing, stride correctness, out-of-bounds clipping, alpha blending,
163
+ disc radius, line endpoints, and a full inflate-and-locate round trip). The stride
164
+ assertion was mutation-tested: changing `y * w` to `y * h` fails two tests.
165
+
166
+ **The transferable rule:** *a spike may build only what its verdict actually rests on;
167
+ anything further is a prototype wearing a harness's name.* Had the arithmetic been run
168
+ first, the figures would have been a nice-to-have and the physics would never have been
169
+ written.
@@ -311,5 +311,7 @@ This keeps the decision history honest and traceable.
311
311
  | 0222 | [**The image family under the hero-only rule: plates and hero objects, never screens; the mark is drawn; the board is a contact sheet; the pair and the sidecar are the output contract** ([task 1003328](https://cloudbongos.com/builders#/task/1003328) · goal 1000083). The four image skills of `Leonxlnx/taste-skill` (scanned `dangerous`, ADR 0198) are built around pictures of interfaces: one reference image per section, one app screen per flow step in a phone mockup, an identity board with the brand name rendered in, and a build loop whose truth is the generated image; the panel flagged the eagerness mandate, the image-count rule and the must-invoke-any-tool directive by name, and the owner's rule (2026-08-26/27) forbids the category. Decisions: **D1** the subject is the composition's plate slots and the count is the slot count; variety survives as anchors (field, beside-bleeding, masthead, orb, backdrop; text-left image-right refused), the palette lock is the pack, cross-frame consistency is one family (material, light, lens, ground). **D2** a screen is the surface itself: the mobile skill makes portrait plates for 390 / 320, the flow is the states file rendered by the kit, the bible is `DESIGN.md`, no phone mockup, native declines to `/design`. **D3** the source of truth for UI is the owner's references and the world; `image-to-code` reads them (analysis, extraction spec, faithful translation, drift as the failure mode, the clarity checklist) and the only image it may cause is the hero plate. **D4** the mark is drawn as inline SVG, the colour system is the pack, the type specimen is the faces on a real page, the applications are the kit's renders, the image direction is a hero-object family, the nine-panel board is a contact sheet of real parts. **D5** the output contract is DESIGN.md's pair and sidecar (JPEG dark plate, WebP alpha cutout, `<file>.<ext>.json` beside each, `--plate-*` tokens on `body`) through the instance's art pipeline key, the spend logged, a white ground through the remover, alpha verified with ffmpeg, never a crop. **D6** the worked example is the grove specimen's hero object, not the front door. **D7** the pins: the four declared, each naming the sidecar, "text-free" and the art key; no eagerness / count / per-section / must-invoke directive. Rejected: per-section images for reference only; phone mockups around real shots; a generated logo as a start; the plate on the front door; a shared base skill with wrappers.](<redacted>.md) | ui-design / skills / imagery |
312
312
  | 0223 | [**The anti-pattern detector is two tiers inside the kit: mechanical floors fail, craft tells warn, a false positive is waived in the file with its reason, and nothing new is installed** ([task 1003329](https://cloudbongos.com/builders#/task/1003329) · goal 1000083). The [detector] group of impeccable's rebuild spec (about sixty rules, a CLI plus a browser bundle wired to hooks, per-project ignores, in-file waivers, "a clean scan is a floor and never proof") lands as RULES in the kit that already exists, per the task body: no second tool, no bundle, no hook. Decisions: **D1** `kit/tells.js` carries the static rules and `check-mock.js` runs them after the platform rules and taste bans; `lib.js`'s `factsInPage` collects the computed-value twins as `tells` and `render.js` prints them as `~ tell:` lines per render, recorded in `report.json`, never counted as problems. Two tiers: floors FAIL (a bounce easing; a card nested in a card) and tells WARN (the icon-heading-text grid, hero metrics, section numbering, a kicker above the h1, a side stripe, a hard offset shadow, a coloured halo, decorative blur, a default typeface, a wide measure, a long headline, the same entrance everywhere, a geometric mask on a plate, glyphs as icons, a rainbow gradient, the browser surfaces nobody themed, proportional numerals, tiny type; rendered: measure, tiny text, numerals in cells, headline lines, an overshooting curve). **D2** the world decides which tells are floors: a kicker above the h1 is a FAIL where the instance's `DESIGN.md` bans the eyebrow (a new `eyebrow` taste key), a WARN elsewhere. **D3** a false positive is waived in the file with its reason (`kit-ignore: <rule prefix> (reason)` → a WAIVE row), `--raw` runs with none, `--no-tells` runs the platform rules only, `--json` prints rows with `fails` / `warns` counts; no per-project ignore config. **D4** not ported: the purple-to-blue tell (a literal colour already fails; hue is unresolvable under the fifteen), an injected overlay, the screenshot sampler (`contrast.js --url` is that pass), a cascade resolver (the browser is the resolver), native code, every hook. **D5** the pins: a clean fixture passes every rule, every rule class trips at its tier with the case count equal to the rule count, the promotion, the waiver / raw / json paths through the real CLI, `craftTells` as warnings; the hub mock and the three specimens still pass, `/projects` and the grove specimen still render ALL CLEAN. Rejected: a second CLI; every tell as a floor (the kit as the taste and the instance as the exception); a project-wide ignore config; an edit-time hook.](0223-the-detector-is-two-tiers-in-the-kit.md) | ui-design / kit |
313
313
  | 0224 | [**Module-owned skills reach the core checkout as untracked, self-ignored copies with a manifest: the self-copy guard stays, the dev path is a flag, and the file map skips what the module documents** ([task 1003330](https://cloudbongos.com/builders#/task/1003330) · goal 1000083). `materializeClaude`'s self-copy guard is right (a core copying itself is a no-op at best), but Claude Code discovers only `.claude/skills/` at the project root, so a builder IN the core checkout could not invoke any of the nine ui-design skills written there. Decisions: **D1** `node scripts/gds/claude-materialize.js --module-skills-only [--dry-run] [--clean]` calls `materializeModuleSkillsIntoCore`: the same roster, gate and slug rule as step 1b, verbatim copies (no bongosify: the checkout runs `node scripts/gds/…`), a core-owned name kept, a disabled module's excluded; the guard untouched. **D2** untracked and self-ignored: a generated `.claude/skills/.module-skills.json` manifest and a `.gitignore` that ignores itself, the manifest and every materialised dir; each run removes what the last manifest named then lands the current set (byte-identical on repeat; a dropped declaration disappears); `--clean` stops after the removal. **D3** `gen-file-map.js` and `tests/file_map.mjs` skip materialised names by the manifest (a module skill is documented by its module's README, not by the notes sidecar). **D4** init from a checkout that carries the copies still lands them through step 1b, transformed, and never the dotfiles. **D5** pinned end to end in `tests/claude_materialize.mjs`. Rejected: dropping the guard; committing the copies; symlinks or junctions; notes for dirs not in the repository.](<redacted>.md) | materialiser / skills |
314
+ | 0225 | [**Privacy suppresses cross-project surfaces only: a private builder still appears on their own project's roster** ([task 1003443](https://cloudbongos.com/builders#/task/1003443) · goal 1000075). The accepted privacy spec defined its two flags inconsistently for one case: `hide_stats` suppresses "everything derived from the CROSS-PROJECT rollup" (qualified, so an in-project leaderboard is out of scope) while `account_visibility: private` said "absent from search, LEADERBOARDS, sitemap" (unqualified, so it read as covering the in-project one too) — and PV2 demands "ONE shared predicate used by every public read: … leaderboards …" while `modules/economy/credits.js`'s `leaderboard()` is a bare `SELECT … FROM builders` with no join and no predicate. Read one way that is an unshipped PV2 violation in main; read the other it is correct, and nothing settled which. **Owner decision (2026-08-30): privacy suppresses CROSS-PROJECT surfaces only.** A `private` builder is absent from `/u/<handle>`, platform search, the sitemap, Explore and the recruiting reach, and still appears on the roster of a project they build on — a project's record of its own work is the project's business. Two consequences are the point of recording it: `credits.leaderboard()` is **correct as written** (adding a predicate there would be a regression, not a fix — exactly what a literal PV2 reading would have done), and PV2's "leaderboards" means the cross-project ones. The spec was amended rather than annotated: the D1 row and both `active · public` matrix rows now say *cross-project*, the two `active · private` rows drop "absent everywhere" (the file's most misreadable phrase) for "absent from every cross-project surface", PV2's ship-table row is qualified, and the boundary lands as the **third rule** under D2 beside "`hide_stats` beats everything". Rejected: making `private` hide a builder from projects they build on (it reads as more protective and breaks the ledger — a roster that omits contributors cannot show who built the thing, and credits would accrue to someone invisible on the surface explaining them); and leaving it as a dated spec note (it pins shipped code as deliberately predicate-free, which is an ADR's job).](<redacted>.md) | privacy / spec |
315
+ | 0227 | [**A task network map is refused; the goal graph is the map, and search answers findability** ([task 1003282](https://cloudbongos.com/builders#/task/1003282) · goal 1000072, criterion `legibility-project-map`, which gates itself on this spike). Measured across a swept density range (p=2%–40% of tasks carrying a dependency): a node-link view of ~1,357 tasks is confetti, not structure, and densifying it draws forty goals badly while claiming to show a thousand tasks — a confident picture of nothing is the opposite of the legibility this goal serves. Decision: NO whole-corpus task map at any density; the readable surface is the ~40-node GOAL graph as the entry point with a per-goal DEPENDENCY FOREST as the drill-down, queried when a goal is opened rather than zoomed out of a global map. Every edge a map could draw already exists in the DB and none needs a new table — `task_dependencies` (020), `tasks.parent_task_id`, `tasks.goal_id`, `task_criteria`→`done_when_criteria`, `idea_inbox.promoted_to_task_id`, `idea_inbox.merged_into_idea_id` (`core_195`), `tasks.version_id` (membership, never an edge). **Findability (goal 1000027) answers the owner’s question more cheaply than a map**: the ask splits into “find what I was brainstorming”, which `/recall` (ADR 0060) plus the two lineage columns already answers end to end and which wants a text LINEAGE TRAIL — one thing and its ancestry — not a picture; and “see the shape of the portfolio”, the only half a graph earns, which is about ~40 goals and not about tasks. So the trail outranks the map and is sequenced first. Accessibility: the TABLE is the primary surface and the graph the enhancement (not an `aria-label` on an SVG blob, not a toggle hiding the accessible path), no sideways scroll on the page (the graph scrolls inside its own container), and category is text as well as colour since the ADR 0192 set is not colour-distinguishable at forty nodes. Ranked list: (1) measure the real density against the live DB — it GATES and may cancel the rest, (2) the lineage trail, (3) the goal graph, (4) the per-goal forest. Rejected: view A (every task); view D (densified); a prototype as the output (the criterion forbade it — `spike-task-map.js` is a measuring instrument under `docs/research/`, wired to no route); and building before measuring. Honest limit: the corpus is SYNTHETIC (the live DB was unreachable), so the verdict is robust across the sweep but the specific numbers are model output — which is why item 1 is a measurement against the real DB.](<redacted>.md) | GDS / legibility + hall |
314
316
 
315
317
  > ⚠️ **Numbering collisions are now machine-enforced, not narrated.** Twenty numbers are shared by two ADRs each — assigned in parallel sessions before anything checked. The files keep their filenames (renumbering would break every existing citation, and a number once assigned is never reused), and this table disambiguates each pair as `NNNN-a` / `NNNN-b`. The authoritative list is `LEGACY_DUPLICATE_ADRS` in [`scripts/gds/adr-namespace.js`](../../scripts/gds/adr-namespace.js), frozen by exact filename: a **new** collision — or a third file joining a legacy number, or a rename of either half — hard-fails the `unit` CI gate, as does an index row that points at no file or an ADR with no row. The list may only shrink. This paragraph used to narrate the collisions one by one and had fallen eight behind reality; see [ADR 0195](<redacted>.md) for why the check exists and why the pairs are grandfathered rather than renumbered.
@@ -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
- **1591 strings** across 3 surfaces · 1376 distinct pieces of copy · 1591 certain, 0 heuristic · 154 shown in more than one place.
7
+ **1586 strings** across 3 surfaces · 1376 distinct pieces of copy · 1586 certain, 0 heuristic · 151 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` | 73 | 1148 |
13
+ | `builders-hall` | `modules/hall-ui/public` | 72 | 1143 |
14
14
  | `status-dashboard` | `modules/status-ui/public` | 4 | 98 |
15
15
  | `landing` | `modules/public-landing/public` | 5 | 345 |
16
16
 
@@ -46,7 +46,6 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
46
46
  | `bd315dd71ea7` | 4x | Built by agents, on Cloud&nbsp;Bongos. | modules/public-landing/public/contact.html:71, modules/public-landing/public/index.html:900, modules/public-landing/public/privacy.html:80 |
47
47
  | `512ab32e3bf2` | 4x | Close box | modules/hall-ui/public/box-panel.js:149, modules/hall-ui/public/box-panel.js:163, modules/hall-ui/public/box-panel.js:206 |
48
48
  | `c661548d5140` | 4x | Next → | modules/public-landing/public/projects.html:899, modules/public-landing/public/projects.html:932, modules/public-landing/public/projects.html:1002 |
49
- | `b95918d421ae` | 4x | People — {{worldName}} | modules/hall-ui/public/people.html:6, modules/hall-ui/public/people.html:6, modules/hall-ui/public/scouting.html:6 |
50
49
  | `3eb67b892dea` | 4x | Percy Jackson | modules/public-landing/public/index.html:803, modules/public-landing/public/index.html:821, modules/public-landing/public/index.html:827 |
51
50
  | `0887725744f2` | 4x | Restricted. | modules/hall-ui/public/gate.js:219, modules/hall-ui/public/government.js:1104, modules/hall-ui/public/harbor.js:337 |
52
51
  | `e57ec24e13ef` | 4x | Sign in with GitHub | modules/hall-ui/public/hall-render.js:256, modules/hall-ui/public/hall-render.js:327, modules/hall-ui/public/hall-render.js:396 |
@@ -76,9 +75,10 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
76
75
  | `a072071b893c` | 2x | All time | modules/status-ui/public/index.html:286, modules/status-ui/public/index.html:313 |
77
76
  | `490b73a0c6e8` | 2x | Approve your Dev Box app — {{worldName}} | modules/hall-ui/public/pair.html:6, modules/hall-ui/public/pair.html:6 |
78
77
  | `b2656d0b2402` | 2x | Asked {…} | modules/hall-ui/public/collab.js:41, modules/hall-ui/public/watch.js:315 |
79
- | … | | _114 more in the JSON registry_ | |
78
+ | `563d29ed86d8` | 2x | Bulk actions | modules/hall-ui/public/goals.html:172, modules/hall-ui/public/work.html:129 |
79
+ | … | | _111 more in the JSON registry_ | |
80
80
 
81
- ## `builders-hall` — 1148 strings
81
+ ## `builders-hall` — 1143 strings
82
82
 
83
83
  | id | conf | text | where |
84
84
  |---|---|---|---|
@@ -175,7 +175,6 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
175
175
  | `da910fee01d7` | certain | Browse goals → | `modules/hall-ui/public/goals.js:83` |
176
176
  | `1596210cea76` | certain | Build from your own machine — clone the repository, run the platform locally, and sign in from the terminal. | `modules/hall-ui/public/hall-render.js:691` |
177
177
  | `29bd516ad17e` | certain | Builder directory | `modules/hall-ui/public/people.html:37` |
178
- | `29bd516ad17e` | certain | Builder directory | `modules/hall-ui/public/scouting.html:42` |
179
178
  | `08bfcc9198ba` | certain | Builder id | `modules/hall-ui/public/government.html:111` |
180
179
  | `a78477a24a48` | certain | Builders' Hall | `modules/hall-ui/public/index.html:12` |
181
180
  | `a78477a24a48` | certain | Builders' Hall | `modules/hall-ui/public/index.html:12` |
@@ -392,7 +391,6 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
392
391
  | `1e05b7fe42c8` | certain | Every project you build on across the platform. | `modules/hall-ui/public/my-projects.html:23` |
393
392
  | `efafe5ce29ed` | certain | Every task linked to this criterion has shipped — a Metic can confirm it | `modules/hall-ui/public/goals-render.js:641` |
394
393
  | `ddebbccd4b37` | certain | Everyone building across hosted projects, ranked by track record. Descriptive only — cross-project numbers nev | `modules/hall-ui/public/people.html:29` |
395
- | `ddebbccd4b37` | certain | Everyone building across hosted projects, ranked by track record. Descriptive only — cross-project numbers nev | `modules/hall-ui/public/scouting.html:34` |
396
394
  | `4750e12477e7` | certain | Everyone is already a member | `modules/hall-ui/public/goals-render.js:963` |
397
395
  | `04bbccfe7465` | certain | Everything a new builder needs before claiming their first task. About a ten-minute read. | `modules/hall-ui/public/primer.html:42` |
398
396
  | `d629e152f074` | certain | Expires {…} · refreshes on use. | `modules/hall-ui/public/settings.js:983` |
@@ -520,7 +518,6 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
520
518
  | `20d8552e13db` | certain | Loading tasks… | `modules/hall-ui/public/work.html:32` |
521
519
  | `a8b3b04b0b4d` | certain | Loading the copy desk… | `modules/hall-ui/public/copy-desk.html:28` |
522
520
  | `2bde9c630fd2` | certain | Loading the directory… | `modules/hall-ui/public/people.html:40` |
523
- | `2bde9c630fd2` | certain | Loading the directory… | `modules/hall-ui/public/scouting.html:45` |
524
521
  | `fcd755e8dd30` | certain | Loading the five questions… | `modules/hall-ui/public/ideas.html:84` |
525
522
  | `e201b4962858` | certain | Loading the idea | `modules/hall-ui/public/idea.html:43` |
526
523
  | `95a5382e5277` | certain | Loading the idea template… | `modules/hall-ui/public/ideas.html:31` |
@@ -654,8 +651,6 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
654
651
  | `adb5130f0d57` | certain | People asking to join. Approve or dismiss each request. | `modules/hall-ui/public/watch.html:62` |
655
652
  | `b95918d421ae` | certain | People — {{worldName}} | `modules/hall-ui/public/people.html:6` |
656
653
  | `b95918d421ae` | certain | People — {{worldName}} | `modules/hall-ui/public/people.html:6` |
657
- | `b95918d421ae` | certain | People — {{worldName}} | `modules/hall-ui/public/scouting.html:6` |
658
- | `b95918d421ae` | certain | People — {{worldName}} | `modules/hall-ui/public/scouting.html:6` |
659
654
  | `4a46b478edaf` | certain | Per page | `modules/hall-ui/public/hall-kit.js:71` |
660
655
  | `e1e10dc5e357` | certain | Permissions is the Archon administration surface. The Constitution and the Board Room are yours to read. | `modules/hall-ui/public/government.js:1121` |
661
656
  | `fcf996d77050` | certain | Pick a rank to see what it may do. The four ladder ranks ship with the platform; a custom rank is yours to sha | `modules/hall-ui/public/government.html:78` |