@bongos/core 1.24.41 → 1.24.43

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 (90) hide show
  1. package/.bongos-core.json +117 -92
  2. package/docs/copy-inventory.md +98 -137
  3. package/docs/copy-registry.json +244 -644
  4. package/docs/module-api-changelog.md +4 -0
  5. package/docs/onboarding/primer.md +1 -1
  6. package/docs/page-inventory.json +3 -3
  7. package/docs/page-readings.json +494 -535
  8. package/modules/hall-ui/public/ai-studio.html +4 -4
  9. package/modules/hall-ui/public/atlas.html +4 -4
  10. package/modules/hall-ui/public/blockers.html +4 -4
  11. package/modules/hall-ui/public/board-room.html +4 -4
  12. package/modules/hall-ui/public/builders.js +35 -763
  13. package/modules/hall-ui/public/city.html +4 -4
  14. package/modules/hall-ui/public/collab.html +4 -4
  15. package/modules/hall-ui/public/commands.html +4 -4
  16. package/modules/hall-ui/public/copy-desk.html +4 -4
  17. package/modules/hall-ui/public/craft-mode.js +1 -1
  18. package/modules/hall-ui/public/deploy.html +4 -4
  19. package/modules/hall-ui/public/dom-utils.js +2 -1
  20. package/modules/hall-ui/public/goal-map.html +4 -4
  21. package/modules/hall-ui/public/goals.html +4 -4
  22. package/modules/hall-ui/public/government.html +4 -4
  23. package/modules/hall-ui/public/hall-render.js +25 -771
  24. package/modules/hall-ui/public/hall-widgets.js +14 -123
  25. package/modules/hall-ui/public/idea.html +4 -4
  26. package/modules/hall-ui/public/ideas.html +4 -4
  27. package/modules/hall-ui/public/index.html +8 -22
  28. package/modules/hall-ui/public/index.states.json +0 -33
  29. package/modules/hall-ui/public/market-watch-item.html +4 -4
  30. package/modules/hall-ui/public/market-watch-rules.html +4 -4
  31. package/modules/hall-ui/public/market-watch.html +4 -4
  32. package/modules/hall-ui/public/modules.html +4 -4
  33. package/modules/hall-ui/public/money.html +4 -4
  34. package/modules/hall-ui/public/my-agents.html +4 -4
  35. package/modules/hall-ui/public/palette.js +7 -6
  36. package/modules/hall-ui/public/primer.html +4 -4
  37. package/modules/hall-ui/public/profile-own.js +639 -0
  38. package/modules/hall-ui/public/profile.css +2 -1
  39. package/modules/hall-ui/public/profile.html +48 -5
  40. package/modules/hall-ui/public/profile.js +27 -2
  41. package/modules/hall-ui/public/profile.states.json +18 -0
  42. package/modules/hall-ui/public/project-settings.html +4 -4
  43. package/modules/hall-ui/public/roadmap.html +4 -4
  44. package/modules/hall-ui/public/roster.html +4 -4
  45. package/modules/hall-ui/public/settings.html +4 -4
  46. package/modules/hall-ui/public/setup-gate.js +156 -0
  47. package/modules/hall-ui/public/shell-trail.js +2 -1
  48. package/modules/hall-ui/public/shell.js +44 -26
  49. package/modules/hall-ui/public/street.html +4 -4
  50. package/modules/hall-ui/public/studio.html +4 -4
  51. package/modules/hall-ui/public/style.css +85 -117
  52. package/modules/hall-ui/public/task.html +4 -4
  53. package/modules/hall-ui/public/thinking.html +4 -4
  54. package/modules/hall-ui/public/tweak-editor.html +4 -4
  55. package/modules/hall-ui/public/watch.html +4 -4
  56. package/modules/hall-ui/public/work.html +4 -4
  57. package/modules/hall-ui/records/setup-gate.md +43 -0
  58. package/modules/lifecycle/routes/tasks.js +2 -2
  59. package/modules/onboarding/onboarding-state.js +41 -20
  60. package/package-lock.json +2 -2
  61. package/package.json +1 -1
  62. package/release-notes.json +12 -0
  63. package/src/bongos/routes/me.js +2 -2
  64. package/src/module-api.js +1 -1
  65. package/tests/curve_controls_delegation.mjs +9 -8
  66. package/tests/curve_kind_overlay.mjs +5 -5
  67. package/tests/hall_acclaim_vote_control.mjs +5 -3
  68. package/tests/hall_audit.mjs +10 -6
  69. package/tests/hall_board_world.mjs +41 -27
  70. package/tests/hall_builders_page_pass.mjs +14 -5
  71. package/tests/hall_home_ships_bounded.mjs +10 -21
  72. package/tests/hall_kit_charts.mjs +3 -2
  73. package/tests/hall_landing_boot.mjs +2 -3
  74. package/tests/hall_loading.mjs +2 -1
  75. package/tests/hall_nav.mjs +36 -37
  76. package/tests/hall_numbers_page.mjs +100 -0
  77. package/tests/hall_onboarding_bongos_setup.mjs +14 -14
  78. package/tests/hall_palette.mjs +19 -24
  79. package/tests/hall_profile_world.mjs +7 -2
  80. package/tests/hall_reading_room.mjs +3 -2
  81. package/tests/helpers.mjs +8 -2
  82. package/tests/leaderboard_roles.mjs +1 -1
  83. package/tests/module_contributions.mjs +10 -6
  84. package/tests/nav_permission_atoms.mjs +4 -2
  85. package/tests/onboarding_state.mjs +33 -0
  86. package/tests/page_tweak_artist.mjs +2 -1
  87. package/tests/rank_tier_single_source.mjs +3 -0
  88. package/tests/setup_flow.mjs +242 -0
  89. package/tests/task_visuals.mjs +3 -1
  90. package/tests/welcome_boot.mjs +3 -2
