2026-07-29-hub-dashboard-ia.md markdown
218 lines 12.1 KB
Raw
sha256:700fafdd1afa490919f9515d660ca6e75456bcd5bb67513abcd8757a634c01f6 docs: record AIP-b SD-21 land (KN #308) Human 10 days ago

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-tab values: notes | suggested | activity | problem (or thin aliases that still call switchHubMainTab / loadProposals / loadActivity / loadNotes)
  • #btn-header-suggested behavior → 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

  • switchHubMainTab(name)notes|activity|suggested|problem
  • [data-tab="…"] and #tab-notes|#tab-activity|#tab-suggested|#tab-problem
  • loadProposals()#proposals-suggested / #proposals-problem; empty #empty-suggested-how-to
  • loadActivity()#proposals-activity, #empty-activity-goto-suggested
  • openProposal(id), openNote(path)
  • #btn-header-suggested, #btn-new-proposal, #proposal-filters-bar, proposal filter IDs
  • refreshNewProposalTabVisibility(), 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-guide
  • data-settings-tab / #settings-panel-*, #settings-tab-team, #settings-tab-vaults
  • openSettings(), 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 main without 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)

  1. Count badge on rail Review + header Review — integer of unfiltered proposed count only (not Activity; not the filtered list length).
  2. Review mode toolbar — hide note search/filters; show proposal filters + New proposal by default.
  3. Row density — path, source chip, pending-eval chip, relative time; keyboard ↑↓ Enter.
  4. Split view — selecting a Review row opens detail without losing list context (already true; ensure focus ring + “N of M”).
  5. Primary actions in detail first — Evaluate / Approve / Discard visually above long diffs.
  6. Pending evaluation filter chip one click from Review empty/full states when policy requires eval.

B. Vault mode

  1. Needs you banner — copy: “N proposals waiting in Review”; dismiss for session only (sessionStorage); never hide the rail badge.
  2. Search-first command bar — Meaning/Keyword + Search/Clear always; advanced filters collapsed until opened or active.
  3. Browse modes as segmented control under Vault only (List | Calendar) — move Overview → Insights (keep internal data-view="graph").

C. History mode

  1. Segmented control: Activity | Discarded inside History (one rail item).
  2. Default segment = Activity; remember last segment in localStorage.

D. Progressive disclosure

  1. Connect = openSettingsIntegrationsTab() (agents, MCP, credentials, cloud agent) — not buried only under Settings gear.
  2. Insights holds Overview charts + #consolidation-card (stop requiring Overview tab discovery).
  3. Keep Backup / Billing / Appearance / Team / Vaults inside Settings modal.

E. Language & hierarchy

  1. Global glossary in Hub chrome: Vault (notes), Review (queue), History (timeline + discarded).
  2. Avoid “Suggested”, “Problem”, “Graph” in user-facing Hub strings (internal data-tab / data-view values may stay).
  3. Empty Review state: one primary CTA (New proposal) + one secondary (How Review works).

F. Motion / polish (keep light)

  1. Rail active state: inset accent bar (not underline tabs).
  2. Badge pulse once when count increases (respect prefers-reduced-motion).
  3. 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-looppass
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.
File History 1 commit
sha256:700fafdd1afa490919f9515d660ca6e75456bcd5bb67513abcd8757a634c01f6 docs: record AIP-b SD-21 land (KN #308) Human 10 days ago