@bongos/core 1.19.492 → 1.19.494

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 (110) hide show
  1. package/.bongos-core.json +449 -34
  2. package/clients/bongos-client/README.md +1 -1
  3. package/clients/bongos-client/bongos-client.global.js +2 -0
  4. package/clients/bongos-client/index.cjs +2 -0
  5. package/clients/bongos-client/index.d.ts +4 -0
  6. package/clients/bongos-client/index.mjs +2 -0
  7. package/docs/adr/0233-a-copy-proposal-is-a-task-carrying-a-patch.md +151 -0
  8. package/docs/adr/README.md +2 -0
  9. package/docs/api/openapi.json +106 -3
  10. package/docs/api-reference.md +3 -2
  11. package/docs/copy-inventory.md +26 -14
  12. package/docs/copy-registry.json +123 -15
  13. package/docs/design/reviews/hall-v2/README.md +124 -0
  14. package/docs/design/reviews/hall-v2/atlas--archon.webp +0 -0
  15. package/docs/design/reviews/hall-v2/atlas--metic.webp +0 -0
  16. package/docs/design/reviews/hall-v2/atlas--xenos.webp +0 -0
  17. package/docs/design/reviews/hall-v2/collab--archon.webp +0 -0
  18. package/docs/design/reviews/hall-v2/collab--metic.webp +0 -0
  19. package/docs/design/reviews/hall-v2/collab--xenos.webp +0 -0
  20. package/docs/design/reviews/hall-v2/copy-desk--archon.webp +0 -0
  21. package/docs/design/reviews/hall-v2/copy-desk--metic.webp +0 -0
  22. package/docs/design/reviews/hall-v2/copy-desk--xenos.webp +0 -0
  23. package/docs/design/reviews/hall-v2/diagrams--archon.webp +0 -0
  24. package/docs/design/reviews/hall-v2/diagrams--metic.webp +0 -0
  25. package/docs/design/reviews/hall-v2/diagrams--xenos.webp +0 -0
  26. package/docs/design/reviews/hall-v2/drachmae--archon.webp +0 -0
  27. package/docs/design/reviews/hall-v2/drachmae--metic.webp +0 -0
  28. package/docs/design/reviews/hall-v2/drachmae--xenos.webp +0 -0
  29. package/docs/design/reviews/hall-v2/gate--archon.webp +0 -0
  30. package/docs/design/reviews/hall-v2/gate--metic.webp +0 -0
  31. package/docs/design/reviews/hall-v2/gate--xenos.webp +0 -0
  32. package/docs/design/reviews/hall-v2/goals--archon.webp +0 -0
  33. package/docs/design/reviews/hall-v2/goals--metic.webp +0 -0
  34. package/docs/design/reviews/hall-v2/goals--xenos.webp +0 -0
  35. package/docs/design/reviews/hall-v2/government--archon.webp +0 -0
  36. package/docs/design/reviews/hall-v2/government--metic.webp +0 -0
  37. package/docs/design/reviews/hall-v2/government--xenos.webp +0 -0
  38. package/docs/design/reviews/hall-v2/harbor--archon.webp +0 -0
  39. package/docs/design/reviews/hall-v2/harbor--metic.webp +0 -0
  40. package/docs/design/reviews/hall-v2/harbor--xenos.webp +0 -0
  41. package/docs/design/reviews/hall-v2/idea--archon.webp +0 -0
  42. package/docs/design/reviews/hall-v2/idea--metic.webp +0 -0
  43. package/docs/design/reviews/hall-v2/idea--xenos.webp +0 -0
  44. package/docs/design/reviews/hall-v2/ideas--archon.webp +0 -0
  45. package/docs/design/reviews/hall-v2/ideas--metic.webp +0 -0
  46. package/docs/design/reviews/hall-v2/ideas--xenos.webp +0 -0
  47. package/docs/design/reviews/hall-v2/index--archon.webp +0 -0
  48. package/docs/design/reviews/hall-v2/index--metic.webp +0 -0
  49. package/docs/design/reviews/hall-v2/index--xenos.webp +0 -0
  50. package/docs/design/reviews/hall-v2/modules--archon.webp +0 -0
  51. package/docs/design/reviews/hall-v2/modules--metic.webp +0 -0
  52. package/docs/design/reviews/hall-v2/modules--xenos.webp +0 -0
  53. package/docs/design/reviews/hall-v2/not-ready--archon.webp +0 -0
  54. package/docs/design/reviews/hall-v2/not-ready--metic.webp +0 -0
  55. package/docs/design/reviews/hall-v2/not-ready--xenos.webp +0 -0
  56. package/docs/design/reviews/hall-v2/pair--archon.webp +0 -0
  57. package/docs/design/reviews/hall-v2/pair--metic.webp +0 -0
  58. package/docs/design/reviews/hall-v2/pair--xenos.webp +0 -0
  59. package/docs/design/reviews/hall-v2/people--archon.webp +0 -0
  60. package/docs/design/reviews/hall-v2/people--metic.webp +0 -0
  61. package/docs/design/reviews/hall-v2/people--xenos.webp +0 -0
  62. package/docs/design/reviews/hall-v2/primer--archon.webp +0 -0
  63. package/docs/design/reviews/hall-v2/primer--metic.webp +0 -0
  64. package/docs/design/reviews/hall-v2/primer--xenos.webp +0 -0
  65. package/docs/design/reviews/hall-v2/profile--archon.webp +0 -0
  66. package/docs/design/reviews/hall-v2/profile--metic.webp +0 -0
  67. package/docs/design/reviews/hall-v2/profile--xenos.webp +0 -0
  68. package/docs/design/reviews/hall-v2/ranks--archon.webp +0 -0
  69. package/docs/design/reviews/hall-v2/ranks--metic.webp +0 -0
  70. package/docs/design/reviews/hall-v2/ranks--xenos.webp +0 -0
  71. package/docs/design/reviews/hall-v2/roadmap--archon.webp +0 -0
  72. package/docs/design/reviews/hall-v2/roadmap--metic.webp +0 -0
  73. package/docs/design/reviews/hall-v2/roadmap--xenos.webp +0 -0
  74. package/docs/design/reviews/hall-v2/roster--archon.webp +0 -0
  75. package/docs/design/reviews/hall-v2/roster--metic.webp +0 -0
  76. package/docs/design/reviews/hall-v2/roster--xenos.webp +0 -0
  77. package/docs/design/reviews/hall-v2/sessions--archon.webp +0 -0
  78. package/docs/design/reviews/hall-v2/sessions--metic.webp +0 -0
  79. package/docs/design/reviews/hall-v2/sessions--xenos.webp +0 -0
  80. package/docs/design/reviews/hall-v2/settings--archon.webp +0 -0
  81. package/docs/design/reviews/hall-v2/settings--metic.webp +0 -0
  82. package/docs/design/reviews/hall-v2/settings--xenos.webp +0 -0
  83. package/docs/design/reviews/hall-v2/task--archon.webp +0 -0
  84. package/docs/design/reviews/hall-v2/task--metic.webp +0 -0
  85. package/docs/design/reviews/hall-v2/task--xenos.webp +0 -0
  86. package/docs/design/reviews/hall-v2/watch--archon.webp +0 -0
  87. package/docs/design/reviews/hall-v2/watch--metic.webp +0 -0
  88. package/docs/design/reviews/hall-v2/watch--xenos.webp +0 -0
  89. package/docs/design/reviews/hall-v2/work--archon.webp +0 -0
  90. package/docs/design/reviews/hall-v2/work--metic.webp +0 -0
  91. package/docs/design/reviews/hall-v2/work--xenos.webp +0 -0
  92. package/docs/file-map.md +2 -1
  93. package/docs/module-api-changelog.md +4 -0
  94. package/modules/copy-desk/module.json +2 -2
  95. package/modules/copy-desk/proposals.js +278 -0
  96. package/modules/copy-desk/routes/copy-desk.js +173 -9
  97. package/modules/copy-desk/tests/copy_no_cms.mjs +90 -12
  98. package/modules/copy-desk/tests/copy_proposals.mjs +279 -0
  99. package/modules/dev-box/app/src/vendor/bongos-client.cjs +2 -0
  100. package/modules/hall-ui/public/copy-desk.css +9 -1
  101. package/modules/hall-ui/public/copy-desk.html +33 -0
  102. package/modules/hall-ui/public/copy-desk.js +134 -3
  103. package/modules/hall-ui/public/copy-desk.states.json +18 -1
  104. package/modules/lifecycle/lifecycle.js +6 -0
  105. package/package-lock.json +2 -2
  106. package/package.json +1 -1
  107. package/scripts/gds/copy-apply.js +338 -0
  108. package/scripts/gds/copy-inventory.js +128 -30
  109. package/src/module-api.js +1 -1
  110. package/tests/hall_collab_world.mjs +24 -4
