singularity-forge/.plans
Jeremy McSpadden 1ea653b5fc refactor: TUI dashboard cleanup, dedup, and feature improvements (#931)
* refactor: TUI dashboard cleanup, dedup, and feature improvements

- Extract shared format-utils.ts: formatDuration, padRight, joinColumns,
  centerLine, fitColumns, sparkline, stripAnsi — eliminating 3× duplication
  across dashboard-overlay, visualizer-views, and auto-dashboard
- Use shared STATUS_GLYPH/STATUS_COLOR from ui.ts consistently across all
  overlay and view files instead of hardcoded Unicode glyphs
- Fix redundant dynamic import('node:fs') in visualizer-data.ts (statSync
  already imported at top level)
- Replace (entry as any) casts with proper SessionMessageEntry type narrowing
- Add mtime-based file content cache for visualizer data loader to avoid
  re-parsing unchanged roadmap/plan files on every refresh
- Increase visualizer refresh interval from 2s to 5s (with mtime cache,
  unchanged files are effectively free)
- Fix sparkline to use loop-based max instead of Math.max(...values) to
  avoid stack overflow on large arrays
- Add ETA/time-remaining estimate to progress widget and dashboard overlay
  based on average unit duration from metrics ledger
- Show warning glyph for budget-pressured units in completed units list
  (continueHereFired units now show ⚠ instead of ✓)
- Add terminal resize (SIGWINCH) handling to both overlays — invalidates
  cache and re-renders on window size change
- Fix dispose race in dashboard overlay close path — now calls dispose()
  before onClose() to prevent timer callbacks firing after teardown
- Add 23 unit tests for format-utils.ts (including 100k-element sparkline)
- Add 2 tests for estimateTimeRemaining
- Add source-contract tests for resize handler and shared imports

* fix: use STATUS_GLYPH.warning instead of STATUS_GLYPH.statusWarning

STATUS_GLYPH is keyed by ProgressStatus ("warning"), not by GLYPH
property name ("statusWarning"). Fixes typecheck failure in CI.
2026-03-17 14:02:26 -06:00
..
dynamic-model-discovery.md feat: dynamic model discovery & provider management UX (#581) 2026-03-16 06:23:18 -06:00
fix-high-cpu-process-lifecycle.md fix: reduce CPU usage on long auto-mode sessions (#921) 2026-03-17 13:58:14 -06:00
issue-125-provider-fallback.md feat: add cross-provider fallback when rate/quota limits are hit (#125) 2026-03-14 15:45:44 -05:00
issue-524-git2-migration.md feat: move git operations to Rust via git2 crate (#572) 2026-03-15 20:02:10 -06:00
issue-575-dynamic-model-routing.md feat: dynamic model routing for token consumption optimization (#579) 2026-03-16 07:53:53 -06:00
issue-672-parallel-milestone-orchestration.md feat: parallel milestone orchestration foundation (#672) 2026-03-16 20:32:10 -06:00
native-perf-optimizations.md feat: native perf optimizations — deriveState, JSONL, paths, parsing (#576) 2026-03-15 20:16:42 -06:00
preferences-wizard-completeness.md feat: dynamic model discovery & provider management UX (#581) 2026-03-16 06:23:18 -06:00
startup-performance.md Perf/gsd startup speed (#497) 2026-03-15 13:33:43 -06:00
tui-dashboard-cleanup.md refactor: TUI dashboard cleanup, dedup, and feature improvements (#931) 2026-03-17 14:02:26 -06:00