fix(control): isolate concurrent helper builds - #91
Conversation
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XbdCwWt1oUsGvybbqUxwJp
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Team Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c954d0feed
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
e839712
into
repair/pr85-helper-lifecycle-reconstruction
Finding
Codex exact-head finding on parent PR #90: "Serialize concurrent helper rebuilds"
Classification: CURRENT / P2
Affected parent head:
134b513e15a056d037cc51b794d72c1a9891a4b4Impact: supported concurrent provisioning (two gate processes, e.g.
npm run control+npm run cockpit:live) can make one launch fail because builders share destructive mutable compilation outputs. No security bypass; availability/deployability failure; fail-closed.Root cause
Concurrent
build.mjsinvocations shareddist/control/native/objand the compiler/helper output path — one builder couldrmSync/recreate the sharedobjor lock the shared exe path while another'scl.exewas mid-compile. The race was independently reproduced 3/3 before repair (one exit 0 + one exit 1 per round; final pair canonical).Repair invariant
NO TWO BUILDERS SHARE MUTABLE COMPILATION STATE.
Each builder:
mkdtempSync);/Feand/Fotarget the private workspace, cwd inside it);Canonical lifecycle invariant preserved:
Scope
Exactly two files:
tools/control-owner/build.mjstests/control/launch-lifecycle.test.tsOne commit:
c954d0feed8ff87f889e18e65ae439fec9830ac9Parent:
134b513e15a056d037cc51b794d72c1a9891a4b4Patch:
F0159E6766F9A5DFFFBA8EB7CC74FC5A53F70A6387140A00EFB0D4B85B86E244(13246 bytes)Validation
Fresh independent validation: PASS_PR90_CONCURRENT_REBUILD_FRESH_INDEPENDENT_VALIDATION
Evidence:
2a88a45eec8206d535a2d45a137f521a3ed75bed1f04001d52ab2f031dbf1951;FALSE_VALID_SET == EMPTYpreserved (truncate-every-byte + tamper-every-position matrix);git diff --checkPASS.Quarantine
This is a Draft stacked validation PR into PR #90's head branch (
repair/pr85-helper-lifecycle-reconstruction).It grants NO Ready authority and NO merge authority. PR #90 remains protected and unchanged until this child independently passes exact-head CI, review/evidence gates, Ready, post-Ready observation, and the human merge gate. Human merge authority preserved.
🤖 Generated with Claude Code
https://claude.ai/code/session_01XbdCwWt1oUsGvybbqUxwJp