Repository navigation
Fix the ownerless main CI reds; Linux-only CI - #3231
Merged
Merged
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013ejYrMLnLWah8wCDDcb57V
- Child launches: test_carry and test_installer_route_lifetime added raw Popen launches since the guard last fell; both now go through SpawnedProcess.launch (its identity replaces the second capture), and RAW_LAUNCHES falls to 32. - Failed readback published: 8455dc8 moved the ledger's fsync and readback out of publishing_changes, so a write whose readback failed still announced goal_attempts.changed. StoreWriter.transaction now takes a committed hook that runs before the publish; GoalAttemptStore._change passes its attest there, and a raise announces nothing. - Native held send: b411b9a made PublishingTool refuse a held bus on purpose (test_connector pins the refusal); the native ThreadCaller case in test_held_sends pinned the old wait and is deleted. - Evidence header: b702b7a typed SessionEntry.cwd as ReportedText; the test compares the typed value. - Rehearsal worker crash: the one installed_home test without the 280 s mark paid the private runtime build inside the 60 s default and pytest-timeout's thread method killed the xdist worker. The module declares the budget once; the five per-test copies are deleted. - End-to-end fork crash: since c2606af the fork verb really runs, and it boots Pi twice (the --model catalog, then the thread). The catalog child had 10 s against a 6-7 s idle boot, so a loaded host timed out; CATALOG_TIMEOUT is 30. The module declares a 180 s budget and each CLI child 60 s. - ci.yml runs Linux only; the macOS matrix leg and its step are deleted. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013ejYrMLnLWah8wCDDcb57V
Main's test_a_bridge_that_dies_during_pause_counts_as_stopped added a raw Popen beside its second ProcessIdentity.capture; SpawnedProcess.launch owns the child and its identity, and the guard holds at 32. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013ejYrMLnLWah8wCDDcb57V
Platform.launch always took pass_fds, but SpawnedProcess.launching handed it (), so main's exec-adoption test in test_store_guards fell back to a raw Popen to pass its held claim descriptor. launching now takes pass_fds; the test launches through it, its hand-written kill/communicate cleanup is deleted, and the guard holds at 32. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013ejYrMLnLWah8wCDDcb57V
trissim
marked this pull request as ready for review
October 25, 2026 05:03
trissim
enabled auto-merge
October 25, 2026 05:03
There was a problem hiding this comment.
Copilot was unable to review this pull request because the user who requested the review has insufficient remaining quota.
An organization owner can choose the repository organization as the billing source for reviews requested by members with a paid Copilot license. Learn about Copilot code review billing.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Post-merge ci.yml failed 25 of 25 runs on main (run 40159640144: 9 failed, 3927 passed). This PR fixes the six reds nobody owned and makes CI Linux-only. The double debt_ratchet import (#3170) and the two reds in #3229 belonged to other PRs, so this one leaves them alone.
test_raw_child_launches_in_tools_and_tests_only_fallPopenlaunches were added since the guard last fell: test_carry, test_installer_route_lifetime and, on main during this PR, test_install_session_bridge. A fourth (test_store_guards) also landed during this PR, becauseSpawnedProcess.launchinghard-codedpass_fds=(), child_process.py:1865.SpawnedProcess.launch, whose.identityreplaces the secondProcessIdentity.capture.launchingtakespass_fds. The hand-written kill/communicate cleanup is deleted.RAW_LAUNCHESgoes from 33 to 32.test_private_failed_readback_does_not_publishpublishing_changes. A write whose readback failed still touchedgoal_attempts.changed.StoreWriter.transactiontakes acommittedhook that runs before the publish.GoalAttemptStore._changepasses its attest step there, so a raise announces nothing.test_native_thread_caller_waits_then_publishes_oncePublishingTool.applyrefuse a held bus on purpose: a wait in the connector's worker would hold up the connector's stop.test_connector::test_publishing_tool_held_mid_call_refuses_at_oncechecks that refusal. Not a leak from a live bus:held_busbuilds its ownwire(tmp_path).test_original_header_preserves_project_and_fork_lineageSessionEntry.cwdasReportedText. The path is identical.ReportedText(raw["cwd"]).test_runtime_producer_digests_ignore_foreign_source(gw3 crashed)installed_hometest without@pytest.mark.timeout(280). On a cold worker it pays for the private runtime build inside the 60 s default, and pytest-timeout's thread method then kills the xdist worker. Locally it took 67 s.pytestmark = pytest.mark.timeout(280)is declared once for the module. The five per-test copies are deleted.test_fork_send_receive_respond(gw1 crashed)forkverb really runs, and it boots Pi twice: once for the--modelcatalog (GetAvailableModels, cli_commands.py:2282), then for the thread.CATALOG_TIMEOUT = 10was set against an idle 6-7 s boot (py-spy samples), so on a loaded host it times out withNativePiUnavailable. The module's 30-65 s runtime also blew the 60 s default.CATALOG_TIMEOUT = 30. The module declares 180 s, and each CLI child gets 60 s.os: [ubuntu-latest, macos-latest]and the macOS-only test step are deleted.Still open, owner not yet assigned:
forkboots Pi twice, the first time only to list models. RaisingCATALOG_TIMEOUTstops the timeouts, but the structural fix is to validate--modelagainst the thread's own boot, or against a catalog cached at prepare.Proof (local,
-p no:xdist,PYTHONPATH=src, on the merged tree)Deleted
route_holderhelper.timeout(280)copies.Assumed
TimeoutErrorlocally, but not the crash under xdist itself.🤖 Generated with Claude Code
https://claude.ai/code/session_013ejYrMLnLWah8wCDDcb57V