@@ -3,9 +3,9 @@
3
3
  "generator": "scripts/gds/copy-inventory.js",
4
4
  "goal": 1000074,
5
5
  "counts": {
6
- "strings": 1600,
7
- "unique_ids": 1391,
8
- "certain": 1600,
6
+ "strings": 1612,
7
+ "unique_ids": 1403,
8
+ "certain": 1612,
9
9
  "heuristic": 0,
10
10
  "duplicate_ids": 150
11
11
  },
@@ -13,7 +13,7 @@
13
13
  "builders-hall": {
14
14
  "at": "modules/hall-ui/public",
15
15
  "files": 73,
16
- "strings": 1157
16
+ "strings": 1169
17
17
  },
18
18
  "status-dashboard": {
19
19
  "at": "modules/status-ui/public",
@@ -1910,7 +1910,7 @@
1910
1910
  "surface": "builders-hall",
1911
1911
  "text": "A flag needs a reason an artist can act on. What is wrong with it, and what would better look like?",
1912
1912
  "file": "modules/hall-ui/public/copy-desk.js",
1913
- "line": 334,
1913
+ "line": 372,
1914
1914
  "origin": "js-text-assign",
1915
1915
  "confidence": "certain"
1916
1916
  },
@@ -2108,7 +2108,7 @@
2108
2108
  "surface": "builders-hall",