@@ -3,25 +3,17 @@
3
3
  // Every widget — core here, module-contributed from a module's own client script —
4
4
  // registers into the window.OTB hall-widget registry (dom-utils.js), and builders.js
5
5
  // mounts the registered set into the shell's view containers (task 1723 redesign):
6
- // view: 'home' | 'standing' (default 'home')
6
+ // view: 'home' (the default, and since task 1005050 the only view: the
7
+ // 'standing' view, Accomplishments, folded into the Profile page)
7
8
  // zone: a finer mount target inside the Home view
8
9
  // ('home-banner' | 'home-stats' | 'home-band' | 'home-main')
9
- // group: a finer mount target inside Standing — which rail section this card
10
- // belongs to ('work' | 'karma' | 'progress' | 'achievements', task 2174).
11
- // All three ride the registry entry untouched; builders.js resolves them to the
12
- // #zone-*/#standing-* containers and falls back to <main> when absent, so a
13
- // module widget written before the redesign still lands (on Home).
14
- //
15
- // task 2174 — Standing is "one identity band, then rail-navigated sections grouped
16
- // by question": the Profile card is the band, and every other Standing widget
17
- // declares the `group` that answers its question. Achievements folded in from the
18
- // retired #achievements hash view; the security-bounty rate card moved off Standing
19
- // to the reference (a reward schedule is not personal standing) — the Primer's
20
- // credits chapter since task 1005046, which folded the Economy page into it.
10
+ // Both ride the registry entry untouched; builders.js resolves them to the
11
+ // #zone-* containers and falls back to <main> when absent, so a module widget
12
+ // written before the redesign still lands (on Home).
21
13
  //
22
14
  // Each widget owns its skeleton markup. mount(host) stamps that skeleton into the
23
15
  // registry-made <section>; builders.js then wires data to the same element ids it
24
- // always has (#profile-body, #recent-ships, …) — the data-rendering code is
16
+ // always has (each widget's own section ids) — the data-rendering code is
25
17
  // untouched by design. A fitness check (scripts/bongos/fitness.js
26
18
  // checkHallSectionRegistry) asserts index.html hardcodes no <section class="scroll">
27
19
  // in <main> — the registry is the single source of truth for what the hall shows.
@@ -48,20 +40,9 @@
48
40
 
49
41
  /* ---------------- Home ---------------- */
50
42
 
