codeburn/app/renderer/components
iamtoruk 3317189dd6 fix: address adversarial review of the timeout watchdog (F1-F7)
F1 - `codeburn serve` lost an in-flight request's response when stdin closed
mid-flight: runStdioServe returned before its queue drained, and the explicit
process.exit(0) then hit runCaptured's monkeypatched exit, throwing ExitSignal
and exiting 1 with the frame never written. The finally now awaits the queue.

F2 - the SIGTERM rationale was false. armSignalCleanup unlinks the refresh lock
and re-raises; it publishes no partial cache, and a lock left by SIGKILL already
self-heals through the stale-pid takeover. SIGTERM-first is kept for the real
(smaller) benefit - a clean lock release instead of a takeover - and every
comment plus the CHANGELOG now says only that.

F3 - the cold gate had no exit. overviewWarmed only flips on success, so an
install that can never hydrate sat behind an indexing splash forever with no
error and no route to the CLI recovery. The cold claim now expires with the cold
window itself.

F4 - the real CLI does not heartbeat the way the demo did: a cold parse's
inter-provider cache save measured 31.6s of total silence, which a 45s window
survives only until the machine is 1.5x slower. Under CODEBURN_PROGRESS a
running parse now emits a keepalive every 10s regardless of phase, so silence
genuinely means stopped. Consumers that do not know the event ignore it.

F5 - the orphan-reap identity check matched any `cli.js` running `serve`. The
pidfile now records the exact argv and `ps -ww` must match it exactly.

F6 - bump() re-armed the watchdog after settle, leaving a timer finish() never
clears when a killed child's buffered output landed.

F7 - kill paths dropped the child from activeChildren before SIGTERM and the
SIGKILL backstop was unref'd, so a quit inside the 5s grace orphaned a child
that ignores SIGTERM. It now stays registered until it actually dies.