2109
2109
  "text": "All surfaces",
2110
2110
  "file": "modules/hall-ui/public/copy-desk.js",
2111
- "line": 263,
2111
+ "line": 301,
2112
2112
  "origin": "js-markup",
2113
2113
  "confidence": "certain"
2114
2114
  },
@@ -2909,7 +2909,7 @@
2909
2909
  "surface": "builders-hall",
2910
2910
  "text": "Closed.",
2911
2911
  "file": "modules/hall-ui/public/copy-desk.js",
2912
- "line": 393,
2912
+ "line": 510,
2913
2913
  "origin": "js-notice",
2914
2914
  "confidence": "certain"
2915
2915
  },
@@ -2918,7 +2918,7 @@
2918
2918
  "surface": "builders-hall",
2919
2919
  "text": "Closing is a judgement too — say what you decided, so the next person does not re-litigate it.",
2920
2920
  "file": "modules/hall-ui/public/copy-desk.js",
2921
- "line": 378,
2921
+ "line": 495,
2922
2922
  "origin": "js-text-assign",
2923
2923
  "confidence": "certain"
2924
2924
  },
@@ -4416,6 +4416,15 @@
4416
4416
  "origin": "js-markup",
4417
4417
  "confidence": "certain"
4418
4418
  },
4419
+ {
4420
+ "id": "0c4632f983db",
4421
+ "surface": "builders-hall",
4422
+ "text": "File the change",
4423
+ "file": "modules/hall-ui/public/copy-desk.html",
4424
+ "line": 173,
4425
+ "origin": "html-text",
4426
+ "confidence": "certain"
4427
+ },
4419
4428
  {
4420
4429
  "id": "536a7e99640a",
4421
4430
  "surface": "builders-hall",
@@ -4529,7 +4538,7 @@
4529
4538
  "surface": "builders-hall",
4530
4539
  "text": "Flag this…",
4531
4540
  "file": "modules/hall-ui/public/copy-desk.js",
4532
- "line": 146,
4541
+ "line": 164,
4533
4542
  "origin": "js-markup",
4534
4543
  "confidence": "certain"
4535
4544
  },
@@ -4538,7 +4547,7 @@
4538
4547
  "surface": "builders-hall",
4539
4548
  "text": "Flagged. It is in the queue.",
4540
4549
  "file": "modules/hall-ui/public/copy-desk.js",
4541
- "line": 353,
4550
+ "line": 391,
4542
4551
  "origin": "js-notice",
4543
4552
  "confidence": "certain"
4544
4553
  },
@@ -5307,6 +5316,15 @@
5307
5316
  "origin": "js-markup",
5308
5317
  "confidence": "certain"
5309
5318
  },
