Skip to content

test(ssh): unreaped-server test no longer loses its zombie fixture - #22427

Merged
juliusmarminge merged 1 commit into
mainfrom
fix/ssh-zombie-fixture-race
Oct 20, 2026
Merged

juliusmarminge merged 1 commit into
mainfrom
fix/ssh-zombie-fixture-race

Conversation

@juliusmarminge

Copy link
Copy Markdown
Member

tunnel.test.ts › "replaces a managed server that exited but was not reaped" flaked on main (run) with expected 1 to equal +0 and an empty message.

The fixture builds a zombie with sh -c "sleep 600 & echo $!; exec sleep 600" and kills the child as soon as it reads its pid. If the kill lands before the shell has exec'd into sleep, dash reaps the dead child itself, so no zombie forms and ps -p exits 1 with no output. Running that setup 1,600 times with eight copies in parallel lost the zombie 4 times.

Fix

Before killing the child, wait until ps -o comm= reports the parent as sleep (matched as *sleep for macOS, which prints the full path). With that wait, the same 1,600-run harness produced a zombie every time. The test passed 10 of 10 local runs.

🤖 Generated with Claude Code

The fixture killed the child before `sh -c "... exec sleep 600"` had
exec'd. Dash still reaps children until then, so a child killed in that
window never became a zombie and the test failed with an empty `ps`.
Wait for the parent to be `sleep` before killing the child.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Oct 20, 2026
@macroscopeapp

macroscopeapp Bot commented Oct 20, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 01a59b8

Macroscope's review found this PR approvable — This is a small, localized SSH test-fixture reliability change confined to ignored test paths. It does not modify production behavior, product defaults, or static-analysis configuration.

Notes:

  • No code objects were reviewed. Approvability was decided on eligibility alone.

You can add or adjust custom eligibility rules. Learn more.

@juliusmarminge
juliusmarminge enabled auto-merge (squash) October 20, 2026 17:53
@juliusmarminge
juliusmarminge merged commit 2893437 into main Oct 20, 2026
28 of 29 checks passed
@juliusmarminge
juliusmarminge deleted the fix/ssh-zombie-fixture-race branch October 20, 2026 17:54
@github-actions

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ℹ️ The exact PR base did not have a successful artifact. Baseline uses the latest successful main measurement shown below.

Provider Metric Main baseline This PR Impact PR ceiling
Codex Total thread wire 5.0 KiB 5.0 KiB 0 B (0.0%) 6.8 KiB ✅
Codex Thread snapshot wire 3.8 KiB 3.8 KiB 0 B (0.0%) 4.9 KiB ✅
Codex Live turn WebSocket wire 1.2 KiB 1.2 KiB 0 B (0.0%) 2.0 KiB ✅
Codex Live turn WebSocket decoded 20.9 KiB 20.9 KiB 0 B (0.0%) 29.3 KiB ✅
Codex Live turn messages 2 2 0 (0.0%) 8 ✅
Claude Total thread wire 5.0 KiB 5.0 KiB +7 B (+0.1%) 6.8 KiB ✅
Claude Thread snapshot wire 3.8 KiB 3.8 KiB 0 B (0.0%) 4.9 KiB ✅
Claude Live turn WebSocket wire 1.2 KiB 1.2 KiB +7 B (+0.6%) 2.0 KiB ✅
Claude Live turn WebSocket decoded 21.2 KiB 21.2 KiB 0 B (0.0%) 29.3 KiB ✅
Claude Live turn messages 2 2 0 (0.0%) 8 ✅

Baseline: 758d773 · PR result: 01a59b8 · Source CI: success

Scenario and decoded snapshot size

10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.

  • Codex decoded thread snapshot: 108.5 KiB
  • Claude decoded thread snapshot: 108.8 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Oct 21, 2026