51
- // 0. First-visit welcome banner — V3.R77 (#296). Pre-graduation only; dismissable.
52
- w('welcome-scroll', 'Welcome', 0,
53
- '<button type="button" class="welcome__minimize" id="welcome-minimize" aria-label="Minimize the welcome panel" title="Minimize">−</button>' +
54
- '<h2 id="welcome-h" class="scroll__h">Welcome</h2>' +
55
- '<div class="welcome" id="welcome-body"><div class="hall-loading" role="status">Loading…</div></div>',
56
- { view: 'home', zone: 'home-banner', welcomeChip: true, sectionClass: 'scroll scroll--welcome', labelledby: 'welcome-h', hiddenByDefault: true });
57
-
58
- // 0b. Onboarding checklist — V3.R75 (#294).
59
- w('onboarding-scroll', 'Getting started', 10,
60
- '<h2 id="onboarding-h" class="scroll__h">Getting started</h2>' +
61
- '<p class="scroll__lede">A short path to finding your feet. Tick the steps you’ve done; the rest are tracked for you.</p>' +
62
- '<ol class="onboarding-list" id="onboarding-list"><li class="hall-loading" role="status">Loading…</li></ol>' +
63
- '<p class="ledger__note" id="onboarding-status" hidden></p>',
64
- { view: 'home', zone: 'home-banner', labelledby: 'onboarding-h', hiddenByDefault: true });
43
+ // (task 1005076: the Welcome setup banner and the Getting started checklist left Home.
44
+ // Setup is a screen of its own that a new builder finishes once — setup-gate.js — and
45
+ // a set-up builder is never shown a setup banner again; owner, 2026-11-05.)
65
46
 
66
47
  // (task 1005054: the quick-stats strip and the version tab left Home. The
67
48
  // zone they held, home-stats, is the project city's — home-city.js.)
@@ -111,102 +92,12 @@
111
92
  },
112
93
  });
113
94
 
