diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8c7f6f4d26..7719baedbf 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -451,6 +451,19 @@ jobs: exit 1 fi done + # --- MUTANTS-RATCHET (#4646; operator C187(a)/C188(a), 2026-10-01) --- + # Mutation results are REPORTED here, not blocking: a new gate is adopted as a ratchet, never as an + # instant absolute bar. What blocks is the shrink-only rule on ci/mutants-debt.tsv: a PR may not GROW that + # file (scripts/check_mutants_debt_ratchet.sh, run by guard-tree, which this gate requires above). A NEW + # surviving mutant is not yet blocked or recorded (#4649); rows key on file:line:col, so a line shift reads + # as a new row (#4653). Both land + # with PR #4647. A branch that carries this block before #4647 merges is report-only for mutants until it does. + # Every check above this line is unchanged. The mutants rules below are unreachable ON PURPOSE (C188: mutants + # off the release path) until RESTORE PR #4648 deletes this block and re-arms them. + echo "mutants (report-only, ratchet #4646): event=$EVT section=$(res "$X86" mutants)" + echo "All required sections passed (mutants: ratchet mode, #4646)" + exit 0 + # --- MUTANTS-RATCHET-END --- MUT=$(res "$X86" mutants) # --- GATE-MUTANTS-RULE-BEGIN (#3676; scripts/check_ci_gate_mutants_rule.sh runs this block) --- # `skipped` is a pass ONLY when the skip is the job's own filter: diff --git a/.github/workflows/pr-review-quorum.yml b/.github/workflows/pr-review-quorum.yml index bf085118c7..d8eb933a73 100644 --- a/.github/workflows/pr-review-quorum.yml +++ b/.github/workflows/pr-review-quorum.yml @@ -64,9 +64,12 @@ jobs: runs-on: [self-hosted, Linux, clean-room] timeout-minutes: 20 # B1 (#4512): read the pr-review-signature check run. Job-scoped, read-only. + # pull-requests: read - in the queue Arm 4 must name the PR's head, which the + # merge_group payload does not carry (see ARM4_PR_HEAD_SHA below). permissions: contents: read checks: read + pull-requests: read if: github.event_name == 'pull_request_target' || github.event_name == 'merge_group' env: # pull_request_target carries the PR; merge_group carries the queue ref @@ -145,8 +148,12 @@ jobs: PR_NUMBER: ${{ steps.resolve.outputs.pr }} PR_HEAD_SHA: ${{ steps.resolve.outputs.head }} # B1: an unsigned-on-disk receipt is judged by the pr-review-signature - # check run on the PR head. The head is resolved above, so Arm 4 needs - # no pulls API read; the check-runs read uses this token (checks: read). - ARM4_PR_HEAD_SHA: ${{ steps.resolve.outputs.head }} + # check run on the PR head; the check-runs read uses this token (checks: read). + # The signer posts that check run on the PR HEAD. On pull_request_target the + # event names it. On merge_group steps.resolve.outputs.head is the QUEUE + # squash, which never carries a signature, so every queued PR read UNSIGNED + # (#4632 run 36602609576, #4647 runs 36888741583/36890960012). There this is + # empty and Arm 4 reads the PR head from the pulls API (pull-requests: read). + ARM4_PR_HEAD_SHA: ${{ github.event.pull_request.head.sha }} GH_TOKEN: ${{ github.token }} run: setsid --wait bash scripts/check_pr_review_arm4.sh diff --git a/ci/mutants-debt.tsv b/ci/mutants-debt.tsv new file mode 100644 index 0000000000..e87cde8d8f --- /dev/null +++ b/ci/mutants-debt.tsv @@ -0,0 +1,598 @@ +# ci/mutants-debt.tsv -- the mutants RATCHET baseline (#4646; operator rulings C187(a)/C188(a), 2026-10-01). +# Every known surviving mutant (MissedMutant or Timeout) measured by a completed CI shard, one per row: +# file mutant outcome head sha CI run id +# SHRINK-ONLY: scripts/check_mutants_debt_ratchet.sh (guard-tree) fails if a row is added, i.e. if this file +# is not a subset of the merge base's copy. A killed survivor = delete its row. Sources (2026-10-01): +# #4587 c6799ec04a run 36725778557: shards 5,6,9,10,14,15 (outcomes.json artifacts) + 1,2,13 (harvested before timeout) +# #4588 f8df3cca6b run 36703131059: shards 4,8,11,12,13 (outcomes.json artifacts) +# Shards with no outcomes.json (cancelled/timed out) are NOT measured; they are not in this file. +crates/aprender-contracts-cli/src/bin/pv-sat/liskov.rs crates/aprender-contracts-cli/src/bin/pv-sat/liskov.rs:119:5: replace pc_reasoner -> Result<&'static str, String> with Ok("") MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/liskov.rs crates/aprender-contracts-cli/src/bin/pv-sat/liskov.rs:119:5: replace pc_reasoner -> Result<&'static str, String> with Ok("xyzzy") MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/liskov.rs crates/aprender-contracts-cli/src/bin/pv-sat/liskov.rs:124:14: replace == with != in pc_reasoner MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/liskov.rs crates/aprender-contracts-cli/src/bin/pv-sat/liskov.rs:138:5: replace checkable_pairs -> Vec with vec![] MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/liskov.rs crates/aprender-contracts-cli/src/bin/pv-sat/liskov.rs:142:31: replace == with != in checkable_pairs MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/liskov.rs crates/aprender-contracts-cli/src/bin/pv-sat/liskov.rs:149:5: replace write -> Result<(), u8> with Ok(()) MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/liskov.rs crates/aprender-contracts-cli/src/bin/pv-sat/liskov.rs:167:37: replace == with != in write MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/liskov.rs crates/aprender-contracts-cli/src/bin/pv-sat/liskov.rs:167:44: replace && with || in write MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/liskov.rs crates/aprender-contracts-cli/src/bin/pv-sat/liskov.rs:167:61: replace == with != in write MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/liskov.rs crates/aprender-contracts-cli/src/bin/pv-sat/liskov.rs:167:70: replace && with || in write MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/liskov.rs crates/aprender-contracts-cli/src/bin/pv-sat/liskov.rs:33:42: replace && with || in decide MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/liskov.rs crates/aprender-contracts-cli/src/bin/pv-sat/liskov.rs:33:54: replace == with != in decide MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:108:5: replace write_consistency -> ExitCode with Default::default() MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:130:25: replace == with != in write_consistency MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:190:5: replace kind -> &'static str with "" MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:190:5: replace kind -> &'static str with "xyzzy" MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:198:5: replace fresh_witness -> Option with None MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:199:40: replace == with != in fresh_witness MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:200:31: replace == with != in fresh_witness MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:200:9: replace && with || in fresh_witness MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:201:26: replace == with != in fresh_witness MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:201:9: replace && with || in fresh_witness MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:202:26: replace == with != in fresh_witness MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:202:9: replace && with || in fresh_witness MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:203:9: replace && with || in fresh_witness MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:209:5: replace prune -> Result<(), ()> with Ok(()) MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:216:58: replace == with != in prune MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:217:13: replace && with || in prune MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:218:25: replace == with != in prune MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:219:21: replace && with || in prune MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:220:56: replace && with || in prune MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:220:59: delete ! in prune MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:222:23: replace && with || in prune MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:222:28: replace != with == in prune MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:232:5: replace git_head -> Option with None MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:232:5: replace git_head -> Option with Some(String::new()) MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:232:5: replace git_head -> Option with Some("xyzzy".into()) MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:239:27: replace && with || in git_head MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:239:40: replace == with != in git_head MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:37:5: replace main -> ExitCode with Default::default() MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:39:19: replace match guard flag == "--self-test" with false in main MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:39:19: replace match guard flag == "--self-test" with true in main MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:39:24: replace == with != in main MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:40:19: replace match guard flag == "-h" || flag == "--help" with false in main MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:40:19: replace match guard flag == "-h" || flag == "--help" with true in main MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:40:24: replace == with != in main MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:40:32: replace || with && in main MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:40:40: replace == with != in main MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:45:19: replace match guard flag == "-V" || flag == "--version" with false in main MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:45:19: replace match guard flag == "-V" || flag == "--version" with true in main MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:45:24: replace == with != in main MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:45:32: replace || with && in main MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:45:40: replace == with != in main MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:49:9: delete match arm [] in main MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:50:9: delete match arm [dir] in main MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:59:5: replace version_line -> String with String::new() MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:59:5: replace version_line -> String with "xyzzy".into() MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:67:5: replace self_test -> ExitCode with Default::default() MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:96:5: replace write_witness -> ExitCode with Default::default() MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/main.rs crates/aprender-contracts-cli/src/bin/pv-sat/main.rs:97:13: replace != with == in write_witness MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/plant.rs crates/aprender-contracts-cli/src/bin/pv-sat/plant.rs:16:5: replace plant -> ClauseSet with Default::default() MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/plant.rs crates/aprender-contracts-cli/src/bin/pv-sat/plant.rs:26:5: replace pc_reasoner -> Result<&'static str, String> with Ok("") MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/plant.rs crates/aprender-contracts-cli/src/bin/pv-sat/plant.rs:26:5: replace pc_reasoner -> Result<&'static str, String> with Ok("xyzzy") MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/plant.rs crates/aprender-contracts-cli/src/bin/pv-sat/plant.rs:36:21: replace == with != in pc_reasoner MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/plant.rs crates/aprender-contracts-cli/src/bin/pv-sat/plant.rs:54:5: replace pc_model -> Result<(), String> with Ok(()) MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/sat.rs crates/aprender-contracts-cli/src/bin/pv-sat/sat.rs:23:57: replace && with || in solve MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/sat.rs crates/aprender-contracts-cli/src/bin/pv-sat/sat.rs:36:25: delete ! in solve MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/sat.rs crates/aprender-contracts-cli/src/bin/pv-sat/sat.rs:43:5: replace propagate -> Derived<'_> with Default::default() MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/sat.rs crates/aprender-contracts-cli/src/bin/pv-sat/sat.rs:52:16: delete ! in propagate MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/bin/pv-sat/sat.rs crates/aprender-contracts-cli/src/bin/pv-sat/sat.rs:63:5: replace trace with () MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/cli.rs crates/aprender-contracts-cli/src/cli.rs:683:9: replace ReleaseArgs::any -> bool with false MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/cli.rs crates/aprender-contracts-cli/src/cli.rs:683:9: replace ReleaseArgs::any -> bool with true MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/cli.rs crates/aprender-contracts-cli/src/cli.rs:690:13: replace || with && in ReleaseArgs::any MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/cli.rs crates/aprender-contracts-cli/src/cli.rs:691:13: replace || with && in ReleaseArgs::any MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/cli.rs crates/aprender-contracts-cli/src/cli.rs:699:9: replace ReleaseArgs::subject -> Result, String> with Ok(None) MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/commands/census.rs crates/aprender-contracts-cli/src/commands/census.rs:285:5: replace by_concept -> BTreeMap with BTreeMap::from_iter([(String::new(), 0)]) MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/commands/census.rs crates/aprender-contracts-cli/src/commands/census.rs:285:5: replace by_concept -> BTreeMap with BTreeMap::from_iter([(String::new(), 1)]) MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/commands/census.rs crates/aprender-contracts-cli/src/commands/census.rs:285:5: replace by_concept -> BTreeMap with BTreeMap::from_iter([("xyzzy".into(), 0)]) MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/commands/census.rs crates/aprender-contracts-cli/src/commands/census.rs:285:5: replace by_concept -> BTreeMap with BTreeMap::from_iter([("xyzzy".into(), 1)]) MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/commands/census.rs crates/aprender-contracts-cli/src/commands/census.rs:285:5: replace by_concept -> BTreeMap with BTreeMap::new() MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/commands/challenge.rs crates/aprender-contracts-cli/src/commands/challenge.rs:30:5: replace load -> Result with Ok(Default::default()) MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/commands/challenge.rs crates/aprender-contracts-cli/src/commands/challenge.rs:31:27: replace && with || in load MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/commands/challenge.rs crates/aprender-contracts-cli/src/commands/challenge.rs:43:5: replace report_unrestated -> usize with 0 MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/commands/challenge.rs crates/aprender-contracts-cli/src/commands/challenge.rs:43:5: replace report_unrestated -> usize with 1 MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/commands/challenge.rs crates/aprender-contracts-cli/src/commands/challenge.rs:74:25: replace + with * in check MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/commands/challenge.rs crates/aprender-contracts-cli/src/commands/challenge.rs:74:25: replace + with - in check MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/commands/challenge.rs crates/aprender-contracts-cli/src/commands/challenge.rs:75:10: replace > with < in check MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/commands/challenge.rs crates/aprender-contracts-cli/src/commands/challenge.rs:75:10: replace > with == in check MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/commands/challenge.rs crates/aprender-contracts-cli/src/commands/challenge.rs:75:10: replace > with >= in check MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/commands/discharge.rs crates/aprender-contracts-cli/src/commands/discharge.rs:261:39: replace && with || in lean_steps MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/commands/discharge.rs crates/aprender-contracts-cli/src/commands/discharge.rs:555:41: replace && with || in self_test MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/commands/discharge.rs crates/aprender-contracts-cli/src/commands/discharge.rs:589:36: replace + with * in raw_exit MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts-cli/src/commands/discharge.rs crates/aprender-contracts-cli/src/commands/discharge.rs:589:36: replace + with - in raw_exit MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts-cli/src/commands/discharge.rs crates/aprender-contracts-cli/src/commands/discharge.rs:589:36: replace + with * in raw_exit MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/commands/discharge.rs crates/aprender-contracts-cli/src/commands/discharge.rs:589:36: replace + with - in raw_exit MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/commands/discharge.rs crates/aprender-contracts-cli/src/commands/discharge.rs:664:27: replace match guard e.raw_os_error() == Some(26) with false in Lake<'_>::spawn MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts-cli/src/commands/discharge.rs crates/aprender-contracts-cli/src/commands/discharge.rs:664:27: replace match guard e.raw_os_error() == Some(26) with false in Lake<'_>::spawn MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/commands/discharge.rs crates/aprender-contracts-cli/src/commands/discharge.rs:664:27: replace match guard e.raw_os_error() == Some(26) with true in Lake<'_>::spawn MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts-cli/src/commands/discharge.rs crates/aprender-contracts-cli/src/commands/discharge.rs:664:27: replace match guard e.raw_os_error() == Some(26) with true in Lake<'_>::spawn MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/commands/discharge.rs crates/aprender-contracts-cli/src/commands/discharge.rs:664:44: replace == with != in Lake<'_>::spawn MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/commands/discharge.rs crates/aprender-contracts-cli/src/commands/discharge.rs:768:28: replace || with && in sysroot MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/commands/discharge.rs crates/aprender-contracts-cli/src/commands/discharge.rs:809:12: delete ! in recheck MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/commands/extract_rdf.rs crates/aprender-contracts-cli/src/commands/extract_rdf.rs:147:5: replace run_release -> Result<(), Box> with Ok(()) MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/commands/extract_rdf.rs crates/aprender-contracts-cli/src/commands/extract_rdf.rs:191:5: replace write_cells -> Result<(), Box> with Ok(()) MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/commands/extract_rdf.rs crates/aprender-contracts-cli/src/commands/extract_rdf.rs:33:5: replace refuse_release_only_args -> Result<(), Box> with Ok(()) MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/commands/extract_rdf.rs crates/aprender-contracts-cli/src/commands/extract_rdf.rs:59:5: replace run -> Result<(), Box> with Ok(()) MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/commands/verify_bindings.rs crates/aprender-contracts-cli/src/commands/verify_bindings.rs:229:14: replace == with != in fn_item_name Timeout f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/contract_walk.rs crates/aprender-contracts-cli/src/contract_walk.rs:207:9: replace ::fmt -> fmt::Result with Ok(Default::default()) MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/contract_walk.rs crates/aprender-contracts-cli/src/contract_walk.rs:223:9: replace ::fmt -> fmt::Result with Ok(Default::default()) MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/contract_walk.rs crates/aprender-contracts-cli/src/contract_walk.rs:317:9: replace || with && in verdict_for MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts-cli/src/lib.rs crates/aprender-contracts-cli/src/lib.rs:264:43: replace == with != in dispatch MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/kernels/kani_proofs.rs crates/aprender-contracts/src/kernels/kani_proofs.rs:92:10: replace >= with < in stub_sqrt MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/kernels/kani_proofs.rs crates/aprender-contracts/src/kernels/kani_proofs.rs:93:24: replace >= with < in stub_sqrt MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/kernels/kani_proofs.rs crates/aprender-contracts/src/kernels/kani_proofs.rs:93:38: replace && with || in stub_sqrt MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/kernels/kani_proofs.rs crates/aprender-contracts/src/kernels/kani_proofs.rs:93:43: replace <= with > in stub_sqrt MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/lint/bindings_gate.rs crates/aprender-contracts/src/lint/bindings_gate.rs:137:29: replace += with *= in count_allowlisted MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/lint/bindings_gate.rs crates/aprender-contracts/src/lint/bindings_gate.rs:137:29: replace += with -= in count_allowlisted MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/lint/bindings_gate.rs crates/aprender-contracts/src/lint/bindings_gate.rs:232:31: replace += with *= in check_stale_allowlist MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/lint/bindings_gate.rs crates/aprender-contracts/src/lint/bindings_gate.rs:311:9: delete field registries from struct BindingsCounters expression in run_bindings_gate MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/lint/bindings_gate.rs crates/aprender-contracts/src/lint/bindings_gate.rs:314:9: delete field files_parsed from struct BindingsCounters expression in run_bindings_gate MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/lint/capability_cells_gate.rs crates/aprender-contracts/src/lint/capability_cells_gate.rs:116:35: replace && with || in plant_refused MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/lint/capability_cells_gate.rs crates/aprender-contracts/src/lint/capability_cells_gate.rs:148:5: replace findings -> Vec with vec![] MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/lint/capability_cells_gate.rs crates/aprender-contracts/src/lint/capability_cells_gate.rs:92:5: replace plant_refused -> bool with true MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/lint/evidence_gate.rs crates/aprender-contracts/src/lint/evidence_gate.rs:137:26: replace > with < in run_evidence_gate MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/lint/evidence_gate.rs crates/aprender-contracts/src/lint/evidence_gate.rs:217:32: replace == with != in Census::observe MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/lint/evidence_gate.rs crates/aprender-contracts/src/lint/evidence_gate.rs:219:66: replace += with *= in Census::observe MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/lint/evidence_gate.rs crates/aprender-contracts/src/lint/evidence_gate.rs:479:24: replace match guard !shallow with true in resolve_pending MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/lint/evidence_gate.rs crates/aprender-contracts/src/lint/evidence_gate.rs:492:29: replace += with *= in resolve_pending MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/lint/evidence_gate.rs crates/aprender-contracts/src/lint/evidence_gate.rs:492:29: replace += with -= in resolve_pending MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/lint/mod.rs crates/aprender-contracts/src/lint/mod.rs:1365:27: replace && with || in challenge_result MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/lint/mod.rs crates/aprender-contracts/src/lint/mod.rs:1377:35: replace && with || in challenge_result MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/lint/mod.rs crates/aprender-contracts/src/lint/mod.rs:1387:33: replace + with * in challenge_result MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/lint/mod.rs crates/aprender-contracts/src/lint/mod.rs:1387:33: replace + with - in challenge_result MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/lint/ratchet_gates.rs crates/aprender-contracts/src/lint/ratchet_gates.rs:113:26: replace + with * in mentions_module Timeout c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/lint/ratchet_gates.rs crates/aprender-contracts/src/lint/ratchet_gates.rs:113:26: replace + with * in mentions_module Timeout f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/lint/ratchet_gates.rs crates/aprender-contracts/src/lint/ratchet_gates.rs:128:22: replace + with * in mentions_module Timeout c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/lint/ratchet_gates.rs crates/aprender-contracts/src/lint/ratchet_gates.rs:128:22: replace + with - in mentions_module Timeout c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/lint/ratchet_gates.rs crates/aprender-contracts/src/lint/ratchet_gates.rs:128:22: replace + with * in mentions_module Timeout f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/lint/ratchet_gates.rs crates/aprender-contracts/src/lint/ratchet_gates.rs:128:22: replace + with - in mentions_module Timeout f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/lint/ratchet_gates.rs crates/aprender-contracts/src/lint/ratchet_gates.rs:247:31: replace - with + in run_theorem_pairing_gate MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/lint/ratchet_gates.rs crates/aprender-contracts/src/lint/ratchet_gates.rs:247:31: replace - with + in run_theorem_pairing_gate MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/lint/ratchet_gates.rs crates/aprender-contracts/src/lint/ratchet_gates.rs:278:17: replace += with *= in run_depends_on_present_gate MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/lint/ratchet_gates.rs crates/aprender-contracts/src/lint/ratchet_gates.rs:278:17: replace += with *= in run_depends_on_present_gate MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/lint/ratchet_gates.rs crates/aprender-contracts/src/lint/ratchet_gates.rs:72:20: replace match guard !p.as_os_str().is_empty() with true in repo_root MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/lint/refines_gate.rs crates/aprender-contracts/src/lint/refines_gate.rs:181:9: delete field refines_pairs from struct RefinesCounters expression in run_refines_gate MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/lint/shapes_gate.rs crates/aprender-contracts/src/lint/shapes_gate.rs:1016:5: replace subsumption_of -> (usize, Vec) with (0, vec![]) MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/lint/shapes_gate.rs crates/aprender-contracts/src/lint/shapes_gate.rs:1016:5: replace subsumption_of -> (usize, Vec) with (0, vec![String::new()]) MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/lint/shapes_gate.rs crates/aprender-contracts/src/lint/shapes_gate.rs:1016:5: replace subsumption_of -> (usize, Vec) with (0, vec!["xyzzy".into()]) MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/lint/shapes_gate.rs crates/aprender-contracts/src/lint/shapes_gate.rs:1016:5: replace subsumption_of -> (usize, Vec) with (1, vec![]) MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/lint/shapes_gate.rs crates/aprender-contracts/src/lint/shapes_gate.rs:1016:5: replace subsumption_of -> (usize, Vec) with (1, vec![String::new()]) MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/lint/shapes_gate.rs crates/aprender-contracts/src/lint/shapes_gate.rs:1016:5: replace subsumption_of -> (usize, Vec) with (1, vec!["xyzzy".into()]) MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/lint/shapes_gate.rs crates/aprender-contracts/src/lint/shapes_gate.rs:1020:28: replace += with *= in subsumption_of MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/lint/shapes_gate.rs crates/aprender-contracts/src/lint/shapes_gate.rs:1020:28: replace += with -= in subsumption_of MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/lint/shapes_gate.rs crates/aprender-contracts/src/lint/shapes_gate.rs:827:5: replace measured -> super::MeasuredSet with Default::default() MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/lint/shapes_gate.rs crates/aprender-contracts/src/lint/shapes_gate.rs:835:5: replace count_freshness with () MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/lint/shapes_gate.rs crates/aprender-contracts/src/lint/shapes_gate.rs:850:26: replace += with *= in count_freshness MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/lint/shapes_gate.rs crates/aprender-contracts/src/lint/shapes_gate.rs:850:26: replace += with -= in count_freshness MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/lint/subsumption.rs crates/aprender-contracts/src/lint/subsumption.rs:31:5: replace concept_of -> Option<&'a str> with None MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/lint/subsumption.rs crates/aprender-contracts/src/lint/subsumption.rs:31:5: replace concept_of -> Option<&'a str> with Some("") MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/lint/subsumption.rs crates/aprender-contracts/src/lint/subsumption.rs:31:5: replace concept_of -> Option<&'a str> with Some("xyzzy") MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/lint/subsumption.rs crates/aprender-contracts/src/lint/subsumption.rs:35:26: replace == with != in concept_of MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/lint/subsumption.rs crates/aprender-contracts/src/lint/subsumption.rs:41:5: replace inherited -> (usize, Vec) with (0, vec![]) MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/lint/subsumption.rs crates/aprender-contracts/src/lint/subsumption.rs:41:5: replace inherited -> (usize, Vec) with (0, vec![String::new()]) MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/lint/subsumption.rs crates/aprender-contracts/src/lint/subsumption.rs:41:5: replace inherited -> (usize, Vec) with (0, vec!["xyzzy".into()]) MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/lint/subsumption.rs crates/aprender-contracts/src/lint/subsumption.rs:41:5: replace inherited -> (usize, Vec) with (1, vec![]) MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/lint/subsumption.rs crates/aprender-contracts/src/lint/subsumption.rs:41:5: replace inherited -> (usize, Vec) with (1, vec![String::new()]) MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/lint/subsumption.rs crates/aprender-contracts/src/lint/subsumption.rs:41:5: replace inherited -> (usize, Vec) with (1, vec!["xyzzy".into()]) MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/lint/subsumption.rs crates/aprender-contracts/src/lint/subsumption.rs:49:18: replace > with < in inherited MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/lint/subsumption.rs crates/aprender-contracts/src/lint/subsumption.rs:49:18: replace > with == in inherited MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/lint/subsumption.rs crates/aprender-contracts/src/lint/subsumption.rs:49:18: replace > with >= in inherited MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/lint/subsumption.rs crates/aprender-contracts/src/lint/subsumption.rs:50:23: replace += with *= in inherited MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/binary.rs crates/aprender-contracts/src/ontology/extract/binary.rs:159:5: replace hex_of -> bool with true MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/binary.rs crates/aprender-contracts/src/ontology/extract/binary.rs:160:9: replace && with || in hex_of MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/binary.rs crates/aprender-contracts/src/ontology/extract/binary.rs:189:29: replace || with && in parse_line MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/binary.rs crates/aprender-contracts/src/ontology/extract/binary.rs:189:52: replace || with && in parse_line MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/binary.rs crates/aprender-contracts/src/ontology/extract/binary.rs:234:28: replace match guard chars.peek() == Some(&'"') with false in csv_records MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/binary.rs crates/aprender-contracts/src/ontology/extract/binary.rs:250:26: replace || with && in csv_records MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/binary.rs crates/aprender-contracts/src/ontology/extract/binary.rs:250:29: delete ! in csv_records MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/binary.rs crates/aprender-contracts/src/ontology/extract/binary.rs:250:8: delete ! in csv_records MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/binary.rs crates/aprender-contracts/src/ontology/extract/binary.rs:277:33: replace && with || in route_key MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/binary.rs crates/aprender-contracts/src/ontology/extract/binary.rs:351:31: replace && with || in declared_bins MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/binary.rs crates/aprender-contracts/src/ontology/extract/binary.rs:445:22: replace || with && in emit MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/binary.rs crates/aprender-contracts/src/ontology/extract/binary.rs:445:39: replace == with != in emit MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/binary.rs crates/aprender-contracts/src/ontology/extract/binary.rs:601:9: delete field help_sha256 from struct Target expression in positive_control MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/binary.rs crates/aprender-contracts/src/ontology/extract/binary.rs:602:9: delete field version_sha256 from struct Target expression in positive_control MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/binary.rs crates/aprender-contracts/src/ontology/extract/binary.rs:603:9: delete field commands from struct Target expression in positive_control MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/binary.rs crates/aprender-contracts/src/ontology/extract/binary.rs:628:9: replace && with || in positive_control MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/binary.rs crates/aprender-contracts/src/ontology/extract/binary.rs:629:9: replace && with || in positive_control MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/binary.rs crates/aprender-contracts/src/ontology/extract/binary.rs:630:9: replace && with || in positive_control MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/binary.rs crates/aprender-contracts/src/ontology/extract/binary.rs:631:9: replace && with || in positive_control MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/binary.rs crates/aprender-contracts/src/ontology/extract/binary.rs:632:9: replace && with || in positive_control MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/claims.rs crates/aprender-contracts/src/ontology/extract/claims.rs:113:29: replace + with * in fences MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/claims.rs crates/aprender-contracts/src/ontology/extract/claims.rs:146:21: replace + with * in prose_lines MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/claims.rs crates/aprender-contracts/src/ontology/extract/claims.rs:163:16: delete ! in headings MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/claims.rs crates/aprender-contracts/src/ontology/extract/claims.rs:163:62: delete ! in headings MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/claims.rs crates/aprender-contracts/src/ontology/extract/claims.rs:190:17: replace != with == in closing_run Timeout f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/claims.rs crates/aprender-contracts/src/ontology/extract/claims.rs:191:15: replace += with *= in closing_run Timeout f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/claims.rs crates/aprender-contracts/src/ontology/extract/claims.rs:198:11: replace += with *= in closing_run Timeout f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/claims.rs crates/aprender-contracts/src/ontology/extract/claims.rs:198:11: replace += with -= in closing_run Timeout f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/claims.rs crates/aprender-contracts/src/ontology/extract/claims.rs:208:17: replace != with == in line_spans Timeout f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/claims.rs crates/aprender-contracts/src/ontology/extract/claims.rs:209:15: replace += with *= in line_spans Timeout f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/claims.rs crates/aprender-contracts/src/ontology/extract/claims.rs:256:9: delete match arm serde_yaml::Value::Null in frontmatter MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/claims.rs crates/aprender-contracts/src/ontology/extract/claims.rs:294:8: delete ! in normalise MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/claims.rs crates/aprender-contracts/src/ontology/extract/claims.rs:328:21: delete ! in drop_comment MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/claims.rs crates/aprender-contracts/src/ontology/extract/claims.rs:328:21: replace match guard !sq with false in drop_comment MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/claims.rs crates/aprender-contracts/src/ontology/extract/claims.rs:328:21: replace match guard !sq with true in drop_comment MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/claims.rs crates/aprender-contracts/src/ontology/extract/claims.rs:329:21: replace match guard !dq with true in drop_comment MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/claims.rs crates/aprender-contracts/src/ontology/extract/claims.rs:330:20: delete ! in drop_comment MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/claims.rs crates/aprender-contracts/src/ontology/extract/claims.rs:330:20: replace match guard !sq with false in drop_comment MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/claims.rs crates/aprender-contracts/src/ontology/extract/claims.rs:330:20: replace match guard !sq with true in drop_comment MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/claims.rs crates/aprender-contracts/src/ontology/extract/claims.rs:330:32: delete ! in drop_comment MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/claims.rs crates/aprender-contracts/src/ontology/extract/claims.rs:359:21: delete ! in Quotes::step MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/claims.rs crates/aprender-contracts/src/ontology/extract/claims.rs:359:21: replace match guard !self.sq with false in Quotes::step MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/claims.rs crates/aprender-contracts/src/ontology/extract/claims.rs:359:21: replace match guard !self.sq with true in Quotes::step MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/claims.rs crates/aprender-contracts/src/ontology/extract/claims.rs:360:21: replace match guard !self.dq with true in Quotes::step MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/claims.rs crates/aprender-contracts/src/ontology/extract/claims.rs:361:20: replace match guard !self.sq with true in Quotes::step MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/claims.rs crates/aprender-contracts/src/ontology/extract/claims.rs:493:67: replace && with || in section_selected::glob MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/claims.rs crates/aprender-contracts/src/ontology/extract/claims.rs:494:13: delete match arm (Some(b'?'), Some(_)) in section_selected::glob MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/claims.rs crates/aprender-contracts/src/ontology/extract/claims.rs:79:10: replace == with != in fence_open MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/claims.rs crates/aprender-contracts/src/ontology/extract/claims.rs:79:10: replace == with != in fence_open MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/claims.rs crates/aprender-contracts/src/ontology/extract/claims.rs:88:19: replace * with / in fence_close MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/claims.rs crates/aprender-contracts/src/ontology/extract/claims.rs:88:19: replace * with / in fence_close MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/cli_surface.rs crates/aprender-contracts/src/ontology/extract/cli_surface.rs:131:42: replace && with || in Command::mode_args MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/cli_surface.rs crates/aprender-contracts/src/ontology/extract/cli_surface.rs:154:9: replace ::fmt -> std::fmt::Result with Ok(Default::default()) MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/cli_surface.rs crates/aprender-contracts/src/ontology/extract/cli_surface.rs:307:17: replace += with *= in emit_command MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/cli_surface.rs crates/aprender-contracts/src/ontology/extract/cli_surface.rs:319:19: replace += with *= in emit_command MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/cli_surface.rs crates/aprender-contracts/src/ontology/extract/cli_surface.rs:331:56: replace += with *= in emit_command MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/cli_surface.rs crates/aprender-contracts/src/ontology/extract/cli_surface.rs:332:19: replace == with != in emit_command MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/cli_surface.rs crates/aprender-contracts/src/ontology/extract/cli_surface.rs:333:29: replace += with *= in emit_command MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/cli_surface.rs crates/aprender-contracts/src/ontology/extract/cli_surface.rs:333:29: replace += with -= in emit_command MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/cli_surface.rs crates/aprender-contracts/src/ontology/extract/cli_surface.rs:334:16: delete ! in emit_command MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/cli_surface.rs crates/aprender-contracts/src/ontology/extract/cli_surface.rs:335:44: replace += with *= in emit_command MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/cli_surface.rs crates/aprender-contracts/src/ontology/extract/cli_surface.rs:335:44: replace += with -= in emit_command MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/cli_surface.rs crates/aprender-contracts/src/ontology/extract/cli_surface.rs:348:5: replace emit_arg -> String with String::new() MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/cli_surface.rs crates/aprender-contracts/src/ontology/extract/cli_surface.rs:348:5: replace emit_arg -> String with "xyzzy".into() MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/cli_surface.rs crates/aprender-contracts/src/ontology/extract/cli_surface.rs:372:15: replace == with != in emit_arg MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/cli_surface.rs crates/aprender-contracts/src/ontology/extract/cli_surface.rs:372:27: replace || with && in emit_arg MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/cli_surface.rs crates/aprender-contracts/src/ontology/extract/cli_surface.rs:372:37: replace == with != in emit_arg MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/cli_surface.rs crates/aprender-contracts/src/ontology/extract/cli_surface.rs:387:5: replace positive_control -> bool with true MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/code.rs crates/aprender-contracts/src/ontology/extract/code.rs:1046:9: replace for BodySafety>::visit_expr_unsafe with () Timeout c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/code.rs crates/aprender-contracts/src/ontology/extract/code.rs:1226:46: replace == with != in emit MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/code.rs crates/aprender-contracts/src/ontology/extract/code.rs:1267:36: replace += with *= in resolve_all Timeout c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/covering.rs crates/aprender-contracts/src/ontology/extract/covering.rs:118:26: replace < with <= in allowed_with MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/covering.rs crates/aprender-contracts/src/ontology/extract/covering.rs:127:5: replace uncovered -> Vec with vec![] MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/covering.rs crates/aprender-contracts/src/ontology/extract/covering.rs:133:82: replace && with || in uncovered MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/csv.rs crates/aprender-contracts/src/ontology/extract/csv.rs:167:44: replace += with *= in extract MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/csv.rs crates/aprender-contracts/src/ontology/extract/csv.rs:180:5: replace positive_control -> bool with true MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/csv.rs crates/aprender-contracts/src/ontology/extract/csv.rs:185:13: replace && with || in positive_control MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/json/github.rs crates/aprender-contracts/src/ontology/extract/json/github.rs:137:5: replace name_ok -> bool with true MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/json/github.rs crates/aprender-contracts/src/ontology/extract/json/github.rs:137:5: replace name_ok -> bool with true MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/json/github.rs crates/aprender-contracts/src/ontology/extract/json/github.rs:138:9: replace && with || in name_ok MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/json/github.rs crates/aprender-contracts/src/ontology/extract/json/github.rs:138:9: replace && with || in name_ok MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/json/github.rs crates/aprender-contracts/src/ontology/extract/json/github.rs:157:9: replace || with && in parse_ref MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/json/github.rs crates/aprender-contracts/src/ontology/extract/json/github.rs:157:9: replace || with && in parse_ref MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/json/github.rs crates/aprender-contracts/src/ontology/extract/json/github.rs:164:9: replace && with || in parse_ref MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/json/github.rs crates/aprender-contracts/src/ontology/extract/json/github.rs:164:9: replace && with || in parse_ref MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/json/github.rs crates/aprender-contracts/src/ontology/extract/json/github.rs:276:15: replace != with == in check_fields MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/json/github.rs crates/aprender-contracts/src/ontology/extract/json/github.rs:276:15: replace != with == in check_fields MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/json/github.rs crates/aprender-contracts/src/ontology/extract/json/github.rs:335:82: replace && with || in extract MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/json/github.rs crates/aprender-contracts/src/ontology/extract/json/github.rs:335:82: replace && with || in extract MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/json/github.rs crates/aprender-contracts/src/ontology/extract/json/github.rs:496:42: replace && with || in insert_edge MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/json/github.rs crates/aprender-contracts/src/ontology/extract/json/github.rs:496:42: replace && with || in insert_edge MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/json/github.rs crates/aprender-contracts/src/ontology/extract/json/github.rs:569:29: replace && with || in refused_saying MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/json/github.rs crates/aprender-contracts/src/ontology/extract/json/github.rs:569:5: replace refused_saying -> bool with true MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/json/github.rs crates/aprender-contracts/src/ontology/extract/json/github.rs:582:34: replace && with || in positive_control MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/json/github.rs crates/aprender-contracts/src/ontology/extract/json/github.rs:582:61: replace && with || in positive_control MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/json/github.rs crates/aprender-contracts/src/ontology/extract/json/github.rs:589:17: replace && with || in positive_control MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/json/github.rs crates/aprender-contracts/src/ontology/extract/json/github.rs:590:17: replace && with || in positive_control MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/json/github.rs crates/aprender-contracts/src/ontology/extract/json/github.rs:607:17: replace && with || in positive_control MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/json/github.rs crates/aprender-contracts/src/ontology/extract/json/github.rs:608:17: replace && with || in positive_control MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/json/github.rs crates/aprender-contracts/src/ontology/extract/json/github.rs:624:34: replace && with || in positive_control MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/json/github.rs crates/aprender-contracts/src/ontology/extract/json/github.rs:624:56: replace && with || in positive_control MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/json/github.rs crates/aprender-contracts/src/ontology/extract/json/github.rs:624:64: replace && with || in positive_control MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/json/github.rs crates/aprender-contracts/src/ontology/extract/json/github.rs:624:87: replace && with || in positive_control MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/json/github.rs crates/aprender-contracts/src/ontology/extract/json/github.rs:76:35: replace && with || in snapshot_types MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/json/github.rs crates/aprender-contracts/src/ontology/extract/json/github.rs:76:35: replace && with || in snapshot_types MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/json/github.rs crates/aprender-contracts/src/ontology/extract/json/github.rs:97:9: replace ::fmt -> std::fmt::Result with Ok(Default::default()) MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/json/github.rs crates/aprender-contracts/src/ontology/extract/json/github.rs:97:9: replace ::fmt -> std::fmt::Result with Ok(Default::default()) MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/kernel.rs crates/aprender-contracts/src/ontology/extract/kernel.rs:335:31: replace match guard p > 0.0 with true in within_timing MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/kernel.rs crates/aprender-contracts/src/ontology/extract/kernel.rs:335:33: replace > with >= in within_timing MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/kernel.rs crates/aprender-contracts/src/ontology/extract/kernel.rs:335:44: replace / with % in within_timing MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/kernel.rs crates/aprender-contracts/src/ontology/extract/kernel.rs:494:5: replace symbol_and_contract -> Result<(), KernelError> with Ok(()) MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/kernel.rs crates/aprender-contracts/src/ontology/extract/kernel.rs:512:5: replace emit_witness with () MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/kernel.rs crates/aprender-contracts/src/ontology/extract/kernel.rs:530:8: delete ! in emit_witness MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/kernel.rs crates/aprender-contracts/src/ontology/extract/kernel.rs:537:8: delete ! in emit_witness MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/kernel.rs crates/aprender-contracts/src/ontology/extract/kernel.rs:579:5: replace positive_control -> bool with true MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/kernel.rs crates/aprender-contracts/src/ontology/extract/kernel.rs:591:9: replace && with || in positive_control MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/kernel.rs crates/aprender-contracts/src/ontology/extract/kernel.rs:592:9: replace && with || in positive_control MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/kernel.rs crates/aprender-contracts/src/ontology/extract/kernel.rs:593:9: replace && with || in positive_control MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/llm_context.rs crates/aprender-contracts/src/ontology/extract/llm_context.rs:193:34: replace += with *= in extract MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/llm_context.rs crates/aprender-contracts/src/ontology/extract/llm_context.rs:207:5: replace positive_control -> bool with true MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/llm_context.rs crates/aprender-contracts/src/ontology/extract/llm_context.rs:224:13: replace && with || in positive_control MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/pv_contract.rs crates/aprender-contracts/src/ontology/extract/pv_contract.rs:86:41: replace == with != in extract_one MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/readme.rs crates/aprender-contracts/src/ontology/extract/readme.rs:147:34: replace += with *= in extract MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/readme.rs crates/aprender-contracts/src/ontology/extract/readme.rs:161:5: replace positive_control -> bool with true MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/readme.rs crates/aprender-contracts/src/ontology/extract/readme.rs:178:13: replace && with || in positive_control MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_cells.rs crates/aprender-contracts/src/ontology/extract/release_cells.rs:141:54: replace + with * in forbidden MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_cells.rs crates/aprender-contracts/src/ontology/extract/release_cells.rs:142:58: replace || with && in forbidden MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_cells.rs crates/aprender-contracts/src/ontology/extract/release_cells.rs:306:24: replace == with != in effects MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_cells.rs crates/aprender-contracts/src/ontology/extract/release_cells.rs:310:31: replace == with != in effects MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_cells.rs crates/aprender-contracts/src/ontology/extract/release_cells.rs:356:20: replace != with == in sampling MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_cells.rs crates/aprender-contracts/src/ontology/extract/release_cells.rs:356:5: replace sampling -> Vec with vec![] MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_cells.rs crates/aprender-contracts/src/ontology/extract/release_cells.rs:362:30: replace == with != in sampling MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_cells.rs crates/aprender-contracts/src/ontology/extract/release_cells.rs:362:44: replace && with || in sampling MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_cells.rs crates/aprender-contracts/src/ontology/extract/release_cells.rs:362:74: replace == with != in sampling MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_cells.rs crates/aprender-contracts/src/ontology/extract/release_cells.rs:365:38: replace == with != in sampling MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_cells.rs crates/aprender-contracts/src/ontology/extract/release_cells.rs:365:8: delete ! in sampling MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_cells.rs crates/aprender-contracts/src/ontology/extract/release_cells.rs:395:31: replace == with != in sampling MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1010:46: replace += with *= in count_class MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1010:46: replace += with -= in count_class MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1010:46: replace += with *= in count_class MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1010:46: replace += with -= in count_class MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1010:9: delete match arm "RefusalCell" in count_class MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1010:9: delete match arm "RefusalCell" in count_class MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1011:42: replace += with *= in count_class MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1011:42: replace += with -= in count_class MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1011:42: replace += with *= in count_class MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1011:42: replace += with -= in count_class MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1011:9: delete match arm "ProbeCell" in count_class MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1011:9: delete match arm "ProbeCell" in count_class MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1012:44: replace += with *= in count_class MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1012:44: replace += with *= in count_class MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1012:9: delete match arm "EffectCell" in count_class MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1012:9: delete match arm "EffectCell" in count_class MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1062:5: replace context_met -> bool with true MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1062:5: replace context_met -> bool with true MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1066:30: replace == with != in context_met MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1066:30: replace == with != in context_met MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1107:59: replace || with && in emit_row MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1107:59: replace || with && in emit_row MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1109:53: replace > with < in emit_row MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1109:53: replace > with < in emit_row MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1120:9: delete match arm Some("fresh") in emit_row MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1120:9: delete match arm Some("fresh") in emit_row MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1121:9: delete match arm Some("receipt") in emit_row MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1121:9: delete match arm Some("receipt") in emit_row MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1122:47: replace && with || in emit_row MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1122:47: replace && with || in emit_row MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1122:74: replace == with != in emit_row MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1122:74: replace == with != in emit_row MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1133:5: replace emit_row_detail with () MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1133:5: replace emit_row_detail with () MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1188:5: replace emit_sampling with () MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1188:5: replace emit_sampling with () MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1200:31: replace += with *= in emit_sampling MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1200:31: replace += with -= in emit_sampling MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1200:31: replace += with *= in emit_sampling MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1200:31: replace += with -= in emit_sampling MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1217:29: delete ! in emit_sampling MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1217:29: delete ! in emit_sampling MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1219:16: delete ! in emit_sampling MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1219:16: delete ! in emit_sampling MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1236:5: replace sampling_check -> bool with false MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1236:5: replace sampling_check -> bool with false MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1236:5: replace sampling_check -> bool with true MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1236:5: replace sampling_check -> bool with true MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1241:34: replace != with == in sampling_check MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1241:34: replace != with == in sampling_check MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1241:42: replace || with && in sampling_check MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1241:42: replace || with && in sampling_check MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1241:50: replace != with == in sampling_check MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1241:50: replace != with == in sampling_check MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1241:9: delete match arm "sampledDiffers" in sampling_check MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1241:9: delete match arm "sampledDiffers" in sampling_check MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1242:51: replace == with != in sampling_check MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1242:51: replace == with != in sampling_check MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1242:9: delete match arm "seedRepeatable" | "greedyAgrees" in sampling_check MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1242:9: delete match arm "seedRepeatable" | "greedyAgrees" in sampling_check MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1243:19: replace != with == in sampling_check MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1243:19: replace != with == in sampling_check MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1258:5: replace emit_effects with () MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1258:5: replace emit_effects with () MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1269:32: replace += with *= in emit_effects MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1269:32: replace += with -= in emit_effects MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1269:32: replace += with *= in emit_effects MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1269:32: replace += with -= in emit_effects MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1283:18: replace != with == in emit_effects MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:1283:18: replace != with == in emit_effects MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:567:5: replace positive_control -> bool with true MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:924:29: replace match guard !spec.generates with false in class_of MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:924:29: replace match guard !spec.generates with false in class_of MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:982:22: replace != with == in emit_derived MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_evidence.rs crates/aprender-contracts/src/ontology/extract/release_evidence.rs:982:22: replace != with == in emit_derived MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/release_inputs.rs crates/aprender-contracts/src/ontology/extract/release_inputs.rs:102:9: replace Subject::crux_dir -> PathBuf with Default::default() MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_inputs.rs crates/aprender-contracts/src/ontology/extract/release_inputs.rs:102:9: replace Subject::crux_dir -> PathBuf with Default::default() MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/extract/release_inputs.rs crates/aprender-contracts/src/ontology/extract/release_inputs.rs:523:5: replace read_surface_ratchet -> Result, ReleaseError> with Ok(None) MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/extract/release_inputs.rs crates/aprender-contracts/src/ontology/extract/release_inputs.rs:523:5: replace read_surface_ratchet -> Result, ReleaseError> with Ok(None) MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-contracts/src/ontology/witness.rs crates/aprender-contracts/src/ontology/witness.rs:480:5: replace variables -> BTreeSet with BTreeSet::from_iter([String::new()]) MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/witness.rs crates/aprender-contracts/src/ontology/witness.rs:480:5: replace variables -> BTreeSet with BTreeSet::from_iter(["xyzzy".into()]) MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/witness.rs crates/aprender-contracts/src/ontology/witness.rs:480:5: replace variables -> BTreeSet with BTreeSet::new() MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/witness.rs crates/aprender-contracts/src/ontology/witness.rs:491:5: replace implication_adjacency -> BTreeMap<&str, Vec<&str>> with BTreeMap::from_iter([("", vec![""])]) MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/witness.rs crates/aprender-contracts/src/ontology/witness.rs:491:5: replace implication_adjacency -> BTreeMap<&str, Vec<&str>> with BTreeMap::from_iter([("", vec![])]) MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/witness.rs crates/aprender-contracts/src/ontology/witness.rs:491:5: replace implication_adjacency -> BTreeMap<&str, Vec<&str>> with BTreeMap::from_iter([("", vec!["xyzzy"])]) MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/witness.rs crates/aprender-contracts/src/ontology/witness.rs:491:5: replace implication_adjacency -> BTreeMap<&str, Vec<&str>> with BTreeMap::from_iter([("xyzzy", vec![""])]) MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/witness.rs crates/aprender-contracts/src/ontology/witness.rs:491:5: replace implication_adjacency -> BTreeMap<&str, Vec<&str>> with BTreeMap::from_iter([("xyzzy", vec![])]) MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/witness.rs crates/aprender-contracts/src/ontology/witness.rs:491:5: replace implication_adjacency -> BTreeMap<&str, Vec<&str>> with BTreeMap::from_iter([("xyzzy", vec!["xyzzy"])]) MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/witness.rs crates/aprender-contracts/src/ontology/witness.rs:491:5: replace implication_adjacency -> BTreeMap<&str, Vec<&str>> with BTreeMap::new() MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/witness.rs crates/aprender-contracts/src/ontology/witness.rs:562:9: replace kani_proofs::cores_of_len with () MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/witness.rs crates/aprender-contracts/src/ontology/witness.rs:566:28: replace < with <= in kani_proofs::cores_of_len MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/witness.rs crates/aprender-contracts/src/ontology/witness.rs:566:28: replace < with == in kani_proofs::cores_of_len MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/witness.rs crates/aprender-contracts/src/ontology/witness.rs:566:28: replace < with > in kani_proofs::cores_of_len MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/witness.rs crates/aprender-contracts/src/ontology/witness.rs:570:31: replace < with <= in kani_proofs::cores_of_len MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/witness.rs crates/aprender-contracts/src/ontology/witness.rs:570:31: replace < with == in kani_proofs::cores_of_len MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/witness.rs crates/aprender-contracts/src/ontology/witness.rs:570:31: replace < with > in kani_proofs::cores_of_len MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/witness.rs crates/aprender-contracts/src/ontology/witness.rs:583:9: replace kani_proofs::kani_ont_9_1 with () MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/witness.rs crates/aprender-contracts/src/ontology/witness.rs:591:9: replace kani_proofs::kani_ont_9_1_len1 with () MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/witness.rs crates/aprender-contracts/src/ontology/witness.rs:599:9: replace kani_proofs::kani_ont_9_1_len2 with () MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/witness.rs crates/aprender-contracts/src/ontology/witness.rs:608:9: replace kani_proofs::kani_ont_9_1_model with () MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/witness.rs crates/aprender-contracts/src/ontology/witness.rs:610:33: replace < with <= in kani_proofs::kani_ont_9_1_model MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/witness.rs crates/aprender-contracts/src/ontology/witness.rs:610:33: replace < with == in kani_proofs::kani_ont_9_1_model MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/witness.rs crates/aprender-contracts/src/ontology/witness.rs:610:33: replace < with > in kani_proofs::kani_ont_9_1_model MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/witness.rs crates/aprender-contracts/src/ontology/witness.rs:618:9: replace kani_proofs::any_graph -> SmallGraph with Default::default() MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/ontology/witness_small.rs crates/aprender-contracts/src/ontology/witness_small.rs:74:46: replace != with == in SmallGraph::satisfied_by MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:509:5: replace step_block_comment -> (usize, usize) with (0, 0) Timeout c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:509:5: replace step_block_comment -> (usize, usize) with (0, 1) Timeout c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:509:5: replace step_block_comment -> (usize, usize) with (1, 0) Timeout c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:509:5: replace step_block_comment -> (usize, usize) with (1, 1) Timeout c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:510:12: replace + with - in step_block_comment Timeout c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:514:12: replace + with * in step_block_comment Timeout c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:514:12: replace + with - in step_block_comment Timeout c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:520:24: replace > with < in scan_code_at MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:520:54: replace - with / in scan_code_at MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:523:41: replace + with - in scan_code_at Timeout c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:523:45: replace + with * in scan_code_at MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:523:45: replace + with - in scan_code_at MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:530:24: delete ! in scan_code_at MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:536:25: delete ! in scan_code_at MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:542:26: replace + with * in scan_code_at Timeout c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:557:22: replace + with * in scan_raw_string MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:557:22: replace + with - in scan_raw_string MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:557:55: replace == with != in scan_raw_string MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:558:18: replace + with * in scan_raw_string MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:558:18: replace + with - in scan_raw_string MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:558:22: replace + with * in scan_raw_string MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:558:22: replace + with - in scan_raw_string MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:559:20: replace != with == in scan_raw_string MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:560:33: replace + with * in scan_raw_string MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:560:33: replace + with - in scan_raw_string MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:564:26: replace + with * in scan_raw_string MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:564:26: replace + with - in scan_raw_string MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:566:25: replace == with != in scan_raw_string MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:570:20: replace + with * in scan_raw_string MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:570:20: replace + with - in scan_raw_string MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:570:24: replace + with * in scan_raw_string MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:570:24: replace + with - in scan_raw_string Timeout c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:571:31: replace + with * in scan_raw_string MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:571:31: replace + with - in scan_raw_string MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:571:45: replace + with * in scan_raw_string MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:571:45: replace + with - in scan_raw_string MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:576:19: replace + with - in scan_string Timeout c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:580:30: replace += with *= in scan_string MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:580:30: replace += with -= in scan_string MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:582:26: replace += with *= in scan_string Timeout c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:585:28: replace + with * in scan_string MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:585:28: replace + with - in scan_string MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:585:38: replace + with * in scan_string MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:585:38: replace + with - in scan_string Timeout c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:590:27: replace + with * in skip_char_literal MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:590:27: replace + with - in skip_char_literal MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:590:32: replace == with != in skip_char_literal MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:590:5: replace skip_char_literal -> usize with 0 Timeout c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:590:5: replace skip_char_literal -> usize with 1 Timeout c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:591:11: replace + with * in skip_char_literal MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:591:11: replace + with - in skip_char_literal MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-contracts/src/proof_status.rs crates/aprender-contracts/src/proof_status.rs:593:11: replace + with - in skip_char_literal MissedMutant c6799ec04a9d4eb9e618d54ae6d2fd7462045f99 36725778557 +crates/aprender-orchestrate/src/cli/falsify.rs crates/aprender-orchestrate/src/cli/falsify.rs:105:5: replace resolve_project_root_within -> PathBuf with Default::default() MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-orchestrate/src/cli/falsify.rs crates/aprender-orchestrate/src/cli/falsify.rs:115:20: replace == with != in resolve_project_root_within MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-orchestrate/src/cli/falsify.rs crates/aprender-orchestrate/src/cli/falsify.rs:97:5: replace resolve_project_root -> PathBuf with Default::default() MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-orchestrate/src/cli/viz.rs crates/aprender-orchestrate/src/cli/viz.rs:125:5: replace cmd_viz_dashboard -> anyhow::Result<()> with Ok(()) MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-present-terminal/src/bin/ptop.rs crates/aprender-present-terminal/src/bin/ptop.rs:411:5: replace parse_panel_type -> Result with Ok(Default::default()) MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-present-terminal/src/bin/ptop.rs crates/aprender-present-terminal/src/bin/ptop.rs:412:9: delete match arm "cpu" in parse_panel_type MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-present-terminal/src/bin/ptop.rs crates/aprender-present-terminal/src/bin/ptop.rs:413:9: delete match arm "memory" | "mem" in parse_panel_type MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-present-terminal/src/bin/ptop.rs crates/aprender-present-terminal/src/bin/ptop.rs:414:9: delete match arm "disk" in parse_panel_type MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-present-terminal/src/bin/ptop.rs crates/aprender-present-terminal/src/bin/ptop.rs:415:9: delete match arm "network" | "net" in parse_panel_type MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-present-terminal/src/bin/ptop.rs crates/aprender-present-terminal/src/bin/ptop.rs:416:9: delete match arm "process" | "proc" | "processes" in parse_panel_type MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-present-terminal/src/bin/ptop.rs crates/aprender-present-terminal/src/bin/ptop.rs:417:9: delete match arm "gpu" in parse_panel_type MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-present-terminal/src/bin/ptop.rs crates/aprender-present-terminal/src/bin/ptop.rs:418:9: delete match arm "sensors" | "sensor" in parse_panel_type MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-present-terminal/src/bin/ptop.rs crates/aprender-present-terminal/src/bin/ptop.rs:419:9: delete match arm "connections" | "conn" in parse_panel_type MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-present-terminal/src/bin/ptop.rs crates/aprender-present-terminal/src/bin/ptop.rs:420:9: delete match arm "psi" | "pressure" in parse_panel_type MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-present-terminal/src/bin/ptop.rs crates/aprender-present-terminal/src/bin/ptop.rs:421:9: delete match arm "files" | "file" in parse_panel_type MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-present-terminal/src/bin/ptop.rs crates/aprender-present-terminal/src/bin/ptop.rs:422:9: delete match arm "battery" | "bat" in parse_panel_type MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-present-terminal/src/bin/ptop.rs crates/aprender-present-terminal/src/bin/ptop.rs:423:9: delete match arm "containers" | "container" | "docker" in parse_panel_type MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-present-terminal/src/bin/ptop.rs crates/aprender-present-terminal/src/bin/ptop.rs:87:5: replace handle_render_once -> io::Result<()> with Ok(()) MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-ptx-debug/src/bin/main.rs crates/aprender-ptx-debug/src/bin/main.rs:23:5: replace main with () MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-ptx-debug/src/cli.rs crates/aprender-ptx-debug/src/cli.rs:114:5: replace exit_code_for_parse_error -> i32 with 0 MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-ptx-debug/src/cli.rs crates/aprender-ptx-debug/src/cli.rs:114:5: replace exit_code_for_parse_error -> i32 with -1 MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-ptx-debug/src/cli.rs crates/aprender-ptx-debug/src/cli.rs:114:5: replace exit_code_for_parse_error -> i32 with 1 MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-ptx-debug/src/cli.rs crates/aprender-ptx-debug/src/cli.rs:115:9: delete match arm ErrorKind::DisplayHelp | ErrorKind::DisplayVersion in exit_code_for_parse_error MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-ptx-debug/src/run.rs crates/aprender-ptx-debug/src/run.rs:112:25: replace == with != in analyze_ptx_file MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-ptx-debug/src/run.rs crates/aprender-ptx-debug/src/run.rs:133:5: replace write_or_print -> Result<(), String> with Ok(()) MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-ptx-debug/src/run.rs crates/aprender-ptx-debug/src/run.rs:144:5: replace cmd_gen_fkr -> Result with Ok(0) MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-ptx-debug/src/run.rs crates/aprender-ptx-debug/src/run.rs:144:5: replace cmd_gen_fkr -> Result with Ok(-1) MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-ptx-debug/src/run.rs crates/aprender-ptx-debug/src/run.rs:144:5: replace cmd_gen_fkr -> Result with Ok(1) MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-ptx-debug/src/run.rs crates/aprender-ptx-debug/src/run.rs:17:5: replace run -> Result with Ok(0) MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-ptx-debug/src/run.rs crates/aprender-ptx-debug/src/run.rs:17:5: replace run -> Result with Ok(-1) MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-ptx-debug/src/run.rs crates/aprender-ptx-debug/src/run.rs:17:5: replace run -> Result with Ok(1) MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-ptx-debug/src/run.rs crates/aprender-ptx-debug/src/run.rs:29:5: replace print_json_report with () MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-ptx-debug/src/run.rs crates/aprender-ptx-debug/src/run.rs:44:5: replace print_text_report with () MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-ptx-debug/src/run.rs crates/aprender-ptx-debug/src/run.rs:66:5: replace exit_code_for_score -> i32 with 0 MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-ptx-debug/src/run.rs crates/aprender-ptx-debug/src/run.rs:66:5: replace exit_code_for_score -> i32 with -1 MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-ptx-debug/src/run.rs crates/aprender-ptx-debug/src/run.rs:66:5: replace exit_code_for_score -> i32 with 1 MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-ptx-debug/src/run.rs crates/aprender-ptx-debug/src/run.rs:68:21: replace < with <= in exit_code_for_score MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-ptx-debug/src/run.rs crates/aprender-ptx-debug/src/run.rs:68:21: replace < with == in exit_code_for_score MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-ptx-debug/src/run.rs crates/aprender-ptx-debug/src/run.rs:68:21: replace < with > in exit_code_for_score MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-ptx-debug/src/run.rs crates/aprender-ptx-debug/src/run.rs:70:21: replace < with <= in exit_code_for_score MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-ptx-debug/src/run.rs crates/aprender-ptx-debug/src/run.rs:70:21: replace < with == in exit_code_for_score MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-ptx-debug/src/run.rs crates/aprender-ptx-debug/src/run.rs:70:21: replace < with > in exit_code_for_score MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-ptx-debug/src/run.rs crates/aprender-ptx-debug/src/run.rs:78:5: replace cmd_analyze -> Result with Ok(0) MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-ptx-debug/src/run.rs crates/aprender-ptx-debug/src/run.rs:78:5: replace cmd_analyze -> Result with Ok(-1) MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-ptx-debug/src/run.rs crates/aprender-ptx-debug/src/run.rs:78:5: replace cmd_analyze -> Result with Ok(1) MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-rag-cli/src/lib.rs crates/aprender-rag-cli/src/lib.rs:527:5: replace dispatch -> Result<()> with Ok(()) MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/build_corpus.rs crates/aprender-review-experiment/src/build_corpus.rs:107:5: replace review_paths -> Vec with vec![] MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/build_corpus.rs crates/aprender-review-experiment/src/build_corpus.rs:107:5: replace review_paths -> Vec with vec![String::new()] MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/build_corpus.rs crates/aprender-review-experiment/src/build_corpus.rs:107:5: replace review_paths -> Vec with vec!["xyzzy".into()] MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/build_corpus.rs crates/aprender-review-experiment/src/build_corpus.rs:118:5: replace diff_between -> Option with None MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/build_corpus.rs crates/aprender-review-experiment/src/build_corpus.rs:118:5: replace diff_between -> Option with Some(String::new()) MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/build_corpus.rs crates/aprender-review-experiment/src/build_corpus.rs:118:5: replace diff_between -> Option with Some("xyzzy".into()) MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/build_corpus.rs crates/aprender-review-experiment/src/build_corpus.rs:124:20: replace && with || in diff_between MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/build_corpus.rs crates/aprender-review-experiment/src/build_corpus.rs:124:52: replace <= with > in diff_between MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/build_corpus.rs crates/aprender-review-experiment/src/build_corpus.rs:124:6: delete ! in diff_between MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/build_corpus.rs crates/aprender-review-experiment/src/build_corpus.rs:130:5: replace r_candidates -> Vec<(Item, String)> with vec![] MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/build_corpus.rs crates/aprender-review-experiment/src/build_corpus.rs:131:21: delete ! in r_candidates MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/build_corpus.rs crates/aprender-review-experiment/src/build_corpus.rs:131:61: replace && with || in r_candidates MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/build_corpus.rs crates/aprender-review-experiment/src/build_corpus.rs:155:5: replace g_candidates -> Vec<(Item, String)> with vec![] MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/build_corpus.rs crates/aprender-review-experiment/src/build_corpus.rs:157:42: replace < with <= in g_candidates MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/build_corpus.rs crates/aprender-review-experiment/src/build_corpus.rs:157:42: replace < with == in g_candidates MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/build_corpus.rs crates/aprender-review-experiment/src/build_corpus.rs:157:42: replace < with > in g_candidates MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/build_corpus.rs crates/aprender-review-experiment/src/build_corpus.rs:158:21: delete ! in g_candidates MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/build_corpus.rs crates/aprender-review-experiment/src/build_corpus.rs:158:45: replace && with || in g_candidates MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/build_corpus.rs crates/aprender-review-experiment/src/build_corpus.rs:158:48: delete ! in g_candidates MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/build_corpus.rs crates/aprender-review-experiment/src/build_corpus.rs:159:21: delete ! in g_candidates MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/build_corpus.rs crates/aprender-review-experiment/src/build_corpus.rs:160:21: delete ! in g_candidates MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/build_corpus.rs crates/aprender-review-experiment/src/build_corpus.rs:160:53: replace == with != in g_candidates MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/build_corpus.rs crates/aprender-review-experiment/src/build_corpus.rs:176:5: replace is_green -> bool with false MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/build_corpus.rs crates/aprender-review-experiment/src/build_corpus.rs:176:5: replace is_green -> bool with true MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/build_corpus.rs crates/aprender-review-experiment/src/build_corpus.rs:184:26: replace && with || in is_green MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/build_corpus.rs crates/aprender-review-experiment/src/build_corpus.rs:190:48: replace == with != in rollup_is_green MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/build_corpus.rs crates/aprender-review-experiment/src/build_corpus.rs:193:71: replace || with && in rollup_is_green MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/build_corpus.rs crates/aprender-review-experiment/src/build_corpus.rs:228:5: replace choose -> Vec<(Item, String)> with vec![] MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/build_corpus.rs crates/aprender-review-experiment/src/build_corpus.rs:242:5: replace seal -> Vec with vec![] MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/build_corpus.rs crates/aprender-review-experiment/src/build_corpus.rs:244:34: replace == with != in seal MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/build_corpus.rs crates/aprender-review-experiment/src/build_corpus.rs:99:5: replace git -> Option with None MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/build_corpus.rs crates/aprender-review-experiment/src/build_corpus.rs:99:5: replace git -> Option with Some(String::new()) MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/build_corpus.rs crates/aprender-review-experiment/src/build_corpus.rs:99:5: replace git -> Option with Some("xyzzy".into()) MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/contamination.rs crates/aprender-review-experiment/src/contamination.rs:101:9: delete match arm serde_json::Value::Array(a) in collect_strings MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/contamination.rs crates/aprender-review-experiment/src/contamination.rs:48:9: replace Index::len -> usize with 0 MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/contamination.rs crates/aprender-review-experiment/src/contamination.rs:48:9: replace Index::len -> usize with 1 MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/contamination.rs crates/aprender-review-experiment/src/contamination.rs:54:9: replace Index::is_empty -> bool with false MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/corpus.rs crates/aprender-review-experiment/src/corpus.rs:150:36: replace || with && in names_the_mutation MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/corpus.rs crates/aprender-review-experiment/src/corpus.rs:177:18: replace += with *= in defect_locs MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/corpus.rs crates/aprender-review-experiment/src/corpus.rs:177:18: replace += with -= in defect_locs MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/corpus.rs crates/aprender-review-experiment/src/corpus.rs:198:67: replace && with || in is_comment MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/corpus.rs crates/aprender-review-experiment/src/corpus.rs:260:61: replace == with != in assign_splits MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/corpus.rs crates/aprender-review-experiment/src/corpus.rs:289:57: replace || with && in hunks MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/corpus.rs crates/aprender-review-experiment/src/corpus.rs:314:78: delete ! in hunk_fingerprints MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/corpus.rs crates/aprender-review-experiment/src/corpus.rs:400:24: replace < with <= in pick_balanced MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/corpus.rs crates/aprender-review-experiment/src/corpus.rs:400:28: replace && with || in pick_balanced Timeout f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/corpus.rs crates/aprender-review-experiment/src/corpus.rs:400:58: replace > with >= in pick_balanced MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/corpus.rs crates/aprender-review-experiment/src/corpus.rs:402:29: replace < with <= in pick_balanced MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/harness.rs crates/aprender-review-experiment/src/harness.rs:116:44: replace * with + in post MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/harness.rs crates/aprender-review-experiment/src/harness.rs:116:44: replace * with / in post MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/harness.rs crates/aprender-review-experiment/src/harness.rs:159:40: replace && with || in classify MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/harness.rs crates/aprender-review-experiment/src/harness.rs:159:52: replace > with >= in classify MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/harness.rs crates/aprender-review-experiment/src/harness.rs:270:33: replace + with * in rfc3339 MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/harness.rs crates/aprender-review-experiment/src/harness.rs:270:33: replace + with - in rfc3339 MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/harness.rs crates/aprender-review-experiment/src/harness.rs:270:48: replace - with / in rfc3339 MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/harness.rs crates/aprender-review-experiment/src/harness.rs:287:5: replace utc_now -> String with String::new() MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/harness.rs crates/aprender-review-experiment/src/harness.rs:287:5: replace utc_now -> String with "xyzzy".into() MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/harness.rs crates/aprender-review-experiment/src/harness.rs:42:5: replace request_body -> Value with Default::default() Timeout f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/harness.rs crates/aprender-review-experiment/src/harness.rs:60:31: replace + with * in run_order MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/harness.rs crates/aprender-review-experiment/src/harness.rs:60:31: replace + with - in run_order MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/prereg.rs crates/aprender-review-experiment/src/prereg.rs:101:9: replace Components::render_lock -> String with String::new() MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/prereg.rs crates/aprender-review-experiment/src/prereg.rs:101:9: replace Components::render_lock -> String with "xyzzy".into() MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/receipt.rs crates/aprender-review-experiment/src/receipt.rs:183:44: replace && with || in is_hex64 MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/receipt.rs crates/aprender-review-experiment/src/receipt.rs:285:30: replace || with && in execution_problems MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/receipt.rs crates/aprender-review-experiment/src/receipt.rs:316:23: replace match guard !tail.contains("PASS") with true in parse_verdict MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/receipt.rs crates/aprender-review-experiment/src/receipt.rs:330:36: replace - with / in spellings MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/score.rs crates/aprender-review-experiment/src/score.rs:134:30: replace + with * in collect MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/score.rs crates/aprender-review-experiment/src/score.rs:134:30: replace + with - in collect MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/score.rs crates/aprender-review-experiment/src/score.rs:147:26: replace + with * in collect MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/score.rs crates/aprender-review-experiment/src/score.rs:218:45: replace && with || in check MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/score.rs crates/aprender-review-experiment/src/score.rs:218:55: replace && with || in check MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/score.rs crates/aprender-review-experiment/src/score.rs:231:45: replace && with || in divergence MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/score.rs crates/aprender-review-experiment/src/score.rs:250:42: replace && with || in paired_parsed MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/score.rs crates/aprender-review-experiment/src/score.rs:252:35: replace == with != in paired_parsed MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/score.rs crates/aprender-review-experiment/src/score.rs:253:35: replace == with != in paired_parsed MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/score.rs crates/aprender-review-experiment/src/score.rs:35:17: replace > with < in Ratio::value MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/score.rs crates/aprender-review-experiment/src/score.rs:35:44: replace / with % in Ratio::value MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/score.rs crates/aprender-review-experiment/src/score.rs:35:44: replace / with * in Ratio::value MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 +crates/aprender-review-experiment/src/score.rs crates/aprender-review-experiment/src/score.rs:35:9: replace Ratio::value -> Option with None MissedMutant f8df3cca6b6c3b51c1475ef54c9ece5e6fec9584 36703131059 diff --git a/docs/audits/quorum-PMAT-4646.json b/docs/audits/quorum-PMAT-4646.json new file mode 100644 index 0000000000..85391b28c5 --- /dev/null +++ b/docs/audits/quorum-PMAT-4646.json @@ -0,0 +1,272 @@ +{ + "ticket": "PMAT-4646,PMAT-4651", + "base": "origin/main", + "base_resolved": "origin/main", + "base_note": "no origin/origin/main exists; judged against the local ref; brief_exclude (C45) kept out of the brief: docs/roadmaps/roadmap.yaml", + "head": "ce8036ebc14c1d54f90507c8b2686f993897a699", + "diff_sha256": "0c24a2f8e6681b31e8e7e5bfbe83edadb3c74f0d0879b70a29622e1ad74370f6", + "width": 3, + "executor": "agy", + "prompt_mode": "file", + "prompt_bytes": 238989, + "prompt_sha256": "164ada2b7f8e85a203342ec3fcb8b0573e270ee4cd2d5a1988aaa5f455efc14c", + "author": { + "model": "claude-opus-5-5", + "family": "claude", + "source": "flag" + }, + "agreed": true, + "lanes": [ + { + "lane": 1, + "status": "SUCCESS", + "verdict": "PASS", + "summary": "Diff correctly implements PMAT-4646 (mutants gate -> report-only ratchet, shrink-only debt file) and PMAT-4651 (re-date PP-LLAMA-001 rows 13/15/18/19/21 to 2026-10-15). Verified directly against the live tree: the ci.yml MUTANTS-RATCHET block's `exit 0` sits after WT/guard-tree/guard-cargo/sov.gate/determinism-compare are already enforced (lines 445-466 of .github/workflows/ci.yml), so no other required section is bypassed; only the now-dead GATE-MUTANTS-RULE block below it is skipped, exactly as the ticket requires. scripts/check_mutants_debt_ratchet.sh correctly implements shrink-only semantics including the zero-row edge case (command-substitution newline stripping makes the \"added\" comparison correctly empty when head shrinks to 0 rows), and its --self-test case table (R1-R16) matches the claimed regression coverage, including R14/R15/R16 targeting the three specific guard weaknesses (empty run id, mid-string file match, 6-field row) named by the embedded prior review. check_mutants_debt_ratchet.sh matches the `scripts/check_*.sh` glob that guard_tree.sh's `guard_universe()` enumerates, so it auto-wires with no further ci.yml change, confirming the roadmap AC. The pr-review-quorum.yml Arm 4 fix (pull-requests: read + ARM4_PR_HEAD_SHA falling back to the pulls API on merge_group) is correctly consumed by check_pr_review_arm4.sh's documented fallback (line 176-177), addressing the real defect that queued PRs read UNSIGNED. ci/mutants-debt.tsv (590 data rows) cites both source CI runs (36703131059 and 36725778557) as the roadmap claims. derived_expiries.json changes exactly the five entries keyed 13, 15, 18, 19, 21 (confirmed by tracing JSON key context around each hunk, including the lexicographic \"19\" < \"2\" < \"20\" < \"21\" ordering that made the last hunk's target non-obvious from the diff alone). No gate was weakened beyond what the ticket authorizes, no other section's behavior changed, and the diff's file set matches the AC's stated scope (ci.yml, debt file, guard script, roadmap entries, and the one queue-only pr-review-quorum.yml fix, plus generated evidence/roadmap outputs).", + "findings": [], + "raw_bytes": 5206, + "err_bytes": 0, + "envelope_status": "SUCCESS", + "verdict_source": "structured_output", + "executor": "claude-code", + "grounding_check": "parity", + "role": "counted", + "model": "claude-sonnet-5", + "model_measured": "claude-sonnet-5", + "model_source": "flag", + "family": "claude", + "brief_sha256": "164ada2b7f8e85a203342ec3fcb8b0573e270ee4cd2d5a1988aaa5f455efc14c", + "trace": { + "input_sha256": "9fc965b78c82c51a89aca2e97e9439408285eb392131c6759d3c91969e6a09ef", + "output_sha256": "012418627691494566b80f7a0794a60b428363bfeb05947ef41725ee91a53059", + "store": null, + "store_why": "almacen not provisioned yet (infra-27): the blobs stay in the round's gitignored .lanes dir" + }, + "fallback": { + "judged_by": "claude-sonnet-5", + "exhausted": false, + "attempts": [ + { + "model": "claude-sonnet-5", + "family": "claude", + "outcome": "answered" + } + ], + "skipped": [] + } + }, + { + "lane": 2, + "status": "SUCCESS", + "verdict": "PASS", + "summary": "The diff correctly implements both tickets. It converts the mutants gate to a ratchet mode backed by a shrink-only `ci/mutants-debt.tsv` and `check_mutants_debt_ratchet.sh` (as requested by PMAT-4646), without affecting other gates. It applies the explicitly requested `pr-review-quorum.yml` queue-only fix. It also redates the five specified speed rows (13, 15, 18, 19, 21) in `PP-LLAMA-001-MASTER.md` to 2026-10-15 and updates `derived_expiries.json` and Appendix D accordingly (as requested by PMAT-4651). No contradictions, unauthorized weakening, or unrequested changes were found.", + "findings": [], + "raw_bytes": 2487, + "err_bytes": 0, + "envelope_status": "SUCCESS", + "verdict_source": "structured_output", + "grounding_check": "parity", + "role": "independent", + "model": "gemini-3.1-pro-high", + "model_measured": "gemini-3.1-pro-high", + "model_source": "measured", + "family": "gemini", + "executor": "agy", + "brief_sha256": "164ada2b7f8e85a203342ec3fcb8b0573e270ee4cd2d5a1988aaa5f455efc14c", + "trace": { + "input_sha256": "7a35960478869a956b536cad6296722a614bc3f1a0db6604bdad62482f958e82", + "output_sha256": "67efbd6ff463feae3b4e653be236b4846338bfafdb729bcaa32695cae9a88949", + "store": null, + "store_why": "almacen not provisioned yet (infra-27): the blobs stay in the round's gitignored .lanes dir" + }, + "fallback": { + "judged_by": "gemini-3.1-pro-high", + "exhausted": false, + "attempts": [ + { + "model": "gemini-3.1-pro-high", + "family": "gemini", + "outcome": "answered" + } + ], + "skipped": [] + } + }, + { + "lane": 3, + "status": "SUCCESS", + "verdict": "PASS", + "summary": "The diff correctly implements PMAT-4646 (mutants ratchet mode with shrink-only debt file) and PMAT-4651 (spec re-dating). The ratchet logic is sound: ci/mutants-debt.tsv establishes a baseline of known survivors, check_mutants_debt_ratchet.sh enforces shrink-only semantics with 16 self-test cases, and ci.yml makes mutants report-only until RESTORE PR #4648. The receipt shows proper attestation and evidence collection. No refuting findings.", + "findings": [], + "raw_bytes": 1828, + "err_bytes": 0, + "envelope_status": "SUCCESS", + "verdict_source": "structured_output", + "executor": "claude-code", + "grounding_check": "parity", + "role": "counted", + "model": "claude-haiku-4-5", + "model_measured": "claude-haiku-4-5", + "model_source": "flag", + "family": "claude", + "brief_sha256": "164ada2b7f8e85a203342ec3fcb8b0573e270ee4cd2d5a1988aaa5f455efc14c", + "trace": { + "input_sha256": "1961d8432a8f3d7fd5893e1d9fa2ef99b7f213280286d40c357dd0fd68442c1a", + "output_sha256": "3bc3a6423130c921c12c186412da2ba8f2f42a99acbc07fbea08349dd4e7b53e", + "store": null, + "store_why": "almacen not provisioned yet (infra-27): the blobs stay in the round's gitignored .lanes dir" + }, + "fallback": { + "judged_by": "claude-haiku-4-5", + "exhausted": false, + "attempts": [ + { + "model": "claude-haiku-4-5", + "family": "claude", + "outcome": "answered" + } + ], + "skipped": [] + } + } + ], + "dissent": [], + "dedup": [], + "uncovered": [], + "coverage_source": "lanes", + "partial": false, + "partial_reasons": [], + "fallback": { + "same_family_width": 2, + "chain": [ + { + "model": "claude-sonnet-5", + "family": "claude", + "disposition": "claude-code", + "why": "run by Claude Code on its own budget: a configured seat runs every round, a fallback step only when every non-Claude family is measured out (PMAT-360, operator standing rule)" + }, + { + "model": "gemini-3.1-pro-high", + "family": "gemini", + "disposition": "configured" + }, + { + "model": "claude-haiku-4-5", + "family": "claude", + "disposition": "claude-code", + "why": "run by Claude Code on its own budget: a configured seat runs every round, a fallback step only when every non-Claude family is measured out (PMAT-360, operator standing rule)" + }, + { + "model": "claude-opus-5-5", + "family": "claude", + "disposition": "excluded-self-review", + "why": "the author's own model id (claude-opus-5-5) — a model never reviews its own diff, at any width (R-15a identity bar)" + }, + { + "model": "qwen3.5", + "family": "qwen", + "disposition": "not-run", + "why": "no quorum.local_lane in the config — the aprender lane has no model to load" + } + ], + "precheck": [ + { + "family": "gemini", + "model": "gemini-3.1-pro-high", + "probe": 1, + "outcome": "live" + } + ], + "degraded": null, + "prah": { + "source": "install-receipt", + "path": "/home/noah/.claude/skills/paiml-implement/bin/prah" + }, + "tier1": { + "agy_tier1_only": true, + "tier1": true, + "matched": [ + ".github/workflows/ci.yml", + ".github/workflows/pr-review-quorum.yml" + ], + "paths": 18, + "patterns": [ + "^\\.github/workflows/", + "(^|/)release[^/]*\\.(ya?ml|sh|rs|toml)$", + "cuda|kernel|\\.cu$|\\.ptx$", + "(^|/)[^/]*(gate|guard)[^/]*\\.(sh|rs|py)$|^hooks/", + "security|secret|credential|(^|/)deny\\.toml$", + "^skills/quorum-review/|(^|/)(receipt-lint|roadmap-lint|release-lint|kind-gate|model-gate)[^/]*$|^crates/prah-lint/" + ], + "builtin": "^skills/quorum-review/|(^|/)skills/paiml-implement/config\\.json$|(^|/)(modellib|lane-reduce|lane-fallback|lane-group|agy-lane|cc-lane|receipt-lint|route|quota)\\.sh$|^crates/prah-lint/" + }, + "bucket": { + "ledger": "/home/noah/.local/state/paiml-implement/agy-bucket.jsonl", + "window_s": 18000, + "pace": "off", + "buckets": { + "gemini": { + "bucket": "gemini", + "budget": 0, + "basis": "ledger: the calls served before the first 429 of the latest window that reached one", + "window_start": 1790861697, + "window_calls": 10, + "window_429": 0, + "hour_calls": 2, + "share": 1, + "want": 2, + "state": "empty", + "reason": "agy bucket gemini is empty: 10 calls in this window reach its budget 0 (ledger: the calls served before the first 429 of the latest window that reached one)" + } + }, + "closed": [] + } + }, + "auto_merge": { + "checked": true, + "was_armed": false, + "disarmed": false, + "note": "auto-merge not armed" + }, + "cheap_seat": "claude-haiku-4-5", + "canary": { + "skipped": "brief 238989 bytes > 24576" + }, + "advisory_lane": { + "state": "not-run", + "counts": false, + "row": { + "NotRun": "ContextOverflow" + }, + "verdict": "unavailable", + "why": "the brief is 238989 bytes, over quorum.advisory_lane.max_brief_bytes=196608; a cut brief is a different question, so the lane was not launched", + "served_by": null, + "gpu_proof": null, + "apr": null, + "apr_binary_sha256": null, + "apr_tag": null, + "apr_commit": null, + "apr_build_why": null, + "model": null, + "model_sha256": null, + "rc": 0, + "wall_s": 0, + "collected_s": 0, + "budget_s": 196, + "budget_basis": "ledger: 2 x p95 98 s over 126 gx10-cuda Verdict rows", + "brief": { + "bytes": 238989, + "sent_bytes": 0, + "max_bytes": 196608 + }, + "trace": null, + "attempts": [], + "ledger": "/home/noah/.local/state/paiml-implement/advisory-ledger.jsonl", + "raw": "advisory.json", + "agrees_with_counted": null, + "counted": "PASS" + }, + "lint": { + "ok": true, + "output": "receipt complete: kind=artifact lanes=3 author=claude-opus-5-5/claude same_family=2/2" + } +} diff --git a/docs/roadmaps/entries/PMAT-4646.yaml b/docs/roadmaps/entries/PMAT-4646.yaml new file mode 100644 index 0000000000..1377fe7dfa --- /dev/null +++ b/docs/roadmaps/entries/PMAT-4646.yaml @@ -0,0 +1,24 @@ +- id: PMAT-4646 + github_issue: 4646 + item_type: task + title: 'MUT-RATCHET: mutants gate -> ratchet mode (debt file shrink-only), operator C187/C188' + status: inprogress + priority: critical + assigned_to: aprender-ca + created: 2026-10-01T06:50:00Z + updated: 2026-10-01T10:00:00Z + spec: null + acceptance_criteria: + - ci/mutants-debt.tsv lists every known survivor of #4587 run 36725778557 and #4588 run 36703131059 as file, mutant, outcome, sha, run id (5 tab fields; outcome MissedMutant or Timeout) + - 'scripts/check_mutants_debt_ratchet.sh is RED on a grown, swapped, malformed, duplicated or missing debt file and on an unresolvable merge base, and GREEN on a shrink, a shrink to zero rows, or an unchanged file; and RED when no base is nameable (resolve_base refuses); its --self-test passes 16/16 (R1-R16: R14-R16 kill the three surviving guard mutants named by the 1f2e3598ea review)' + - The ci gate job reports the mutants section result but does not fail on it; every other required section (WT, guard-tree, guard-cargo, sov.gate, determinism) still fails the gate exactly as before + - No ruleset change, no timeout raised, no other gate relaxed; the reviewed source diff is ci.yml (one marked block), the debt file, the guard script, this roadmap entry and ONE queue-only fix to .github/workflows/pr-review-quorum.yml (below) only. The PR also carries the generated docs/roadmaps/roadmap.yaml and, once reviewed, its own receipt under evidence/pr-review/4647/ and its quorum verdict; those are outputs of review, not part of the diff under review + - '.github/workflows/pr-review-quorum.yml, queue-only fix, operator 2026-09-28 14:52Z (gate-keeping workflow edits with red/green proof are pre-approved): ARM4_PR_HEAD_SHA = github.event.pull_request.head.sha (empty on merge_group, so Arm 4 reads the PR head from the pulls API) and the job permission pull-requests: read. Before, the queue squash was passed as the head and every queued PR read UNSIGNED (runs 36888741583 and 36890960012; #4632 run 36602609576). No gate loosened: the signature must still verify under the repo key and its trusted comment must still name pr=, head= and pid= (the patch-id of the squash diff Arm 4 computes). Red/green on queue sha 79594c8362: old wiring rc 1 UNSIGNED, new rc 0, A3 corrupted-signature control still rejects' + - A RESTORE PR (#4648) deletes the ratchet block after v0.70.0 is on crates.io + - Out of scope, tracked in #4649 - comparing a PR's own mutants survivors with the debt file (a NEW survivor is RED); until then a new survivor is reported, not blocked + phases: [] + subtasks: [] + estimated_effort: null + labels: + - kind:code + notes: 'Operator C187(a)/C188(a), 2026-10-01: ratchet, not a waiver.' diff --git a/docs/roadmaps/entries/PMAT-4651.yaml b/docs/roadmaps/entries/PMAT-4651.yaml new file mode 100644 index 0000000000..3ea71f5f11 --- /dev/null +++ b/docs/roadmaps/entries/PMAT-4651.yaml @@ -0,0 +1,23 @@ +- id: PMAT-4651 + github_issue: 4651 + item_type: task + title: 'PP-LLAMA-001 §12: re-date rows 13, 15, 18, 19, 21 to 2026-10-15 (operator C197; not delivered for 0.70, carried to 0.71)' + status: inprogress + priority: critical + assigned_to: aprender-ca + created: 2026-10-01T12:45:00Z + updated: 2026-10-01T12:45:00Z + spec: docs/specifications/PP-LLAMA-001-MASTER.md + acceptance_criteria: + - Rows 13, 15, 19 and 21 carry Expires 2026-10-15 (was 2026-09-30) with the operator, ruling and reason in the row; row 18 derives 2026-10-15 from row 15 with no date typed + - An Appendix D row records who moved the expiry (operator Noah, ruling C197) and why ("not delivered for 0.70; carried to 0.71") + - evidence/parity/derived_expiries.json is regenerated by `bash scripts/spec_conformance.sh --write`, and exactly those five rows change + - The D6 andon in scripts/lib/spec_conformance.py is unchanged. `bash scripts/spec_conformance.sh` passes today, and with SPEC_CONFORMANCE_TODAY=2026-10-16 it is RED with D6 for the re-dated rows + - 'At release time, not in this PR: the 0.70 release notes (gh release v0.70.0) carry "NO SPEED DELIVERED: PP-LLAMA-001 rows 13, 15, 18, 19, 21 (re-dated to 2026-10-15)"' + - Out of scope, tracked in #4652 - a 7-day advance warning before any row expires + phases: [] + subtasks: [] + estimated_effort: null + labels: + - kind:docs + notes: 'Operator C197, 2026-10-01 12:40Z: re-date via the spec''s own procedure; check unchanged; not a waiver.' diff --git a/docs/roadmaps/roadmap.yaml b/docs/roadmaps/roadmap.yaml index 145d8aedf2..ce40dacc95 100644 --- a/docs/roadmaps/roadmap.yaml +++ b/docs/roadmaps/roadmap.yaml @@ -22233,3 +22233,50 @@ roadmap: labels: - kind:code notes: 'Cop ruling 2026-09-29 12:0xZ: P0 main fix, Cargo bump only, PR open by 13:00Z.' +- id: PMAT-4646 + github_issue: 4646 + item_type: task + title: 'MUT-RATCHET: mutants gate -> ratchet mode (debt file shrink-only), operator C187/C188' + status: inprogress + priority: critical + assigned_to: aprender-ca + created: 2026-10-01T06:50:00Z + updated: 2026-10-01T10:00:00Z + spec: null + acceptance_criteria: + - ci/mutants-debt.tsv lists every known survivor of #4587 run 36725778557 and #4588 run 36703131059 as file, mutant, outcome, sha, run id (5 tab fields; outcome MissedMutant or Timeout) + - 'scripts/check_mutants_debt_ratchet.sh is RED on a grown, swapped, malformed, duplicated or missing debt file and on an unresolvable merge base, and GREEN on a shrink, a shrink to zero rows, or an unchanged file; and RED when no base is nameable (resolve_base refuses); its --self-test passes 16/16 (R1-R16: R14-R16 kill the three surviving guard mutants named by the 1f2e3598ea review)' + - The ci gate job reports the mutants section result but does not fail on it; every other required section (WT, guard-tree, guard-cargo, sov.gate, determinism) still fails the gate exactly as before + - No ruleset change, no timeout raised, no other gate relaxed; the reviewed source diff is ci.yml (one marked block), the debt file, the guard script, this roadmap entry and ONE queue-only fix to .github/workflows/pr-review-quorum.yml (below) only. The PR also carries the generated docs/roadmaps/roadmap.yaml and, once reviewed, its own receipt under evidence/pr-review/4647/ and its quorum verdict; those are outputs of review, not part of the diff under review + - '.github/workflows/pr-review-quorum.yml, queue-only fix, operator 2026-09-28 14:52Z (gate-keeping workflow edits with red/green proof are pre-approved): ARM4_PR_HEAD_SHA = github.event.pull_request.head.sha (empty on merge_group, so Arm 4 reads the PR head from the pulls API) and the job permission pull-requests: read. Before, the queue squash was passed as the head and every queued PR read UNSIGNED (runs 36888741583 and 36890960012; #4632 run 36602609576). No gate loosened: the signature must still verify under the repo key and its trusted comment must still name pr=, head= and pid= (the patch-id of the squash diff Arm 4 computes). Red/green on queue sha 79594c8362: old wiring rc 1 UNSIGNED, new rc 0, A3 corrupted-signature control still rejects' + - A RESTORE PR (#4648) deletes the ratchet block after v0.70.0 is on crates.io + - Out of scope, tracked in #4649 - comparing a PR's own mutants survivors with the debt file (a NEW survivor is RED); until then a new survivor is reported, not blocked + phases: [] + subtasks: [] + estimated_effort: null + labels: + - kind:code + notes: 'Operator C187(a)/C188(a), 2026-10-01: ratchet, not a waiver.' +- id: PMAT-4651 + github_issue: 4651 + item_type: task + title: 'PP-LLAMA-001 §12: re-date rows 13, 15, 18, 19, 21 to 2026-10-15 (operator C197; not delivered for 0.70, carried to 0.71)' + status: inprogress + priority: critical + assigned_to: aprender-ca + created: 2026-10-01T12:45:00Z + updated: 2026-10-01T12:45:00Z + spec: docs/specifications/PP-LLAMA-001-MASTER.md + acceptance_criteria: + - Rows 13, 15, 19 and 21 carry Expires 2026-10-15 (was 2026-09-30) with the operator, ruling and reason in the row; row 18 derives 2026-10-15 from row 15 with no date typed + - An Appendix D row records who moved the expiry (operator Noah, ruling C197) and why ("not delivered for 0.70; carried to 0.71") + - evidence/parity/derived_expiries.json is regenerated by `bash scripts/spec_conformance.sh --write`, and exactly those five rows change + - The D6 andon in scripts/lib/spec_conformance.py is unchanged. `bash scripts/spec_conformance.sh` passes today, and with SPEC_CONFORMANCE_TODAY=2026-10-16 it is RED with D6 for the re-dated rows + - 'At release time, not in this PR: the 0.70 release notes (gh release v0.70.0) carry "NO SPEED DELIVERED: PP-LLAMA-001 rows 13, 15, 18, 19, 21 (re-dated to 2026-10-15)"' + - Out of scope, tracked in #4652 - a 7-day advance warning before any row expires + phases: [] + subtasks: [] + estimated_effort: null + labels: + - kind:docs + notes: 'Operator C197, 2026-10-01 12:40Z: re-date via the spec''s own procedure; check unchanged; not a waiver.' diff --git a/docs/specifications/PP-LLAMA-001-MASTER.md b/docs/specifications/PP-LLAMA-001-MASTER.md index 64755b0346..6916d2ab3d 100644 --- a/docs/specifications/PP-LLAMA-001-MASTER.md +++ b/docs/specifications/PP-LLAMA-001-MASTER.md @@ -362,15 +362,15 @@ Every row has an owner. `expires` is a date only on root rows; every other row i | 10 | `check_no_claim_literals.sh` universe widened to `docs/specifications/`; the live uncited figures receipted or baselined with a dated comment; `docs/benchmarking-gate-spec.md` archived; `parity_block.py` thresholds removed | PP-12, PP-33 | perf-gate | — | **LANDED** (this PR) — `claim_unreceipted` / `claim_receipted` | | 11 | `git merge-base --is-ancestor` + three shas in the validator | PP-18 | perf-gate | — | **LANDED** (this PR) — `ancestor_fail` / `ancestor_ok` (the `PERF_GATE_GIT_DIR` seam makes the case table hermetic) | | 12 | perf workflow with `concurrency: perf-`; pin expiry field; client sha field | PP-19, 20, 25 | perf-gate | — | **LANDED** (this PR) in the half that exists: `scripts/check_perf_concurrency_groups.sh` (`isolation_breach` / `isolation_ok`), the pin expiry (row 3) and the client sha. **The CI half for `lambda` and `mini` is `NA{decided_by: infra#359 (lambda has no CI runner by policy), #2841 (mini has no reachable class), date: 2026-09-02}`** — on those hosts the producer of isolation is the harness itself: `scripts/parity_host_receipt.sh` takes an exclusive `flock -n` on the cell lock for the whole run (`:158-176`; a held lock is a REFUSAL, never a queue) and `scripts/perf_isolation.sh` writes the `nvidia-smi --query-compute-apps` record before and after every band (`foreign_pid_breach` / `foreign_pid_ok` in its case table) | -| 13 | `cargo bench` batched Q4_K GEMV at `M ∈ {4,8}` against `M ∈ {16,32}`; then the M=4 kernel | §7.3, §9 #6 | serve | 1 | **OPEN**, unblocked 2026-09-20 when row 1 was discharged. Expires **2026-09-30** (anchor: the 0.69.0 milestone is due 2026-09-23; this row was blocked by row 1 until 2026-09-20, so it gets one full train, not the three days left of the current one. The owner may move this date with a stated basis — it is a deadline, not an estimate.) | +| 13 | `cargo bench` batched Q4_K GEMV at `M ∈ {4,8}` against `M ∈ {16,32}`; then the M=4 kernel | §7.3, §9 #6 | serve | 1 | **OPEN**, unblocked 2026-09-20 when row 1 was discharged. Expires **2026-10-15** (was 2026-09-30) (anchor: the 0.69.0 milestone is due 2026-09-23; this row was blocked by row 1 until 2026-09-20, so it gets one full train, not the three days left of the current one. The owner may move this date with a stated basis — it is a deadline, not an estimate.) Re-dated by the operator (Noah) 2026-10-01, ruling C197: not delivered for 0.70; carried to 0.71. #4651. | | 14 | `scripts/measure_bandwidth.sh` per host, committed | PP-23 | perf-gate | — | **LANDED** (this PR) — `evidence/bandwidth/lambda.json`; `roofline_exceeded` / `roofline_aggregate_ok`. Hosts other than `lambda` stay `UNMEASURED{owner: perf-gate}` until their file lands | -| 15 | **gx10 shakedown cell**, W1, `n >= 5` interleaved, at a commit containing 0b, 0c, 1, 6, 7 → a new LEDGER row | first conformant receipt | perf-gate | 0b, 0c, 1, 6, 7, 12 | **OPEN**, unblocked 2026-09-20 when row 1 was discharged. Expires **2026-09-30** (anchor: the 0.69.0 milestone is due 2026-09-23; this row was blocked by row 1 until 2026-09-20, so it gets one full train, not the three days left of the current one. The owner may move this date with a stated basis — it is a deadline, not an estimate.) | +| 15 | **gx10 shakedown cell**, W1, `n >= 5` interleaved, at a commit containing 0b, 0c, 1, 6, 7 → a new LEDGER row | first conformant receipt | perf-gate | 0b, 0c, 1, 6, 7, 12 | **OPEN**, unblocked 2026-09-20 when row 1 was discharged. Expires **2026-10-15** (was 2026-09-30) (anchor: the 0.69.0 milestone is due 2026-09-23; this row was blocked by row 1 until 2026-09-20, so it gets one full train, not the three days left of the current one. The owner may move this date with a stated basis — it is a deadline, not an estimate.) Re-dated by the operator (Noah) 2026-10-01, ruling C197: not delivered for 0.70; carried to 0.71. #4651. | | 16 | W3 open-loop workload | P-8 | perf-gate | 0b | **OPEN**, 2026-10-23 | | 17 | W4 token sweep | §9 #1 decomposition on lambda | perf-gate | 0b | **OPEN**, 2026-10-23 | | **18** | **reference cell**, lambda, W1, `n >= 5` interleaved, both lanes, derived ladder, one commit; `armed_by` set for every band that PASSES; document → `ARMED` | §7.5; §9 #3, #4 sized conformantly | perf-gate | 15 clean at `--phase merge` | **OPEN**, unblocked when row 1 was discharged. Expiry **derived from row 15**, not typed here: §12's preamble makes `expires` a date only on ROOT rows, 15 is still live, and D3 refuses a blocked row carrying ANY date literal — `status / expires` is ONE column, so a narrated date is indistinguishable from a declared one and this cell therefore states none. The intent behind the date that stood here — this row cannot start until 15 is clean at `--phase merge`, and dating it the same day as its own blocker would guarantee the andon fires on work that was never startable — belongs on row 15's date when 15 is discharged, or as a typed expiry here at that moment. The owner may set it then with a stated basis. | -| **19** | **speed**: §9 #5 (per-token host work) — registered prediction at most 3.5 ms per token | throughput on the gated cell | serve | 1, 6 | **OPEN**, unblocked 2026-09-20 when row 1 was discharged. Expires **2026-09-30** (anchor: the 0.69.0 milestone is due 2026-09-23; this row was blocked by row 1 until 2026-09-20, so it gets one full train, not the three days left of the current one. The owner may move this date with a stated basis — it is a deadline, not an estimate.) | +| **19** | **speed**: §9 #5 (per-token host work) — registered prediction at most 3.5 ms per token | throughput on the gated cell | serve | 1, 6 | **OPEN**, unblocked 2026-09-20 when row 1 was discharged. Expires **2026-10-15** (was 2026-09-30) (anchor: the 0.69.0 milestone is due 2026-09-23; this row was blocked by row 1 until 2026-09-20, so it gets one full train, not the three days left of the current one. The owner may move this date with a stated basis — it is a deadline, not an estimate.) Re-dated by the operator (Noah) 2026-10-01, ruling C197: not delivered for 0.70; carried to 0.71. #4651. | | **20** | **speed**: §9 #3 (prefill sync copies and allocs) — registered prediction under 10% API share | throughput on the gated cell, at the gated c=1 metric | serve | — | **OPEN**, **2026-10-23** | -| **21** | **speed**: §9 #1 KV-scatter root cause on Blackwell | gx10 c=1 fixed cost 16.75 s → under 1 s, conditional on row 2 showing the cost exists on the streaming transport | serve | 2 | **OPEN**, 2026-09-30 — dated here because row 2 was discharged and nothing derives this row's expiry any more (D2). Basis: it was blocked until 2026-09-20 and this is one full train past the 0.69.0 cut, matching rows 13/15/19. The owner may move it with a stated basis. **Row 2's condition is now MET**: the cost exists on the streaming transport and is linear at 9.042 ms/token (r² 0.999947, n=15, gx10 cc 121) — and `BATCHED_PREFILL=1` already reaches **0.099 s** at ~512 tokens, i.e. this row's "under 1 s" target is reachable on that path today; what remains is the KV-scatter root cause on the DEFAULT path. See `docs/audits/impl-PMAT-3556-receipt.md` | +| **21** | **speed**: §9 #1 KV-scatter root cause on Blackwell | gx10 c=1 fixed cost 16.75 s → under 1 s, conditional on row 2 showing the cost exists on the streaming transport | serve | 2 | **OPEN**, 2026-10-15 (was 2026-09-30) — dated here because row 2 was discharged and nothing derives this row's expiry any more (D2). Basis: it was blocked until 2026-09-20 and this is one full train past the 0.69.0 cut, matching rows 13/15/19. The owner may move it with a stated basis. **Row 2's condition is now MET**: the cost exists on the streaming transport and is linear at 9.042 ms/token (r² 0.999947, n=15, gx10 cc 121) — and `BATCHED_PREFILL=1` already reaches **0.099 s** at ~512 tokens, i.e. this row's "under 1 s" target is reachable on that path today; what remains is the KV-scatter root cause on the DEFAULT path. See `docs/audits/impl-PMAT-3556-receipt.md` Re-dated by the operator (Noah) 2026-10-01, ruling C197: not delivered for 0.70; carried to 0.71. #4651. | | **22** | **instrument**: a top-2 logit margin per generated token on the wire (`logprobs` on the SSE delta, both engines), so the witness can classify an `m=1`↔`m=c` divergence as a near-tie flip (margin below a declared τ at the divergence index) or a defect; PP-26 (c) then becomes a gate | PP-26 (c); the residual that (a)+(b) cannot see — a whole batch that is coherent and identically wrong | serve | — | **OPEN.** Root row. Why it exists: `GET /v1/chat/completions` answers `logprobs: null` (`realize_handlers_completion_request.rs`), so the divergence lambda measured (`evidence/perf041/lambda/m1-vs-m4-three-prompts.txt`) can be read by a person but not classified by the witness. Expires **2026-10-15** | Rows 19–21 are the deliverable. A version of this table with no speed row is a defect of the table. @@ -443,6 +443,7 @@ Append-only. PP-9 binds on `RECORDED`. Rows entered under the pre-v3 eleven-colu | 3.0.25 | 2026-09-02 | Citations re-verified against the tree after the code landed: §3/§4.3/§9 #7/Appendix A name the endpoint's `vram.*` keys (no `vram_peak` key exists); §9 #8 marked FIXED; §9 #1/#1a, §2.3 and §12 row 1 cite `gpu_profile.rs::select_prefill_path` / `multi_prompt_prefill_allowed`; §9 #3/#4 cite the decode and prefill lines of `findings.json`; §6 PP-6 and §12 row 0a name `run_phased`/`arm_phase`/`arm_l3_parity`/`arm_a_self_regression`; §7.1 ci.yml anchors by grep; §10's `FUSED_GATE_UP` read and refusal lines; §6 PP-12's surviving exclusions; §12 row 12 cites the `flock` that now exists; §6 PP-19 gains the foreign-PID surface | review of this PR | | 3.1 | 2026-09-03 | PP-9's live scan read the ledger's first pipe table only; a blank line after row 4 left rows 5 and 6 outside it, and a re-spend of row 6 as row 7 passed `spec_conformance.sh`. L2 now refuses every ledger row outside the table it reads: any pipe line after the first table, to the end of the file, with a cell that starts with `RECORDED` or `CONFORMANT` (the tiers PP-9 binds on, read through the same normalisation as every other cell) — the row's id is reported, never required, and no width, leading-pipe, run, header or heading condition stands between such a row and the rule, because four review rounds on #2861 each removed one an author could satisfy; `RECORDED` and `CONFORMANT` are therefore reserved words wherever they start a cell in `LEDGER.md`. Rows found by L2 also enter the L1 spend check, which dedupes every row that claims a tier and reads every key cell through the one normaliser (code tags, format characters, no-break spaces, whitespace runs and wrapping emphasis off; casefolded), because a formatting habit must not make a second run new — a key disguised past that is a forged row the diff shows. L3 refuses a first-table row whose cell count differs from the header's; L0 refuses a first table that is not the ledger. The ledger is re-joined; twenty-nine cases are named beside PP-9's and scripts/mutate_spec_conformance.sh kills 15 of 15 over a green baseline, a crash counted as unviable (PMAT-930, PMAT-931, PMAT-932, PMAT-933, PMAT-934, PMAT-935) | | 3.1 | 2026-09-15 | `scripts/llama_pin.toml` re-pinned `39173bcac` (2026-01-15) → `d1d3c3396` (2026-09-15), `pinned_on` 2026-09-15; `pin_expiry` unchanged. The old pin predates upstream Qwen3.5 support (`fc0fe4004`, 2026-02-10): `grep -c qwen35 src/llama-arch.cpp` is 0 at the old pin and 2 at the new one, and a CPU build on `intel` at `d1d3c3396` loads `Qwen3.5-0.8B-Q4_K_M.gguf` (`general.architecture str = qwen35`) and emits a token, rc 0. `GET /props` re-read at both argvs (`evidence/parity/props-d1d3c3396-{template,np16}.json`: `total_slots` 4 / 16, `n_ctx` 4096 / 1024, unchanged). The row-0a comparator lane re-measured at both pins side by side is `LEDGER.md` row 12. PP-20: every ratio against `39173bcac` is incomparable with one against `d1d3c3396`. | the 0.68 Qwen3.5 scope (#3329) had no comparator at the old pin | PMAT-3329 | +| 3.1 | 2026-10-01 | §12 rows 13, 15, 19 and 21 re-dated **2026-09-30 → 2026-10-15**; row 18 follows, because its date is derived from row 15 and none is typed. **Moved by: the operator (Noah), ruling C197.** None of the five was discharged by its expiry, and on 2026-10-01 the D6 andon turned every PR and main RED. The andon itself is unchanged: with `SPEC_CONFORMANCE_TODAY=2026-10-16` it is RED again for these rows. §12's on-expiry consequence is carried, not waived: the 0.70 release notes say `NO SPEED DELIVERED: PP-LLAMA-001 rows 13, 15, 18, 19, 21 (re-dated to 2026-10-15)`. `evidence/parity/derived_expiries.json` was regenerated with `--write`; exactly these five rows changed. | not delivered for 0.70; carried to 0.71 | #4651 (advance warning before expiry: #4652) | ## Appendix E — Landing a rule, and what to run before pushing diff --git a/evidence/parity/derived_expiries.json b/evidence/parity/derived_expiries.json index d998c6af85..00e1a4fd99 100644 --- a/evidence/parity/derived_expiries.json +++ b/evidence/parity/derived_expiries.json @@ -69,7 +69,7 @@ ], "derived_from": [], "discharged": false, - "expires": "2026-09-30", + "expires": "2026-10-15", "root": false }, "14": { @@ -90,7 +90,7 @@ ], "derived_from": [], "discharged": false, - "expires": "2026-09-30", + "expires": "2026-10-15", "root": false }, "16": { @@ -119,7 +119,7 @@ "15" ], "discharged": false, - "expires": "2026-09-30", + "expires": "2026-10-15", "root": false }, "19": { @@ -129,7 +129,7 @@ ], "derived_from": [], "discharged": false, - "expires": "2026-09-30", + "expires": "2026-10-15", "root": false }, "2": { @@ -152,7 +152,7 @@ ], "derived_from": [], "discharged": false, - "expires": "2026-09-30", + "expires": "2026-10-15", "root": false }, "22": { diff --git a/evidence/pr-review/4647/1f2e3598eab98240fc12ccd3bcffd201348b470f/findings.sarif b/evidence/pr-review/4647/1f2e3598eab98240fc12ccd3bcffd201348b470f/findings.sarif new file mode 100644 index 0000000000..e7ecb14bbd --- /dev/null +++ b/evidence/pr-review/4647/1f2e3598eab98240fc12ccd3bcffd201348b470f/findings.sarif @@ -0,0 +1,141 @@ +{ + "version": "2.1.0", + "$schema": "https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json", + "runs": [ + { + "tool": { + "driver": { + "name": "pmat", + "informationUri": "https://github.com/paiml/pmat", + "rules": [] + } + }, + "invocations": [ + { + "executionSuccessful": true, + "commandLine": "pmat query \"mutants debt ratchet shrink-only baseline\" --limit 5; scripts/pr_review_duplication_scan.sh --rust-semantic; plus the measured commands in each result" + } + ], + "results": [ + { + "ruleId": "PRREV-RATCHET-002", + "level": "warning", + "message": { + "text": "The guard can never reach an empty baseline: a head file with zero data rows (header only, or zero bytes) is reported RED as 'malformed (need 5 tab fields)' because `check_rows <<<\"$head\"` feeds awk one empty line (NF=0). A missing file is RED too (R2). So killing the LAST survivor cannot be committed under this guard, and the self-test has no case for it (R3 shrinks 2 -> 1, never to 0)." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "scripts/check_mutants_debt_ratchet.sh" + }, + "region": { + "startLine": 41 + } + } + } + ], + "properties": { + "grounding": "measured", + "command": [ + "bash", + "/tmp/rvprobe.sh" + ], + "exit_code": 0, + "stdout_sha256": "753d2485bb46162471372886951ecbe0daaade8ec968757254ed492ea8efb46b", + "failure_scenario": "Once the debt file is shrunk to its final row and that survivor is killed, the PR that deletes the last row fails guard-tree with 'malformed rows'; the author must edit the guard (or leave a dummy row) to finish the paydown, so the ratchet's goal state is unreachable as written.", + "precision_class": "advisory" + } + }, + { + "ruleId": "PRREV-CI-COMMENT-001", + "level": "note", + "message": { + "text": "ci.yml:456 still says 'The blocking rule is the shrink-only survivor baseline'. The roadmap now states (AC5, #4649) that a NEW survivor is reported, not blocked; what blocks is only hand-edits that grow the debt file. The comment reads as stronger than the mechanism." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": ".github/workflows/ci.yml" + }, + "region": { + "startLine": 456 + } + } + } + ], + "properties": { + "grounding": "asserted", + "rationale": "Reading ci.yml 454-464, the guard script's inputs (debt file at HEAD and merge base only) and PMAT-4646.yaml AC5.", + "failure_scenario": "A maintainer reads the ci.yml comment, believes new mutation survivors are blocked, and does not notice that between this merge and #4648/#4649 they are neither blocked nor ledgered.", + "precision_class": "advisory" + } + } + ] + }, + { + "tool": { + "driver": { + "name": "cargo-mutants", + "informationUri": "https://github.com/paiml/aprender", + "rules": [] + } + }, + "invocations": [ + { + "executionSuccessful": true, + "commandLine": "scoped guard mutation: 11 sed mutants of scripts/check_mutants_debt_ratchet.sh vs its --self-test (driver name is the receipt vocabulary slot; not a cargo-mutants run)" + } + ], + "results": [ + { + "ruleId": "PRREV-MUT-002", + "level": "warning", + "message": { + "text": "11 hand-written sed mutants of scripts/check_mutants_debt_ratchet.sh (a /tmp copy; repo untouched), each run through the script's own --self-test: 11 attempted, 8 killed, 3 survived. Survivors are rules the guard states and the 12-case self-test does not exercise: (1) bad-run-id check `$5 !~ /^[0-9]+$/` weakened to accept an empty run id (line 33); (2) `index($2,$1) != 1` weakened to `< 0`, so a mutant that names its file anywhere, not at the start, passes (line 34); (3) `NF != 5` weakened to `NF < 5`, so a 6-field row passes (line 30). Not a committed mutation set: none exists for this script, so this is the reviewer's measurement and is not scored as B3." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "scripts/check_mutants_debt_ratchet.sh" + }, + "region": { + "startLine": 30 + } + } + } + ], + "properties": { + "grounding": "measured", + "command": [ + "bash", + "/tmp/rvmut/run.sh" + ], + "exit_code": 0, + "stdout_sha256": "2a5a0a3a3c59d34f55b0254a848689aee544f4d11fe918b0735405b2b39d2a3b", + "failure_scenario": "A debt row with an empty run id, a 6th field, or a mutant string that only contains its file name mid-string is accepted into ci/mutants-debt.tsv; a later regression that loosens any of these three awk rules passes guard-tree green.", + "precision_class": "advisory" + } + } + ] + }, + { + "tool": { + "driver": { + "name": "antigravity", + "informationUri": "https://github.com/paiml/aprender", + "rules": [] + } + }, + "invocations": [ + { + "executionSuccessful": true, + "commandLine": "agy -p --model gemini-3.1-pro-high --output-format json --json-schema .pr-review-schema.json --print-timeout 20m --dangerously-skip-permissions (disposable git-archive tree)" + } + ], + "results": [] + } + ] +} diff --git a/evidence/pr-review/4647/1f2e3598eab98240fc12ccd3bcffd201348b470f/receipt.intoto.jsonl b/evidence/pr-review/4647/1f2e3598eab98240fc12ccd3bcffd201348b470f/receipt.intoto.jsonl new file mode 100644 index 0000000000..b249c220e5 --- /dev/null +++ b/evidence/pr-review/4647/1f2e3598eab98240fc12ccd3bcffd201348b470f/receipt.intoto.jsonl @@ -0,0 +1 @@ +{"_type":"https://in-toto.io/Statement/v1","subject":[{"name":"git+https://github.com/paiml/aprender","digest":{"sha1":"1f2e3598eab98240fc12ccd3bcffd201348b470f"}}],"predicateType":"https://paiml.dev/attestations/pr-review/v2","predicate":{"skill_version":"2.1.0","attestation_level":"L1-self","pr":4647,"base_sha":"00052c01284caa74c70b287088a79c6dee2959b9","head_sha":"1f2e3598eab98240fc12ccd3bcffd201348b470f","author_actor":{"kind":"agent","id":"agent:claude-opus-5-5/aprender-ca"},"reviewer_actor":{"kind":"agent","id":"agent:claude-sonnet-5-5/pr-4647-review"},"review_scope":{"diff_shortstat":"5 files changed, 788 insertions(+)","files":[".github/workflows/ci.yml","ci/mutants-debt.tsv","docs/roadmaps/entries/PMAT-4646.yaml","docs/roadmaps/roadmap.yaml","scripts/check_mutants_debt_ratchet.sh"],"ticket":"PMAT-4646","read_in_full":"check_mutants_debt_ratchet.sh, the ci.yml gate block, PMAT-4646.yaml AC delta vs 368f05fbd2; ci/mutants-debt.tsv as a parsed table, not row by row. Prior receipt for #4647 at 368f05fbd2 was a different head; this review re-ran every measurement at 1f2e3598ea."},"affected_crates":[],"verdict":"FINDINGS","consultations":{"pmat":{"status":"consulted","transport":"cli","transport_unavailable":[],"mcp_attempted":false,"transport_note":"The pmat CLI answered. The pmat MCP server was not tried in this run (not a claim that it is down).","index_commit":"1f2e3598eab98240fc12ccd3bcffd201348b470f","index_is_ancestor":true,"index_worktree_dirty":false,"index_worktree_note":"Index rebuilt in this worktree at HEAD (92339 functions, 47.5s build, 83s query). git status showed one untracked file, docs/audits/quorum-PMAT-4646.prompt.md; no tracked file modified.","cache_hits":0,"complexity_delta":[],"tdg_delta":[],"satd_introduced":[],"analysis_note":"Diff adds one shell script and no Rust; pmat computes no complexity/TDG for shell, so those arrays are empty by construction. A TODO/FIXME/HACK/XXX grep over added lines found none (satd_introduced empty on that basis, not on pmat analyze satd). The one semantic hit, ratchet_finding in aprender-contracts (PV-ONT-016), is a Rust lint over a different artifact, not prior art for this guard.","duplication_hits":[{"needle":"check_rows","kind":"name","where":"HEAD","ref":"HEAD","path":"evidence/parity/l0-1/intel/qwen35-apr-vs-reference/layerwise/kernel_isolation.py","line":69,"method":"lexical"},{"needle":"check_rows","kind":"name","where":"HEAD","ref":"HEAD","path":"evidence/parity/l0-1/intel/qwen35-apr-vs-reference/layerwise/kernel_isolation.py","line":89,"method":"lexical"},{"needle":"check_rows","kind":"name","where":"HEAD","ref":"HEAD","path":"experiments/cuda-oxide/q4k-matvec/src/main.rs","line":65,"method":"lexical"},{"needle":"check_rows","kind":"name","where":"HEAD","ref":"HEAD","path":"experiments/cuda-oxide/q4k-matvec/src/main.rs","line":66,"method":"lexical"},{"needle":"check_rows","kind":"name","where":"HEAD","ref":"HEAD","path":"experiments/cuda-oxide/q4k-matvec/src/main_rawptr_abi.rs","line":132,"method":"lexical"},{"needle":"check_rows","kind":"name","where":"HEAD","ref":"HEAD","path":"experiments/cuda-oxide/q4k-matvec/src/main_rawptr_abi.rs","line":167,"method":"lexical"},{"needle":"mutants-debt.tsv","kind":"filename","where":"branch","ref":"origin/fix/4646-mutants-restore","path":"ci/mutants-debt.tsv","line":0,"method":"lexical"},{"needle":"check_mutants_debt_ratchet.sh","kind":"filename","where":"branch","ref":"origin/fix/4646-mutants-restore","path":"scripts/check_mutants_debt_ratchet.sh","line":0,"method":"lexical"}],"duplication_coverage":{"rust":"semantic","shell":"lexical","python":"lexical","config":"lexical","docs":"lexical","other":"lexical","sibling_branches":"lexical","merge_base_to_main":"lexical"},"duplication_horizon":["head=1f2e3598eab98240fc12ccd3bcffd201348b470f","siblings=refs/remotes/origin/* unmerged into origin/main","merge_base_to_main=00052c01284caa74c70b287088a79c6dee2959b9..refs/remotes/origin/main"],"horizon_branches_total":1159,"horizon_branches_scanned":1159,"merge_base_to_main_files":0,"symbols_searched":10,"duplication_note":"8 hits are name collisions on the identifier check_rows in unrelated files (a python script and Rust experiments); none re-implements the ratchet.","cost":{"wall_seconds":130}},"cuda":{"status":"not-triggered","trigger_reason":"The diff touches ci.yml gate shell, a debt TSV, a bash guard and roadmap YAML: no .cu/.ptx/kernel Rust and no device-behaviour claim. Not evaluated by the guard's --match-path over the five changed paths by eye; none contain cuda/ptx/cublas/fp8/nvrtc."},"crux":{"status":"not-triggered","trigger_reason":"No CLI subcommand, flag, HTTP route, MCP tool or output format of a shipped binary changed, and no comparative performance claim is added; the changes are CI-internal.","surfaces":[],"contracts":[],"comparative_claims":[]},"mutation":{"status":"consulted","scope":"guard","attempted":11,"killed":8,"survivors":[{"mutant":"bad-run-id rule accepts empty run id ($5 !~ /^[0-9]*$/)","file":"scripts/check_mutants_debt_ratchet.sh","line":33,"killed":false},{"mutant":"index($2,$1) != 1 weakened to < 0","file":"scripts/check_mutants_debt_ratchet.sh","line":34,"killed":false},{"mutant":"NF != 5 weakened to NF < 5","file":"scripts/check_mutants_debt_ratchet.sh","line":30,"killed":false}],"note":"Scoped to the one changed guard script: 11 hand-written sed mutants vs its own 12-case --self-test, in a /tmp copy. scripts/mutate-guard.sh covers only check_pr_review_receipt.sh, so no committed mutation set exists for this script; 8/11 is this review's measurement, not a committed-set score. Whether B3 applies to an ad-hoc set is left to the quorum/author."},"antigravity":{"status":"consulted","attempted":1,"agy_version":"agy 1.2.14","binary_path":"/home/noah/.local/bin/agy","model_id":"gemini-3.1-pro-high","model_family":"google/gemini","exit_code":0,"duration_seconds":324.748011777,"agy_status":"SUCCESS","usage":{"input_tokens":167515,"output_tokens":23642,"total_tokens":191157,"thinking_tokens":20059,"cache_read_tokens":2898416},"output_check":{"structured_output_present":true,"reviewed":true,"schema_valid":true},"response_sha256":"5a960f1025f967165c36924ab7d5d5296ece374fd13903513add2f435a48505b","reverified_by_primary":false,"divergence":{"agreed":0,"agy_only":0,"primary_only":3,"contradicted":0},"divergence_note":"agy returned reviewed:true with no findings. It did not raise the empty-baseline RED, the three surviving mutants or the ci.yml comment overclaim. The empty-baseline defect is a measured counterexample to 'no findings'; no opposing conclusion on one subject.","findings":[]}},"findings_ref":{"path":"findings.sarif","sha256":"421e9ade69b6a79fe05c7693db64b513f44e64f20014d9767f505d2fdb2b81a3"},"cost":{"input_tokens":167515,"output_tokens":23642,"wall_seconds":1500,"note":"input/output tokens are the single agy review run; this reviewer session tokens are not instrumented. wall_seconds approximate."}}} diff --git a/evidence/pr-review/4647/65d3fb620266e1bf7f80e026201fde16a7e2752f/findings.sarif b/evidence/pr-review/4647/65d3fb620266e1bf7f80e026201fde16a7e2752f/findings.sarif new file mode 100644 index 0000000000..b5cae88792 --- /dev/null +++ b/evidence/pr-review/4647/65d3fb620266e1bf7f80e026201fde16a7e2752f/findings.sarif @@ -0,0 +1,136 @@ +{ + "version": "2.1.0", + "$schema": "https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json", + "runs": [ + { + "tool": { + "driver": { + "name": "pmat", + "informationUri": "https://github.com/paiml/pmat", + "rules": [] + } + }, + "invocations": [ + { + "executionSuccessful": true, + "commandLine": "pmat query \"shrink-only baseline ratchet guard\" --limit 5; pmat query \"mutants debt baseline survivors\" --limit 5; scripts/pr_review_duplication_scan.sh --rust-semantic; plus the measured commands in each result" + } + ], + "results": [ + { + "ruleId": "PRREV-RATCHET-002", + "level": "warning", + "message": { + "text": "Still present at 65d3fb6202 (reported on the earlier head 1f2e3598ea; no change to the script since): the guard can never reach an empty baseline. A head debt file with zero data rows (header only) is RED as 'malformed (need 5 tab fields)' because `check_rows <<<\"$head\"` feeds awk one empty line (NF=0). Re-measured in a scratch repo: base has one row, head is '# h' only, MUTANTS_DEBT_BASE=base, rc=1, 'malformed rows'. The 12-case self-test has no case for it (R3 shrinks 2->1, never to 0)." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "scripts/check_mutants_debt_ratchet.sh" + }, + "region": { + "startLine": 41 + } + } + } + ], + "properties": { + "grounding": "measured", + "command": [ + "bash", + "scripts/check_mutants_debt_ratchet.sh", + "(scratch repo: header-only ci/mutants-debt.tsv at head, one-row copy at base, MUTANTS_DEBT_BASE=base)" + ], + "exit_code": 1, + "stdout_sha256": "d14210eff1a275470894d91edcae22cdb6731fdaa7c042ad4f21222f391ba420", + "failure_scenario": "When the last survivor is killed and the PR deletes the last data row, guard-tree fails with 'malformed rows'; the author must edit the guard or keep a dummy row, so the ratchet's goal state (empty debt) is unreachable as written.", + "precision_class": "advisory" + } + }, + { + "ruleId": "PRREV-RATCHET-003", + "level": "note", + "message": { + "text": "Rows key on the cargo-mutants name, which embeds line:col (e.g. liskov.rs:119:5). Any edit to a baselined file that shifts a survivor's line changes its string; the guard reads that as a NEW row (RED) and the only way to turn it green is to DELETE the row, which the shrink-only rule scores as a kill. With mutants report-only meanwhile, a line shift can launder a survivor out of the baseline without a test killing it, and a legitimate edit near a survivor is blocked until someone deletes its row." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "scripts/check_mutants_debt_ratchet.sh" + }, + "region": { + "startLine": 63 + } + } + } + ], + "properties": { + "grounding": "asserted", + "rationale": "Reading the rows format (ci/mutants-debt.tsv header, 590 rows keyed on file:line:col mutant strings) and the comm -23 comparison at lines 62-70 of the guard; not exercised against a real shifted file this run.", + "failure_scenario": "A PR reflows a file holding a baselined survivor: the row no longer matches, the guard demands deletion, the author deletes it, and the debt count falls with no test added.", + "precision_class": "advisory" + } + }, + { + "ruleId": "PRREV-CI-COMMENT-001", + "level": "note", + "message": { + "text": "ci.yml:456 still says 'The blocking rule is the shrink-only survivor baseline'. What the guard blocks is only hand-edits that GROW the debt file; a new surviving mutant in a PR is neither blocked nor ledgered while the gate is report-only (new-survivor detection is #4649). The comment reads stronger than the mechanism." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": ".github/workflows/ci.yml" + }, + "region": { + "startLine": 456 + } + } + } + ], + "properties": { + "grounding": "asserted", + "rationale": "Reading ci.yml 454-464 and the guard's inputs (the debt file at HEAD and at the merge base only).", + "failure_scenario": "A maintainer believes new mutation survivors are blocked and does not notice that between this merge and #4648/#4649 they are neither blocked nor recorded.", + "precision_class": "advisory" + } + } + ] + }, + { + "tool": { + "driver": { + "name": "cargo-mutants", + "informationUri": "https://github.com/paiml/aprender", + "rules": [] + } + }, + "invocations": [ + { + "executionSuccessful": true, + "commandLine": "scoped guard mutation: 10 sed mutants of scripts/check_mutants_debt_ratchet.sh vs its --self-test in a /tmp copy; 10 attempted, 10 killed (driver name is the receipt vocabulary slot; not a cargo-mutants run)" + } + ], + "results": [] + }, + { + "tool": { + "driver": { + "name": "antigravity", + "informationUri": "https://github.com/paiml/aprender", + "rules": [] + } + }, + "invocations": [ + { + "executionSuccessful": true, + "commandLine": "agy -p --model gemini-3.1-pro-high --output-format json --json-schema .pr-review-schema.json --print-timeout 9m --dangerously-skip-permissions (disposable git-archive tree)" + } + ], + "results": [] + } + ] +} diff --git a/evidence/pr-review/4647/65d3fb620266e1bf7f80e026201fde16a7e2752f/receipt.intoto.jsonl b/evidence/pr-review/4647/65d3fb620266e1bf7f80e026201fde16a7e2752f/receipt.intoto.jsonl new file mode 100644 index 0000000000..22320db96a --- /dev/null +++ b/evidence/pr-review/4647/65d3fb620266e1bf7f80e026201fde16a7e2752f/receipt.intoto.jsonl @@ -0,0 +1 @@ +{"_type":"https://in-toto.io/Statement/v1","subject":[{"name":"git+https://github.com/paiml/aprender","digest":{"sha1":"65d3fb620266e1bf7f80e026201fde16a7e2752f"}}],"predicateType":"https://paiml.dev/attestations/pr-review/v2","predicate":{"skill_version":"2.1.0","attestation_level":"L1-self","pr":4647,"base_sha":"00052c01284caa74c70b287088a79c6dee2959b9","head_sha":"65d3fb620266e1bf7f80e026201fde16a7e2752f","author_actor":{"kind":"agent","id":"agent:claude-opus-5-5/aprender-ca"},"reviewer_actor":{"kind":"agent","id":"agent:claude-sonnet-5-5/pr-4647-review"},"review_scope":{"tickets":["PMAT-4646","PMAT-4651"],"diff_shortstat":"merge-base diff 00052c0128..65d3fb6202, 10 files; prior evidence/pr-review receipts excluded from review","pmat_4651_checks":{"rows_moved_in_derived_expiries":"exactly /rows/13,15,18,19,21 expires 2026-09-30 -> 2026-10-15 (python JSON tree walk old vs new: 5 differences, nothing else)","spec_conformance_py_untouched":"git diff --stat base..head over scripts/lib/spec_conformance.py and scripts/spec_conformance.sh is empty","spec_conformance_today":"bash scripts/spec_conformance.sh exit 0 (PASS)","spec_conformance_2026_10_16":"SPEC_CONFORMANCE_TODAY=2026-10-16 bash scripts/spec_conformance.sh exit 1, D6 for rows 13,15,18,19,21","not_run":"derived_expiries.json was not regenerated with --write (read-only review); the change was verified by diff and by the two spec_conformance runs"},"other_measurements":["check_mutants_debt_ratchet.sh --self-test: PASSED 12 cases","check_mutants_debt_ratchet.sh at HEAD: PASS introduced 590 rows (no copy at merge base)","check_ci_gate_mutants_rule.sh: PASS","guard_tree.sh runs git ls-files scripts/check_*.sh, so the new guard is wired without a ci.yml edit"]},"affected_crates":[],"verdict":"FINDINGS","consultations":{"pmat":{"status":"consulted","transport":"cli","transport_unavailable":[],"mcp_attempted":false,"transport_note":"The pmat CLI answered. The pmat MCP server was not tried in this run (not a claim that it is down).","index_commit":"65d3fb620266e1bf7f80e026201fde16a7e2752f","index_is_ancestor":true,"index_worktree_dirty":true,"index_worktree_note":"pmat found its index stale and rebuilt it at HEAD in this worktree (query 86 s). git status showed two untracked files (docs/audits/quorum-PMAT-4646*); no tracked file modified.","cache_hits":0,"complexity_delta":[],"tdg_delta":[],"satd_introduced":[],"analysis_note":"The diff has no .rs file and pmat computes no complexity/TDG for shell, so those arrays are empty by construction (pmat analyze complexity/tdg were not run). A TODO/FIXME/HACK/XXX grep over added lines (TSV and prior receipts excluded) found 0; satd_introduced is empty on that basis, not on pmat analyze satd. The semantic queries returned no prior art for this guard. The only sibling-branch hits are origin/fix/4646-mutants-restore (RESTORE PR #4648, tip c1ebd31d9c), which carries the same two files by design.","duplication_hits":[{"needle":"check_rows","kind":"name","where":"HEAD","ref":"HEAD","path":"evidence/parity/l0-1/intel/qwen35-apr-vs-reference/layerwise/kernel_isolation.py","line":69,"method":"lexical"},{"needle":"check_rows","kind":"name","where":"HEAD","ref":"HEAD","path":"evidence/parity/l0-1/intel/qwen35-apr-vs-reference/layerwise/kernel_isolation.py","line":89,"method":"lexical"},{"needle":"check_rows","kind":"name","where":"HEAD","ref":"HEAD","path":"experiments/cuda-oxide/q4k-matvec/src/main.rs","line":65,"method":"lexical"},{"needle":"check_rows","kind":"name","where":"HEAD","ref":"HEAD","path":"experiments/cuda-oxide/q4k-matvec/src/main.rs","line":66,"method":"lexical"},{"needle":"check_rows","kind":"name","where":"HEAD","ref":"HEAD","path":"experiments/cuda-oxide/q4k-matvec/src/main_rawptr_abi.rs","line":132,"method":"lexical"},{"needle":"check_rows","kind":"name","where":"HEAD","ref":"HEAD","path":"experiments/cuda-oxide/q4k-matvec/src/main_rawptr_abi.rs","line":167,"method":"lexical"},{"needle":"mutants-debt.tsv","kind":"filename","where":"branch","ref":"origin/fix/4646-mutants-restore","path":"ci/mutants-debt.tsv","line":0,"method":"lexical"},{"needle":"check_mutants_debt_ratchet.sh","kind":"filename","where":"branch","ref":"origin/fix/4646-mutants-restore","path":"scripts/check_mutants_debt_ratchet.sh","line":0,"method":"lexical"}],"duplication_coverage":{"rust":"semantic","shell":"lexical","python":"lexical","config":"lexical","docs":"lexical","other":"lexical","sibling_branches":"lexical","merge_base_to_main":"lexical"},"duplication_horizon":["head=65d3fb620266e1bf7f80e026201fde16a7e2752f","siblings=refs/remotes/origin/* unmerged into origin/main","merge_base_to_main=00052c01284caa74c70b287088a79c6dee2959b9..refs/remotes/origin/main"],"horizon_branches_total":1159,"horizon_branches_scanned":1159,"merge_base_to_main_files":0,"symbols_searched":16},"cuda":{"status":"not-triggered","trigger_reason":"scripts/check_pr_review_receipt.sh --match-path over every changed path matched none, and --match-message over the commit messages base..head returned 1 (no match). The diff is ci.yml shell, a debt TSV, a bash guard, roadmap YAML, a spec table and a JSON of expiries: no device-behaviour claim."},"crux":{"status":"not-triggered","trigger_reason":"No CLI subcommand, flag, HTTP route, MCP tool, config key or output format of a shipped binary changed, and no comparative performance claim is added; the changes are CI-internal plus a spec re-date.","surfaces":[],"contracts":[],"comparative_claims":[]},"mutation":{"status":"consulted","scope":"guard","attempted":10,"killed":10,"survivors":[],"note":"Scoped to the one changed guard script: 10 hand-written sed mutants (NF, outcome set, index prefix, sha width, run-id regex, comm direction, dup-test polarity, missing-file polarity, merge-base error swallow, introduction short-circuit) run through the script own --self-test in a /tmp copy; none was a no-op. The three survivors reported on 1f2e3598ea (NF, index, run-id) are now killed by the equivalent mutants. scripts/mutate-guard.sh covers only check_pr_review_receipt.sh, so no committed mutation set exists for this script; 10/10 is this review measurement, not a committed-set score."},"antigravity":{"status":"consulted","attempted":1,"agy_version":"agy 1.2.14","binary_path":"/home/noah/.local/bin/agy","model_id":"gemini-3.1-pro-high","model_family":"google/gemini","exit_code":0,"duration_seconds":192.586687903,"agy_status":"SUCCESS","usage":{"input_tokens":138736,"output_tokens":14504,"thinking_tokens":12308,"cache_read_tokens":1344890,"total_tokens":153240},"output_check":{"structured_output_present":true,"reviewed":true,"schema_valid":true},"reverified_by_primary":false,"divergence":{"agreed":0,"agy_only":0,"primary_only":3,"contradicted":0},"divergence_note":"agy returned reviewed:true with no findings (diff passed as a file, TSV and prior receipts omitted). It did not raise the empty-baseline RED, the line-shift laundering or the ci.yml comment overclaim. No opposing conclusion on one subject.","findings":[]}},"findings_ref":{"path":"findings.sarif","sha256":"403d99deafe4d00330a4b7a488e03227d9d907296e50e1aaf4da1fc2e404ee55"},"cost":{"input_tokens":138736,"output_tokens":14504,"wall_seconds":1500,"note":"input/output tokens are the single agy review run; this reviewer session tokens are not instrumented. wall_seconds approximate."}}} diff --git a/evidence/pr-review/4647/a683b4a5283ed971fd6de1836783ab4246310e21/findings.sarif b/evidence/pr-review/4647/a683b4a5283ed971fd6de1836783ab4246310e21/findings.sarif new file mode 100644 index 0000000000..7a454cc4bd --- /dev/null +++ b/evidence/pr-review/4647/a683b4a5283ed971fd6de1836783ab4246310e21/findings.sarif @@ -0,0 +1,105 @@ +{ + "version": "2.1.0", + "$schema": "https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json", + "runs": [ + { + "tool": { + "driver": { + "name": "pmat", + "informationUri": "https://github.com/paiml/pmat", + "rules": [] + } + }, + "invocations": [ + { + "executionSuccessful": true, + "commandLine": "pmat query \"shrink-only mutants debt ratchet\" --limit 5 (index rebuilt at HEAD, 103 s); scripts/pr_review_duplication_scan.sh --rust-semantic; plus the measured commands in each result" + } + ], + "results": [ + { + "ruleId": "PRREV-RATCHET-003", + "level": "note", + "message": { + "text": "Rows key on the cargo-mutants name, which embeds line:col (e.g. liskov.rs:119:5). Any edit to a baselined file that shifts a survivor's line changes its string; the guard reads that as a NEW row (RED) and the only way to turn it green is to DELETE the row, which the shrink-only rule scores as a kill. With mutants report-only meanwhile, a line shift can launder a survivor out of the baseline without a test killing it, and a legitimate edit near a survivor is blocked until someone deletes its row." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "scripts/check_mutants_debt_ratchet.sh" + }, + "region": { + "startLine": 57 + } + } + } + ], + "properties": { + "grounding": "asserted", + "rationale": "Reading the rows format (ci/mutants-debt.tsv header, 590 rows keyed on file:line:col mutant strings) and the comm -23 comparison at lines 62-70 of the guard; not exercised against a real shifted file this run.", + "failure_scenario": "A PR reflows a file holding a baselined survivor: the row no longer matches, the guard demands deletion, the author deletes it, and the debt count falls with no test added.", + "precision_class": "advisory" + } + }, + { + "ruleId": "PRREV-CI-COMMENT-001", + "level": "note", + "message": { + "text": "ci.yml:456 still says 'The blocking rule is the shrink-only survivor baseline'. What the guard blocks is only hand-edits that GROW the debt file; a new surviving mutant in a PR is neither blocked nor ledgered while the gate is report-only (new-survivor detection is #4649). The comment reads stronger than the mechanism." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": ".github/workflows/ci.yml" + }, + "region": { + "startLine": 456 + } + } + } + ], + "properties": { + "grounding": "asserted", + "rationale": "Reading ci.yml 454-464 and the guard's inputs (the debt file at HEAD and at the merge base only).", + "failure_scenario": "A maintainer believes new mutation survivors are blocked and does not notice that between this merge and #4648/#4649 they are neither blocked nor recorded.", + "precision_class": "advisory" + } + } + ] + }, + { + "tool": { + "driver": { + "name": "cargo-mutants", + "informationUri": "https://github.com/paiml/aprender", + "rules": [] + } + }, + "invocations": [ + { + "executionSuccessful": true, + "commandLine": "scoped guard mutation: 7 sed mutants of scripts/check_mutants_debt_ratchet.sh vs its --self-test (scratch copy under scripts/, removed afterwards); 7 attempted, 7 killed (driver name is the receipt vocabulary slot; not a cargo-mutants run)" + } + ], + "results": [] + }, + { + "tool": { + "driver": { + "name": "antigravity", + "informationUri": "https://github.com/paiml/aprender", + "rules": [] + } + }, + "invocations": [ + { + "executionSuccessful": true, + "commandLine": "agy -p --model gemini-3.1-pro-high --output-format json --json-schema .pr-review-schema.json --print-timeout 15m --dangerously-skip-permissions (disposable git-archive tree at a683b4a528; diff file omits the debt TSV and prior receipts)" + } + ], + "results": [] + } + ] +} diff --git a/evidence/pr-review/4647/a683b4a5283ed971fd6de1836783ab4246310e21/receipt.intoto.jsonl b/evidence/pr-review/4647/a683b4a5283ed971fd6de1836783ab4246310e21/receipt.intoto.jsonl new file mode 100644 index 0000000000..0ca28cb062 --- /dev/null +++ b/evidence/pr-review/4647/a683b4a5283ed971fd6de1836783ab4246310e21/receipt.intoto.jsonl @@ -0,0 +1 @@ +{"_type":"https://in-toto.io/Statement/v1","subject":[{"name":"git+https://github.com/paiml/aprender","digest":{"sha1":"a683b4a5283ed971fd6de1836783ab4246310e21"}}],"predicateType":"https://paiml.dev/attestations/pr-review/v2","predicate":{"skill_version":"2.1.0","attestation_level":"L1-self","pr":4647,"base_sha":"00052c01284caa74c70b287088a79c6dee2959b9","head_sha":"a683b4a5283ed971fd6de1836783ab4246310e21","author_actor":{"kind":"agent","id":"agent:claude-opus-5-5/aprender-ca"},"reviewer_actor":{"kind":"agent","id":"agent:claude-sonnet-5-5/pr-4647-review"},"review_scope":{"tickets":["PMAT-4646","PMAT-4651"],"diff_shortstat":"merge-base diff 00052c0128..a683b4a528, 12 files; prior evidence/pr-review receipts and the 590-row TSV body excluded from review","pmat_4651_checks":{"rows_moved_in_derived_expiries":"exactly 5 expires lines change 2026-09-30 -> 2026-10-15 (git diff base..head over evidence/parity/derived_expiries.json: 5 -/+ pairs, nothing else); the base JSON shows the 5 rows at 2026-09-30, and the diff is the whole change to that file","spec_conformance_py_untouched":"git diff --stat base..head over scripts/lib/spec_conformance.py and scripts/spec_conformance.sh is empty","spec_conformance_today":"bash scripts/spec_conformance.sh exit 0 (PASS)","spec_conformance_2026_10_16":"SPEC_CONFORMANCE_TODAY=2026-10-16 bash scripts/spec_conformance.sh exit 1, D6 for rows 13,15,18,19,21 and also row 22 (row 22 expires 2026-10-15 at the base too; not moved by this PR)","not_run":"derived_expiries.json was not regenerated with --write (read-only review); verified by diff and the two spec_conformance runs"},"pmat_4646_checks":{"a683b4a528_answers_65d3fb6202_finding":"the zero-row finding (PRREV-RATCHET-002 on 65d3fb6202, also raised by the quorum lanes) is CLOSED: `NF == 0 { next }` added to check_rows awk; --self-test PASSED 13 cases incl. R13 (2 -> 0 rows GREEN); with that one line deleted R13 alone FAILs (rc=1 want=0), so R13 is a real case","ratchet_at_head":"check_mutants_debt_ratchet.sh at HEAD: PASS introduced 590 rows (no copy at merge base)","working_tree":"git status shows only untracked docs/audits/quorum-PMAT-4646* files; one scratch script under scripts/ was created and removed during mutation"}},"affected_crates":[],"verdict":"FINDINGS","consultations":{"pmat":{"status":"consulted","transport":"cli","transport_unavailable":[],"mcp_attempted":false,"transport_note":"The pmat CLI answered. The pmat MCP server was not tried in this run (not a claim that it is down).","index_commit":"a683b4a5283ed971fd6de1836783ab4246310e21","index_is_ancestor":true,"index_worktree_dirty":true,"index_worktree_note":"pmat rebuilt its index at HEAD in this worktree (query 103 s). git status showed only untracked docs/audits/quorum-PMAT-4646* files; no tracked file modified.","cache_hits":0,"complexity_delta":[],"tdg_delta":[],"satd_introduced":[],"analysis_note":"The diff has no .rs file and pmat computes no complexity/TDG for shell, so those arrays are empty by construction (pmat analyze complexity/tdg were not run). A TODO/FIXME/HACK/XXX grep over added lines (TSV and prior receipts excluded) found 0; satd_introduced is empty on that basis, not on pmat analyze satd. The semantic queries returned no prior art for this guard. The only sibling-branch hits are origin/fix/4646-mutants-restore (RESTORE PR #4648, tip c1ebd31d9c), which carries the same two files by design.","duplication_hits":[{"needle":"check_rows","kind":"name","where":"HEAD","ref":"HEAD","path":"evidence/parity/l0-1/intel/qwen35-apr-vs-reference/layerwise/kernel_isolation.py","line":69,"method":"lexical"},{"needle":"check_rows","kind":"name","where":"HEAD","ref":"HEAD","path":"evidence/parity/l0-1/intel/qwen35-apr-vs-reference/layerwise/kernel_isolation.py","line":89,"method":"lexical"},{"needle":"check_rows","kind":"name","where":"HEAD","ref":"HEAD","path":"experiments/cuda-oxide/q4k-matvec/src/main.rs","line":65,"method":"lexical"},{"needle":"check_rows","kind":"name","where":"HEAD","ref":"HEAD","path":"experiments/cuda-oxide/q4k-matvec/src/main.rs","line":66,"method":"lexical"},{"needle":"check_rows","kind":"name","where":"HEAD","ref":"HEAD","path":"experiments/cuda-oxide/q4k-matvec/src/main_rawptr_abi.rs","line":132,"method":"lexical"},{"needle":"check_rows","kind":"name","where":"HEAD","ref":"HEAD","path":"experiments/cuda-oxide/q4k-matvec/src/main_rawptr_abi.rs","line":167,"method":"lexical"},{"needle":"mutants-debt.tsv","kind":"filename","where":"branch","ref":"origin/fix/4646-mutants-restore","path":"ci/mutants-debt.tsv","line":0,"method":"lexical"},{"needle":"check_mutants_debt_ratchet.sh","kind":"filename","where":"branch","ref":"origin/fix/4646-mutants-restore","path":"scripts/check_mutants_debt_ratchet.sh","line":0,"method":"lexical"}],"duplication_coverage":{"rust":"semantic","shell":"lexical","python":"lexical","config":"lexical","docs":"lexical","other":"lexical","sibling_branches":"lexical","merge_base_to_main":"lexical"},"duplication_horizon":["head=a683b4a5283ed971fd6de1836783ab4246310e21","siblings=refs/remotes/origin/* unmerged into origin/main","merge_base_to_main=00052c01284caa74c70b287088a79c6dee2959b9..refs/remotes/origin/main"],"horizon_branches_total":1159,"horizon_branches_scanned":1159,"merge_base_to_main_files":0,"symbols_searched":16},"cuda":{"status":"not-triggered","trigger_reason":"scripts/check_pr_review_receipt.sh --match-path over every changed path matched none (0 of 12), and --match-message over the commit messages base..head returned 1 (no match). The diff is ci.yml shell, a debt TSV, a bash guard, roadmap YAML, a spec table and a JSON of expiries: no device-behaviour claim."},"crux":{"status":"not-triggered","trigger_reason":"No CLI subcommand, flag, HTTP route, MCP tool, config key or output format of a shipped binary changed, and no comparative performance claim is added; the changes are CI-internal plus a spec re-date.","surfaces":[],"contracts":[],"comparative_claims":[]},"mutation":{"status":"consulted","scope":"guard","attempted":7,"killed":7,"survivors":[],"note":"Scoped to the one changed guard script: 7 hand-written sed mutants (NF==0 line deleted, NF==0 -> NF==1, NF!=5 -> 6, outcome set, sha width, comm direction, self-test R13 expectation flipped) run through the script own --self-test; none was a no-op. The new NF==0 line is killed only by R13 (deleting it FAILs R13 rc=1 want=0). scripts/mutate-guard.sh covers only check_pr_review_receipt.sh, so no committed mutation set exists for this script; 7/7 is this review measurement, not a committed-set score."},"antigravity":{"status":"consulted","attempted":1,"agy_version":"agy 1.2.14","binary_path":"/home/noah/.local/bin/agy","model_id":"gemini-3.1-pro-high","model_family":"google/gemini","exit_code":0,"duration_seconds":208.426866079,"agy_status":"SUCCESS","usage":{"input_tokens":146190,"output_tokens":14920,"thinking_tokens":12494,"cache_read_tokens":1161069,"total_tokens":161110},"output_check":{"structured_output_present":true,"reviewed":true,"schema_valid":true},"reverified_by_primary":false,"divergence":{"agreed":0,"agy_only":0,"primary_only":2,"contradicted":0},"divergence_note":"agy returned reviewed:true with no findings (diff passed as a file, TSV and prior receipts omitted; schema_valid by check-jsonschema, rc 0). It raised neither the line-shift laundering note nor the ci.yml comment overclaim. No opposing conclusion on one subject.","findings":[]}},"findings_ref":{"path":"findings.sarif","sha256":"853ee4d31a50e60ca239440544a34eac06fbccabe1eced35c02b44a3ccf1a5c5"},"cost":{"input_tokens":146190,"output_tokens":14920,"wall_seconds":1200,"note":"input/output tokens are the single agy review run; this reviewer session tokens are not instrumented. wall_seconds approximate."}}} diff --git a/evidence/pr-review/4647/bd851543c6d65fb6b09d46425669afa944fddc3c/findings.sarif b/evidence/pr-review/4647/bd851543c6d65fb6b09d46425669afa944fddc3c/findings.sarif new file mode 100644 index 0000000000..063fecbfcb --- /dev/null +++ b/evidence/pr-review/4647/bd851543c6d65fb6b09d46425669afa944fddc3c/findings.sarif @@ -0,0 +1,198 @@ +{ + "version": "2.1.0", + "$schema": "https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json", + "runs": [ + { + "tool": { + "driver": { + "name": "pmat", + "informationUri": "https://github.com/paiml/pmat", + "rules": [] + } + }, + "invocations": [ + { + "executionSuccessful": true, + "commandLine": "pmat query \"shrink-only debt ratchet baseline\" --limit 5 (index in this worktree, 2.6 s); scripts/pr_review_duplication_scan.sh (36 s, 1159/1159 branches); plus the measured commands in each result" + } + ], + "results": [ + { + "ruleId": "PRREV-RATCHET-003", + "level": "note", + "message": { + "text": "Rows key on the cargo-mutants name, which embeds line:col. A line shift in a baselined file reads as a NEW row (RED) and the only way to green is deleting the row, which the shrink-only rule scores as a kill. The author now states this limit in the script header and ci.yml comment (#4653); it is not fixed." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "scripts/check_mutants_debt_ratchet.sh" + }, + "region": { + "startLine": 12 + } + } + } + ], + "properties": { + "precision_class": "advisory", + "grounding": "asserted", + "rationale": "Reading the row format and the comm -23 comparison; not exercised against a shifted file this run. Known limit named by the author (#4653).", + "failure_scenario": "A PR reflows a file holding a baselined survivor; the author deletes the unmatched row and the debt count falls with no test added." + } + }, + { + "ruleId": "PRREV-RATCHET-004", + "level": "note", + "message": { + "text": "A NEW surviving mutant is reported but neither blocked nor recorded until #4649: the ci.yml MUTANTS-RATCHET block echoes the mutants section and exits 0. This is the operator's C187(a)/C188(a) ruling, recorded so the receipt is not read as enforcement of new survivors." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": ".github/workflows/ci.yml" + }, + "region": { + "startLine": 454 + } + } + } + ], + "properties": { + "precision_class": "advisory", + "grounding": "asserted", + "rationale": "Reading the block; check_ci_gate_mutants_rule.sh still PASSes (its marked block is untouched) and check_mutants_debt_ratchet.sh is in guard_tree's git-ls-files universe and its cargo-free subset (--list shows it in both).", + "failure_scenario": "A PR adds code whose mutant survives; nothing goes red until #4649 lands." + } + }, + { + "ruleId": "PRREV-RATCHET-005", + "level": "note", + "message": { + "text": "No committed mutation set exists for check_mutants_debt_ratchet.sh (mutate-guard.sh covers only the receipt guard), so \u00a73.D's 100%-kill requirement cannot be read from a committed artifact; this review's own 12 hand mutants were all killed by --self-test (16 cases)." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "scripts/check_mutants_debt_ratchet.sh" + }, + "region": { + "startLine": 1 + } + } + } + ], + "properties": { + "precision_class": "advisory", + "grounding": "asserted", + "rationale": "ls scripts | grep mutat lists four mutate scripts, none for this guard. The 12/12 figure is a review-run count whose output was not hashed, hence asserted, not measured.", + "failure_scenario": "A later edit weakens a guard rule that no self-test case pins; with no derived mutation set nothing rescans it, so the survivor is found only by a human." + } + }, + { + "ruleId": "PRREV-DUP-001", + "level": "note", + "message": { + "text": "The duplication scan found no re-implementation. Its only non-name-collision hits are the filenames of this guard and its debt file on origin/fix/4646-mutants-restore (RESTORE PR #4648), which carries the same two files by design. Remaining hits are the identifier check_rows in unrelated python/rust experiments." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "scripts/check_mutants_debt_ratchet.sh" + }, + "region": { + "startLine": 1 + } + } + } + ], + "properties": { + "precision_class": "advisory", + "grounding": "measured", + "command": [ + "scripts/pr_review_duplication_scan.sh", + "--base", + "00052c01284caa74c70b287088a79c6dee2959b9", + "--head", + "bd851543c6d65fb6b09d46425669afa944fddc3c", + "--json", + "/tmp/dup4647k.json" + ], + "exit_code": 0, + "stdout_sha256": "9c12f96738a6427e56a7899c856f8021c96a64b2888e8ed253a0eba4a32422c7", + "rationale_note": "stdout_sha256 is over the scan's JSON output file", + "failure_scenario": "If #4648 merged first with divergent copies of these two files, #4647's rebase would conflict on both; expected, as the restore branch deletes the ratchet." + } + }, + { + "ruleId": "PMAT-4651-VERIFY", + "level": "note", + "message": { + "text": "PMAT-4651 verified: exactly five 'expires' lines move 2026-09-30 -> 2026-10-15 in derived_expiries.json (rows 13,15,18,19,21); scripts/lib/spec_conformance.py untouched; spec_conformance.sh exits 0 today; with SPEC_CONFORMANCE_TODAY=2026-10-16 it exits 1 with D6 for rows 13,15,18,19,21 and 22 (row 22 was already 2026-10-15 at the base, not moved). Cosmetic: row 21's prose runs 'impl-PMAT-3556-receipt.md` Re-dated by...' with no sentence break." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "evidence/parity/derived_expiries.json" + }, + "region": { + "startLine": 72 + } + } + } + ], + "properties": { + "precision_class": "advisory", + "grounding": "measured", + "command": [ + "env", + "SPEC_CONFORMANCE_TODAY=2026-10-16", + "bash", + "scripts/spec_conformance.sh" + ], + "exit_code": 1, + "stdout_sha256": "0af21075b85114ed4ea5f0119ae3265e7311c6a0ef0270299cd14922347a247f", + "failure_scenario": "If a sixth row had moved or the andon were weakened, the 2026-10-16 run would not show D6 for exactly the expired rows; it does." + } + } + ] + }, + { + "tool": { + "driver": { + "name": "cargo-mutants", + "informationUri": "https://github.com/paiml/aprender", + "rules": [] + } + }, + "invocations": [ + { + "executionSuccessful": true, + "commandLine": "scoped guard mutation: 12 sed mutants of scripts/check_mutants_debt_ratchet.sh vs its --self-test, run from scratch copies in /tmp/mutscratch; 12 attempted, 12 killed" + } + ], + "results": [] + }, + { + "tool": { + "driver": { + "name": "antigravity", + "informationUri": "https://github.com/paiml/aprender", + "rules": [] + } + }, + "invocations": [ + { + "executionSuccessful": true, + "commandLine": "agy -p --model gemini-3.1-pro-high --output-format json --json-schema .pr-review-schema.json --print-timeout 20m --dangerously-skip-permissions (disposable git-archive tree at bd851543c6; diff file omits the debt TSV and prior receipts)" + } + ], + "results": [] + } + ] +} diff --git a/evidence/pr-review/4647/bd851543c6d65fb6b09d46425669afa944fddc3c/receipt.intoto.jsonl b/evidence/pr-review/4647/bd851543c6d65fb6b09d46425669afa944fddc3c/receipt.intoto.jsonl new file mode 100644 index 0000000000..3c5cb2cb18 --- /dev/null +++ b/evidence/pr-review/4647/bd851543c6d65fb6b09d46425669afa944fddc3c/receipt.intoto.jsonl @@ -0,0 +1 @@ +{"_type":"https://in-toto.io/Statement/v1","subject":[{"name":"git+https://github.com/paiml/aprender","digest":{"sha1":"bd851543c6d65fb6b09d46425669afa944fddc3c"}}],"predicateType":"https://paiml.dev/attestations/pr-review/v2","predicate":{"skill_version":"2.1.0","attestation_level":"L1-self","pr":4647,"base_sha":"00052c01284caa74c70b287088a79c6dee2959b9","head_sha":"bd851543c6d65fb6b09d46425669afa944fddc3c","author_actor":{"kind":"agent","id":"agent:claude-opus-5-5/aprender-ca"},"reviewer_actor":{"kind":"agent","id":"agent:claude-sonnet-5-5/pr-4647-review"},"review_scope":{"tickets":["PMAT-4646","PMAT-4651"],"diff_shortstat":"merge-base diff 00052c0128..bd851543c6, 14 files; prior evidence/pr-review receipts and the 590-row TSV body excluded from review","commits_checked":["bd851543c6 (quotes the PMAT-4646 AC; roadmap yaml parses: yaml.safe_load ok on roadmap.yaml and both entries)","0711f26dc6 (R14-R16 present; --self-test PASSED 16 cases; ci.yml diff is comment+exit block only)","a683b4a528 (zero-row: R13 2->0 GREEN; closes the 65d3fb6202 quorum finding)","65d3fb6202 (PMAT-4651 re-date; see PMAT-4651-VERIFY)"],"not_run":"derived_expiries.json was not regenerated with --write (read-only review); verified by diff and the two spec_conformance runs. No cargo on this host."},"affected_crates":[],"verdict":"FINDINGS","consultations":{"pmat":{"status":"consulted","transport":"cli","transport_unavailable":[],"mcp_attempted":false,"transport_note":"The pmat CLI answered. The pmat MCP server was not tried in this run (not a claim that it is down).","index_commit":"bd851543c6d65fb6b09d46425669afa944fddc3c","index_is_ancestor":true,"index_worktree_dirty":true,"index_worktree_note":"index at .pmat/context.db in this worktree, mtime 16:32:10 after HEAD commit 16:30:58; git status shows only untracked docs/audits/quorum-PMAT-4646.json.","cache_hits":0,"complexity_delta":[],"tdg_delta":[],"satd_introduced":[],"analysis_note":"No .rs file in the diff and pmat computes no complexity/TDG for shell, so those arrays are empty by construction (analyze complexity/tdg not run). satd_introduced is empty on the basis of a marker grep over added lines, not pmat analyze satd. Rust is recorded lexical, since the scan ran without --rust-semantic.","duplication_hits":[{"needle":"check_rows","kind":"name","where":"HEAD","ref":"HEAD","path":"evidence/parity/l0-1/intel/qwen35-apr-vs-reference/layerwise/kernel_isolation.py","line":69,"method":"lexical"},{"needle":"check_rows","kind":"name","where":"HEAD","ref":"HEAD","path":"evidence/parity/l0-1/intel/qwen35-apr-vs-reference/layerwise/kernel_isolation.py","line":89,"method":"lexical"},{"needle":"check_rows","kind":"name","where":"HEAD","ref":"HEAD","path":"experiments/cuda-oxide/q4k-matvec/src/main.rs","line":65,"method":"lexical"},{"needle":"check_rows","kind":"name","where":"HEAD","ref":"HEAD","path":"experiments/cuda-oxide/q4k-matvec/src/main.rs","line":66,"method":"lexical"},{"needle":"check_rows","kind":"name","where":"HEAD","ref":"HEAD","path":"experiments/cuda-oxide/q4k-matvec/src/main_rawptr_abi.rs","line":132,"method":"lexical"},{"needle":"check_rows","kind":"name","where":"HEAD","ref":"HEAD","path":"experiments/cuda-oxide/q4k-matvec/src/main_rawptr_abi.rs","line":167,"method":"lexical"},{"needle":"mutants-debt.tsv","kind":"filename","where":"branch","ref":"origin/fix/4646-mutants-restore","path":"ci/mutants-debt.tsv","line":0,"method":"lexical"},{"needle":"check_mutants_debt_ratchet.sh","kind":"filename","where":"branch","ref":"origin/fix/4646-mutants-restore","path":"scripts/check_mutants_debt_ratchet.sh","line":0,"method":"lexical"}],"duplication_coverage":{"rust":"lexical","shell":"lexical","python":"lexical","config":"lexical","docs":"lexical","other":"lexical","sibling_branches":"lexical","merge_base_to_main":"lexical"},"duplication_horizon":["head=bd851543c6d65fb6b09d46425669afa944fddc3c","siblings=refs/remotes/origin/* unmerged into origin/main","merge_base_to_main=00052c01284caa74c70b287088a79c6dee2959b9..refs/remotes/origin/main"],"horizon_branches_total":1159,"horizon_branches_scanned":1159,"merge_base_to_main_files":0,"symbols_searched":16},"cuda":{"status":"not-triggered","trigger_reason":"check_pr_review_receipt.sh --match-path over every changed path matched none, and --match-message over base..head returned 1 (no match). CI shell, a debt TSV, a bash guard, roadmap YAML, a spec table and a JSON of expiries: no device-behaviour claim."},"crux":{"status":"not-triggered","trigger_reason":"No CLI subcommand, flag, HTTP route, MCP tool, config key or output format of a shipped binary changed, and no comparative performance claim is added; the changes are CI-internal plus a spec re-date.","surfaces":[],"contracts":[],"comparative_claims":[]},"mutation":{"status":"consulted","scope":"guard","attempted":12,"killed":12,"survivors":[],"note":"Scoped to the one changed guard script: 12 sed mutants (file-readable check, NF!=5, outcome set, sha width, run-id regex, mutant-names-file, duplicate check, comm direction, added-check, introduction branch, NF==0 line, rows() comment filter) each run through --self-test; none was a no-op. No committed mutation set exists for this script, so 12/12 is this review's measurement."},"antigravity":{"status":"consulted","attempted":1,"agy_version":"agy 1.2.14","binary_path":"/home/noah/.local/bin/agy","model_id":"gemini-3.1-pro-high","model_family":"google/gemini","exit_code":0,"duration_seconds":281.673188357,"agy_status":"SUCCESS","usage":{"input_tokens":180230,"output_tokens":21680,"thinking_tokens":19195,"cache_read_tokens":1751557,"total_tokens":201910},"output_check":{"structured_output_present":true,"reviewed":true,"schema_valid":true},"reverified_by_primary":false,"divergence":{"agreed":0,"agy_only":0,"primary_only":5,"contradicted":0},"divergence_note":"agy returned reviewed:true with no findings (diff passed as a file, TSV and prior receipts omitted; check-jsonschema ok). It raised none of the five findings recorded here; no opposing conclusion on one subject. model_family records the REQUESTED id; agy emits no model field, so cross-vendor identity is unverified.","findings":[]}},"findings_ref":{"path":"findings.sarif","sha256":"98c1e7354204bffa3eb2972ea14d2e2e682615e59e7e6d204f6095222908a605"},"cost":{"input_tokens":180230,"output_tokens":21680,"wall_seconds":1500,"note":"input/output tokens are the single agy review run; this reviewer session's tokens are not instrumented. wall_seconds approximate."},"diff_patch_id":"41b11c0a363385a4d9fa6b6b06b681c55fc9099d","diff_patch_id_algo":"git-patch-id-verbatim/pinned-diff-v1"}} diff --git a/evidence/pr-review/4647/ce8036ebc14c1d54f90507c8b2686f993897a699/findings.sarif b/evidence/pr-review/4647/ce8036ebc14c1d54f90507c8b2686f993897a699/findings.sarif new file mode 100644 index 0000000000..77f08b70d0 --- /dev/null +++ b/evidence/pr-review/4647/ce8036ebc14c1d54f90507c8b2686f993897a699/findings.sarif @@ -0,0 +1,302 @@ +{ + "version": "2.1.0", + "$schema": "https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json", + "runs": [ + { + "tool": { + "driver": { + "name": "pmat", + "informationUri": "https://github.com/paiml/pmat", + "rules": [] + } + }, + "invocations": [ + { + "executionSuccessful": true, + "commandLine": "pmat query --literal ARM4_PR_HEAD_SHA / pr_head_sha (index at bd851543c6, ancestor of head); scripts/pr_review_duplication_scan.sh (38 s, 1162/1162 branches, 18 needles)" + } + ], + "results": [ + { + "ruleId": "PRREV-R5-001", + "level": "note", + "message": { + "text": "The ARM4_PR_HEAD_SHA change loosens no gate. check_signature (scripts/check_pr_review_arm4.sh:185-227) still requires the signature to verify under the repo key, and its trusted comment to name pr=, head= and pid=. The sig head only selects which check run to read; it is not trusted for content." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "scripts/check_pr_review_arm4.sh" + }, + "region": { + "startLine": 185 + } + } + } + ], + "properties": { + "precision_class": "advisory", + "grounding": "cited", + "rationale": "Read pr_head_sha (171-178) and check_signature (185-227): the three case-pattern bindings are unchanged by b6ccc0354f, which touches neither file.", + "failure_scenario": "If pid were not compared to the squash patch-id, a reviewed signature could ride an unreviewed diff; it is compared, so this does not occur.", + "source": "scripts/check_pr_review_arm4.sh:222-224 (pid= trusted-comment case, from this run reading the file at head)", + "excerpt": "case \" $tc \" in *\" pid=$pid \"*) ;; *) echo \" A2b the signature is bound to another diff, not patch-id $pid: '$tc'\" >&2; return 1 ;; ", + "excerpt_sha256": "6da038bf447a4451bc203daf8343c66236b1421c149114917d177f5d7ce7311d" + } + }, + { + "ruleId": "PRREV-R5-002", + "level": "note", + "message": { + "text": "pull-requests: read is the minimum for GET /repos/{r}/pulls/{n}, the only call Arm 4 adds. It is job-scoped, read-only, and adds no write, merge or approval path. contents: read and checks: read are unchanged." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": ".github/workflows/pr-review-quorum.yml" + }, + "region": { + "startLine": 72 + } + } + } + ], + "properties": { + "precision_class": "advisory", + "grounding": "asserted", + "rationale": "GitHub's documented permission for reading a pull request is pull-requests: read; no narrower scope exposes .head.sha.", + "failure_scenario": "A broader scope (write) would let a compromised step edit PR state; none is granted." + } + }, + { + "ruleId": "PRREV-R5-003", + "level": "note", + "message": { + "text": "The pulls-API head can differ from the queued head only if the PR was pushed after queueing. Then the check run read is on a different head, and Arm 4 still requires its trusted comment pid= to equal the patch-id of the squash diff it computed. An unreviewed diff has no signature whose pid matches, so it fails closed. On pull_request_target the event head is used as before (kind=branch returns the subject itself)." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "scripts/check_pr_review_arm4.sh" + }, + "region": { + "startLine": 174 + } + } + } + ], + "properties": { + "precision_class": "advisory", + "grounding": "cited", + "rationale": "Read pr_head_sha: kind=branch short-circuits; the queue falls to ARM4_PR_HEAD_SHA then the API. Then check_signature's pid= case at 222-225.", + "failure_scenario": "PR pushed after queueing with a diff nobody reviewed: pid mismatch, A2b rejects.", + "source": "scripts/check_pr_review_arm4.sh:174-177 (pr_head_sha, read at head)", + "excerpt": "pr_head_sha() { if [ \"$3\" = branch ]; then printf '%s\\n' \"$2\"; return 0; fi if [ -n \"${ARM4_PR_HEAD_SHA:-}\" ]; then printf '%s\\n' \"$ARM4_PR_HEAD_SHA\"; return 0; fi gh api \"repos/${GITHUB_REPOSITORY:?GITHUB_REPOSITORY unset}/pulls/$1\" --jq .head.sha ", + "excerpt_sha256": "b5ae11cb6b9f93b83322bf07677dc232af3101dcac6b60423ac1414ba2755c72" + } + }, + { + "ruleId": "PRREV-R5-004", + "level": "note", + "message": { + "text": "-u GITHUB_EVENT_NAME makes the R11/R12 temp repos hermetic. R11 genuinely needs it (mutant removing it: R11 rc=0 want=1 under GITHUB_EVENT_NAME=merge_group)." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "scripts/check_mutants_debt_ratchet.sh" + }, + "region": { + "startLine": 124 + } + } + } + ], + "properties": { + "precision_class": "advisory", + "grounding": "measured", + "rationale": "GITHUB_EVENT_NAME=merge_group bash scripts/check_mutants_debt_ratchet.sh --self-test: rc 0 on head; rc 1 with the -u removed from R11.", + "failure_scenario": "Without it R11 reads the CI event and fails only inside the merge queue, the defect this commit fixes.", + "command": [ + "bash", + "-c", + "GITHUB_EVENT_NAME=merge_group bash scripts/check_mutants_debt_ratchet.sh --self-test 2>&1 | tail -1" + ], + "exit_code": 0, + "stdout_sha256": "a5356e84578245338f0020e61b0a8f53e0263c0dd51ccaf4c954c0c8f1ae28dc" + } + } + ] + }, + { + "tool": { + "driver": { + "name": "cargo-mutants", + "informationUri": "https://github.com/paiml/aprender", + "rules": [] + } + }, + "invocations": [ + { + "executionSuccessful": true, + "commandLine": "scoped guard mutation: 3 sed mutants of scripts/check_mutants_debt_ratchet.sh (drop -u GITHUB_EVENT_NAME at R11, at R12, at both) vs --self-test under GITHUB_EVENT_NAME=merge_group; 3 attempted, 2 killed" + } + ], + "results": [ + { + "ruleId": "PRREV-R5-005", + "level": "note", + "message": { + "text": "Surviving mutant: dropping -u GITHUB_EVENT_NAME at the R12 call (line 130) is not caught. Equivalent, not a coverage hole: R12 sets refs/remotes/origin/main first, so resolve_base takes origin/main before any merge_group single-parent branch. The -u there is defensive only." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "scripts/check_mutants_debt_ratchet.sh" + }, + "region": { + "startLine": 130 + } + } + } + ], + "properties": { + "precision_class": "advisory", + "grounding": "measured", + "rationale": "With -u removed at line 130 alone, GITHUB_EVENT_NAME=merge_group --self-test rc 0, PASSED 16 cases; with it removed at line 124 or both, rc 1.", + "failure_scenario": "None: no input distinguishes the mutant from the original.", + "command": [ + "bash", + "-c", + "sed -i \"130s/ -u GITHUB_EVENT_NAME//\" scripts/check_mutants_debt_ratchet.sh; GITHUB_EVENT_NAME=merge_group bash scripts/check_mutants_debt_ratchet.sh --self-test 2>&1 | tail -1; git checkout-restore (copy of original)" + ], + "exit_code": 0, + "stdout_sha256": "a5356e84578245338f0020e61b0a8f53e0263c0dd51ccaf4c954c0c8f1ae28dc" + } + } + ] + }, + { + "tool": { + "driver": { + "name": "antigravity", + "informationUri": "https://github.com/paiml/aprender", + "rules": [] + } + }, + "invocations": [ + { + "executionSuccessful": true, + "commandLine": "agy -p --model gemini-3.1-pro-high --output-format json --json-schema .pr-review-schema.json --print-timeout 30m --dangerously-skip-permissions (disposable git-archive tree at b6ccc0354f; diff file omits debt TSV, prior receipts and quorum json)" + } + ], + "results": [ + { + "ruleId": "PRREV-AGY-gate_binding_analysis", + "level": "note", + "message": { + "text": "The change to fall back to the pulls-API head does not loosen key, trusted-comment, or patch-id bindings. The signature's validity is still verified, and its trusted comment `pid` is strictly checked against the patch-id of the queue squash." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "scripts/check_pr_review_arm4.sh" + }, + "region": { + "startLine": 1 + } + } + } + ], + "properties": { + "precision_class": "advisory", + "grounding": "asserted", + "rationale": "agy marked this measured; agy ran: grep -n pid= scripts/check_pr_review_arm4.sh. Not re-run by the primary reviewer.", + "failure_scenario": "If the signature's trusted comment `pid` were not validated against the queue squash patch-id, an attacker could force-push a reviewed commit to the PR after queuing an unreviewed commit, creating a TOCTOU vulnerability that bypasses the quorum gate." + } + }, + { + "ruleId": "PRREV-AGY-pull_requests_least_privilege", + "level": "note", + "message": { + "text": "The `pull-requests: read` permission is the least privilege required. It only grants read access to pull request metadata to fetch the PR head via the API, granting no write or approval rights." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "scripts/check_pr_review_arm4.sh" + }, + "region": { + "startLine": 1 + } + } + } + ], + "properties": { + "precision_class": "advisory", + "grounding": "asserted", + "rationale": "agy marked this asserted; agy ran: (no command). Not re-run by the primary reviewer.", + "failure_scenario": "Granting `pull-requests: write` or a broader scope would violate the principle of least privilege, enabling compromised workflows to modify PR state or merge PRs maliciously." + } + }, + { + "ruleId": "PRREV-AGY-pulls_api_head_divergence", + "level": "note", + "message": { + "text": "If the pulls-API head differs from the queued PR's head, an unreviewed diff will not pass. The signature returned from the API head will bind a different patch-id, which `check_signature` rejects when compared to the queue squash's patch-id." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "scripts/check_pr_review_arm4.sh" + }, + "region": { + "startLine": 1 + } + } + } + ], + "properties": { + "precision_class": "advisory", + "grounding": "asserted", + "rationale": "agy marked this measured; agy ran: sed -n /^check_signature() {/,/^}/p scripts/check_pr_review_arm4.sh. Not re-run by the primary reviewer.", + "failure_scenario": "If an unreviewed commit was queued and a reviewed commit later force-pushed, passing the unreviewed commit would result in unauthorized code merging to main. The mismatch between the API head's patch-id and the queue squash's patch-id prevents this." + } + }, + { + "ruleId": "PRREV-AGY-mutants_ratchet_self_test_hermetic", + "level": "note", + "message": { + "text": "The `-u GITHUB_EVENT_NAME` change in `scripts/check_mutants_debt_ratchet.sh` insulates the self-test from the outer CI environment. This prevents `resolve_base.sh` from mistakenly treating the scratch repository commits as a queue squash during `merge_group` events." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "scripts/check_pr_review_arm4.sh" + }, + "region": { + "startLine": 1 + } + } + } + ], + "properties": { + "precision_class": "advisory", + "grounding": "asserted", + "rationale": "agy marked this measured; agy ran: cat scripts/lib/resolve_base.sh. Not re-run by the primary reviewer.", + "failure_scenario": "Without this unsetting, test case R11 (testing a branch with no nameable base) would incorrectly succeed inside a `merge_group` CI run because `resolve_base.sh` would fall back to single-parent queue logic, causing the self-test suite to fail." + } + } + ] + } + ] +} diff --git a/evidence/pr-review/4647/ce8036ebc14c1d54f90507c8b2686f993897a699/receipt.intoto.jsonl b/evidence/pr-review/4647/ce8036ebc14c1d54f90507c8b2686f993897a699/receipt.intoto.jsonl new file mode 100644 index 0000000000..eba9cefc4b --- /dev/null +++ b/evidence/pr-review/4647/ce8036ebc14c1d54f90507c8b2686f993897a699/receipt.intoto.jsonl @@ -0,0 +1 @@ +{"_type":"https://in-toto.io/Statement/v1","subject":[{"name":"git+https://github.com/paiml/aprender","digest":{"sha1":"ce8036ebc14c1d54f90507c8b2686f993897a699"}}],"predicateType":"https://paiml.dev/attestations/pr-review/v2","predicate":{"skill_version":"2.1.0","attestation_level":"L1-self","pr":4647,"base_sha":"00052c01284caa74c70b287088a79c6dee2959b9","head_sha":"ce8036ebc14c1d54f90507c8b2686f993897a699","author_actor":{"kind":"agent","id":"agent:claude-opus-5-5/aprender-ca"},"reviewer_actor":{"kind":"agent","id":"agent:claude-sonnet-5-5/aprender-r5"},"review_scope":{"tickets":["PMAT-4646","PMAT-4651"],"diff_shortstat":"merge-base diff 00052c0128..ce8036ebc1; round 6 = round 5 plus ce8036ebc1, a docs-only roadmap AC amendment naming the pr-review-quorum.yml hunk (cop decision c213); evidence, quorum json and TSV body excluded","commits_checked":["ce8036ebc1 (PMAT-4646 AC now names the workflow queue-only fix; roadmap aggregate-check ok)","b6ccc0354f (queue-only fixes: R11 -u GITHUB_EVENT_NAME; ARM4_PR_HEAD_SHA = pull_request head, pulls API on merge_group, job pull-requests: read)","bd851543c6..163c660a8d (round 4, reviewed previously: PASS/PASS/PASS)"],"not_run":"No cargo on this host. The workflow was not run in a queue; the pulls-API fallback is judged by reading scripts/check_pr_review_arm4.sh. The cop measured old wiring rc1 UNSIGNED / new rc0 / A3 control rejects; not re-run here."},"affected_crates":[],"verdict":"FINDINGS","consultations":{"pmat":{"status":"consulted","transport":"cli","transport_unavailable":[],"mcp_attempted":false,"transport_note":"The pmat CLI answered. The pmat MCP server was not tried in this run (not a claim that it is down).","index_commit":"bd851543c6d65fb6b09d46425669afa944fddc3c","index_is_ancestor":true,"index_worktree_dirty":true,"index_worktree_note":"index at .pmat/context.db built 16:32 at round-4 head bd851543c6 (an ancestor of b6ccc0354f); the delta is shell and workflow YAML, which pmat does not index for complexity. git status shows only an untracked quorum prompt file.","cache_hits":0,"complexity_delta":[],"tdg_delta":[],"satd_introduced":[],"analysis_note":"No .rs file in the diff; complexity/TDG arrays empty by construction. satd_introduced empty on a marker grep over added lines, not pmat analyze satd. All duplication coverage is lexical.","duplication_coverage":{"rust":"lexical","shell":"lexical","python":"lexical","config":"lexical","docs":"lexical","other":"lexical","sibling_branches":"lexical","merge_base_to_main":"lexical"},"duplication_horizon":["head=ce8036ebc14c1d54f90507c8b2686f993897a699","siblings=refs/remotes/origin/* unmerged into origin/main","merge_base_to_main=00052c01284caa74c70b287088a79c6dee2959b9..refs/remotes/origin/main"],"horizon_branches_total":1162,"horizon_branches_scanned":1162,"merge_base_to_main_files":0,"symbols_searched":18,"duplication_hits":[{"needle":"check_rows","kind":"name","where":"HEAD","ref":"HEAD","path":"evidence/parity/l0-1/intel/qwen35-apr-vs-reference/layerwise/kernel_isolation.py","line":69,"method":"lexical"},{"needle":"check_rows","kind":"name","where":"HEAD","ref":"HEAD","path":"evidence/parity/l0-1/intel/qwen35-apr-vs-reference/layerwise/kernel_isolation.py","line":89,"method":"lexical"},{"needle":"check_rows","kind":"name","where":"HEAD","ref":"HEAD","path":"experiments/cuda-oxide/q4k-matvec/src/main.rs","line":65,"method":"lexical"},{"needle":"check_rows","kind":"name","where":"HEAD","ref":"HEAD","path":"experiments/cuda-oxide/q4k-matvec/src/main.rs","line":66,"method":"lexical"},{"needle":"check_rows","kind":"name","where":"HEAD","ref":"HEAD","path":"experiments/cuda-oxide/q4k-matvec/src/main_rawptr_abi.rs","line":132,"method":"lexical"},{"needle":"check_rows","kind":"name","where":"HEAD","ref":"HEAD","path":"experiments/cuda-oxide/q4k-matvec/src/main_rawptr_abi.rs","line":167,"method":"lexical"},{"needle":"mutants-debt.tsv","kind":"filename","where":"branch","ref":"origin/fix/4646-mutants-restore","path":"ci/mutants-debt.tsv","line":0,"method":"lexical"},{"needle":"check_mutants_debt_ratchet.sh","kind":"filename","where":"branch","ref":"origin/fix/4646-mutants-restore","path":"scripts/check_mutants_debt_ratchet.sh","line":0,"method":"lexical"},{"needle":"mutants-debt.tsv","kind":"filename","where":"branch","ref":"origin/prerun/4614","path":"ci/mutants-debt.tsv","line":0,"method":"lexical"},{"needle":"quorum-PMAT-4646.json","kind":"filename","where":"branch","ref":"origin/prerun/4614","path":"docs/audits/quorum-PMAT-4646.json","line":0,"method":"lexical"},{"needle":"PMAT-4646.yaml","kind":"filename","where":"branch","ref":"origin/prerun/4614","path":"docs/roadmaps/entries/PMAT-4646.yaml","line":0,"method":"lexical"},{"needle":"PMAT-4651.yaml","kind":"filename","where":"branch","ref":"origin/prerun/4614","path":"docs/roadmaps/entries/PMAT-4651.yaml","line":0,"method":"lexical"},{"needle":"check_mutants_debt_ratchet.sh","kind":"filename","where":"branch","ref":"origin/prerun/4614","path":"scripts/check_mutants_debt_ratchet.sh","line":0,"method":"lexical"},{"needle":"mutants-debt.tsv","kind":"filename","where":"branch","ref":"origin/prerun/4620","path":"ci/mutants-debt.tsv","line":0,"method":"lexical"},{"needle":"quorum-PMAT-4646.json","kind":"filename","where":"branch","ref":"origin/prerun/4620","path":"docs/audits/quorum-PMAT-4646.json","line":0,"method":"lexical"},{"needle":"PMAT-4646.yaml","kind":"filename","where":"branch","ref":"origin/prerun/4620","path":"docs/roadmaps/entries/PMAT-4646.yaml","line":0,"method":"lexical"},{"needle":"PMAT-4651.yaml","kind":"filename","where":"branch","ref":"origin/prerun/4620","path":"docs/roadmaps/entries/PMAT-4651.yaml","line":0,"method":"lexical"},{"needle":"check_mutants_debt_ratchet.sh","kind":"filename","where":"branch","ref":"origin/prerun/4620","path":"scripts/check_mutants_debt_ratchet.sh","line":0,"method":"lexical"},{"needle":"mutants-debt.tsv","kind":"filename","where":"branch","ref":"origin/rc-rehearsal/0.70","path":"ci/mutants-debt.tsv","line":0,"method":"lexical"},{"needle":"quorum-PMAT-4646.json","kind":"filename","where":"branch","ref":"origin/rc-rehearsal/0.70","path":"docs/audits/quorum-PMAT-4646.json","line":0,"method":"lexical"},{"needle":"PMAT-4646.yaml","kind":"filename","where":"branch","ref":"origin/rc-rehearsal/0.70","path":"docs/roadmaps/entries/PMAT-4646.yaml","line":0,"method":"lexical"},{"needle":"PMAT-4651.yaml","kind":"filename","where":"branch","ref":"origin/rc-rehearsal/0.70","path":"docs/roadmaps/entries/PMAT-4651.yaml","line":0,"method":"lexical"},{"needle":"check_mutants_debt_ratchet.sh","kind":"filename","where":"branch","ref":"origin/rc-rehearsal/0.70","path":"scripts/check_mutants_debt_ratchet.sh","line":0,"method":"lexical"}]},"cuda":{"status":"not-triggered","trigger_reason":"No device-behaviour claim: the delta is CI workflow YAML and a bash guard self-test; the earlier files are unchanged since round 4."},"crux":{"status":"not-triggered","trigger_reason":"No CLI subcommand, flag, route, MCP tool, config key or shipped-binary output changed; CI-internal only.","surfaces":[],"contracts":[],"comparative_claims":[]},"mutation":{"status":"consulted","scope":"guard","attempted":3,"killed":2,"survivors":["scripts/check_mutants_debt_ratchet.sh:130 drop -u GITHUB_EVENT_NAME at R12 - equivalent: R12 sets refs/remotes/origin/main so resolve_base never reaches the merge_group branch"],"note":"3 sed mutants of the changed guard vs --self-test under GITHUB_EVENT_NAME=merge_group (R11 call, R12 call, both); none a no-op. The one survivor is equivalent and named in findings.sarif PRREV-R5-005."},"antigravity":{"status":"consulted","attempted":1,"agy_version":"agy 1.2.14","binary_path":"/home/noah/.local/bin/agy","model_id":"gemini-3.1-pro-high","model_family":"google/gemini","exit_code":0,"duration_seconds":129.608326893,"agy_status":"SUCCESS","usage":{"input_tokens":124510,"output_tokens":12707,"thinking_tokens":11328,"cache_read_tokens":364591,"total_tokens":137217},"output_check":{"structured_output_present":true,"reviewed":true,"schema_valid":true},"reverified_by_primary":false,"divergence":{"agreed":4,"agy_only":0,"primary_only":1,"contradicted":0},"divergence_note":"agy returned 4 findings, all confirmations (no defect): gate binding intact, pull-requests: read least privilege, pulls-API head cannot admit an unreviewed diff, R11/R12 hermetic. They match PRREV-R5-001..004. primary_only is the equivalent R12 mutant. model_family records the REQUESTED id; agy emits no model field, so cross-vendor identity is unverified.","findings":[{"command":["grep","-n","pid=","scripts/check_pr_review_arm4.sh"],"failure_scenario":"If the signature's trusted comment `pid` were not validated against the queue squash patch-id, an attacker could force-push a reviewed commit to the PR after queuing an unreviewed commit, creating a TOCTOU vulnerability that bypasses the quorum gate.","grounding":"measured","id":"gate_binding_analysis","summary":"The change to fall back to the pulls-API head does not loosen key, trusted-comment, or patch-id bindings. The signature's validity is still verified, and its trusted comment `pid` is strictly checked against the patch-id of the queue squash."},{"failure_scenario":"Granting `pull-requests: write` or a broader scope would violate the principle of least privilege, enabling compromised workflows to modify PR state or merge PRs maliciously.","grounding":"asserted","id":"pull_requests_least_privilege","summary":"The `pull-requests: read` permission is the least privilege required. It only grants read access to pull request metadata to fetch the PR head via the API, granting no write or approval rights."},{"command":["sed","-n","/^check_signature() {/,/^}/p","scripts/check_pr_review_arm4.sh"],"failure_scenario":"If an unreviewed commit was queued and a reviewed commit later force-pushed, passing the unreviewed commit would result in unauthorized code merging to main. The mismatch between the API head's patch-id and the queue squash's patch-id prevents this.","grounding":"measured","id":"pulls_api_head_divergence","summary":"If the pulls-API head differs from the queued PR's head, an unreviewed diff will not pass. The signature returned from the API head will bind a different patch-id, which `check_signature` rejects when compared to the queue squash's patch-id."},{"command":["cat","scripts/lib/resolve_base.sh"],"failure_scenario":"Without this unsetting, test case R11 (testing a branch with no nameable base) would incorrectly succeed inside a `merge_group` CI run because `resolve_base.sh` would fall back to single-parent queue logic, causing the self-test suite to fail.","grounding":"measured","id":"mutants_ratchet_self_test_hermetic","summary":"The `-u GITHUB_EVENT_NAME` change in `scripts/check_mutants_debt_ratchet.sh` insulates the self-test from the outer CI environment. This prevents `resolve_base.sh` from mistakenly treating the scratch repository commits as a queue squash during `merge_group` events."}]}},"findings_ref":{"path":"findings.sarif","sha256":"a5d31def59732637364754423f44e3b07b8ae60e59f5115884e6d0817b6c5dbc"},"cost":{"input_tokens":124510,"output_tokens":12707,"wall_seconds":1500,"note":"tokens are the single agy review run; this reviewer session is not instrumented. wall_seconds approximate."},"diff_patch_id":"c75016cbd58050b1b765a0dfbbd211b0ea9e5321","diff_patch_id_algo":"git-patch-id-verbatim/pinned-diff-v1"}} diff --git a/scripts/check_mutants_debt_ratchet.sh b/scripts/check_mutants_debt_ratchet.sh new file mode 100644 index 0000000000..b28c480f45 --- /dev/null +++ b/scripts/check_mutants_debt_ratchet.sh @@ -0,0 +1,141 @@ +#!/usr/bin/env bash +# check_mutants_debt_ratchet.sh -- the mutants gate in RATCHET mode (#4646; operator rulings C187(a)/C188(a), +# 2026-10-01: "new gates are adopted as RATCHETS, never as an instant absolute bar"). +# +# ci/mutants-debt.tsv is the committed baseline of every known surviving mutant. This guard holds it +# SHRINK-ONLY: every row on HEAD must already be a row of the merge base's copy. So: +# - deleting a row (a survivor was killed) -> GREEN +# - adding a row, or swapping one row for another -> RED (a new survivor cannot be ledgered away) +# - a missing/unreadable file, a malformed row, +# a duplicate row, an unresolvable merge base -> RED (never a pass; L25) +# - no copy at the merge base -> GREEN once: the baseline is being introduced +# +# Usage: bash scripts/check_mutants_debt_ratchet.sh (compare HEAD with merge-base(HEAD, $MUTANTS_DEBT_BASE)) +# bash scripts/check_mutants_debt_ratchet.sh --self-test (case table R1-R16 in a scratch repo) +# Known limit: rows key on file:line:col, so a line shift reads as a new row (#4653); new survivors are not yet blocked (#4649). +# MUTANTS_DEBT_BASE unset = resolve_base (merge-base with origin/main, or the CI-shape fallbacks); set = merge-base(HEAD, it). MUTANTS_DEBT_FILE defaults to ci/mutants-debt.tsv. +set -euo pipefail + +FILE=${MUTANTS_DEBT_FILE:-ci/mutants-debt.tsv} +BASE=${MUTANTS_DEBT_BASE:-} +# Default base = scripts/lib/resolve_base.sh, the base every differential guard uses on every CI checkout shape +# (depth-1 pull_request merge commit, merge_group squash head, push to main). It refuses rather than judge HEAD vs HEAD. +REPO_ROOT=$(git rev-parse --show-toplevel 2>/dev/null || pwd); PROG=check_mutants_debt_ratchet +# shellcheck source=scripts/lib/resolve_base.sh +. "$(dirname -- "${BASH_SOURCE[0]}")/lib/resolve_base.sh" || exit 1 + +rows() { grep -v '^#' | grep -v '^[[:space:]]*$' || true; } + +check_rows() { # stdin = rows; prints each malformed row, returns 1 if any + awk -F'\t' ' + NF == 0 { next } # zero debt rows: <<<"" feeds one empty line, which is not a row + NF != 5 { print " malformed (need 5 tab fields): " $0; bad = 1; next } + $3 != "MissedMutant" && $3 != "Timeout" { print " bad outcome \"" $3 "\": " $0; bad = 1; next } # bashrs disable-line=BRS0015 (awk program text, not a command) + $4 !~ /^[0-9a-f]{40}$/ { print " bad sha \"" $4 "\": " $0; bad = 1; next } # bashrs disable-line=BRS0015 (awk program text, not a command) + $5 !~ /^[0-9]+$/ { print " bad run id \"" $5 "\": " $0; bad = 1; next } # bashrs disable-line=BRS0015 (awk program text, not a command) + index($2, $1) != 1 { print " mutant does not name its file: " $0; bad = 1; next } + END { exit bad }' +} + +run() { + [ -r "$FILE" ] || { echo "FAIL $FILE missing or unreadable -- the ratchet has no baseline (RED, never a pass)"; return 1; } + local head base mb bad dup added + head=$(rows < "$FILE") + if ! bad=$(check_rows <<<"$head"); then echo "FAIL $FILE has malformed rows:"; echo "$bad"; return 1; fi + dup=$(sort <<<"$head" | uniq -d) + [ -z "$dup" ] || { echo "FAIL $FILE has duplicate rows:"; sed 's/^/ /' <<<"$dup"; return 1; } + if [ -n "$BASE" ]; then + mb=$(git merge-base HEAD "$BASE" 2>/dev/null) || { echo "FAIL merge-base(HEAD, $BASE) unresolvable -- NOT_MEASURED is not a pass"; return 1; } + else + resolve_base HEAD 2>&1 || { echo "FAIL base unresolvable (resolve_base) -- NOT_MEASURED is not a pass"; return 1; } + mb="$BASE_REF"; echo "base: ${mb:0:10} ($BASE_HOW)" + fi + if ! git cat-file -e "$mb:$FILE" 2>/dev/null; then + echo "PASS $FILE introduced: $(grep -c . <<<"$head") row(s), no copy at merge base ${mb:0:10}" + return 0 + fi + base=$(git show "$mb:$FILE" | rows) + added=$(comm -23 <(sort <<<"$head") <(sort <<<"$base")) + if [ -n "$added" ]; then # bashrs disable-line=SC2031 (added is assigned in this shell; the subshells are the process substitutions) + echo "FAIL $FILE is shrink-only; $(grep -c . <<<"$added") row(s) not in merge base ${mb:0:10}:" # bashrs disable-line=SC2031,SC2091 (echo argument, not an executed command) + sed 's/^/ + /' <<<"$added" + echo " A new survivor is fixed by a test that kills it, never by adding it to the debt file." + return 1 + fi + echo "PASS $FILE shrink-only: $(grep -c . <<<"$base") -> $(grep -c . <<<"$head") row(s) vs merge base ${mb:0:10}" +} + +self_test() { + local tmp me fails=0 + me=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/$(basename "${BASH_SOURCE[0]}") + tmp=$(mktemp -d) + case "$tmp" in /tmp/*|"${TMPDIR:-/tmp}"/*) ;; *) echo "SELF-TEST: refusing scratch dir '$tmp'"; return 1;; esac + trap 'rm -rf -- "${tmp:?}"; trap - EXIT' RETURN; trap 'rm -rf -- "${tmp:?}"' EXIT + local sha=0123456789abcdef0123456789abcdef01234567 + local r1="src/a.rs src/a.rs:1:1: replace + with - MissedMutant $sha 1" + local r2="src/b.rs src/b.rs:2:2: replace > with < Timeout $sha 2" + local r3="src/c.rs src/c.rs:3:3: replace && with || MissedMutant $sha 3" + git -C "$tmp" init -q -b main + git -C "$tmp" config user.email t@t; git -C "$tmp" config user.name t; git -C "$tmp" config core.hooksPath /dev/null + mkdir -p "$tmp/ci" + printf '# header\n%s\n%s\n' "$r1" "$r2" > "$tmp/ci/mutants-debt.tsv" + git -C "$tmp" add -A; git -C "$tmp" commit -qm base + git -C "$tmp" branch base + # case [base ref] + # The substring pins WHICH rule decided: a RED for the wrong reason is a FAIL (each rule is mutation-tested). + case_row() { + local id=$1 want=$2 pat=$3 what=$4 content=$5 b=${6:-base} rc=0 out + git -C "$tmp" checkout -q -B "c$id" base + if [ "$content" = __MISSING__ ]; then git -C "$tmp" rm -q ci/mutants-debt.tsv + else printf '%s' "$content" > "$tmp/ci/mutants-debt.tsv"; git -C "$tmp" add -A; fi + git -C "$tmp" commit -qm "case $id" --allow-empty + out=$(cd "$tmp" && MUTANTS_DEBT_BASE="$b" bash "$me" 2>&1) || rc=$? + if [ "$rc" -eq "$want" ] && grep -qF -- "$pat" <<<"$out"; then echo "ok $id rc=$rc $what" + else echo "FAIL $id rc=$rc want=$want '$pat' $what"; fails=$((fails + 1)); fi + } + case_row R1 1 "row(s) not in merge base" "a grown debt file is RED" "$(printf '%s\n%s\n%s\n' "$r1" "$r2" "$r3")"$'\n' + case_row R2 1 "missing or unreadable" "a missing debt file is RED, never a pass" __MISSING__ + case_row R3 0 "shrink-only: 2 -> 1" "a shrink is GREEN" "$r1"$'\n' + case_row R4 1 "need 5 tab fields" "a 4-field row is RED" "${r1% *}"$'\n' + case_row R5 1 "row(s) not in merge base" "a swap (same count, new row) is RED" "$(printf '%s\n%s\n' "$r1" "$r3")"$'\n' + case_row R6 0 "shrink-only: 2 -> 2" "an unchanged file is GREEN" "$(printf '# header\n%s\n%s\n' "$r1" "$r2")"$'\n' + case_row R7 1 "duplicate rows" "a duplicate row is RED" "$(printf '%s\n%s\n' "$r1" "$r1")"$'\n' + case_row R8 1 "unresolvable" "an unresolvable merge base is RED" "$r1"$'\n' no-such-ref + case_row R9 1 "bad outcome" "a Caught outcome is not debt (RED)" "${r1/MissedMutant/CaughtMutant}"$'\n' + case_row R13 0 "shrink-only: 2 -> 0" "the last survivor killed (header only) is GREEN" "# header"$'\n' + case_row R14 1 "bad run id" "an empty run id is RED" "${r1% *} "$'\n' + case_row R15 1 "does not name its file" "a mutant naming its file mid-string is RED" "${r1/ src\/a.rs:/ x\/src\/a.rs:}"$'\n' + case_row R16 1 "need 5 tab fields" "a 6-field row is RED" "$r1 extra"$'\n' + # R10: introduction -- the merge base has no copy + git -C "$tmp" checkout -q --orphan intro; git -C "$tmp" rm -rq --cached . ; rm -rf -- "${tmp:?}/ci" + : > "$tmp/keep"; git -C "$tmp" add keep; git -C "$tmp" commit -qm intro-base; git -C "$tmp" branch intro-base + case_row_intro() { + local rc=0 + mkdir -p "$tmp/ci"; printf '%s\n' "$r1" > "$tmp/ci/mutants-debt.tsv"; git -C "$tmp" add -A; git -C "$tmp" commit -qm intro + (cd "$tmp" && MUTANTS_DEBT_BASE=intro-base bash "$me" >/dev/null 2>&1) || rc=$? + if [ "$rc" -eq 0 ]; then echo "ok R10 rc=0 the first introduction is GREEN"; else echo "FAIL R10 rc=$rc want=0 introduction"; fails=$((fails + 1)); fi + } + case_row_intro + # R11: no explicit base and no origin/main (a branch commit with no nameable base) -> resolve_base refuses -> RED + # Hermetic: the temp repo is not a CI checkout. Under GITHUB_EVENT_NAME=merge_group resolve_base accepts a + # single parent as the base, so R11 could never go RED inside the merge queue (#4647 dequeued twice, 2026-10-01). + local rc=0 out + git -C "$tmp" checkout -q -B c11 base; printf '%s\n' "$r1" > "$tmp/ci/mutants-debt.tsv"; git -C "$tmp" add -A; git -C "$tmp" commit -qm c11 + out=$(cd "$tmp" && env -u MUTANTS_DEBT_BASE -u GITHUB_EVENT_NAME bash "$me" 2>&1) || rc=$? + if [ "$rc" -eq 1 ] && grep -qF "base unresolvable (resolve_base)" <<<"$out"; then echo "ok R11 rc=1 no nameable base is RED (resolve_base refuses)" + else echo "FAIL R11 rc=$rc want=1 no nameable base"; fails=$((fails + 1)); fi + # R12: default base via origin/main: a grown file vs origin/main is RED + rc=0; git -C "$tmp" update-ref refs/remotes/origin/main base + git -C "$tmp" checkout -q -B c12 base; printf '%s\n%s\n%s\n' "$r1" "$r2" "$r3" > "$tmp/ci/mutants-debt.tsv"; git -C "$tmp" add -A; git -C "$tmp" commit -qm c12 + out=$(cd "$tmp" && env -u MUTANTS_DEBT_BASE -u GITHUB_EVENT_NAME bash "$me" 2>&1) || rc=$? + if [ "$rc" -eq 1 ] && grep -qF "row(s) not in merge base" <<<"$out"; then echo "ok R12 rc=1 default base (origin/main via resolve_base): grown file is RED" + else echo "FAIL R12 rc=$rc want=1 default base grown"; fails=$((fails + 1)); fi + [ "$fails" -eq 0 ] || { echo "SELF-TEST FAILED: $fails case(s)"; return 1; } # bashrs disable-line=SC2198 (fails is a scalar counter, not an array) + echo "SELF-TEST PASSED (16 cases)" +} + +case "${1:-}" in + --self-test) self_test ;; + "") run ;; + *) echo "usage: $0 [--self-test]" >&2; exit 2 ;; +esac