Repository navigation
fix(release): musl adapter stderr hygiene (dev twin) - #2679
Conversation
fix(release): make the Codex dogfood runners able to execute the real harness
The dogfood capability probe fails on any stderr byte. Two bootstrap sources inside the adapter violated that before the candidate ever ran: - docker run --pull=always re-resolves the digest-pinned manifest on EVERY invocation and writes pull progress to stderr — the workflow's pre-pull could never help. The pin is a digest, so pull-if-missing already guarantees exact bytes; drop the flag. - apk add fetches the package index over the network and can emit warnings to stderr; only the candidate binary's stderr is meaningful to the probe, so silence the bootstrap entirely (set -e still aborts on real apk failure). Run 30217058060: glibc, linux-arm64, and darwin dogfood all passed with the runner-env fixes; musl was the sole survivor, failing on exactly the pull-progress stderr.
|
Caution The consumer version of Gemini Code Assist on GitHub has been sunset. All code review activity has officially ceased. |
|
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: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
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 |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 59b228a1a1
ℹ️ About Codex in GitHub
Codex has been enabled to automatically 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 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
| # exact bytes; `--pull=always` would re-resolve the manifest on EVERY run and | ||
| # write pull progress to stderr, which the harness's stderr-strict capability | ||
| # probe treats as failure. The dogfood workflow pre-pulls the digest. | ||
| docker_args=(run --rm -i --security-opt no-new-privileges) |
There was a problem hiding this comment.
Pre-pull the image before the stderr-strict probe
On a clean GitHub-hosted runner where this digest is not cached, Docker's default pull-if-missing behavior still emits pull progress while this first adapter invocation is being captured. The codex-native-dogfood job in .github/workflows/release-publish.yml does not contain the pre-pull claimed by the comment—it resolves the adapter and immediately runs the harness—and verifyCapability rejects any stderr byte, so the musl release check still fails on a fresh runner. Pre-pull the digest in a workflow step outside the captured probe, or otherwise separate Docker bootstrap output from candidate stderr.
AGENTS.md reference: AGENTS.md:L43-L45
Useful? React with 👍 / 👎.
… runner-env steps)
…e open Review finding on the additive-lag self-heal: between closing the validated readonly handle and openDb's writable open, nothing pinned the path's identity — a racing substitution could route ensureSchema's DDL into a swapped file or symlink target, detected only after the write by the hardened reopen. Revalidate the exact ProjectDatabaseBinding at the last moment before the write open; the post-heal reopen still re-verifies binding and opened handle before any tool observes a healed database. Regression test pins the class: a binding whose database was substituted after capture is refused (null) and the substituted file is left untouched by any write-path open.
…filesystems The rm-and-recreate substitution let ext4 recycle the freed inode for the replacement file, so the binding identity legitimately matched again and the heal proceeded — the test passed on APFS (which never reuses inode numbers immediately) and failed on Linux CI. Create the substitute while the original still exists (guaranteed distinct inode), then rename it over the original: the realistic atomic-swap shape, deterministic on every filesystem.
Twin of the main-first PR from the same branch — see that PR for full rationale. Merging this after main lands fires the release.