Repository navigation
Controller: a pull request that moved while a pass read it is deferred once with no alert, and the record keeps why (#658) - #661
Conversation
…d once with no alert, and the record keeps why (#658) A snapshot that moved while it was read raised Moved, and the entry took it as any read GitHub did not answer: the pass raised facts_unreadable, and the item's writes, never read, left reconciliation short. Seven Factory alerts since 2026-11-08 05:38Z were each one pull request merging, pushing or taking a comment during the read. pass/1 now keeps left_out: each item left out with its code, pull_moved, facts_unanswered, not_facts or listed_twice. A pull request that moved, and that the last pass record did not leave out as moved, is deferred with no alert, and its writes are owed to the next pass, so this reconciliation is whole. A second move in a row, any other code, or a last record that cannot say, is the alert. Whether a move is a first is derived from the last record at each pass (moved_once), never kept. Decision NNNN records it, with two boundary rows naming 11 mutants; two older mutants follow the code. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…move, and the last record's boundaries are tested (#658, after the reads) An issue left out as pull_moved was graced too, though the grace is a pull request's (Muse). A read whose updated_at could not be read made adapters/pull.py's unchanged false, so a malformed answer was a Moved and earned the grace; it is now a read GitHub did not answer (the security pass, the Claude review). The tests now hold what the last record left out for another reason, another item it left out as moved, and one it could not name (the Claude review). The record says the next pass, scheduled or started by a run's end, reads a moved pull request again, since a comment starts none. A counter-example holds the new field's codes; one older mutant follows the code. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…controller/AGENTS.md stays at 40 lines (#658) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the
|
Codex Review Summary: ❌ FailedThis 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. |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
…y Builder gave 0173 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>



Closes #658, "Controller: a pull request that changes while a pass reads it raises facts_unreadable and reconciliation_unreadable, though Moved means read it again". It follows the Factory Builder's ruling of 2026-11-08 and its five conditions. It holds decision record 0172.
What changes
pass/1keepsleft_out: each item left out, with its code (pull_moved,facts_unanswered,not_factsorlisted_twice) and its item, or null. The entry tellsMovedapart from any otherUnansweredby its type. A read whoseupdated_atcannot be read is now a plainUnanswered, never aMovedpass_.moved_oncereads the last pass record at each pass. A last record that cannot be read, is not there, or holds noleft_outcounts the move as a secondwrites_seendoes not read it: it is owed to the next pass, and this reconciliation stays wholeMovedearns the gracefacts_unreadableon the first pass, as beforeMovedread, alerted at once. The previous record unreadable, alerted. A last record that left the item out for another reason, or left another item out as moved, makes the move a first. Each rule has a mutantDecision 0056 is unchanged. Decision 0172 states the grace pass and amends nothing else.
Not here:
adapters/checks.pystill raises a plainUnansweredwhen the head moves while the checks are read. That read shows asfacts_unansweredand alerts at once. Making it aMovedwould change how the approving act classes it too. The new codes will show whether it happens.Checks
tests/test_controller.py::test_a_pull_request_that_moved_while_read_is_deferred_once_with_no_alert,::test_a_snapshot_that_moved_is_kept_by_its_code_and_its_writes_are_owed_once, andtests/test_adapters.py::test_a_pull_request_whose_updated_at_cannot_be_read_has_not_moved.examples/invalid/pass.a-left-out-code-in-words.jsonholds the new field's codes.make verifypasses andcheck_decisionsis clean. All 33 mutants ofcontroller/pass_.py,controller/reads.py,controller/__main__.pyandadapters/pull.pyare killed.Reviews
All read the first head, cf9351b. The fixes are in 3d8a447 and 268d255.
pull_movedwas graced tooupdated_atread as a move; untested boundaries of the last record; no counter-example🤖 Generated with Claude Code