Repository navigation
Keep Experiment scope launches working across updates - #1985
Merged
Merged
Conversation
This was referenced Nov 11, 2026
Merged
Merged
Merged
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.
Summary
Keep an Experiment's original OOM wrapper available after an update replaces or removes the installed binary.
Confirmed cause:
std::env::current_exe()resolves to an install path ending in(deleted)after the running executable is unlinked. The proc link stays unresolved, so another process can execute the original wrapper even when the command was prepared before the update. Arm programs, arguments, environment, caps and OOM policy retain their existing behavior. The manual and architecture page now describe Experiment update safety.Closes #1498
Test seams: Experiment CLI with a copied running executable and the existing pass-through systemd launcher; Trial and Grader execution across install-path replacement/removal, including a scope prepared before replacement.
Evidence
Execution evidence
cargo test --test experiments update:: -- --nocapture— 0 passed, 3 failed. Replacement and removal stop the next Trial withArm Trial protocol failed (exit status: 127): …/installed/thirdshift (deleted): No such file or directory; the prepared command executes the replacement and exits 1.After: the same command — 3 passed, 0 failed. Each Experiment finishes all six Trials and its Graders; the replacement never runs, and Graders retain
oom_score_adj=1000.systemd-run --user --scopeprobe reproducedFailed to find executable … (deleted): No such file or directoryafter both rename-over replacement and removal./proc/<owning PID>/exeexecuted the original probe in both cases. No production agents or production Experiment were used.npm run docs --prefix site,npm run docs:check --prefix site,cargo fmt --all -- --check, andgit diff --checkpassed.PLAYWRIGHT_BROWSERS_PATH=/tmp/thirdshift-1498-browsers CARGO_BUILD_JOBS=3 NEXTEST_TEST_THREADS=3 RUST_TEST_THREADS=3 scripts/affected-tests refs/remotes/origin/mainpassed: 68 site checks (98.33 seconds) and the full Rust suite through thecargo testfallback (3963.46 seconds wall time, including compilation; test-target compilation took 5m 17s). The initialscripts/affected-tests mainselected unrelated changes because localmainwas 330 commits behind the review base and checked out in another worktree; it stopped at missing Go. The successful rerun used the requested remote main fixed point without moving that other worktree's branch.Visual evidence
Documentation wording at matching desktop and mobile viewports:
Manual — desktop 1440×900
Manual — mobile 390×844
Architecture — desktop 1440×900
Architecture — mobile 390×844
Review coverage
Independent review against
refs/remotes/origin/main(9712febb): Standards 0 findings, Spec 0 findings. Both reviewers read all eight changed files, including the generated manual directly. Unread changed files: none. Generated-output exclusions: none.Final reports and file lists:
.thirdshift-review-e95af0/standards.md,.thirdshift-review-e95af0/spec.md; counts insummary.json.Unaddressed findings
Standards
None.
Spec
None.
Security
None.
Security review outcome
No unaddressed introduced findings.
Merge Danger
Door: two-way
Revert restores the former launcher lookup; no stored data or protocol changes.
Blast Radius: scopes
The shared capped launcher serves Trials and code/model Graders. It requires the owning thirdshift process to remain alive, as it does while supervising their launches; existing caps and scope policies are preserved.
Built with codex codex-cli 0.166.0 · gpt-6.1-sol · xhigh