mirror of
https://github.com/aaddrick/claude-desktop-debian.git
synced 2026-05-17 00:26:21 +03:00
Extends the Phase 1 deferral-only pipeline with the bug-investigation path: Stages 3 (fetch reference), 4 (investigate), 5 (mechanical validate), 7 partial (decision gate), and 8a (findings variant). Non-bug classifications still route through 8b; adversarial reviewer is Phase 3. ## What Phase 2 adds - **Stage 3 — Fetch reference.** `gh release download --pattern 'reference-source.tar.gz'` with 3× exponential backoff (2s/8s/32s). Fetch failure routes to 8b with reason `reference-source unavailable` (the 7th reason added to `reasons.json`). - **Stage 4 — Investigate.** `schemas/investigate.json` + `prompts/investigate.txt`. Claude reads repo + reference source via tool access (`--dangerously-skip-permissions`), emits structured findings / pattern_sweep / proposed_anchors / related_issues. Prompt enforces hypothesis voice, cross-cutting-sweep obligation, hard schema bans. - **Stage 5 — Mechanical validation.** `.claude/scripts/triage/ validate.sh` — pure bash. Checks per finding: file exists, line range valid, evidence_quote grep-matches at cited line, closed-world options extracted for identifier claims (grep heuristic for Phase 2; ast-grep upgrade deferred to Phase 3). Per anchor: `grep -P` match count exactly equal to expected_match_count. Per related_issue: `gh issue view` fetch + body excerpt. Emits `validation.json`. - **Stage 3a — Version drift check.** Compares classify's `claimed_version` against `vars.CLAUDE_DESKTOP_VERSION`. Drift flag routes to 8b with `version drift` reason; investigation still runs. - **Drift-bridge sweep.** `.claude/scripts/triage/drift-bridge.sh` — bash, resolves claimed_version to approximate date via `git log --grep`, then date-windowed `git log` on finding files + `gh pr list` basename search. Candidates attach to 8b as a rendered bullet block. - **Stage 7 partial — Decision gate.** Priority: drift → 8b drift- bridge · fetch failure → 8b reference-source-unavailable · investigate failure or zero surviving findings → 8b no-findings · avg confidence < medium → 8b low-confidence · else → 8a. - **Stage 8a — Findings variant.** `schemas/comment-findings.json` + `prompts/comment-findings.txt`. Claude emits structured comment object (hypothesis_line, findings[], patch_sketch?, related_issues); bash renders markdown. No post-hoc prose stripping — the schema guarantees shape. 400-word cap truncates the `<details>` patch block only. - **Stage 8b extension.** Drift-bridge-candidates bullet block renders only when reason is `version drift` AND the sweep returned ≥1 candidate. Phase 1's first-issue privacy note + reason-enum post- processor are preserved. - **Stage 9.** Labels: 8a → `triage: investigated`; 8b routing unchanged. Artifacts extended with `investigation.json`, `validation.json`, `drift-bridge-candidates.json` (conditional). ## Risks validated locally - Mechanical validation catches fabricated identifiers *and* non- matching anchors — smoke tested with a two-finding / two-anchor fixture (one real, one fabricated per kind); failure_reasons fire correctly on the fabricated ones. - Closed-world extraction via grep heuristic: on a JS switch with three cases, returns all three as `closed_world_options` bounded to ±100 lines. - `grep -c` exits 1 on no-match and prints "0" — validated the `|| true` idiom doesn't double-count. ## Deferred - Stage 6 adversarial reviewer (Phase 3) - Confirmed-duplicate routing with Stage 6's exact/related rating (Phase 3) - Feature-design variant 8c (Phase 4) - Suspicious-input tells + edit-during-triage detection (Phase 4) - ast-grep upgrade for closed-world extraction (Phase 3) Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>