114
- /* ---------------- Accomplishments (the 'standing' view; task 1004826) ---------------- */
115
-
116
- // 1. Profile — the identity band at the top of Standing (#726). No `group`:
117
- // the band sits above the rail sections and is never a rail entry.
118
- w('profile-scroll', 'Profile', 20,
119
- '<h2 id="profile-h" class="sr-only">Profile</h2>' +
120
- '<div class="profile" id="profile-body"><div class="hall-loading" role="status">Loading…</div></div>',
121
- { view: 'standing', sectionClass: 'scroll scroll--profile', labelledby: 'profile-h' });
122
-
123
- /* -- Work — "what have I shipped, and how was it judged" -- */
124
-
125
- // 2. WORKS — recent ships.
126
- w('ships-scroll', 'Your work', 30,
127
- '<h2 id="ships-h" class="scroll__h">Your work</h2>' +
128
- '<div class="filters">' +
129
- '<label class="filter"><span>Window</span><select id="f-ships-window">' +
130
- '<option value="7">Last 7 days</option><option value="30">Last 30 days</option>' +
131
- '<option value="90">Last 90 days</option><option value="all" selected>All time</option>' +
132
- '</select></label>' +
133
- '<label class="filter"><span>Version</span><select id="f-ships-version"><option value="">— any —</option></select></label>' +
134
- '<label class="filter"><span>Sort</span><select id="f-ships-sort">' +
135
- '<option value="recent">most recent first</option><option value="oldest">oldest first</option>' +
136
- '<option value="drachmae-high" data-currency-tmpl="highest {label}">highest credits</option>' +
137
- '<option value="drachmae-low" data-currency-tmpl="lowest {label}">lowest credits</option>' +
138
- '</select></label>' +
139
- '<span id="ships-count" aria-live="polite" class="filter__count"></span>' +
140
- '</div>' +
141
- '<table class="ledger" id="recent-ships"><thead><tr><th>№</th><th>Work</th><th data-currency-label="caps">Credits</th><th>Shipped</th></tr></thead>' +
142
- '<tbody><tr><td colspan="4" class="ledger__empty"><span class="hall-loading" role="status">Loading…</span></td></tr></tbody></table>' +
143
- // task 2174: the hand-rolled prev/next bar gives way to the OTBKit pager
144
- // (per-page select, page indicator, clamping) — same #ships-* id prefix.
145
- window.OTBKit.pagerBarHtml('ships', { label: 'shipped work' }),
146
- { view: 'standing', group: 'work', labelledby: 'ships-h' });
147
-
148
- // 3. MARKS — review quality of recent output.
149
- w('grades-scroll', 'Reviews', 32,
150
- '<h2 id="marks-h" class="scroll__h">Reviews</h2>' +
151
- '<div class="profile__placeholder" id="marks-empty" style="display:none;">No work reviewed yet.</div>' +
152
- '<table class="ledger" id="recent-grades"><thead><tr><th>№</th><th>Work</th><th>Score</th><th>Verdict</th><th>Reviewed</th></tr></thead>' +
153
- '<tbody><tr><td colspan="5" class="ledger__empty"><span class="hall-loading" role="status">Loading…</span></td></tr></tbody></table>' +
154
- '<p class="ledger__note" id="grades-rolling-note" hidden></p>',
155
- { view: 'standing', group: 'work', labelledby: 'marks-h' });
156
-
157
- /* -- Karma — peer standing; one currency, one section -- */
158
-
159
- // 4. KARMA feed — V3.R26 (#246). Hidden until /me returns karma data.
160
- w('karma-scroll', 'Karma', 40,
161
- '<h2 id="karma-h" class="scroll__h">Karma</h2>' +
162
- '<p class="scroll__lede">Ideas passed, peer votes and approvals earn karma. Shipped work earns ' + curLabel() + '.</p>' +
163
- '<table class="ledger" id="karma-feed"><thead><tr><th>When</th><th>Delta</th><th>Reason</th><th>Granted by</th></tr></thead>' +
164
- '<tbody><tr><td colspan="4" class="ledger__empty"><span class="hall-loading" role="status">Loading…</span></td></tr></tbody></table>',
165
- { view: 'standing', group: 'karma', labelledby: 'karma-h', hiddenByDefault: true });
166
-
167
- // 4b. Peer acclaim — V3.R25 (#245). Hidden until data.
168
- w('acclaim-scroll', 'Peer recognition', 42,
169
- '<h2 id="acclaim-h" class="scroll__h">Peer recognition</h2>' +
170
- '<p class="scroll__lede">Vote on others’ finished work. A vote counts toward their karma after a week.</p>' +
171
- '<table class="ledger" id="acclaim-feed"><thead><tr><th>Work</th><th>By</th><th>Votes</th></tr></thead>' +
172
- '<tbody><tr><td colspan="3" class="ledger__empty"><span class="hall-loading" role="status">Loading…</span></td></tr></tbody></table>' +
173
- // task 1002446: the last unpaged list in the hall. The feed is already
174
- // client-side, so the kit's pager fits without touching the endpoint.
175
- window.OTBKit.pagerBarHtml('acclaim', { label: 'entries' }),
176
- { view: 'standing', group: 'karma', labelledby: 'acclaim-h', hiddenByDefault: true });
177
-
178
- /* -- Progress — how the output has changed over time -- */
179
-
180
- // 4c. Where you stand (task 1005046) — the viewer's rank, the rank above it
181
- // and how they reach it, moved here from the retired Ranks page. Filled by
182
- // hall-render.js renderRankStanding from the same /me payload as the band;
183
- // the ladder itself is the Primer's rank-ladder chapter.
184
- w('rank-scroll', 'Where you stand', 48,
185
- '<h2 id="rank-standing-h" class="scroll__h">Where you stand</h2>' +
186
- '<div id="rank-standing-body"><div class="hall-loading" role="status">Loading…</div></div>',
187
- { view: 'standing', group: 'progress', labelledby: 'rank-standing-h' });
188
-
189
- // 5. CURVE — the builder's development curve (V3.R72 #291, C5).
190
- w('analytics-scroll', 'Progress', 50,
191
- '<h2 id="curve-h" class="scroll__h">Progress</h2>' +
192
- '<p class="scroll__lede">How your work has changed over time. <span id="curve-scope-note"></span></p>' +
193
- '<div class="curve" id="curve-body">' +
194
- '<div class="profile__placeholder" id="curve-empty" style="display:none;">Not enough shipped work yet to chart.</div>' +
195
- '<div class="curve__headline" id="curve-headline"></div>' +
196
- '<div class="curve__grid" id="curve-grid"></div>' +
197
- '<div class="curve__kinds" id="curve-kinds"></div>' +
198
- '</div>',
199
- { view: 'standing', group: 'progress', labelledby: 'curve-h', hiddenByDefault: true });
200
-
201
- /* -- Achievements — long-term progression (folded in from the retired
202
- #achievements hash view, task 2174) -- */
95
+ /* ---------------- Accomplishments — gone (task 1005050) ---------------- */
203
96
 
204
- // 6. Achievements (#726).
205
- w('honours-scroll', 'Achievements', 60,
206
- '<h2 id="ach-h" class="scroll__h">Achievements</h2>' +
207
- '<p class="scroll__lede">Earned ones are lit; the rest show what is left.</p>' +
208
- '<div class="ach-grid" id="ach-grid"><div class="hall-loading" role="status">Loading…</div></div>',
209
- { view: 'standing', group: 'achievements', labelledby: 'ach-h' });
97
+ // The 'standing' view (Accomplishments) folded into the Profile page (owner
98
+ // decision 2026-11-03, idea 1001315): its public half was already there, and its
99
+ // private half — where you stand, reviews, karma, peer recognition, progress —
100
+ // is Profile's "Just you" screen, drawn by profile-own.js. Old links redirect.
210
101
 
211
102
  // task 1003441: the Leaderboard widget is GONE from this page. It is a real
212
103
  // page now (/roster — roster.html + roster.js), which is what the Community
@@ -50,10 +50,10 @@
50
50
 
51
51
  <div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
52
52
 
53
- <script src="/builders/dom-utils.js?v=2026-10-25-escape"></script>
54
- <script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
55
- <script src="/builders/craft-mode.js?v=2026-11-05-oversight"></script>
56
- <script src="/builders/shell.js?v=2026-11-05-oversight"></script>
53
+ <script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
54
+ <script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
55
+ <script src="/builders/craft-mode.js?v=2026-11-05-numbers"></script>
56
+ <script src="/builders/shell.js?v=2026-11-05-numbers"></script>
57
57
  <script src="/builders/palette.js" defer></script>
58
58
  <!-- task-detail.js still owns the #/idea/N and #/blocker/N overlay, so a ref
59
59
  written inside an idea's own prose keeps resolving from this page. -->
@@ -225,10 +225,10 @@
225
225
 
226
226
  <div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
227
227
 
228
- <script src="/builders/dom-utils.js?v=2026-10-25-escape"></script>
229
- <script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
230
- <script src="/builders/craft-mode.js?v=2026-11-05-oversight"></script>
231
- <script src="/builders/shell.js?v=2026-11-05-oversight"></script>
228
+ <script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
229
+ <script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
230
+ <script src="/builders/craft-mode.js?v=2026-11-05-numbers"></script>
231
+ <script src="/builders/shell.js?v=2026-11-05-numbers"></script>
232
232
  <script src="/builders/palette.js" defer></script>
233
233
  <!-- task 1004727: the ONE karma vote control every task/idea list renders -->
234
234
  <script src="/builders/vote-control.js"></script>
@@ -10,7 +10,7 @@
10
10
  over the generic one below) on every served page. brand-apply gates all of
11
11
  that on the #hall-h1 marker below, so the marker must stay index-only. -->
12
12
  <title>Builders' Hall</title>
13
- <meta name="description" content="The hall of the builders who shape this world. Accomplishments and work waiting to be claimed.">
13
+ <meta name="description" content="The hall of the builders who shape this world: what is being built, and work waiting to be claimed.">
14
14
  <!-- the hub's origin, stamped server-side (task 1003485): the profile nudge
15
15
  sends "add a short bio" to the hub's account page, where the bio is edited.
16
16
  Empty on an instance with no hub, and the bio half is then not asked for. -->
@@ -55,7 +55,7 @@
55
55
  shows the avatar and rank. On hover or keyboard focus the chip itself
56
56
  widens to the left into the top of the card, and only the facts below