5319
+ {
5320
+ "id": "de0e1590667f",
5321
+ "surface": "builders-hall",
5322
+ "text": "Keep all {…} {…} — they are the values the code drops in, and the change cannot land without them.",
5323
+ "file": "modules/hall-ui/public/copy-desk.js",
5324
+ "line": 442,
5325
+ "origin": "js-text-assign",
5326
+ "confidence": "certain"
5327
+ },
5310
5328
  {
5311
5329
  "id": "32d25ef2182d",
5312
5330
  "surface": "builders-hall",
@@ -6243,6 +6261,15 @@
6243
6261
  "origin": "js-markup",
6244
6262
  "confidence": "certain"
6245
6263
  },
6264
+ {
6265
+ "id": "cd652d04d616",
6266
+ "surface": "builders-hall",
6267
+ "text": "Nothing changes yet. This files a task carrying your wording; whoever claims it lands the diff, and it ships graded like every other change.",
6268
+ "file": "modules/hall-ui/public/copy-desk.html",
6269
+ "line": 168,
6270
+ "origin": "html-text",
6271
+ "confidence": "certain"
6272
+ },
6246
6273
  {
6247
6274
  "id": "fec5d78497e8",
6248
6275
  "surface": "builders-hall",
@@ -6882,6 +6909,24 @@
6882
6909
  "origin": "js-notice",
6883
6910
  "confidence": "certain"
6884
6911
  },
6912
+ {
6913
+ "id": "fe7f3488fda8",
6914
+ "surface": "builders-hall",
6915
+ "text": "Propose new wording",
6916
+ "file": "modules/hall-ui/public/copy-desk.html",
6917
+ "line": 152,
6918
+ "origin": "html-text",
6919
+ "confidence": "certain"
6920
+ },
6921
+ {
6922
+ "id": "abee9a18325d",
6923
+ "surface": "builders-hall",
6924
+ "text": "Propose wording…",
6925
+ "file": "modules/hall-ui/public/copy-desk.js",
6926
+ "line": 179,
6927
+ "origin": "js-markup",
6928
+ "confidence": "certain"
6929
+ },
6885
6930
  {
6886
6931
  "id": "3f85bdc47099",
6887
6932
  "surface": "builders-hall",
@@ -7512,6 +7557,15 @@
7512
7557
  "origin": "html-text",
7513
7558
  "confidence": "certain"
7514
7559
  },
7560
+ {
7561
+ "id": "fc9d783ed0f5",
7562
+ "surface": "builders-hall",
7563
+ "text": "Say why it is better. Whoever reviews this decides it from your reason, without asking you.",
7564
+ "file": "modules/hall-ui/public/copy-desk.js",
7565
+ "line": 446,
7566
+ "origin": "js-text-assign",
7567
+ "confidence": "certain"
7568
+ },
7515
7569
  {
7516
7570
  "id": "46711f7bc3df",
7517
7571
  "surface": "builders-hall",
@@ -7526,7 +7580,7 @@
7526
7580
  "surface": "builders-hall",
7527
7581
  "text": "Search failed.",
7528
7582
  "file": "modules/hall-ui/public/copy-desk.js",
7529
- "line": 305,
7583
+ "line": 343,
7530
7584
  "origin": "js-text-assign",
7531
7585
  "confidence": "certain"
7532
7586
  },
@@ -8286,6 +8340,15 @@
8286
8340
  "origin": "js-notice",
8287
8341
  "confidence": "certain"
8288
8342
  },
8343
+ {
8344
+ "id": "282c3fa2d456",
8345
+ "surface": "builders-hall",
8346
+ "text": "That is the wording it already has. Change something, or file a flag instead if you only want to mark it.",
8347
+ "file": "modules/hall-ui/public/copy-desk.js",
8348
+ "line": 438,
8349
+ "origin": "js-text-assign",
8350
+ "confidence": "certain"
8351
+ },
8289
8352
  {
8290
8353
  "id": "c0e28f30524d",
8291
8354
  "surface": "builders-hall",
@@ -8705,7 +8768,7 @@
8705
8768
  "surface": "builders-hall",
8706
8769
  "text": "The words this project shows people — what has been flagged, and what nobody has looked at.",
8707
8770
  "file": "modules/hall-ui/public/copy-desk.js",
8708
- "line": 290,
8771
+ "line": 328,
8709
8772
  "origin": "js-text-assign",
8710
8773
  "confidence": "certain"
8711
8774
  },
@@ -8934,6 +8997,15 @@
8934
8997
  "origin": "js-markup",
8935
8998
  "confidence": "certain"
8936
8999
  },
