fix(lanes): stop the stuck "waiting for your input" banner and idle status #1
Reference in New Issue
Block a user
Delete Branch "fix/lane-waiting-and-running-status"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Stop the stuck "waiting for your input" banner and idle status, and redesign theme color
Two lane-card symptoms, one source: touchLaneFromHook. needs_action was stamped on every Notification hook, including Claude Code's bare idle nudge ("Claude is waiting for your input"), which fires ~60s AFTER Stop. Nothing later arrives to clear it, so the card kept a permanent amber "needs you" while the user was simply not typing. The nudge now clears the flag instead of raising it - it proves the CLI is parked at an idle prompt. Permission/AskUserQuestion messages are unchanged. lane.status only moved through the dashboard run lifecycle (run_id), so a lane driven by `claude` in a terminal read "idle" for the whole time Claude was working in it. For lanes the dashboard did not launch, the turn hooks now mirror it: UserPromptSubmit/PreToolUse/PostToolUse -> running, Stop/SessionEnd/idle-nudge -> idle. SubagentStop is excluded (a subagent finishing is not the end of the turn) and provisioning/failed are never stomped. Side effect: classifyLiveness treats status=running as "expect live", so a turn with no hook for more than LANE_DEAD_SEC (300s) now shows the dead dot. That is the detector working as designed; raise LANE_DEAD_SEC if a long single Bash trips it.Adds a working Dark/Light toggle (next to the language switcher, same row as EN/VI) and re-themes the whole dashboard, not just the handful of components that already used semantic tokens. - Tailwind darkMode:"class" + CSS-variable color tokens (client/src/index.css, tailwind.config.js): surface.0-5, border/border-light, accent/accent-hover, fg.primary/secondary/muted, status.success/danger/warning. One class flip on <html> re-themes everything — no per-element dark: variant pairs. - useTheme() hook: localStorage-persisted, defaults to dark, no prefers-color-scheme fallback (client/src/hooks/useTheme.ts). - Mechanical, table-driven migration (scripts/migrate-color-tokens.mjs, scripts/tokenize-status-colors.mjs, scripts/darken-status-colors.mjs) of every raw neutral/gray/slate + emerald/red/amber Tailwind utility across client/src onto the new tokens, so every badge/button/component pulls the same shade per status/role instead of each picking its own. - Palette values are the literal Radix Colors (radix-ui.com/colors) scale constants — slate/blue/green/red/amber steps 1-12 — adopted after three rounds of hand-picked values that kept overshooting (flat, then too dark, then glaring); see docs/superpowers/specs/2026-07-31-color-redesign- dark-light-mode-design.md for the full history and role mapping. - PipelineMap: done/current/failed/passed-no-evidence/detected share one visual language (border + text + translucent wash of the same status color); `current` alone stays a solid accent fill, the one state that gets to look bolder ("you are here"). - LaneCard: removed the stage/kind/auto-stage chips that duplicated the Workspace lane-detail header already showing them. Categorical/decorative hues (violet, indigo, cyan, teal, sky, rose, pink, orange, yellow, and blue where it plays a role-coloring part e.g. message bubbles) are deliberately out of scope — collapsing those onto shared tokens would erase the distinction between different kinds of thing, not a status.