57
57
  drop down (#home-standing-body, filled by hall-render.js renderProfile). -->
58
- <div class="hall-standing" id="hall-standing" hidden tabindex="0" aria-label="Your accomplishments">
58
+ <div class="hall-standing" id="hall-standing" hidden tabindex="0" aria-label="Your standing">
59
59
  <div class="hall-standing__card" id="home-standing-body"></div>
60
60
  </div>
61
61
  </div>
@@ -74,29 +74,15 @@
74
74
  <!-- task 1005043: Home's loader, shown until a card mounts into a zone. -->
75
75
  <p class="hall-loading hall-loading--page hall-loading--zones" role="status">Loading…</p>
76
76
  <div class="view-zone" id="zone-home-banner">
77
- <!-- Landing card for signed-out visitors (builders.js renderLanding)
78
- + the re-open affordance for a dismissed welcome banner. -->
77
+ <!-- Landing card for signed-out visitors (builders.js renderLanding).
78
+ No setup banner: setup is a screen of its own (setup-gate.js, task 1005076). -->
79
79
  <div id="landing-root" hidden></div>
80
- <p id="welcome-reopen" hidden><a href="#home" class="pill-link">Show the setup guide again</a></p>
81
80
  </div>
82
81
  <div class="view-zone" id="zone-home-stats"></div>
83
82
  <div class="view-zone view-zone--band" id="zone-home-band"></div>
84
83
  <div class="view-zone" id="zone-home-main"></div>
85
84
  </section>
86
85
 
87
- <!-- Standing (task 2174): the Profile band mounts straight into
88
- #zone-standing; every other Standing widget declares a `group` and
89
- lands in one of the four #standing-* rail sections builders.js
90
- creates below it. The old #view-achievements hash view retired into
91
- the Achievements group — shell.js aliases #achievements to it so
92
- existing links keep working. -->
93
- <section class="view" id="view-standing" data-view-title="Accomplishments" hidden>
94
- <div class="standing-layout">
95
- <nav class="section-rail" id="standing-rail" aria-label="Accomplishments sections" hidden></nav>
96
- <div class="view-zone standing-panels" id="zone-standing"></div>
97
- </div>
98
- </section>
99
-
100
86
  </main>
101
87
 
102
88
  <footer class="app-foot" id="app-foot"></footer>
@@ -110,7 +96,7 @@
110
96
  / ADR 0069 — no client lib to load (EventSource is built into the browser). -->
111
97
  <!-- shared frontend toolkit (window.OTB) — loaded FIRST so every consuming
112
98
  IIFE below can pull escapeHtml/$/fmtNum/... from one place. -->
113
- <script src="/builders/dom-utils.js?v=2026-10-25-escape"></script>
99
+ <script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
114
100
  <script src="/builders/task-detail.js?v=2026-07-03-taskdetail" defer></script>
115
101
  <!-- R56 (task 1195): apply the instance currency label from window.__BRANDING__
116
102
  to [data-currency-label]/[data-currency-tmpl] markup + expose OTBBranding.
@@ -121,9 +107,9 @@
121
107
  <!-- task 1004785: the first-visit-of-the-day welcome (the tower). Before shell.js, which asks it
122
108
  before the craft picker so the two never stack. Home only. -->
123
109
  <script src="/builders/welcome-boot.js?v=2026-10-23-city1" defer></script>
124
- <script src="/builders/shell-trail.js?v=2026-10-08-city-tab" defer></script>
125
- <script src="/builders/craft-mode.js?v=2026-11-05-oversight" defer></script>
126
- <script src="/builders/shell.js?v=2026-11-05-oversight" defer></script>
110
+ <script src="/builders/shell-trail.js?v=2026-11-05-numbers" defer></script>
111
+ <script src="/builders/craft-mode.js?v=2026-11-05-numbers" defer></script>
112
+ <script src="/builders/shell.js?v=2026-11-05-numbers" defer></script>
127
113
  <!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
128
114
  <script src="/builders/palette.js" defer></script>
129
115
  <!-- task 2166: the shared component kit (window.OTBKit) — pager/ledger/rail.
@@ -36,39 +36,6 @@
36
36
  "expect": {
37
37
  "visible": [
38
38
  "#view-home"
39
- ],
40
- "hidden": [
41
- "#view-standing"
42
- ]
43
- }
44
- },
45
- "standing": {
46
- "auth": true,
47
- "url": "/builders/#accomplishments",
48
- "actions": [
49
- [
50
- "wait",
51
- 400
52
- ]
53
- ],
54
- "expect": {
55
- "visible": [
56
- "#view-standing"
57
- ]
58
- }
59
- },
60
- "standing-karma": {
61
- "auth": true,
62
- "url": "/builders/#standing-karma",
63
- "actions": [
64
- [
65
- "wait",
66
- 400
67
- ]
68
- ],
69
- "expect": {
70
- "visible": [
71
- "#view-standing"
72
39
  ]
73
40
  }
74
41
  },
