pi-pr-review 1.14.1 → 1.14.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.14.2](https://github.com/10ego/pi-pr-review/compare/v1.14.1...v1.14.2) (2026-08-23)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **extract:** scan lane evidence past the synthesis findings framing ([#77](https://github.com/10ego/pi-pr-review/issues/77)) ([dfebc36](https://github.com/10ego/pi-pr-review/commit/dfebc3632910fdde46581d4a48d236d72c7046df))
9
+
3
10
  ## [1.14.1](https://github.com/10ego/pi-pr-review/compare/v1.14.0...v1.14.1) (2026-08-22)
4
11
 
5
12
 
@@ -56,7 +56,7 @@ import {
56
56
  } from "../lib/pr-review-artifacts.ts";
57
57
  import { runWithConcurrency } from "../lib/pr-review-concurrency.ts";
58
58
  import { attemptDeadline, fallbackBudget, type ReviewBudget } from "../lib/pr-review-deadlines.ts";
59
- import { buildExtractionSystemPrompt, MAX_EXTRACTION_OUTPUT_BYTES } from "../lib/pr-review-extract.ts";
59
+ import { buildExtractionSystemPrompt, buildExtractionTask, MAX_EXTRACTION_OUTPUT_BYTES } from "../lib/pr-review-extract.ts";
60
60
  import { loadReviewContext, shardUnifiedDiff } from "../lib/pr-review-context.ts";
61
61
  import {
62
62
  combineAbortSignals,
@@ -2727,7 +2727,7 @@ export async function runFindingExtraction(
2727
2727
  invocation.command,
2728
2728
  invocation.args,
2729
2729
  ctx.cwd,
2730
- input,
2730
+ buildExtractionTask(input),
2731
2731
  lease.signal,
2732
2732
  undefined,
2733
2733
  undefined,
@@ -89,6 +89,8 @@ export function buildExtractionSystemPrompt(): string {
89
89
  "When the document names a file for the finding, also include: path (repo-relative file path exactly as written), start_line and end_line (integers from the document when stated), side (\"RIGHT\" for added lines, \"LEFT\" for removed lines), and location_quote (a verbatim substring of the document containing that path).",
90
90
  "Optionally include source (the lane or section the finding came from).",
91
91
  "Rules: report only findings actually stated in the document; never invent, merge, or upgrade severity; keep the reviewer's own wording in title and body; omit path fields when no location is stated; do not report strengths, summaries, or coverage notes as findings.",
92
+ "The synthesis's own Findings section is NOT authoritative about what the document states: a review summary saying \"No findings\" while a retained lane section states a concrete defect means that defect IS stated in the document and must be extracted.",
93
+ "Findings appear in any format: ### severity blocks, bulleted field lists (title/severity/why/location), or prose. Scan every section, including retained lane output, before deciding the document states no findings.",
92
94
  "If the document states no findings, return {\"findings\":[]}.",
93
95
  "Do not use tools, read files, or modify anything.",
94
96
  ].join("\n");
@@ -112,6 +114,23 @@ function truncateWithMarker(text: string, maxBytes: number, omittedBytes?: numbe
112
114
  }
113
115
 
114
116
  /** Assemble the bounded extraction payload: synthesis first, then lanes in order, each truncated with its own byte-count marker. */
117
+ /**
118
+ * Host-authored framing wrapped around the data document. Without it the
119
+ * child treats the synthesis's own "Findings: No findings." framing as
120
+ * authoritative and misses defects stated in retained lane output (observed
121
+ * in the first production extraction run).
122
+ */
123
+ export function buildExtractionTask(input: string): string {
124
+ return [
125
+ "Objective: Extract every concrete defect finding stated anywhere in this review document, including inside the retained lane output sections.",
126
+ "A \"No findings\" line written by the summary does not mean the document states no findings: check the lane sections too.",
127
+ "",
128
+ "--- Review document ---",
129
+ input,
130
+ "--- End of review document ---",
131
+ ].join("\n");
132
+ }
133
+
115
134
  export function buildExtractionInput(
116
135
  rawText: string,
117
136
  lanes: readonly ReviewLaneArtifact[],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-pr-review",
3
- "version": "1.14.1",
3
+ "version": "1.14.2",
4
4
  "description": "Parallel AI code review for GitHub pull requests in the Pi coding agent, with model-agnostic tiered subagents, structured findings, optional verification, and host-gated COMMENT or qualified APPROVE publishing.",
5
5
  "keywords": [
6
6
  "pi-package",