Fix: retain writer authority through reader-fence test setup (#174) - #175
Conversation
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 59 minutes. View limit detailsLimit details: You’ve used the included review currently available. Review configuration: ⚙️ Run configuration
📒 Files selected for processing (7)
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 |
Code Lawyer finding
@codex This is static receipt formatting, not a runtime locking defect. No runtime assertion is appropriate for this fix. |
|
To use Codex here, create an environment for this repo. |
Hosted infrastructure failure preservedExact head Re-executing this failed infrastructure job at the same SHA is required to obtain its missing validation result; it is not acceptance of a flaky test or a retry of the earlier |
Independent exact-head review: Keep PR #175 / issue #174Reviewed head: This is the authorized independent Codex review under the agy-review and Code Lawyer protocols. All source inspection is read-only. No host Rust tests, mutation, source editing, publishing, configuration change, fetch, merge or delegation was performed. Only this report was written. The explicit read-only task overrides the skill's ordinary fetch/publication workflow. Clean status and exact local/remote head/base were verified; the final head was reconfirmed after inspection. Findings and dispositionNo actionable runtime or evidence defect remains. The fix keeps actual migration-owned writer authority through fixture handoff and collector preparation, eliminating the unnecessary close/reopen window. It preserves both original reader-fence schedules and the #113 acceptance observations. The regression establishes the new fixture contract using the real adapter, and the documentation correctly avoids claiming that the inherited-descriptor explanation was proved for the hosted failure. One P4 formatting defect was found at the initial fix head: timestamp-only lines 3, 5, 8, 9, 12 and 14 in Verification ChecklistScope, history and review surfaces
Every changed runtime path and preserved production boundary
The original fixture was intentionally repository-only for platform admission. That boundary is preserved: Regression, calibration and receipt provenance
Constants, numbers and documentation claims
Execution evidence and final gate boundaryExecuted by this reviewer: read-only Git clean/head/tree/diff/history checks, exact whole-tree whitespace check, complete current GitHub review/head/base retrieval, archive-to-Git blob comparison, raw-to-committed receipt comparisons and source inspection. No Rust test or mutation was executed by this reviewer. Inspected authored execution: deterministic RED, focused debug/release GREEN, and Separately pending: completion of all final-successor hosted checks, any later optional provider feedback, effective approval admission and branch-protection/merge requirements. The parent reports final documentation/dependency jobs green, but final Rust job 111293250277 failed before the first xtask compilation because downloading Unexercised and unclaimed: exact original hosted inheritance schedule, arbitrary fork/exec interleavings, physical power loss, complete GC, hostile noncooperating writers and full resource-sandbox compliance. These bounded limits do not invalidate the verified fixture continuity outcome or justify unrelated hardening. Reviewed SHA: APPROVE |
Code Lawyer closure — exact candidate e1300cf
No production source, API, format, recovery policy, dependency, benchmark promise or #99 scope changes. Original reader exclusion, SIGKILL/reap, fence identity and post-release admission observations remain intact. Existing platform/resource/power-loss limits remain explicit. The target is main MERGE GATE: OPEN. Maintainer authorization is already recorded; use a normal merge matching the reviewed head. |
Problem and outcome
The reader-fence process fixture released migration writer authority before each collector scenario reacquired it. A hosted run failed at that nonblocking acquisition with
Busy. This PR returns the existing authority with the migrated store and retains it through collection, eliminating the release/reacquire gap.Change kind: test-isolation bug fix. Scope is two reader-fence laws and their fixture, with receipts and documentation. Production code is unchanged. This independently merges onto main and does not require #161.
Invariant and approach
Collector preparation keeps cooperating writer authority continuously. Each law checks the real public adapter refuses a competing writer with exact
WriterLockAcquireError::Busyat fixture handoff. The existing reader-fence assertions, kernel-observed blocked reader, SIGKILL/reap, persistent inode and post-release snapshot admission remain intact.A concurrent subprocess can inherit open lock descriptions until exec, bridging a drop/reacquire gap. That source-supported schedule explains how the old setup can fail, but no syscall trace proves it caused the original hosted failure. Retaining existing authority eliminates the handoff rather than relying on that hypothesis. Production explicit-unlock changes, retries, sleeps, unsafe fork hooks and global test serialization were rejected as unnecessary or weaker fixes.
Evidence
The evidence record preserves the first hosted failure, a deterministic RED and fixed GREEN. Regression commit
6b1f1dbfails the named continuous-exclusion assertion on unfixed main34d70909b0cd93f6b020a59d4d40f43b07971cd8, with the law run alone before any child spawn. Both complete process scenarios then pass in copied-Docker debug/release runs at fixed codeff9d972efd67198391c6b1973d9f33538c1c5ed3.This new assertion is fixture-contract evidence using the actual runtime lock adapter, not a reproduced hosted fork/exec schedule or a new product locking promise. The full copied-Docker required chain passes at
ff9d972efd67198391c6b1973d9f33538c1c5ed3. Receipt-only successore1300cf4a866bd34cba4ebf7dd50233ca264dadatrims timestamp-line whitespace that failed the first hosted documentation check, and documents that normalization; runtime code is unchanged. Full candidate whitespace and Docker Markdown checks pass. Exact-successor independent review and hosted run 37153901813 remain pending. Earlier green runs do not waive the preserved failure.Compatibility and implications
No public API, format, dependency, recovery policy, content identity, security boundary or production lock behavior changes. No benchmark claim. The fixture deliberately retains writer authority longer to cover the existing collector schedule; normal release points remain explicit. Existing medium-size resource-enforcement, platform admission, fixed-schedule and power-loss limitations remain documented. No risk waiver or retry-to-green is requested.
Closes #174. Refs #113, #160, #161, #132.