@@ -71,10 +71,10 @@
71
71
  <dialog class="mw-dialog" id="mw-propose" aria-labelledby="mw-propose-title"></dialog>
72
72
  <div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
73
73
 
74
- <script src="/builders/dom-utils.js?v=2026-10-25-escape"></script>
75
- <script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
76
- <script src="/builders/craft-mode.js?v=2026-11-05-oversight"></script>
77
- <script src="/builders/shell.js?v=2026-11-05-oversight"></script>
74
+ <script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
75
+ <script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
76
+ <script src="/builders/craft-mode.js?v=2026-11-05-numbers"></script>
77
+ <script src="/builders/shell.js?v=2026-11-05-numbers"></script>
78
78
  <script src="/builders/palette.js" defer></script>
79
79
  <script src="/builders/hall-kit.js"></script>
80
80
  <script src="/builders/market-watch-lib.js"></script>
@@ -40,10 +40,10 @@
40
40
 
41
41
  <div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
42
42
 
43
- <script src="/builders/dom-utils.js?v=2026-10-25-escape"></script>
44
- <script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
45
- <script src="/builders/craft-mode.js?v=2026-11-05-oversight"></script>
46
- <script src="/builders/shell.js?v=2026-11-05-oversight"></script>
43
+ <script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
44
+ <script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
45
+ <script src="/builders/craft-mode.js?v=2026-11-05-numbers"></script>
46
+ <script src="/builders/shell.js?v=2026-11-05-numbers"></script>
47
47
  <!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
48
48
  <script src="/builders/palette.js" defer></script>
49
49
  <script src="/builders/hall-kit.js"></script>
@@ -185,10 +185,10 @@
185
185
  <dialog class="mw-dialog" id="mw-propose" aria-labelledby="mw-propose-title"></dialog>
186
186
  <div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
187
187
 
188
- <script src="/builders/dom-utils.js?v=2026-10-25-escape"></script>
189
- <script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
190
- <script src="/builders/craft-mode.js?v=2026-11-05-oversight"></script>
191
- <script src="/builders/shell.js?v=2026-11-05-oversight"></script>
188
+ <script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
189
+ <script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
190
+ <script src="/builders/craft-mode.js?v=2026-11-05-numbers"></script>
191
+ <script src="/builders/shell.js?v=2026-11-05-numbers"></script>
192
192
  <script src="/builders/palette.js" defer></script>
193
193
  <script src="/builders/hall-kit.js"></script>
194
194
  <script src="/builders/market-watch-lib.js"></script>
@@ -125,10 +125,10 @@
125
125
 
126
126
  <div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
127
127
 
128
- <script src="/builders/dom-utils.js?v=2026-10-25-escape"></script>
129
- <script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
130
- <script src="/builders/craft-mode.js?v=2026-11-05-oversight"></script>
131
- <script src="/builders/shell.js?v=2026-11-05-oversight"></script>
128
+ <script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
129
+ <script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
130
+ <script src="/builders/craft-mode.js?v=2026-11-05-numbers"></script>
131
+ <script src="/builders/shell.js?v=2026-11-05-numbers"></script>
132
132
  <!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
133
133
  <script src="/builders/palette.js" defer></script>
134
134
  <script src="/builders/brand-apply.js"></script>
@@ -79,10 +79,10 @@
79
79
 
