Skip to content

feat(web): shared shell with one nav, a sourced status line and a /settings page - #829

Merged
unohee merged 1 commit into
mainfrom
claude/dashboard-shell
Oct 19, 2026
Merged

unohee merged 1 commit into
mainfrom
claude/dashboard-shell

Conversation

@unohee

@unohee unohee commented Oct 19, 2026 •

Copy link
Copy Markdown
Collaborator

Dashboard redesign, step 5 (common shell: distill → adapt). Follows #827 (harden) and #828 (PRODUCT/DESIGN/tokens).

What

  • web/static/js/shell.mjs renders brand (→ /), one nav order (Supervisor · Cockpit · Chat · Orchestration · Threads · More ▸ Usage, Warehouse, Settings), theme switch and a status line into every page's <header class="topbar" data-shell>.
  • GET /api/shell-status (src/support/webShellStatus.ts): link / daemon state + reason / provider / needs-you (pending human questions + NEEDS_HUMAN parks). In-process state only, polled every 15s.
  • 390px: nav on its own scrolling row with edge fades as the scroll cue; active item scrolled into view; active tab white on navy + 3px underline (≥ 4.5:1).
  • --topbar-h now follows the measured header height, so no layout sits under a wrapped header.
  • Web token form consolidated into /settings (removed from Usage and Warehouse). Apply reports the daemon's verdict; empty Apply is refused.
  • Supervisor (dashboardHtml.ts) mounts the same shell; its own migration is step 6.

Verification

  • tests/web/shell.test.ts, tests/web/settings.test.ts, src/support/webShellStatus.test.ts (new); tokens.test.ts now asserts every page mounts the shell and shell.mjs names every route.
  • scripts/check-dashboard-responsive.ts (now incl. /usage, /settings, and --topbar-h == header height): 80/80 PASS at 320/390/768/1024/1440 × light/dark.
  • lint / typecheck / build clean.

Note for later edits

--topbar-h must stay measured (ResizeObserver in mountShell). The header row count varies by width, page controls and even font-load timing (Barlow arriving widens text and can wrap page actions: observed 123px vs 167px for the same page at 390px). Reverting it to a constant reintroduces content under the header.

…ttings page

Every page now carries only `<header class="topbar" data-shell>` and mounts
web/static/js/shell.mjs, which renders the brand (linked to /), one nav order
(Supervisor, Cockpit, Chat, Orchestration, Threads, More: Usage, Warehouse,
Settings), the theme switch and a status line fed by GET /api/shell-status:
link, daemon state with its reason, provider, and what needs the operator
(open human questions + NEEDS_HUMAN parks, in timetable yellow).

- 390px: the nav scrolls on its own row with edge fades that show which side
  still has links; the active item is centred into view. Active tab is
  white on the navy band with a 3px underline.
- --topbar-h follows the measured header height (ResizeObserver), so layouts
  that reserve it no longer sit under a wrapped header.
- The web-token form moves out of Usage and Warehouse into /settings, which
  reports the daemon's verdict instead of "saved" and refuses an empty Apply.
- scripts/check-dashboard-responsive.ts covers /usage and /settings and
  asserts the reserved height equals the header.
@unohee
unohee merged commit 68447a4 into main Oct 19, 2026
7 checks passed
@unohee
unohee deleted the claude/dashboard-shell branch October 19, 2026 05:07
unohee added a commit that referenced this pull request Oct 19, 2026
…es, defined terms) (#832)

Redesign step 7, plus the first P1 from the 2026-10-19 audit of
/app, /chat and /orchestration.

- One time format: format.mjs gains formatClock / formatDateTime /
  formatHour (en-US, reader's zone). Chat and Orchestration printed
  "[오후 7:07:42]" through toLocaleTimeString(); Usage and Warehouse
  hard-coded ko-KR.
- Usage and Warehouse are in English, and Usage's 403 now points to
  Settings, where the token form lives since #829.
- Cockpit sidebar: sessions seeded from /api/work/sessions were grouped by
  their worktree's issue UUID because seed() skipped repoRootFromPath(); they
  now group by repository, and runs without one read "No repository
  recorded". Regression test verified to fail without the fix.
- Long ids (issue UUIDs, git cell keys) show short with the full value behind
  a Copy button (idChip.mjs); Threads uses it for related tasks and
  repositories.
- Orchestration stat chips and graph tiers, and Chat's CHAT/SYSTEM badges,
  say what they mean on hover.
- Cockpit footer: the /health dot was labelled "daemon" and shone green under
  a status line saying "dashboard only"; it is now "server", which is what it
  measures.
- Korean comments in supervisor.js translated.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant