Repository navigation
Fix/rollup neutral skipped pass - #125
Merged
Merged
Conversation
parse_rollup mapped SKIPPED and NEUTRAL conclusions to Failed, so a required check GitHub's ruleset treats as met was reported as a failing gate. Owner ruling 2026-09-30: model it as a distinct CheckRun::Skipped that satisfies the ruleset but carries no evidence. - gate.rs: new Skipped variant; is_satisfied accepts Passed | Skipped; Gate::evidence_free() lists the satisfied-without-evidence checks. - fetch.rs: SKIPPED | NEUTRAL => Skipped. - spark/gate_machine: mirrored via Satisfies(); gnatprove --level=2 proves 10/10. Mutant (body reverted to `/= Passed`) fails the loop invariant; Rust mutant (is_satisfied = Passed only) fails a_skipped_check_satisfies_but_is_listed_as_evidence_free. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0136eszqrQ53Kj7aBH1D4rXK
…it 5 if not) (#119) Adds `squabble verify-satisfied <owner>/<repo> <pr>`, one implementation of "is this PR actually done?" for the D2 Stop hook and for humans. JSON goes to stdout and a readable list to stderr. **Exit 5** means agent work remains; 0/2/3/4 keep their existing meanings. > ⚠ **Stacked on #114** (base `fix/rollup-neutral-skipped-pass`). When #114 merges, retarget this PR to `main` before merging. Otherwise GitHub closes it when the base branch is deleted. ## What counts as done | # | Condition | Agent item when unmet | |---|---|---| | 1 | Not `CONFLICTING`; mergeability computed; not draft; not `BEHIND` | resolve in-file / re-run / mark ready / update | | 2 | No required context `Failed` or `Missing`. `Pending` is fine; skipped/neutral satisfy but are listed as **evidence-free** | fix the check or the ruleset | | 2b | No **red non-required** check, unless a PR-body line names it **with an issue link** (the 2026-09-15 ruling: a finding becomes an issue, not a blocker, but someone must have looked). An acknowledged red moves to notes and is still shown | fix it, or file an issue and name it in the body | | 3 | Zero unresolved review threads (outdated ones count); no review-bot `CHANGES_REQUESTED`; no review bot still pending | act on or resolve; wait for the bot | | 4 | Code-scanning alerts the PR introduces | **not evaluated yet** and said so in `notes` → #117 | | 5+6 | Automerge armed with SQUASH wherever GitHub allows arming | arm / re-arm with squash | | 7 | Every `[.rules[].type]` on the base, not just required checks. `merge_queue` refuses rather than passing vacuously; unknown types go to notes | — | **Held by a human** (listed, not agent work): human approval, a required deployment, and a CLEAN PR, which GitHub refuses to arm automerge on, so it waits for a human merge. Change requests made only by review bots are agent work, not human-held. ## Shared rules, so `fetch` and `verify-satisfied` can't disagree - `CheckRun::from_github` maps rollup vocabulary. An unknown completed conclusion is `Failed`. - `CheckRun::for_context` decides a required context from **all** same-named runs, and the worst run wins. Both readers used first-match before, so a passing twin could mask a failing one depending on rollup order. ## Evidence - Tests: core 103, cli 44, forge 16, plus the rest, all green. Mutants killed: first-match ordering (2 red), the non-required loop disabled (1), the link requirement dropped (1), the context match dropped (1), digit-after-`#` dropped (1), `ctx_done = true` in pagination (2). - **Live control 1, both arms** (#114): with no acknowledgement it exits **5** naming `rust-ci / Cargo check + clippy + fmt`. After a body line citing #116 it exits **0**, and the acknowledged red is still shown in notes. - **Live control 3** (standards#1076): exit 5, correctly (Debt ratchet red on main; `SonarCloud Code Analysis` required but never emitted → standards#1081). - **Live control 4** (hypatia#883, another session's PR, read only): exit 5 with the same 5 unresolved threads an independent GraphQL count finds. - The "armed + required pending ⇒ exit 0" arm is **unit-tested only**; I found no live PR in that state to exercise it. ## Not in this PR - No SPARK mirror for D1. `done.rs` is a policy table over forge facts with no state machine or invariant; the proof obligations live in `gate_machine`, which #114 mirrors. (#115 tracks getting gnatprove into CI at all.) - Check 4 and inherited-vs-new red checks → #117. The positive control is launch-scaffolder#46's `hardcoded_tmp` alert. - `~/.claude/hooks/apps-ack-gate.sh` is a second implementation of this question → #118. ## Inherited red - `rust-ci / Cargo check + clippy + fmt` is red on `main` (b12657f): unformatted `squabble-fight`, a `needless_lifetimes` in `workflows.rs:628`, and a dead `run_with_greens`. Cured by #116; merge order **#116 → #114 → this**. Checked locally with #116's fix applied temporarily: this branch's own code passes `clippy -D warnings` and `rustfmt --check`. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_0136eszqrQ53Kj7aBH1D4rXK --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Resolve crates/squabble-cli/src/main.rs as a union: main added `board`/`inbox-sweep` (exit 6, #123/#124) where this branch added `verify-satisfied` (exit 5, #119). Both modules, dispatch arms, usage lines and exit-code docs are kept; codes listed in numeric order. cargo fmt --check, clippy -D warnings and cargo test --workspace (279) pass. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01W5CoaksP2Bg21HpDCgFgwS
Hypatia expect_in_hot_path (code-scanning #74, #75) on PR #114. Both were guarded by an invariant, so neither could panic. Bind owner/name from the split already validated in argument parsing, and take the head PR out of the Option the line above fills. Behaviour unchanged; 279 tests pass. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01W5CoaksP2Bg21HpDCgFgwS
Contributor
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. ✨ Finishing Touches📝 Generate docstrings
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 |
Signed-off-by: Jonathan D.A. Jewell <6759885+hyperpolymath@users.noreply.github.com>
|
Contributor
|
Autopilot could not be updated. Open Coding to check access and billing. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



Summary
Changes
RSR Quality Checklist
Required
just testor equivalent)just fmtor equivalent)unsafeblocks without// SAFETY:commentsbelieve_me,unsafeCoerce,Obj.magic,Admitted,sorry).envfiles includedAs Applicable
.machine_readable/descriptiles/STATE.a2mlupdated (if project state changed).machine_readable/descriptiles/ECOSYSTEM.a2mlupdated (if integrations changed).machine_readable/descriptiles/META.a2mlupdated (if architectural decisions changed)TOPOLOGY.mdupdated (if architecture changed)CHANGELOGor release notes updatedsrc/interface/abi/andsrc/interface/ffi/consistent)Testing
Screenshots