80
80
  <div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
81
81
 
82
- <script src="/builders/dom-utils.js?v=2026-10-25-escape"></script>
83
- <script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
84
- <script src="/builders/craft-mode.js?v=2026-11-05-oversight"></script>
85
- <script src="/builders/shell.js?v=2026-11-05-oversight"></script>
82
+ <script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
83
+ <script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
84
+ <script src="/builders/craft-mode.js?v=2026-11-05-numbers"></script>
85
+ <script src="/builders/shell.js?v=2026-11-05-numbers"></script>
86
86
  <!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
87
87
  <script src="/builders/palette.js" defer></script>
88
88
  <script src="/builders/hall-kit.js"></script>
@@ -81,10 +81,10 @@
81
81
 
82
82
  <div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
83
83
 
84
- <script src="/builders/dom-utils.js?v=2026-10-25-escape"></script>
85
- <script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
86
- <script src="/builders/craft-mode.js?v=2026-11-05-oversight"></script>
87
- <script src="/builders/shell.js?v=2026-11-05-oversight"></script>
84
+ <script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
85
+ <script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
86
+ <script src="/builders/craft-mode.js?v=2026-11-05-numbers"></script>
87
+ <script src="/builders/shell.js?v=2026-11-05-numbers"></script>
88
88
  <!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
89
89
  <script src="/builders/palette.js" defer></script>
90
90
  <script src="/builders/gov-living.js?v=2026-10-10-real1"></script>
@@ -49,7 +49,7 @@
49
49
  // element whose visibility decides whether the group is offered — the nav item
50
50
  // itself for pages, the profile chip for Settings (which is not a nav item).
51
51
  // Anchors must stay in step with their source of truth; the test asserts it:
52
- // standing → builders.js STANDING_GROUPS (+ shell.js VIEW_ALIASES)
52
+ // profile → profile.js RAIL_ITEMS (Accomplishments folded in, task 1005050)
53
53
  // work → work.js makeTabs ids
54
54
  // government → government.js makeTabs ids (two rooms since ADR 0266)
55
55
  // watch → watch.js makeTabs ids (Sessions and Autobongos since task 1005049)
@@ -57,11 +57,12 @@
57
57
  // my-agents → my-agents.js ANCHORS (the agent settings left Settings, task 1005044)
58
58
  // primer → primer.md's h2 slugs + primer-live.js SECTIONS (task 1005046)
59
59
  var SECTIONS = [
60
- { parent: 'Accomplishments', gate: 'nav-standing', items: [
61
- { label: 'Work', href: '/#accomplishments-work' },
62
- { label: 'Karma', href: '/#accomplishments-karma' },
63
- { label: 'Progress', href: '/#accomplishments-progress' },
64
- { label: 'Achievements', href: '/#accomplishments-achievements' },
60
+ // task 1005050: your numbers are one page. Accomplishments' private half is
61
+ // Profile's "Just you" screen, so its old words still find the place.
62
+ { parent: 'Profile', gate: 'nav-profile', items: [
63
+ { label: 'Works', href: '/profile#works' },
64
+ { label: 'Activity', href: '/profile#activity' },
65
+ { label: 'Just you: reviews, karma, progress (Accomplishments)', href: '/profile#yours' },
65
66
  ] },
66
67
  { parent: 'Tasks', gate: 'nav-work', items: [
67
68
  { label: 'Ready', href: '/work#ready' },
@@ -110,10 +110,10 @@
110
110
 
111
111
  <div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
112
112
 
113
- <script src="/builders/dom-utils.js?v=2026-10-25-escape"></script>
114
- <script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
115
- <script src="/builders/craft-mode.js?v=2026-11-05-oversight"></script>
116
- <script src="/builders/shell.js?v=2026-11-05-oversight"></script>
113
+ <script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
114
+ <script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
115
+ <script src="/builders/craft-mode.js?v=2026-11-05-numbers"></script>
116
+ <script src="/builders/shell.js?v=2026-11-05-numbers"></script>
117
117
  <!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
118
118
  <script src="/builders/palette.js" defer></script>
119
119
  <!-- the shared markdown reader (window.OTBMdReader) — primer.js renders through