N8 - the silence test wrote its only byte at t~0, so it passed without the
re-arm. The byte now lands mid-window and the kill is asserted from it.
N9 - documented why mutations keep a plain total cap.
2026-08-22 09:58:59 -07:00
..
AboutModal.test.tsx fix(app): clean build stamp, splash without hash, About checks for updates 2026-07-17 14:30:00 -07:00
AboutModal.tsx app: Download button direct-downloads the update asset (#777) 2026-07-20 10:02:43 -07:00
ActivityHeatmap.test.tsx app,dash: render pre-history days as no data, not a currency zero (#765) 2026-07-20 08:03:24 -07:00
ActivityHeatmap.tsx app,dash: render pre-history days as no data, not a currency zero (#765) 2026-07-20 08:03:24 -07:00
CliErrorPanel.tsx fix(app): no-output watchdog replaces fixed timeouts; graceful kills; cold floor everywhere; orphan serve reaping 2026-08-22 09:22:38 -07:00
ConnectAffordance.tsx fix(app): quota connects via macOS keychain + Connect affordance 2026-07-16 06:20:44 -07:00
Dropdown.tsx feat(app): Claude config switcher (multi-account overview scope) 2026-07-16 03:06:05 -07:00
EmptyState.tsx polish(app): spacing scale, unified insets, shared banner classes, scrollbar cues 2026-07-16 04:02:21 -07:00
ErrorBoundary.test.tsx feat(app): error boundary so a crashing screen shows the error, not a blank 2026-07-11 14:33:16 -07:00
ErrorBoundary.tsx feat(app): error boundary so a crashing screen shows the error, not a blank 2026-07-11 14:33:16 -07:00
FlameMark.tsx feat(app): exact approved flame art everywhere 2026-07-16 06:10:22 -07:00
Hint.tsx feat(app): window chrome, sidebar nav, and Overview smoke view 2026-07-10 15:17:11 -07:00
ListRow.tsx feat(app): Sessions provider quick-filter + Spend project inline expand 2026-07-16 02:49:17 -07:00
Onboarding.test.tsx feat(app): refresh cadence, instant switching, cache coherence, telemetry v1 2026-07-16 11:47:05 -07:00
Onboarding.tsx fix: audit batch — prefetch one-shot, turn-anchored day bucketing, warm-path collapse 2026-07-16 15:37:03 -07:00
Panel.tsx polish(app): spacing scale, unified insets, shared banner classes, scrollbar cues 2026-07-16 04:02:21 -07:00
ProviderLogo.test.tsx fix(app): provider logos key on internal ids + monogram fallback 2026-07-16 09:27:46 -07:00
ProviderLogo.tsx fix(app): provider logos key on internal ids + monogram fallback 2026-07-16 09:27:46 -07:00
ProviderPop.tsx polish(app): shared empty states, type ladder, AA contrast, honest affordances, a11y semantics 2026-07-16 02:27:41 -07:00
Punchcard.tsx fix(app,dash): punchcard tooltip never crops; remove the menubar Workflow strip 2026-08-10 14:35:40 -07:00
RangeCalendar.tsx feat(app): working periods, detected-provider dropdown, drag-select date range 2026-07-11 09:14:54 -07:00
Sankey.tsx polish(app): shared empty states, type ladder, AA contrast, honest affordances, a11y semantics 2026-07-16 02:27:41 -07:00
SegTabs.tsx polish(app): shared empty states, type ladder, AA contrast, honest affordances, a11y semantics 2026-07-16 02:27:41 -07:00
Sidebar.test.tsx fix(desktop): make keyboard shortcuts work on Windows and Linux 2026-08-04 22:48:39 +03:00
Sidebar.tsx fix(desktop): make keyboard shortcuts work on Windows and Linux 2026-08-04 22:48:39 +03:00
Skeleton.test.tsx feat(app): motion layer (gsap) — count-ups, chart grow-in, section fade, skeletons, toasts 2026-07-16 04:39:09 -07:00
Skeleton.tsx feat(app): motion layer (gsap) — count-ups, chart grow-in, section fade, skeletons, toasts 2026-07-16 04:39:09 -07:00
Splash.test.tsx fix: hydration completeness markers, cold-only splash, honest switching, prefetch 2026-07-16 14:05:11 -07:00
Splash.tsx fix: address adversarial review of the timeout watchdog (F1-F7) 2026-08-22 09:58:59 -07:00
StackedBars.test.tsx app,dash: render pre-history days as no data, not a currency zero (#765) 2026-07-20 08:03:24 -07:00
StackedBars.tsx app,dash: render pre-history days as no data, not a currency zero (#765) 2026-07-20 08:03:24 -07:00
StaleBanner.test.tsx fix(app): accuracy batch A — provider scoping, honest chart axes, range threading, stale-error banner 2026-07-16 01:14:41 -07:00
StaleBanner.tsx polish(app): spacing scale, unified insets, shared banner classes, scrollbar cues 2026-07-16 04:02:21 -07:00
Stat.tsx polish(app): shared empty states, type ladder, AA contrast, honest affordances, a11y semantics 2026-07-16 02:27:41 -07:00
ToastHost.test.tsx feat(app): motion layer (gsap) — count-ups, chart grow-in, section fade, skeletons, toasts 2026-07-16 04:39:09 -07:00
ToastHost.tsx feat(app): motion layer (gsap) — count-ups, chart grow-in, section fade, skeletons, toasts 2026-07-16 04:39:09 -07:00
TopBar.tsx fix(clients): display CLI-computed values verbatim, align period windows across app/dash/menubar 2026-07-20 06:26:15 -07:00
UpdateBanner.test.tsx feat(app): update-available notifications 2026-07-17 04:58:13 -07:00
UpdateBanner.tsx app: Download button direct-downloads the update asset (#777) 2026-07-20 10:02:43 -07:00
Window.tsx feat(app): window chrome, sidebar nav, and Overview smoke view 2026-07-10 15:17:11 -07:00