feat(document-review): smarter autofix, batch-confirm, and error/omission classification (#401)
This commit is contained in:
@@ -118,14 +118,15 @@ When fingerprints match across personas:
|
||||
### 3.4 Promote Residual Concerns
|
||||
|
||||
Scan the residual concerns (findings suppressed in 3.2) for:
|
||||
- **Cross-persona corroboration**: A residual concern from Persona A overlaps with an above-threshold finding from Persona B. Promote at P2 with confidence 0.55-0.65.
|
||||
- **Concrete blocking risks**: A residual concern describes a specific, concrete risk that would block implementation. Promote at P2 with confidence 0.55.
|
||||
- **Cross-persona corroboration**: A residual concern from Persona A overlaps with an above-threshold finding from Persona B. Promote at P2 with confidence 0.55-0.65. Inherit `finding_type` from the corroborating above-threshold finding.
|
||||
- **Concrete blocking risks**: A residual concern describes a specific, concrete risk that would block implementation. Promote at P2 with confidence 0.55. Set `finding_type: omission` (blocking risks surfaced as residual concerns are inherently about something the document failed to address).
|
||||
|
||||
### 3.5 Resolve Contradictions
|
||||
|
||||
When personas disagree on the same section:
|
||||
- Create a **combined finding** presenting both perspectives
|
||||
- Set `autofix_class: present`
|
||||
- Set `finding_type: error` (contradictions are by definition about conflicting things the document says, not things it omits)
|
||||
- Frame as a tradeoff, not a verdict
|
||||
|
||||
Specific conflict patterns:
|
||||
@@ -137,14 +138,17 @@ Specific conflict patterns:
|
||||
|
||||
| Autofix Class | Route |
|
||||
|---------------|-------|
|
||||
| `auto` | Apply automatically -- local deterministic fix (terminology, formatting, cross-references) |
|
||||
| `present` | Present to user for judgment |
|
||||
| `auto` | Apply automatically -- local deterministic fix (terminology, formatting, cross-references, completeness corrections where the correct value is verifiable from the document itself) |
|
||||
| `batch_confirm` | Group for single batch approval -- obvious fixes that touch meaning but have one clear correct answer |
|
||||
| `present` | Present individually for user judgment |
|
||||
|
||||
Demote any `auto` finding that lacks a `suggested_fix` to `present` -- the orchestrator cannot apply a fix without concrete replacement text.
|
||||
Demote any `auto` finding that lacks a `suggested_fix` to `batch_confirm`. Demote any `batch_confirm` finding that lacks a `suggested_fix` to `present`.
|
||||
|
||||
**Completeness corrections eligible for `auto`:** A finding qualifies when the correct fix is deterministically derivable from other content in the document. Examples: a count says "6 units" but the document lists 7, a summary omits an item that appears in the detailed list, a cross-reference points to a renamed section. If the fix requires judgment about *what* to add (not just *that* something is missing), it belongs in `batch_confirm` or `present`.
|
||||
|
||||
### 3.7 Sort
|
||||
|
||||
Sort findings for presentation: P0 -> P1 -> P2 -> P3, then by confidence (descending), then by document order (section position).
|
||||
Sort findings for presentation: P0 -> P1 -> P2 -> P3, then by finding type (errors before omissions), then by confidence (descending), then by document order (section position).
|
||||
|
||||
## Phase 4: Apply and Present
|
||||
|
||||
@@ -153,17 +157,28 @@ Sort findings for presentation: P0 -> P1 -> P2 -> P3, then by confidence (descen
|
||||
Apply all `auto` findings to the document in a **single pass**:
|
||||
- Edit the document inline using the platform's edit tool
|
||||
- Track what was changed for the "Auto-fixes Applied" section
|
||||
- Do not ask for approval -- these are unambiguously correct (terminology fixes, formatting, cross-references)
|
||||
- Do not ask for approval -- these are unambiguously correct
|
||||
|
||||
### Batch Confirm
|
||||
|
||||
If any `batch_confirm` findings exist, present them as a group for a single approval:
|
||||
- List the proposed fixes in a numbered table
|
||||
- Use the platform's blocking question tool (AskUserQuestion in Claude Code, request_user_input in Codex, ask_user in Gemini) to ask: "Apply these N fixes? (yes/no/select)". If no blocking question tool is available, present the table with numbered options and wait for the user's reply before proceeding.
|
||||
- If approved, apply all in a single pass
|
||||
- If "select", let the user pick which to apply
|
||||
- If rejected, demote remaining to the `present` findings list
|
||||
|
||||
This turns N obvious-but-meaning-touching fixes into 1 interaction instead of N.
|
||||
|
||||
### Present Remaining Findings
|
||||
|
||||
Present all other findings to the user using the review output template included below:
|
||||
- Group by severity (P0 -> P3)
|
||||
- Include the Coverage table showing which personas ran
|
||||
- Show auto-fixes that were applied
|
||||
- Include residual concerns and deferred questions if any
|
||||
Present `present` findings using the review output template included below. Within each severity level, separate findings by type:
|
||||
- **Errors** (design tensions, contradictions, incorrect statements) first -- these need resolution
|
||||
- **Omissions** (missing steps, absent details, forgotten entries) second -- these need additions
|
||||
|
||||
Brief summary at the top: "Applied N auto-fixes. M findings to consider (X at P0/P1)."
|
||||
Brief summary at the top: "Applied N auto-fixes. Batched M fixes for approval. K findings to consider (X errors, Y omissions)."
|
||||
|
||||
Include the Coverage table, auto-fixes applied, residual concerns, and deferred questions.
|
||||
|
||||
### Protected Artifacts
|
||||
|
||||
|
||||
Reference in New Issue
Block a user