{"record":{"id":"33036ba04bf6e603","repo":"Hmbown/CodeWhale","slug":"partial-pr-review-pass-es-completed-but-the-gate-did-not","errorCode":null,"errorMessage":"Partial PR review: {} pass(es) completed, but the gate did not read: {}. Raise --max-chars/--max-passes or shrink the PR, then re-run; publication: {}","messagePattern":"Partial PR review: (.+?) pass\\(es\\) completed, but the gate did not read: (.+?)\\. Raise --max-chars/--max-passes or shrink the PR, then re-run; publication: (.+?)","errorType":"error_code","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/tui/src/lib.rs","lineNumber":8914,"sourceCode":"        );\n        if let Some((path, _)) = receipt {\n            eprintln!(\"Review receipt written: {}\", path.display());\n        }\n    } else {\n        println!(\"{output}\");\n        if let Some((path, _)) = receipt {\n            eprintln!(\"Review receipt written: {}\", path.display());\n        }\n    }\n    if let Some(plan) = &pr_plan\n        && !plan.manifest.skipped_files.is_empty()\n    {\n        // #6285 AC3: the partial review above is real findings, already\n        // printed and posted — but the gate must not pass on unread\n        // files. The exit still fails, naming what the gate did not read\n        // and the remedy, so it reads as limits rather than as \"this PR\n        // failed review\".\n        bail!(\n            \"Partial PR review: {} pass(es) completed, but the gate did not read: {}. Raise --max-chars/--max-passes or shrink the PR, then re-run; publication: {}\",\n            plan.passes.len(),\n            crate::tools::review::format_skipped_files(&plan.manifest.skipped_files),\n            publication.as_str()\n        );\n    }\n    Ok(())\n}\n\n/// Criterion 4 (no silent caps): whatever a budget stop leaves unread is\n/// named by file, never silently dropped — including files the plan itself\n/// skipped before the first pass ran (#6285 AC4). A free function so tests\n/// can pin the note without running a review.\nfn pr_review_unreviewed_note(\n    plan: Option<&crate::tools::review::PrReviewPlan>,\n    completed_passes: usize,\n) -> String {\n    let Some(plan) = plan else {","sourceCodeStart":8896,"sourceCodeEnd":8932,"githubUrl":"https://github.com/Hmbown/CodeWhale/blob/73e0f67d83c59909b571efdfc88c4bc28c309cb1/crates/tui/src/lib.rs#L8896-L8932","documentation":"The `codewhale review --pr` gate completed only some of its planned review passes and there are files the gate never read (listed in plan.manifest.skipped_files). Per issue #6285 AC3, the findings already produced are valid, but publication is refused: the gate must not pass on unread files. The error names what was skipped and the remedy so it reads as a limit, not a failed review.","triggerScenarios":"Running a multi-pass PR review where plan.passes.len() < planned passes and the manifest records skipped_files (PR too large for --max-chars/--max-passes limits), so the exit bails instead of publishing.","commonSituations":"Reviewing a large PR with default --max-chars/--max-passes; shrinking budgets to speed up CI; a review run interrupted by context limits.","solutions":["Re-run with a higher --max-chars and/or --max-passes so all files fit within the planned passes","Shrink the PR (split it into smaller PRs) so it fits within the review budget","Treat the already-printed findings as real review output; fix them, then re-run the gate on the updated PR"],"exampleFix":"// before\ncodewhale review --pr 123 --max-chars 100000 --max-passes 2\n// after\ncodewhale review --pr 123 --max-chars 250000 --max-passes 4","handlingStrategy":"validation","validationCode":"// before running the gate, ensure the plan covers every file\nif !plan.manifest.skipped_files.is_empty() {\n    return Err(format!(\"review would skip {} files; raise --max-chars/--max-passes first\", plan.manifest.skipped_files.len()).into());\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Size --max-chars/--max-passes against the PR diff size before starting the review","Keep PRs small enough to fit the default review budget","Treat skipped_files in the manifest as a pre-flight signal, not an afterthought"],"tags":["cli","review","gate","incomplete"],"backgroundTag":"partial-review-gate-failed","analyzedSha":"73e0f67d83c59909b571efdfc88c4bc28c309cb1","analyzedAt":"2026-09-22T01:30:00.501Z","contentChangedAt":"2026-09-22T01:30:00.501Z","schemaVersion":2},"datasetVersion":"2026-09-22T21:17:16.096Z"}