Skip to content

1.39.0: staggered restores, CI performance gate, release notes - #54

Merged
writingdeveloper merged 5 commits into
mainfrom
fix/stagger-agent-starts
Oct 20, 2026
Merged

writingdeveloper merged 5 commits into
mainfrom
fix/stagger-agent-starts

Conversation

@writingdeveloper

Copy link
Copy Markdown
Owner

Summary

  • Staggered restores: launch restore, restore after update, Restore all and Update-all reopen start each agent only after the previous one finished starting. Measured: one claude --resume of a 133MB transcript peaks at 1.6GB / ~10 CPU-s; four at once 6.6GB / 88 CPU-s in 5s — the "other PC freezes 2–3 min" report (field log: ~8 sessions restored per reconnect, 31 offline periods, median 78s). Harness: launch gaps 48/49/26ms → 4.2s each.
  • CI performance gate (qa:perf-gate): fixture agent; idle animations/DOM churn, chrome churn while working, main-process stalls, long tasks. Each limit verified by injecting its regression.
  • Windows CI now also runs qa:images, qa:images-remote, qa:update, qa:restore-pacing.
  • 1.39.0 release notes + README.

Supersedes #53.

Test plan

  • Full local gates: unit 1,431, docs, maintenance, resilience, session-sync, audit, qa, images, images-remote, update, restore-pacing, perf-gate (3/3)
  • Windows CI journey job green

🤖 Generated with Claude Code

https://claude.ai/code/session_016NLGwiBY5uEivJqERQzcoY

writingdeveloper and others added 5 commits October 20, 2026 11:59
…n every push

qa:perf-gate drives a fixture agent through idle, working (two tiles repainting at 10fps) and a
20,000-line stream, and fails on what DevDeck has actually shipped before, in units that do not
depend on the runner: running CSS animations and DOM churn on an idle deck, DOM churn outside the
terminals while working, the main process's longest event-loop stall, and long UI tasks. Each limit
was checked against its regression injected on purpose:

  infinite CSS animation          -> idle running animations 1 (limit 0)
  sidebar render per PTY chunk    -> 8,395 mutations outside terminals (limit 400; normal 145)
  700ms sync block in main        -> stream main-process stall 710ms (limit 600; normal ~13)

The Windows journey job also runs qa:images, qa:images-remote and qa:update now, and gets 20 minutes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016NLGwiBY5uEivJqERQzcoY
…t finished starting

Restores were sequential in name only: each step returned as soon as the process existed, so eight
`claude --resume` startups ran at once. Measured with a 133MB transcript: one resume peaks at 1.6GB
and ~10 CPU-seconds; four at once peaked at 6.6GB and 88 CPU-seconds within five seconds, and each
kept ~1.3GB afterwards. The paired PC in the field log restores ~8 sessions after every reconnect
(offline periods: 31, median 78s), and has had transcripts past 500MB — every core and many GB at
once is the "other PC freezes for two or three minutes" report.

Launch restore, restore after an update, "Restore all" and the update-all reopen now wait for each
agent to finish starting (output arrived, then 1.5s quiet; or 6s of silence for an already-running
adopted session; at most 12s) before starting the next.

qa/restore-pacing.mjs: a fixture agent that draws for 2s while it boots. Before: launch gaps of
48, 49 and 26ms. After: 4.2s each.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016NLGwiBY5uEivJqERQzcoY
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016NLGwiBY5uEivJqERQzcoY
The perf gate waited for its fixture's marker in the VISIBLE rows, and a screen printed before the
terminal reached its final size scrolls it out of view — which staggered restores made routine. It
now reads each session's output buffer, and only the stream's end is required on screen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016NLGwiBY5uEivJqERQzcoY
A multi-line pwsh run step fails only on its last command's exit code, so an earlier harness could
fail without failing the step.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016NLGwiBY5uEivJqERQzcoY
@writingdeveloper
writingdeveloper merged commit 38c575a into main Oct 20, 2026
9 of 12 checks passed
@writingdeveloper
writingdeveloper deleted the fix/stagger-agent-starts branch October 20, 2026 19:26
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