9000
+ {
9001
+ "id": "09256febc32d",
9002
+ "surface": "builders-hall",
9003
+ "text": "This sentence has {…} {…} where a value is dropped in when it is shown.",
9004
+ "file": "modules/hall-ui/public/copy-desk.js",
9005
+ "line": 422,
9006
+ "origin": "js-text-assign",
9007
+ "confidence": "certain"
9008
+ },
8937
9009
  {
8938
9010
  "id": "c9e50a67988a",
8939
9011
  "surface": "builders-hall",
@@ -9258,6 +9330,24 @@
9258
9330
  "origin": "html-text",
9259
9331
  "confidence": "certain"
9260
9332
  },
9333
+ {
9334
+ "id": "9a85f2c19b48",
9335
+ "surface": "builders-hall",
9336
+ "text": "What should it say?",
9337
+ "file": "modules/hall-ui/public/copy-desk.html",
9338
+ "line": 156,
9339
+ "origin": "html-text",
9340
+ "confidence": "certain"
9341
+ },
9342
+ {
9343
+ "id": "2dd116d2d817",
9344
+ "surface": "builders-hall",
9345
+ "text": "What the current wording gets wrong, and what yours does about it.",
9346
+ "file": "modules/hall-ui/public/copy-desk.html",
9347
+ "line": 166,
9348
+ "origin": "html-attr:placeholder",
9349
+ "confidence": "certain"
9350
+ },
9261
9351
  {
9262
9352
  "id": "5f2b989bbf6a",
9263
9353
  "surface": "builders-hall",
@@ -9384,6 +9474,15 @@
9384
9474
  "origin": "html-text",
9385
9475
  "confidence": "certain"
9386
9476
  },
9477
+ {
9478
+ "id": "62ab2e60f629",
9479
+ "surface": "builders-hall",
9480
+ "text": "Why is this better?",
9481
+ "file": "modules/hall-ui/public/copy-desk.html",
9482
+ "line": 164,
9483
+ "origin": "html-text",
9484
+ "confidence": "certain"
9485
+ },
9387
9486
  {
9388
9487
  "id": "fbd8a815b808",
9389
9488
  "surface": "builders-hall",
@@ -9474,6 +9573,15 @@
9474
9573
  "origin": "js-markup",
9475
9574
  "confidence": "certain"
9476
9575
  },
9576
+ {
9577
+ "id": "47f61e576454",
9578
+ "surface": "builders-hall",
9579
+ "text": "Write the wording you want instead.",
9580
+ "file": "modules/hall-ui/public/copy-desk.js",
9581
+ "line": 436,
9582
+ "origin": "js-text-assign",
9583
+ "confidence": "certain"
9584
+ },
9477
9585
  {
9478
9586
  "id": "c368b56ecf40",
9479
9587
  "surface": "builders-hall",
@@ -10226,7 +10334,7 @@
10226
10334
  "surface": "builders-hall",
10227
10335
  "text": "flagged by",
10228
10336
  "file": "modules/hall-ui/public/copy-desk.js",
10229
- "line": 130,
10337
+ "line": 148,
10230
10338
  "origin": "js-markup",
10231
10339
  "confidence": "certain"
10232
10340
  },
@@ -10856,7 +10964,7 @@
10856
10964
  "surface": "builders-hall",
10857
10965
  "text": "said, when flagged:",
10858
10966
  "file": "modules/hall-ui/public/copy-desk.js",
10859
- "line": 120,
10967
+ "line": 124,
10860
10968
  "origin": "js-markup",
10861
10969
  "confidence": "certain"
10862
10970
  },
@@ -10937,7 +11045,7 @@
10937
11045
  "surface": "builders-hall",
10938
11046
  "text": "task #{…}",
10939
11047
  "file": "modules/hall-ui/public/copy-desk.js",
10940
- "line": 101,
11048
+ "line": 105,
10941
11049
  "origin": "js-markup",
10942
11050
  "confidence": "certain"
10943
11051
  },
