Hmbown/CodeWhale · error

Review receipt does not cover every planned PR pass

Error message

Review receipt does not cover every planned PR pass

What it means

`attach_pr_review_coverage` also ensures the coverage records every planned pass, with sequential numbering (pass at index i has number i+1). If any planned pass is missing from `completed_passes` or the numbering is off, the receipt would claim full coverage it does not have, so attaching is refused.

Solutions

  1. Complete all planned passes and record them in order (number == index + 1) before attaching coverage
  2. Sort/renumber `completed_passes` to match the manifest order if they were collected out of order
  3. Reject the review run if any pass is missing rather than attaching partial coverage

Example fix

// before
completed_passes.sort_by_key(|p| p.number);
attach_pr_review_coverage(&mut receipt, coverage)?;
// after
completed_passes.sort_by_key(|p| p.number);
anyhow::ensure!(completed_passes.iter().enumerate().all(|(i, p)| p.number == i + 1));
attach_pr_review_coverage(&mut receipt, coverage)?;
Defensive patterns

Strategy: validation

Validate before calling

let ok = coverage.completed_passes.len() == coverage.manifest.passes.len() && coverage.completed_passes.iter().enumerate().all(|(i, p)| p.number == i + 1); if !ok { return Err(anyhow!("coverage missing or misnumbered passes")); }

Try / catch

match attach_pr_review_coverage(&mut receipt, coverage) { Err(e) if e.to_string().contains("every planned PR pass") => rerun_missing_passes_then_attach(), Err(e) => return Err(e), Ok(()) => {} }

Prevention

When it happens

Trigger: Calling `attach_pr_review_coverage` when `completed_passes.len() != manifest.passes.len()`, or a completed pass's `number` does not equal its 1-based index (gaps, duplicates, or out-of-order pass records).

Common situations: A pass failed and was dropped from `completed_passes` instead of the whole review being rejected; pass records were collected concurrently and sorted/appended in the wrong order; a refactor changed pass numbering from 1-based to 0-based.

Understand the failure class

Background: "This is a bug, please report it": internal invariant violations, unreachable panics, and SNH errors explained — this error's family across 47 libraries.

Related errors


AI-assisted analysis of Hmbown/CodeWhale@73e0f67d83 (2026-09-22). Data as JSON: /api/errors/2c384bff1b46b09f. Report an issue: GitHub.

Appendix: source

Thrown at crates/tui/src/tools/review.rs:1086

        unresolved_risk: ReviewReceiptRisk {
            unresolved,
            level: risk_level,
            summary: risk_summary,
        },
        review_content_sha256: sha256_hex(review_content.as_bytes()),
        coverage: None,
    }
}

pub(crate) fn attach_pr_review_coverage(
    receipt: &mut ReviewReceipt,
    coverage: ReviewReceiptCoverage,
) -> anyhow::Result<()> {
    anyhow::ensure!(
        receipt.diff_fingerprint == coverage.manifest.diff_fingerprint,
        "Review receipt and PR coverage manifest fingerprints differ"
    );
    anyhow::ensure!(
        coverage.completed_passes.len() == coverage.manifest.passes.len()
            && coverage
                .completed_passes
                .iter()
                .enumerate()
                .all(|(index, pass)| pass.number == index + 1),
        "Review receipt does not cover every planned PR pass"
    );
    receipt.schema_version = PR_COVERAGE_RECEIPT_SCHEMA_VERSION;
    receipt.coverage = Some(coverage);
    Ok(())
}

pub fn write_review_receipt(
    receipt: &ReviewReceipt,
    path_override: Option<&Path>,
) -> anyhow::Result<PathBuf> {
    let path = if let Some(path) = path_override {

View on GitHub (pinned to 73e0f67d83)