Side check — Hub dashboard IA (signed-in UX)
Date: 2026-07-29
Kind: Hub UI lane freeze (Check OK honesty path)
Branch: feat/hub-dashboard-ia
Lane docs (use these, not product Overseer):
docs/HUB-UI-ROADMAP.md · docs/HUB-UI-HANDOVER.md
Honesty: same Freeze-Contract + build-verification path as roadmap phases
Model for freeze review: Thinking / thinking-high
Model for build: Auto (only after freeze pass)
Freeze-contract declaration
phase: check-ok-hub-dashboard-ia
outputs:
- id: side-check
path: docs/reviews/2026-07-29-hub-dashboard-ia.md
frozen: true
frozen_inputs: []
review_stamp:
reviewed_at: '2026-07-29T13:12:07Z'
verdict: pass
reviewer_mode: agent
reviewer_model: thinking-high
reviewer_provider: local
kit_version: 0.1.0
artifact_digest: sha256:c65a3274d67115079f6cb72d5a1f5c494b2cec5f4b712f6c503344641e9138dd
tier3_gates:
- T1 merge to Muse main or muse-mirror → GitHub main (SD-14)
- T2 any change to proposal API contracts, roles, or approve/discard authorization
Operator decisions (ratified 2026-07-29)
| Decision | Choice |
|---|---|
| Queue name | Review (retire user-facing “Suggested”) |
| Discarded placement | Under History (not top-level rail) |
| Vault urgency | Needs you banner when proposed count > 0 → opens Review |
| Branch | Clean feat/hub-dashboard-ia from current main |
Scope — signed-in Hub only
Rework the logged-in Hub shell (web/hub/index.html, web/hub/hub.css, web/hub/hub.js and related copy in onboarding / How to use) so navigation matches product mental models: vault browsing vs agent/human proposal review.
Target information architecture
Left rail (primary)
Vault → today’s Notes (list / calendar; search lives here)
Review (N) → proposed queue (data-tab=suggested; badge = unfiltered proposed count)
History → segmented: Activity | Discarded
Left rail (secondary / footer)
Insights → today’s Overview (data-view=graph / #notes-view-graph) + #consolidation-card
Import → existing #modal-import
Connect → openSettingsIntegrationsTab() (data-settings-tab=integrations)
Settings
Help → How to use (#modal-how-to-use / #btn-how-to-use)
Vault home (when proposed > 0)
“Needs you” banner → switchHubMainTab('suggested') / Review mode
Must preserve (non-negotiable)
- Internal
data-tabvalues:notes | suggested | activity | problem(or thin aliases that still callswitchHubMainTab/loadProposals/loadActivity/loadNotes) #btn-header-suggestedbehavior → Review (switchHubMainTab('suggested'))- Proposal create / evaluate / approve / discard / enrich semantics and RBAC
- All Settings tabs and How to use content (may relocate entry points; do not delete features)
- Critical IDs / hooks (inventory below) — do not rename or remove without an explicit migration note in this freeze
Critical IDs / hooks inventory
Navigation / lists
switchHubMainTab(name)—notes|activity|suggested|problem[data-tab="…"]and#tab-notes|#tab-activity|#tab-suggested|#tab-problemloadProposals()→#proposals-suggested/#proposals-problem; empty#empty-suggested-how-toloadActivity()→#proposals-activity,#empty-activity-goto-suggestedopenProposal(id),openNote(path)#btn-header-suggested,#btn-new-proposal,#proposal-filters-bar, proposal filter IDsrefreshNewProposalTabVisibility(),setProposalFiltersBarVisible()- Browse:
[data-view="list|calendar|graph"],#hub-list-sort,#notes-view-graph,#dashboard-cards
Shell / auth
#main,#login-required,#hub-auth-buttons,#vault-switcher#btn-new-note,#btn-import,#btn-settings,#btn-how-to-use,#btn-logout
Detail
#detail-panel,#detail-title,#detail-body,#detail-actions#btn-copy-path,#btn-detail-copy-body,#detail-close,[data-hub-detail-close]- Proposal:
#proposal-eval-*,#proposal-waiver-reason,#proposal-open-note-btn,#proposal-eval-save - Note edit:
#detail-edit-*
Modals / settings / howto
#modal-create,#modal-import,#modal-create-proposal,#modal-onboarding,#modal-settings,#modal-how-to-use,#modal-projects-help,#modal-integ-guidedata-settings-tab/#settings-panel-*,#settings-tab-team,#settings-tab-vaultsopenSettings(),openSettingsIntegrationsTab(),openSettingsBillingTab(),openSettingsConsolidationTab()data-how-to-tab/#how-to-panel-*- Consolidation:
#consolidation-card,#btn-consol-now|#btn-consol-history|#btn-consol-settings - Search/index:
#search-query,#search-mode,#btn-search,#btn-clear-search,#btn-apply-filters,#btn-reindex,#hub-index-status,#browse-toolbar - Empty vault:
#hub-empty-vault-strip,#btn-empty-strip-wizard,#btn-empty-strip-getting-started - Onboarding:
#onboarding-step-body,#btn-onboarding-next|back|skip
Globals often set from settings payload
window.__hubUserRole, __hubProposalEvaluationRequired, __hubProposalReviewHints, __hubProposalEnrich, __hubEvaluatorMayApprove, __hubProposalRubricItems
User-facing rename (required)
Every user-visible string that says Suggested for the proposal queue becomes Review, including:
- Rail / header labels (already partially “Review” on experimental branch; main may still say Suggested)
- Empty states (
empty-state-suggested, Activity “Open Suggested tab”) - Onboarding step “Proposals and the Suggested queue”
- How to use / search-key copy where it names the Hub tab
- Docs links in Hub UI only (repo markdown docs can follow in same PR if touched)
Internal IDs (suggested, proposals-suggested) may remain for stability unless a follow-up migration is explicit. Path-typo helpers that say “suggested path/slug” are out of scope (not the proposal queue).
Fail-closed / non-goals
- No change to proposal API contracts, roles, or approve/discard authorization
- No mega-menu of every Settings subsection in the rail
- No React rewrite in v1 of this freeze
- No merge to
mainwithout Tier 3 - Landing marketing page out of scope unless copy must say Review for Hub consistency
Expert UX recommendations (beyond operator decisions)
These are in scope as recommended defaults for Auto unless the operator strikes them before freeze review pass. Phase ownership is in Implementation phases below — every numbered item maps to a build step.
A. Review inbox (highest leverage)
- Count badge on rail Review + header Review — integer of unfiltered
proposedcount only (not Activity; not the filtered list length). - Review mode toolbar — hide note search/filters; show proposal filters + New proposal by default.
- Row density — path, source chip, pending-eval chip, relative time; keyboard ↑↓ Enter.
- Split view — selecting a Review row opens detail without losing list context (already true; ensure focus ring + “N of M”).
- Primary actions in detail first — Evaluate / Approve / Discard visually above long diffs.
- Pending evaluation filter chip one click from Review empty/full states when policy requires eval.
B. Vault mode
- Needs you banner — copy: “N proposals waiting in Review”; dismiss for session only (
sessionStorage); never hide the rail badge. - Search-first command bar — Meaning/Keyword + Search/Clear always; advanced filters collapsed until opened or active.
- Browse modes as segmented control under Vault only (List | Calendar) — move Overview → Insights (keep internal
data-view="graph").
C. History mode
- Segmented control: Activity | Discarded inside History (one rail item).
- Default segment = Activity; remember last segment in
localStorage.
D. Progressive disclosure
- Connect =
openSettingsIntegrationsTab()(agents, MCP, credentials, cloud agent) — not buried only under Settings gear. - Insights holds Overview charts +
#consolidation-card(stop requiring Overview tab discovery). - Keep Backup / Billing / Appearance / Team / Vaults inside Settings modal.
E. Language & hierarchy
- Global glossary in Hub chrome: Vault (notes), Review (queue), History (timeline + discarded).
- Avoid “Suggested”, “Problem”, “Graph” in user-facing Hub strings (internal
data-tab/data-viewvalues may stay). - Empty Review state: one primary CTA (New proposal) + one secondary (How Review works).
F. Motion / polish (keep light)
- Rail active state: inset accent bar (not underline tabs).
- Badge pulse once when count increases (respect
prefers-reduced-motion). - Mobile: bottom nav = Vault | Review(N) | History | More (Import/Connect/Settings/Help).
G. Explicitly deferred (not v1)
- Attestation interactive UI
- Full kanban for proposals
- AI summary of the Review queue
- Drag-and-drop approve
- Redesign of Settings internals (except deep-links)
Ground-truth edge
Downstream Auto may treat this document as ground truth for Hub shell IA without re-deriving operator decisions. Session control for this work is HUB-UI-ROADMAP.md + HUB-UI-HANDOVER.md, not the product OVERSEER-HANDOVER.md / Scooling baton.
Test matrix (seven tiers)
| Tier | Expectation |
|---|---|
| unit | Label map Review; History segment helpers; badge = unfiltered proposed count (independent of active list filters) |
| integration | switchHubMainTab('suggested') still loads #proposals-suggested; Discarded via History segment → problem; Connect calls openSettingsIntegrationsTab() |
| e2e (static contract) | Rail order Vault → Review → History; Needs-you banner markup + target; no user-facing “Suggested” tab/queue label in web/hub/ |
| stress | Badge update safe when proposed count is 0–100 |
| data-integrity | Tab data-tab values and critical IDs unchanged; proposal status filters unchanged |
| performance | Advanced filters default-collapsed on Vault; Review does not mount note filter row |
| security | No new inline handlers with unsanitized HTML; RBAC for Approve/Discard unchanged; no secrets in UI |
Every freeze-review finding MUST cite file+line.
Implementation phases (after freeze pass)
| Step | Model | Deliverable | Expert items |
|---|---|---|---|
| HUB-DASH-IA-a | Thinking | This freeze + /freeze-review-loop → pass |
— |
| HUB-DASH-IA-b | Auto | Shell: left rail, History segments, Needs-you, Review rename, badge, Connect/Import/Help/Settings rail entries, rail accent | 1, 7, 9 (Vault List|Calendar only), 10–12, 14–16, 18–19 |
| HUB-DASH-IA-c | Auto | Review inbox toolbar + row/detail polish; Vault search progressive disclosure; Insights (= Overview + consolidation) | 2–6, 8, 13, 17 |
| HUB-DASH-IA-d | Auto | Mobile bottom nav; onboarding/How-to copy sync; seven-tier green + /build-verification-review → pass |
20 + copy/BV |
Review record
| Round | Reviewer | Verdict | Resolution |
|---|---|---|---|
| — | — | pending | Operator decisions recorded; awaiting freeze-review |
| 1 | Freeze-review loop (thinking-high) | findings | F1 …ia.md:61 completeness — “inventory” cited but absent → embed Critical IDs. F2 …ia.md:141 consistency — badge “list length” vs unfiltered proposed → align matrix + expert. F3 …ia.md:151-158 completeness — expert A3–A5 / F18–F19 unmapped to phases → phase ownership column. F4 …ia.md:47 completeness — Connect deep-link unnamed → openSettingsIntegrationsTab(). F5 …ia.md:41 consistency — “today’s Suggested” vs rename → “proposed queue (data-tab=suggested)”. Fixes applied. |
| 2 | Freeze-review loop (thinking-high) | findings | F6 …ia.md:98 completeness — Vault search IDs incomplete for item 8 → add #search-mode, #btn-apply-filters, #browse-toolbar. Fix applied. |
| 3 | Freeze-review loop (thinking-high) | pass | C1–C8 clear; mechanical ChecklistEngine (kit local provider heuristics) 0 findings; semantic pass. review_stamp written. Auto may start HUB-DASH-IA-b. |