@@ -0,0 +1,124 @@
1
+ # The hall in the world — verification walk (task 1003309, goal 1000081)
2
+
3
+ Walked 2026-09-02 against origin/main `88baa433` (the tree with every goal-1000081 redesign task landed, through PR 518). This folder is the record the task asked for: every page, every rank, both modes, the gates, keyboard and focus, reduced motion, console errors, residual palette, and the unit gate — with one contact sheet per page-lane and the defect list filed as tasks.
4
+
5
+ ## Verdict
6
+
7
+ **Passed with four defects filed** (tasks 1003495, 1003496, 1003497, 1003498 — all `ready`, all under goal 1000081). Nothing found blocks the hall; nothing found was left unfiled.
8
+
9
+ ## What was walked
10
+
11
+ The 26 pages that carry a `*.states.json` (`modules/hall-ui/public/`), each rendered through the ui-design kit (`modules/ui-design/kit/render.js`, ADR 0197) at 1440 / 390 / 320 in dark and light plus a reduced-motion pass per mode, against three preview harnesses serving the same fixtures as **xenos**, **metic** and **archon** (`scripts/hall-preview/server.js --fixture-me --rank <r>`). The kit's own signed-out stub rendered each page's signed-out states. The archon lane rendered every width; xenos and metic skipped 320 (the floors there are rank-independent).
12
+
13
+ | | |
14
+ |---|---|
15
+ | renders | **1,232** (78 page-lanes: 26 pages × 3 ranks) + 2 reduced-motion passes per page-lane |
16
+ | floors measured per render | console-errors · failed-requests · horizontal-overflow · one-header-main-h1 · controls-24px · top-bar-80px · reduced-motion |
17
+ | page-lanes with a problem | 19, every one classified below |
18
+ | real defects | 4 (filed) · harness limitations: 3 kinds · correct rank refusals: 7 pages |
19
+
20
+ Sheets: `<page>--<rank>.webp`, one per page-lane — dark rows above light, 1440 → 390 → 320 left to right, one tile per state. (The atlas sheets are from the second run, with `atlas.json` generated.)
21
+
22
+ ## Page × rank
23
+
24
+ | page | xenos | metic | archon |
25
+ |---|---|---|---|
26
+ | atlas | 20 renders · clean · 3 tells | 20 renders · clean · 3 tells | 30 renders · clean · 3 tells |
27
+ | collab | 8 · clean | 8 · clean | 12 · clean |
28
+ | copy-desk | 20 · clean | 20 · clean | 30 · clean |
29
+ | diagrams | 8 · harness (sign-in redirect) | 8 · harness | 12 · harness |
30
+ | drachmae | 16 · stub (signed-out feeds) | 16 · stub | 24 · stub |
31
+ | gate | 12 · refused (metic+) | 12 · clean | 18 · clean |
32
+ | goals | 20 · clean | 20 · clean | 30 · clean |
33
+ | government | 20 · refused (permissions view is archon) | 20 · refused (same) | 30 · clean |
34
+ | harbor | 12 · refused (metic+) | 12 · clean | 18 · clean |
35
+ | idea | 8 · clean | 8 · clean | 12 · clean |
36
+ | ideas | 8 · clean | 8 · clean | 12 · clean |
37
+ | index | 16 · clean | 16 · clean | 24 · clean |
38
+ | modules | 20 · clean | 20 · clean | 30 · clean |
39
+ | not-ready | 8 · clean | 8 · clean | 12 · clean |
40
+ | pair | 8 · clean | 8 · clean | 12 · clean |
41
+ | people | 12 · clean | 12 · clean | 18 · clean |
42
+ | primer | 12 · harness (sign-in redirect) | 12 · harness | 18 · harness |
43
+ | profile | 20 · **defect 1003497** (signed-out links) | 20 · **defect 1003497** | 30 · **defect 1003497** |
44
+ | ranks | 8 · clean | 8 · clean | 12 · clean |
45
+ | roadmap | 8 · clean | 8 · clean | 12 · clean |
46
+ | roster | 12 · clean | 12 · clean | 18 · clean |
47
+ | sessions | 8 · refused (metic+) | 8 · clean | 12 · clean |
48
+ | settings | 16 · clean | 16 · clean | 24 · clean |
49
+ | task | 12 · clean | 12 · clean | 18 · clean |
50
+ | watch | 16 · refused (metic+) | 16 · clean | 24 · clean |
51
+ | work | 24 · clean | 24 · clean | 36 · **defect 1003498** (320, filters open) |
52
+
53
+ "clean" = every floor held in every render of that lane. Tells (the kit's advisory lines, never problems) are summarised under *Tells* below.
54
+
55
+ ## Every problem, classified
56
+
57
+ | kind | count | where | what it is |
58
+ |---|---|---|---|
59
+ | `failed-requests` on `/api/gds/auth/web/start?return=…` | 236 | diagrams, primer — all lanes | **harness limitation.** The sign-in redirect target has no fixture on the preview harness, so each signed-out render logs one failed request per navigation. Live answers that URL with the real sign-in door (see *Gates*). |
60
+ | `dispatchClick: nothing matches #svg .ab-node` / `#ab-index-rows …` | 28 | atlas — all lanes, first run | **harness limitation.** The atlas reads a generated, gitignored `atlas.json`; `atlas.states.json` says to run `scripts/gds/gen-atlas.js` first. Re-run with it generated: **all three lanes clean** (the sheets here are that run). |
61
+ | `failed-requests` on `drachmae-and-karma.md` + `public/repo-info` (`127.0.0.1`) | 28 | drachmae — all lanes | **stub limitation.** The kit's own signed-out stub carries no hall feeds; `drachmae.states.json` does not list these two as expected 404s the way `atlas.states.json` does. States-file hygiene, not a page defect (the page renders its honest empty). |
62
+ | `controls-24px: a "roster" 37x18 \| a "sign in" 40x18` | 14 | profile `out` — all lanes, both modes | **defect → task 1003497.** The signed-out empty state's two inline links are 18px tall. Never rendered before: the harness always answers `/me`, so this state only appears against the kit's stub. |
63
+ | `horizontal-overflow: scrollWidth 358 > 320` | 2 | work `filters-open` @320 — archon, both modes | **defect → task 1003498.** The filter drawer's goal `<select>` (332px) will not shrink; measured on the harness, it and its label are the elements past the edge. |
64
+ | `expected visible: #gov-rank-list` | 8 | government `permissions` — xenos, metic | **correct refusal.** `GET /government/ranks` is `government.manage` (archon); the view does not render for a metic. |
65
+ | `expected visible: #gate-body` / `#harbor-body` / `#sessions-scroll` / `#stats-scroll` / `#watch-*` / `#pane-*`, `page.click: Timeout` | 32 | gate, harbor, sessions, watch — xenos | **correct refusal.** These pages are `requireGovernmentPage` (metic+); the harness serves the shell, the API 403s, the page shows nothing. On live the page gate refuses the shell itself (below). |
66
+
67
+ ## Gates
68
+
69
+ - `tests/hall_page_gate_map.mjs`, `government_page_gates.mjs`, `auth_page_gate.mjs`, `scouting_page_gate.mjs`: **21 / 21 pass** — every hall URL is wired to the gate the oracle names.
70
+ - Live, signed out (`curl`, no cookie): **every** `/builders/*` URL probed — work, pair, settings, atlas, modules, goals, roadmap, primer, diagrams, watch, harbor, gate, sessions, people, government, roster, `/builders/`, ranks, drachmae, profile, not-ready, task/1003491, idea/1000904, ideas — answers **401** with the instance's own sign-in door (`noindex`), and so does the apex `/`. That is wider than the oracle's router-level map (which leaves roster, ranks, drachmae, profile, not-ready and `/builders/` ungated) because this project runs `project.platformVisibility = gated` — the member door in `src/bongos/platform-visibility-gate.js` (task 1003043, ADR 0190) refuses strangers on every surface before any page gate runs. Both layers behave as designed.
71
+ - Rank refusals on the harness (the table above) match the catalog floors: gate, harbor, sessions, watch, government → metic+; government's permissions view → archon.
72
+
73
+ ## Keyboard and focus
74
+
75
+ - Measured on the harness as archon, after a real `Tab` (keyboard modality): every visible focusable element (`a[href], button, input, select, textarea, summary, [tabindex]`) focused in turn and its computed outline / box-shadow read — **work board 140 / 140 ringed, profile 47 / 47, task page 46 / 46** (the new grade panel and session-log disclosure included); first Tab stop on all three is the skip link, and the kit's focus-order fact on all 1,232 renders reads `Skip to content › Builders' Hall › Home › Roadmap …`.
76
+ - Static: three `outline: none` sites in the hall's sheets. `diagram-viewer.css:47` is restored by `.dgv__stage:focus-visible` (inset ring); `style.css:531` `main:focus` is the skip link's programmatic target; **`style.css` `.palette__input` has no replacement → task 1003496** (the command palette input, hidden until Ctrl+K, so the measured pages could not reach it).
77
+ - `controls-24px` held on every render except the profile's signed-out state (task 1003497).
78
+
79
+ ## Reduced motion, console, overflow, structure
80
+
81
+ - Reduced motion: **every page-lane, both modes: `dead — running 0, rAF 0`** (nothing animates and no frame loop runs under `prefers-reduced-motion`).
82
+ - Console errors: **none** on any of the 1,232 renders (the floors' `console-errors` never fired; the states files' `ignoreConsole` lists cover only the expected 401/403/404 noise).
83
+ - Horizontal overflow: none except work @320 with the filter drawer open (task 1003498).
84
+ - One `<header>`, one `<main>`, one `<h1>`, top bar ≤ 80px: held on every render.
85
+
86
+ ## Residual palette (hex / rgb outside `style.css`)
87
+
88
+ `grep -nE "#[0-9a-fA-F]{3,8}\b|rgba?\(|hsla?\(" modules/hall-ui/public/*.{css,html,js} | grep -v ^style.css`, comments removed:
89
+
90
+ | site | verdict |
91
+ |---|---|
92
+ | `builders.js:563–568` — Standing's recent-grades column: `color:#a04040`, `var(--olive,#5b7a4d)`, `var(--ink-soft,#8a8577)` inline | **defect → task 1003495** (verification state must wear `--ok/--danger`) |
93
+ | `copy-desk.css:76` — `.cd-dialog::backdrop { background: rgba(0,0,0,.55) }` | **folded into 1003495** |
94
+ | `atlas.css:24–51`, `atlas.js:22–56` — the `--ab-*` node palette | **exempt** — the atlas's semantic node palette is fixed by ADR 0094 (its own states file says so) |
95
+ | `settings.css:157–158` — `#5865F2` on the Discord button | **accepted** — a third-party brand colour |
96
+ | `diagram-viewer.css:10`, `work.css:11,209` | comments only |
97
+
98
+ ## Tells (advisory, reviewed, not filed)
99
+
100
+ - `tiny-type` on `#shell-user-rank`, `.fact-pill`, `.task__tag`, `.prow__tag`, `.sessions-row__badge`, `.badge`, `.rm-goal__ready`, `.gate-reason__floor`, `small` — all **10.5px**, the world's label tier (`--label-size`), 0.5px under the kit's 11px line. A token decision, consistent everywhere; flagged for the owner to raise the tier if wanted, not a defect.
101
+ - `proportional-numerals` on date and id cells (profile ledger, sessions, gate) — cosmetic; worth `tabular-nums` on ledger cells in a later polish.
102
+ - `prose-measure` on `li.rank-card` (~146ch) on the ranks page; `headline-lines` (an h1 at 4 lines) on the task page at 320 with a long title — inherent to the content.
103
+
104
+ ## Unit gate
105
+
106
+ - CI `unit` (npm test + fitness + knip + audit) **green on this exact tree**: PR 518 (`88baa433`) and PR 516 before it.
107
+ - Local, this worktree: the hall's own 18 suites `tests/hall_*.mjs` — **285 / 285 pass**; the four gate suites 21 / 21; `fitness.js` all checks passed. A full local `npm test` on this Windows box reports 28 suite failures, none in hall-ui: generated-artifact freshness (`api_client`, `copy_inventory`), worktree/git path resolution (`next_number`, `box_infra_resolve`, `lib_sh_resolution`, `migrate_root_resolution`…) and Windows process aborts (`0xC0000409`) — environment, not the tree; CI is the gate of record.
108
+
109
+ ## Reproduce
110
+
111
+ ```bash
112
+ # in a checkout at the verified tree
113
+ node scripts/gds/gen-atlas.js # the atlas's generated feed
114
+ node scripts/hall-preview/server.js --port 4641 --fixture-me --rank xenos # and 4642 metic, 4643 archon
115
+ for s in modules/hall-ui/public/*.states.json; do
116
+ node modules/ui-design/kit/render.js --states "$s" --base-in http://builders.localhost:4643 \
117
+ --sizes 1440,390,320 --out /tmp/walk/archon/$(basename "$s" .states.json) # no --base-out: the kit's stub renders signed-out
118
+ done
119
+ # sheets: normalise every <mode>-<width>-<state>.png to 480×300 (ffmpeg scale+pad), then tile=6xN → <page>--<rank>.webp
120
+ node --test tests/hall_page_gate_map.mjs tests/government_page_gates.mjs tests/auth_page_gate.mjs tests/scouting_page_gate.mjs
121
+ node --test tests/hall_*.mjs
122
+ ```
123
+
124
+ Lanes must be launched as async processes — a synchronous spawn serialises the three ranks.