feat(dashboard,tui): consolidate 17 dashboard tabs → 9, 9 TUI tabs → 7 (#2627)#2641
Merged
rysweet merged 2 commits intoJul 6, 2026
Conversation
61189e9 to
a6dc8ee
Compare
#2627) The dashboard and TUI had accumulated too many tabs with adjacent/overlapping purposes. Consolidate both surfaces onto a single shared 9-tab taxonomy (dashboard) / 7-tab subset (TUI). No data is lost — every former standalone tab now lives as a labelled sub-section (<h2 class="subsection">) inside its parent tab, and every retired top-level slug keeps working as a deep-link alias. Canonical tabs: Overview, Goals, Activity, Workers, Pull Requests, Resources, Chat, Overseer, Journal. The TUI mirrors the shared names/order and renders the seven tabs whose data exists in the terminal (it omits the web-only Pull Requests and Resources). Overseer and Journal are carried through unchanged. Dashboard: - tab_meta.rs: TAB_METADATA 17 → 9 canonical entries. - part_00/part_01 HTML: 17 tab-content panels merged into 9, absorbed <h1>s demoted to <h2 class="subsection">, scroll anchors added for retired slugs. - JS: single activateTab/runTabFetches dispatcher fires every sub-section's fetches per parent tab; TAB_ALIASES allowlist + resolveHashTab() map retired slugs to their parent tab, validate location.hash against ^[a-z-]+$, and fall back to Overview with no DOM injection. openAgentLog() now targets Workers. TUI: - app.rs enum Tab / ALL_TABS / label / from_key (1–7) / number → 7 tabs; Meeting→Chat, Engineers→Workers, Stats/Status folded into Overview. - overview.rs stacks Summary/Health/Stats panels; meeting.rs→chat.rs, engineers.rs→workers.rs; stats.rs/status.rs removed; ui.rs/mod.rs/main.rs updated. Tests: tab_meta, routes_a/b, TUI app.rs, the Python tab-identity smoke test, and the Playwright specs (logs/thinking/workboard/terminal/pull-requests) all updated for the new tab set. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…set (#2627) overview.spec.ts asserted >=13 tabs with the old tab labels, and dashboard-audit.spec.ts asserted >=11 — both predate the consolidation. Update to the nine canonical tabs (Overview, Goals, Activity, Workers, Pull Requests, Resources, Chat, Overseer, Journal). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
a6dc8ee to
e03381a
Compare
📊 Coverage Summary
Coverage data from CI run. Test files matching |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
The dashboard (and TUI) had accumulated too many tabs with adjacent/overlapping purposes. This PR inventories every tab, proposes a consolidation, and implements it — collapsing the dashboard from 17 → 9 tabs and the TUI from 9 → 7, onto a single shared taxonomy. No data is lost: every former standalone tab becomes a labelled sub-section (
<h2 class="subsection">) inside its parent tab, and every retired top-level slug keeps working as a deep-link alias.Closes #2627.
Inventory (before)
Dashboard (17): overview, goals, traces, logs, processes, memory, costs, chat, workboard, thinking, brain-failures, merge-decisions, pr-readiness, terminal, overseer, status, journal.
TUI (9): Overview, Goals, Engineers, Activity, Meeting, Stats, Status, Overseer, Journal.
Proposal → consolidated taxonomy
Nine canonical dashboard tabs; the TUI mirrors the same names/order and renders the seven whose data exists in the terminal (it omits the web-only Pull Requests and Resources — adding those would be new feature work, not consolidation). Overseer and Journal are owned by separate, recently-merged features and are carried through unchanged.
1)2)3)4)5)6)7)Rationale
Data preservation & deep-links
Absorbed panels keep their exact markup and element ids; only the wrapping tab changed and their old
<h1 class="page-h1">became<h2 class="subsection">(so each tab still owns exactly one page<h1>).A client-side
TAB_ALIASESallowlist maps every retired slug to its parent tab.resolveHashTab()validateslocation.hashagainst^[a-z-]+$, resolves the alias, scrolls to asection-<slug>anchor, and falls back to Overview on any unknown/malformed hash — the hash is never concatenated into a DOM selector, so a crafted#hashcan't inject markup.#status → Overview,#workboard → Goals,#logs|#traces|#thinking|#brain-failures → Activity,#processes|#terminal → Workers,#merge-decisions|#pr-readiness → Pull Requests,#memory|#costs → Resources.Concurrency
Rebased onto the latest
origin/main, which already integrates the Journal refresh (#2618) and the enhanced Overseer detail (#2616/#2620). The consolidation keeps both as standalone tabs, untouched. Designed to merge last; the coordinated tab-registration files aretab_meta.rs,index_html/part_00.rs/part_01.rs, and the TUIapp.rs/tabs/mod.rs.Tests
tests_tab_meta.rs(canonical taxonomy, no retired top-level slugs, exactly nine page-h1s, sub-section headers,TAB_ALIASES),tests_routes_a/b.rs, TUIapp.rs(ALL_TABS == 7, digits 1–7). Fullcargo test --all-featuresgreen;cargo clippy --all-targets --all-features -- -D warningsclean;cargo fmtclean.test_tab_clarity.py): nine canonical slugs, retired-slug deep links resolve to their parent, unknown hash → Overview with no injection.The durable tab taxonomy and its invariants are documented in
docs/dashboard.md(Tab Identity Contract + Canonical tab taxonomy + Deep links). No point-in-time snapshot doc is committed.