Repository navigation
test(handoff): pin stale-channel, retention and restore boundaries - #314
Conversation
Add offline negative fixtures for the POSIX handoff runtime: a stale, non-socket or permissive receipt channel is never rebound or followed and required ACK is refused before any native post; the 30-day detail retention boundary, boot-continuity and UTC-jump rules; tombstone quota and status shape; explicit known-restore quarantine; and a positive control that a committed ACK survives a collector restart and clock change on intact history. Test-only. No runtime, contract or fixture change. Refs #181
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. |
|
@codex review |
|
@codex security review |
|
Codex Review: Didn't find any major issues. Keep them coming! Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
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". |
🛡️ Codex Security ReviewSecurity review completed. No security issues were found in this pull request. Reviewed commit: Only the user who started this review can view the report in Codex. ℹ️ About Codex security reviews in GitHubThis is an experimental Codex feature. Security reviews are triggered when:
Once complete, Codex will leave suggestions, or a comment if no findings are found. |
Summary
Adds offline lifecycle regression tests for the existing experimental POSIX handoff runtime. Refs #181; the issue remains open.
knownTombstonepublic shape.Only
tests/core/test_handoff_lifecycle.pychanges. No runtime, generated standalone, contract document or shared JSON fixture changes. Based on mainf3993bf8988dd301b7e14402e63e8ac04e5e2300; independent of unmerged #311.Review-driven improvements
The first independent reviews identified test-only problems: default unittest comparisons could render private identifiers on failure, collector cleanup lacked kill/reap escalation after a timeout, and a boot-continuity rejection test was confounded by the independent 24-hour TTL. The final tests use non-reflecting comparison helpers with a failure-message regression, bounded clock IPC readiness, terminate/kill/reap cleanup and a boot check inside the TTL. Retention now also checks a populated committed ACK/native/wait record; missing-root public status/wait are covered explicitly; duplicate-rejection cases use fresh records. The quarantine test no longer prescribes destruction of private evidence as a contract requirement.
Validation and review provenance
d758cc8849b30a70938a7793c10668ddf5658ef1: only one new test file, with 21 lifecycle tests.-X dev -W error::ResourceWarning -m unittest discover -s testsat reviewed candidate1509ae385b72f51032534906992194e7e53b64b9: 1125 tests OK, 18 skips.--checkandgit diff --check: PASS. Runtime, standalone, contract and JSON fixture unchanged.packaging; that is not reported as a passing suite. Hosted Python 3.9 and other-platform acceptance remain CI gates.Both first-round reviews read identical frozen stdin at candidate
6afd59d7ec1d9e00cb3fb745f1e87ae8ee6bfcca(SHA-256bdbe8ff96ac98b24abf8424f32109a74c2d255391af032987d53e2741204b2cc). Claude Code 2.1.300 requested and confirmedclaude-opus-5-5, exit 0 with a valid final review (2026-10-15 01:56:03–02:02:18 UTC). Codex CLI 0.162.1 used isolated default configuration, exit 0 and turn completed (01:56:04–01:56:47 UTC); actual default model not exposed. Static source review only, no reviewer tools/tests/native submissions.The first input's optional fixture excerpt was unavailable because
jqrejected an intentional lone-surrogate negative vector elsewhere in the fixture. The unchangedknownTombstonewas subsequently parsed with Node and verified by the actual Python test. Follow-up input includes the correct excerpt and candidate1509ae3; SHA-256dd576ce4c6b07e1265644286e3adfaedefe049b5e93aed026311de033624f225.Both follow-up reviews completed with exit 0 and valid final responses: Claude Opus 5.5, 02:05:41–02:09:29 UTC; Codex, 02:05:42–02:06:12 UTC. Codex found no mandatory defect; Claude requested clarification of public/private quarantine coupling and removal of an unverified argument-redaction claim from a test name. Root accepted those points after checking the actual source. The last small commit changes comments/name and guards an unexpected in-process collector accept loop; it was locally revalidated, not submitted to a third independent review round. This is not an exact-final-head dual-CLI approval claim. Automatic PR review/current-head CI remain separate gates; no manual review mention is posted.
Recommendations not claimed covered: pending-receipt retention with populated unclassified evidence, a second post-kill timeout, exhaustive query-error envelope keys, foreign-UID/dangling-symlink entries, and other native/platform acceptance. Initial ACK commit in the restart control uses the in-process handler with the first collector's epoch; duplicates and rejected receipts after restart use real private IPC.
Limits