## What's Changed
* fix(web): pinned threads' pin icon stays put on hover by @t3dotgg in pingdotgg/t3code#22303
* fix(web): show pointer cursors on changed-file controls by @UtkarshUsername in pingdotgg/t3code#22266
* fix(web): use the shared markdown scrollbar width by @UtkarshUsername in pingdotgg/t3code#22200
* revert: limit bars with many accounts no longer clip names to one letter (#19964) by @juliusmarminge in pingdotgg/t3code#22395
* fix(mobile): pin expo-modules-core so the release smoke patch stays in use by @Project516 in pingdotgg/t3code#22343
* fix(server): updates no longer keep every old runtime on disk by @juliusmarminge in pingdotgg/t3code#22253
* fix(mobile): chat chips match desktop and the composer again by @flamboh in pingdotgg/t3code#22169
* fix(web): normalize disabled terminal button opacity by @UtkarshUsername in pingdotgg/t3code#22389
* fix(contracts): settings save again when the writing style has default fields by @MatiasGadeberg in pingdotgg/t3code#22203
* fix(relay): run the relay Worker next to its database by @juliusmarminge in pingdotgg/t3code#22065
* test(web): disposable render helper and lint rule for browser tests by @juliusmarminge in pingdotgg/t3code#22187
* fix(mobile): use native sheet headers and toolbar filters by @juliusmarminge in pingdotgg/t3code#22390
* test(ssh): unreaped-server test no longer loses its zombie fixture by @juliusmarminge in pingdotgg/t3code#22427
* test(web): require-disposable-render is now an error by @juliusmarminge in pingdotgg/t3code#22410
* test(web): migrate the last .ts browser tests and stop wrapping userEvent in act by @juliusmarminge in pingdotgg/t3code#22424
* fix(web,mobile): Limits bars show the even-pace mark as a tick in a gap by @juliusmarminge in pingdotgg/t3code#22408
* test(web): pooled Limits segments narrower than 6px draw no pace mark; fixture README by @juliusmarminge in pingdotgg/t3code#22453
* fix(mobile): the composer stays one row until the draft wraps by @juliusmarminge in pingdotgg/t3code#20812
* fix(web): restore left-aligned markdown table cells by @t3-code[bot] in pingdotgg/t3code#22482
* feat(scheduled-tasks): event filters for webhook deliveries by @juliusmarminge in pingdotgg/t3code#22194
* fix(mobile): prevent update checker from crashing iOS at launch by @juliusmarminge in pingdotgg/t3code#22488
* feat(scheduled-tasks): replay dedupe and coalescing for webhook deliveries by @juliusmarminge in pingdotgg/t3code#22234
* ci(release): Make Windows arm64 CI job 50% faster by @jahands in pingdotgg/t3code#22428
* ci(release): Windows arm64 verify no longer runs the crashing ARM PowerShell by @t3dotgg in pingdotgg/t3code#22494
* refactor(source-control): GitCafe creates repositories and pull requests over REST by @juliusmarminge in pingdotgg/t3code#22495
* test(web): fix release browser test failures by @t3dotgg in pingdotgg/t3code#22508
* fix(mobile): connecting an environment no longer crashes the header by @juliusmarminge in pingdotgg/t3code#22521
* fix(mobile): folded Back clears the detail route before the next selection by @juliusmarminge in pingdotgg/t3code#22526
* ci(release): release tests stop timing out and finish in about 5 minutes by @t3dotgg in pingdotgg/t3code#22524

## New Contributors
* @MatiasGadeberg made their first contribution in pingdotgg/t3code#22203
* @jahands made their first contribution in pingdotgg/t3code#22428

**Full Changelog**: pingdotgg/t3code@v0.1.1-nightly.20261020.3411...v0.1.1-nightly.20261020.3438

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.1.1-nightly.20261020.3438
github-actions Bot added a commit to davidvanderklay/t3code-flake that referenced this pull request Oct 21, 2026
## What's Changed
* fix(web): pinned threads' pin icon stays put on hover by @t3dotgg in pingdotgg/t3code#22303
* fix(web): show pointer cursors on changed-file controls by @UtkarshUsername in pingdotgg/t3code#22266
* fix(web): use the shared markdown scrollbar width by @UtkarshUsername in pingdotgg/t3code#22200
* revert: limit bars with many accounts no longer clip names to one letter (#19964) by @juliusmarminge in pingdotgg/t3code#22395
* fix(mobile): pin expo-modules-core so the release smoke patch stays in use by @Project516 in pingdotgg/t3code#22343
* fix(server): updates no longer keep every old runtime on disk by @juliusmarminge in pingdotgg/t3code#22253
* fix(mobile): chat chips match desktop and the composer again by @flamboh in pingdotgg/t3code#22169
* fix(web): normalize disabled terminal button opacity by @UtkarshUsername in pingdotgg/t3code#22389
* fix(contracts): settings save again when the writing style has default fields by @MatiasGadeberg in pingdotgg/t3code#22203
* fix(relay): run the relay Worker next to its database by @juliusmarminge in pingdotgg/t3code#22065
* test(web): disposable render helper and lint rule for browser tests by @juliusmarminge in pingdotgg/t3code#22187
* fix(mobile): use native sheet headers and toolbar filters by @juliusmarminge in pingdotgg/t3code#22390
* test(ssh): unreaped-server test no longer loses its zombie fixture by @juliusmarminge in pingdotgg/t3code#22427
* test(web): require-disposable-render is now an error by @juliusmarminge in pingdotgg/t3code#22410
* test(web): migrate the last .ts browser tests and stop wrapping userEvent in act by @juliusmarminge in pingdotgg/t3code#22424
* fix(web,mobile): Limits bars show the even-pace mark as a tick in a gap by @juliusmarminge in pingdotgg/t3code#22408
* test(web): pooled Limits segments narrower than 6px draw no pace mark; fixture README by @juliusmarminge in pingdotgg/t3code#22453
* fix(mobile): the composer stays one row until the draft wraps by @juliusmarminge in pingdotgg/t3code#20812
* fix(web): restore left-aligned markdown table cells by @t3-code[bot] in pingdotgg/t3code#22482
* feat(scheduled-tasks): event filters for webhook deliveries by @juliusmarminge in pingdotgg/t3code#22194
* fix(mobile): prevent update checker from crashing iOS at launch by @juliusmarminge in pingdotgg/t3code#22488
* feat(scheduled-tasks): replay dedupe and coalescing for webhook deliveries by @juliusmarminge in pingdotgg/t3code#22234
* ci(release): Make Windows arm64 CI job 50% faster by @jahands in pingdotgg/t3code#22428
* ci(release): Windows arm64 verify no longer runs the crashing ARM PowerShell by @t3dotgg in pingdotgg/t3code#22494
* refactor(source-control): GitCafe creates repositories and pull requests over REST by @juliusmarminge in pingdotgg/t3code#22495
* test(web): fix release browser test failures by @t3dotgg in pingdotgg/t3code#22508
* fix(mobile): connecting an environment no longer crashes the header by @juliusmarminge in pingdotgg/t3code#22521
* fix(mobile): folded Back clears the detail route before the next selection by @juliusmarminge in pingdotgg/t3code#22526
* ci(release): release tests stop timing out and finish in about 5 minutes by @t3dotgg in pingdotgg/t3code#22524

## New Contributors
* @MatiasGadeberg made their first contribution in pingdotgg/t3code#22203
* @jahands made their first contribution in pingdotgg/t3code#22428

**Full Changelog**: pingdotgg/t3code@v0.1.1-nightly.20261020.3411...v0.1.1-nightly.20261020.3438

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.1.1-nightly.20261020.3438
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:S 10-29 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant