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
- Complete all planned passes and record them in order (number == index + 1) before attaching coverage
- Sort/renumber `completed_passes` to match the manifest order if they were collected out of order
- 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
- Record completed passes in manifest order as they finish
- Keep pass numbering 1-based and derived from the manifest index
- Fail the whole review when a pass fails instead of dropping it from coverage
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
- Only / review passes completed; the partial review was not…
- Complete local diff requires
- Complete PR diff fingerprint changed before review…
- Complete PR review plan found
- fleet executor outcome must contain a terminal worker event
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)