Persona: spec-reviewer. Why: independently establish whether OBPI-0.35.0-04 now fulfills its bounded existing contract after the recorded recovery corrections. This is an ACCEPTANCE REVIEW: independently corroborate correctness by probing hard and positively demonstrating the feature. Do not start another unbounded design exercise or assume the author evidence is true.

The primary implementation driver is Codex. You are the required Codex-plugin reviewer, not a different vendor relative to that driver. A separately attributable Claude review will supplement this review; do not misstate provider diversity. Read-only review: do not edit source, tests, brief, ledger, locks or markers; do not launch another pipeline or delegate implementation.

Review the COMPLETE current implementation of this OBPI, not only the last commit's three-line fixture diff. Git base5108d7cf68d71dad762f2ac5c25c91c6786ead68 provides history; the current source/test bytes are the acceptance subject. Other governance changes in that history are not this review's subject.

Authoritative inputs:
- docs/design/adr/pre-release/ADR-0.35.0-canon-entry-corpus-landing/obpis/OBPI-0.35.0-04-section-ownership-and-ratchet.md (REQs, current recovery ruling, Threat Model and accepted ledger exceptions).
- .claude/plans/section-ownership-and-ratchet-OBPI-0.35.0-04.md (current three-obligation contract; D-beats-E passages are explicitly superseded history).
- src/gzkit/content/ownership.py and src/gzkit/commands/content/unown.py, immediate callers/schema and tests/content/test_ownership.py, tests/commands/test_content_unown.py, tests/commands/test_validate_ownership_declarations.py.
- docs/design/adr/pre-release/ADR-0.35.0-canon-entry-corpus-landing/appendices/obpi-04-recovery-2026-09-05/final/README.md, support-proof.json, summary-v4.json, verification-manifest.json. Original exploratory reports in the parent archive are historical, not fresh evidence or authority to invent a requirement.
- .gzkit/evidence/OBPI-0.35.0-04-section-ownership-and-ratchet.evidence.json (tool-generated Stage4a), /tmp/gzkit-obpi04-final-presentation.json and /tmp/gzkit-obpi04-final-covers.json if useful.

Exact SHA256 acceptance identities:
unown.py 0128624028d2f5f7cce805b17c26a07f1a5b739bf18d035803b6a3a82d2328e1
ownership.py cbd93539fb5c262b19a26f242b7ad12a33e5dc674bc7524067e2a1f550849057
test_content_unown.py 28176d3795861007ff28a8581043b1256acbc4a7feadedd662546d4be01c13c7
test_ownership.py 7d4e0c7f72a018614508cd0ebe68af60592ab8149e19dd5374616e919db677c3

Required useful behavior: closed section-ownership enum and complete live-section identity coverage; ordinary decrease/equality-only floor ratchet; explicit nonempty attestor/reason for exactly measured unown raise and truthful witness; recomputed span-based baseline. Seven BEHAVIOR requirements use passing @covers tests. REQ08 is SUPPORT, backed by the real declaration artifact, its artifact_edited event, and current validate --documents result; do not demand a synthetic test for that proof channel.

Recovery contract: W=actual intended transition witnessed, subject to explicit ledger exceptions; R=the observed completion source reconciles with the measured version; C=current required cleanup complete. W never proves R or C. D+source edit remains non-success with measured bytes and newer edits preserved through repeated retries, without duplicate witness. The printed restore/retry path must actually reach canonical-loader acceptance using retained bytes. Unown cannot create extra headroom for arbitrary enlargement of an already-unowned section. A fixed transaction target carries identity and paths across lock, write, replay, witness and cleanup. Raw-byte source reads/digests preserve LF/CRLF. Source checks concern the last observed version; they cannot prevent edits after return.

Durability: mandatory journal absence is established before dependent deletion/reuse, even on journal-absent entry. Unsupported and failed required barriers retain dependents and return non-success (existing exit2); they differ in remedy, not permission to continue. Windows must perform the checked native directory flush, with flags0, proper ABI/owned-handle lifetime and completed success; POSIX uses its directory descriptor fsync. Both rely on OS/filesystem/storage honoring their operation. Do not silently introduce a physical power-cut or arbitrary faulty-hardware certification requirement. Known unrelated old orphan residue may warn and permit fresh work only after the barrier, while ordinary validation and fresh snapshot persistence remain binding. Unknown directory enumeration is not an empty family and cannot grant a known-orphan exemption. A reused snapshot is this transaction's material.

Threat model: ordinary CLI invocations and same-surface contention, ordinary source editor saves, interruptions/retries and I/O faults are in scope. Arbitrary coherent hand-editing of .gzkit metadata is the accepted boundary; existing guards stay as defense in depth but such attacks are not new in-scope findings. #952 ledger fsync and #953 shared-ledger concurrency/rollback/partial-record recovery remain accepted explicit limitations. Do not repair or reopen ledger.py, substitute a scope split, or expand those exceptions to source/declaration/cleanup failures.

Evidence to AUDIT rather than trust: final full-suite receipt arb-step-unittest-dbb1bff960f84ea89182aa9a92f5ba15 (9421 tests, 3 native Windows skips on macOS); canonical ruff/typecheck/docs receipts and five-scenario29-step BDD receipt are enumerated in final/README.md. Windows+Linux CI run33976418620 checks the integrated source, with exact status/log retained there when complete. All43 mutation cases passed unskipped baselines and produced assertion RED with before/after loaded-module provenance and exact restoration. G1-G18 are reconstructed historical labels, R01-R18 are new recovery cases, W01-W07 are mocked-native controls; historical G19-G22 are missing and no equivalence is claimed. The earlier41kill/1invalid/1survivor run and the actual fixture/harness corrections are retained in the final bundle. Check this evidence's actual hashes and outputs.

Tooling: use git status/diff/show and gz tools as framework; gz obpi present-evidence writes a packet, so read the existing packet rather than generating it under read-only restriction. Plugin sandbox is read-only. .venv/bin/python can run read-only or in-memory checks without uv cache setup; tests needing writable temporary directories may be refused. Treat EPERM/setup/import limitations as limitations, never assertion failures or production defects. You can read ZIP members in memory through stdlib zipfile without extracting. Positive demonstrations may include real current declaration/corpus loading and measurement, CLI help/precondition checks where read-only, and pure in-memory tests. Audit the retained actual CLI/recovery/Windows recordings as additional evidence; distinguish rerun from audit.

Return CORROBORATED, CORROBORATED-WITH-CAVEATS or NOT-CORROBORATED plus the corresponding enum not-refuted/refuted. Pass requires positively demonstrated intended behavior and no unresolved IN-SCOPE critical/high defect. Every finding must cite the current requirement, severity, source lines and concrete admissible reproduction; do not call a speculative possibility an observed failure. Disclose medium/lower findings and what could not be confirmed. Include a Weakest point section. Do not merely say you found no issues; show observed command outputs and distinguish them from retained evidence you inspected.
