Commit graph

5338 commits

Author SHA1 Message Date
tanzhenxin
8df861ac21 fix(core): handle array-form type in anyOf/oneOf variants in getAcceptedTypes
The function only checked for string-form type inside anyOf/oneOf variants,
missing the array form (e.g., type: ["array", "null"]). This mirrors the
handling already done at the top-level property schema.
2026-04-07 13:58:00 +08:00
tanzhenxin
c2ba096351
fix(webui): remove @qwen-code/qwen-code-core dependency (#2902)
Remove core dependency from webui by inlining followup controller logic.
This fixes nightly release CI failure where npm version couldn't resolve
the core peer dependency for prerelease versions.

- Move FollowupState type and INITIAL_FOLLOWUP_STATE to src/types/followup.ts
- Inline createFollowupController into src/hooks/useFollowupSuggestions.ts
- Remove separate @qwen-code/webui/followup subpath and vite config
- Export useFollowupSuggestions from main entry

Fixes #2900

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-04-07 13:11:03 +08:00
tanzhenxin
935e819543
fix(vscode): remove @vscode/vsce from devDependencies (#2824)
The vsce package was causing ESM module resolution errors when building
locally due to a dependency cycle between ansi-regex (ESM-only in v6)
and strip-ansi (CommonJS) pulled in by @textlint/linter-formatter.

CI already installs vsce globally before packaging, so this change
aligns local builds with CI behavior. Developers should install vsce
globally: npm install -g @vscode/vsce

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-04-07 13:10:31 +08:00
wenshao
4091210b01 fix(review): move incremental check before worktree creation
Previously: fetch → create worktree → incremental check → "no changes"
→ delete worktree (wasted time creating it).

Now: fetch → incremental check (via git rev-parse on fetched ref) →
if no changes, delete ref and stop (no worktree ever created).
Worktree only created when review will actually proceed.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 13:09:15 +08:00
tanzhenxin
00a4def954
Remove CODEOWNERS file (#2937)
The broad CODEOWNERS wildcard was adding notification noise without
providing meaningful ownership boundaries. Removing it so that any
team member with write access can provide approving reviews.
2026-04-07 13:08:54 +08:00
wenshao
60eba658f7 fix(review): 3 logic holes in Step 9 comment posting flow
1. Step 9 --comment guard blocked "post comments" follow-up path.
   Fixed: allow entry via either --comment flag OR follow-up request.
2. Cross-repo gh pr review needs -R {owner}/{repo}. Added note.
3. "post comments" tip shown even when --comment already set (double
   posting risk). Fixed: tip only shown when --comment NOT specified.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 12:23:23 +08:00
wenshao
13bac8bdcb fix(review): make skip-summary rule more prominent with warning emoji
LLM ignored the "do not submit summary for Comment verdict" rule
despite it being written. Restructured: warning emoji + STOP instruction
first, then the exception cases. The default is "don't post", not
"decide whether to post."

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 12:14:43 +08:00
wenshao
96fa7ac478 fix(review): enforce two-phase posting to prevent duplicate reviews
Root cause: LLM was calling gh pr review for each inline comment
instead of using gh api for comments and gh pr review once for the
verdict. Added explicit "Two-phase posting" instruction: complete ALL
inline comments (gh api) first, THEN submit verdict (gh pr review)
ONCE. Do NOT call gh pr review per comment.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 12:13:44 +08:00
wenshao
62ca195adb fix(review): inline comment footer should include full attribution
Was: "— glm-5.1" (model name only)
Now: "— glm-5.1 via Qwen Code /review" (full attribution matching
the review summary footer format)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 12:10:54 +08:00
wenshao
e671cd350b fix(review): make Maven/Gradle wrapper selection explicit
Commands were hardcoded as ./mvnw and ./gradlew despite text saying
"prefer wrapper if exists, else mvn/gradle". Changed to explicit
conditional: "use ./mvnw if it exists, otherwise mvn" with {mvn}
placeholder in examples. Applied to Step 3 and Agent 5.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 11:15:41 +08:00
wenshao
0c5aeb9545 docs: record parallel execution lessons in DESIGN.md
Two rejected alternatives added from real debugging:
1. Verbose agent prompts → exceed output token budget → serial fallback
2. Relaxed "try 3+2" instruction → model always takes the fallback

Key constraint: each agent prompt ≤200 words for all 5 to fit in
one response and launch in parallel.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 09:58:38 +08:00
wenshao
776c9faefc fix(review): enforce short agent prompts to enable parallel launch
Each agent prompt must be under 200 words. With 5 verbose prompts,
the total output exceeds the model's output token limit, forcing
serial execution. Shorter prompts = all 5 fit in one response =
parallel execution.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 09:48:34 +08:00
wenshao
c826c24f6e fix(review): skip Agent 5 in cross-repo mode, update token counts
Cross-repo lightweight mode has no local codebase — Agent 5 (build/test)
is pointless. Now launches 4 agents instead of 5 in cross-repo mode.

Updated token count tables in SKILL.md, user doc, and DESIGN.md:
same-repo = 7 LLM calls, cross-repo = 6.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 09:24:59 +08:00
wenshao
608550f2fc fix(review): restore strict parallel agent launch instruction
The relaxed "if you cannot fit 5, try 3+2" gave the model a fallback
that it always took (serial execution). Restored strict requirement:
MUST include all 5 tool calls in one response. The runtime confirms
concurrent agent execution is supported.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 09:19:03 +08:00
wenshao
205eefe6f9 Merge remote-tracking branch 'origin/main' into feat/review-skill-improvements 2026-04-07 09:15:18 +08:00
Shaojin Wen
b6373ac71e
feat(core): implement mid-turn queue drain for agent execution (#2854)
Some checks are pending
Qwen Code CI / CodeQL (push) Waiting to run
Qwen Code CI / Lint (push) Waiting to run
Qwen Code CI / Test (push) Blocked by required conditions
Qwen Code CI / Test-1 (push) Blocked by required conditions
Qwen Code CI / Test-2 (push) Blocked by required conditions
Qwen Code CI / Test-3 (push) Blocked by required conditions
Qwen Code CI / Test-4 (push) Blocked by required conditions
Qwen Code CI / Test-5 (push) Blocked by required conditions
Qwen Code CI / Test-6 (push) Blocked by required conditions
Qwen Code CI / Test-7 (push) Blocked by required conditions
Qwen Code CI / Test-8 (push) Blocked by required conditions
Qwen Code CI / Post Coverage Comment (push) Blocked by required conditions
E2E Tests / E2E Test (Linux) - sandbox:docker (push) Waiting to run
E2E Tests / E2E Test (Linux) - sandbox:none (push) Waiting to run
E2E Tests / E2E Test - macOS (push) Waiting to run
* feat(core): implement mid-turn queue drain for agent execution

Inject queued user messages between tool execution steps within a single
turn, so the model sees them immediately instead of waiting for the
entire round to complete.

- Add `dequeueAll()` to AsyncMessageQueue
- Add `midTurnDrain` callback to ReasoningLoopOptions
- Drain queue after processFunctionCalls, inject as text parts
- AgentComposer always enqueues directly (no local buffering)
- Add QUEUE_MESSAGES_CONSUMED event for UI sync

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat(cli): add mid-turn queue drain to main session

Extend mid-turn queue drain to the main session's tool execution path
(useGeminiStream). Previously only agent tabs had this feature.

- Add midTurnDrainRef parameter to useGeminiStream
- Inject queued messages in handleCompletedTools before submitQuery
- Bridge useMessageQueue to drain ref in AppContainer via ref pattern

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: address Copilot review feedback on mid-turn drain

- Guard midTurnDrain with abort check to prevent message loss on cancel
- Synchronously clear messageQueueRef to prevent duplicate drains
- Only clear pending display on IDLE status, not all status changes

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* refactor: scope mid-turn drain to main session only

Revert subagent-path changes (AgentCore, AgentInteractive,
AgentComposer, AsyncMessageQueue, agent-events) to keep the PR
focused on the main session, which is easier to test and validate.

Subagent mid-turn drain can be added in a follow-up PR.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: address Copilot review on main session mid-turn drain

- Move synchronous queue ref into useMessageQueue itself, expose
  drainQueue() for atomic drain (fixes race between addMessage and drain)
- Record drained messages as USER history items so the transcript
  stays complete
- Simplify AppContainer bridge to just midTurnDrainRef.current = drainQueue

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: guard mid-turn drain against cancelled turns

- Skip drain when turnCancelledRef or abortController signal is set,
  so queued messages stay for the next turn instead of being lost
- Restore ref-based queue bridge (drainQueue removed from useMessageQueue)
- Keep synchronous ref clear to prevent duplicate drains

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 09:14:44 +08:00
wenshao
446d309d53 fix(review): pragmatic parallel agent launch instruction
The strict "all 5 in one response" requirement may exceed the model's
output token limit. Changed to: prefer all 5 in one response, but
allow splitting (e.g., 3+2) as long as agents launch without waiting
for previous ones to finish. Runtime confirms parallel execution is
supported (coreToolScheduler tests).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 09:14:12 +08:00
wenshao
e96de40754 fix(review): handle partial inline comment failures + accept *italic*
1. When verdict is Comment and SOME inline comments fail, submit
   a summary with the failed findings (not lost). Only skip summary
   when ALL inline comments succeed.
2. Accept *italic* for model attribution in prose — prettier
   normalizes _italic_ to *italic* in markdown, both render the same.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 09:06:30 +08:00
wenshao
88ff2ac034 fix(review): prefer Maven/Gradle wrappers (./mvnw, ./gradlew)
Many repos rely on wrappers and don't require global Maven/Gradle
installed. Now prefers ./mvnw over mvn and ./gradlew over gradle
in both Step 3 (linter) and Agent 5 (build/test).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 09:00:07 +08:00
wenshao
b9d3602309 fix(review): 3 Copilot comments — conditional cleanup, italic format, cache SHA
1. Step 11: conditional worktree removal — skip if Step 8 flagged
   preservation (autofix commit/push failure)
2. Standardize model attribution to _italic_ (was mixed *italic*)
3. Cache stores pre-autofix headRefOid (not worktree HEAD which may
   include the autofix commit)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 08:58:13 +08:00
wenshao
226c9e2c19 fix(review): CI config discovery runs for ALL projects, not just unmatched
Previously, rule 7 (CI config auto-discovery) only ran for "unrecognized
projects." Java/Makefile (e.g., OpenJDK) and C/C++/Makefile matched
earlier rules that said "skip," so CI config was never read.

Now: language-specific rules 1-6 run first for known tools, then rule 7
runs for ALL projects to discover additional CI-defined checks. OpenJDK
will now discover jcheck and custom targets from .github/workflows/*.yml.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 08:53:46 +08:00
wenshao
44241bc8c1 fix(review): 3 issues from self-audit
1. Step 9 code block: annotate Comment template applies only when
   no inline comments were posted (avoids LLM confusion)
2. Step 11: fix stale rationale — Step 9 uses API calls, not worktree
3. Verdict: explicitly based on high-confidence findings only —
   low-confidence findings don't influence PR approval status

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 07:56:52 +08:00
wenshao
57b7353946 fix(review): skip redundant review summary when inline comments suffice
When verdict is "Comment" and inline comments were posted successfully,
do NOT submit an additional gh pr review — the inline comments are
sufficient. Only submit summary for Approve/Request changes (which
carry approval status) or when no inline comments were posted.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 07:53:38 +08:00
wenshao
dcb58545d2 feat(review): model attribution on inline comments + minimal summary
1. Each inline PR comment now includes model attribution footer
   (e.g., "— qwen3-coder") so reviewers know which model produced
   each comment.
2. When inline comments are posted successfully, the review summary
   is minimal (verdict + model only, no repeated findings). Full
   summary is only used when no inline comments were posted.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 07:52:40 +08:00
wenshao
8f723575bd docs: add CI config auto-discovery to user doc and design doc
- User doc: added "Other" row to language table + explanation that
  CI config is read for unrecognized projects
- DESIGN.md: added "Why auto-discover from CI config" decision
  section + added .qwen/review-tools.md to rejected alternatives

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 07:47:07 +08:00
wenshao
2595567585 feat(review): auto-discover lint/build/test from CI config
For projects that don't match standard tool patterns (e.g., OpenJDK),
Step 3 and Agent 5 now read CI configuration files (.github/workflows,
.gitlab-ci.yml, Jenkinsfile, Makefile) to discover what lint/build/test
commands the project uses. No user configuration needed.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 07:44:48 +08:00
wenshao
cb359dc996 fix(review): default remote for PR numbers + fork-aware autofix push
1. Pure integer PR numbers default to origin (no URL-based remote
   matching available). URL-based PRs use the matched remote.
2. Autofix push uses matched remote instead of hardcoded origin.
   Push failure is expected for fork PRs where user lacks push
   access — handled gracefully with informative message.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 07:25:48 +08:00
wenshao
f357517dd2 fix(review): temp file cleanup in cross-repo + base-branch remote
1. Cross-repo lightweight mode: no longer skips Step 11 entirely.
   Worktree removal is skipped (none created) but temp files are
   still cleaned up.
2. Step 2 base-branch fetch: use the matched remote from Step 1
   (e.g., upstream for forks) instead of hardcoded origin.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 07:23:47 +08:00
wenshao
cbf2aa06ac feat(review): add Java and C/C++ support for deterministic analysis
Step 3 now supports:
- Java: mvn compile, checkstyle, spotbugs, pmd (Maven);
  gradle compileJava, checkstyleMain (Gradle)
- C/C++: clang-tidy (when compile_commands.json available)

Agent 5 build/test precedence now includes Maven and Gradle
before Makefile to avoid duplicate builds.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 07:19:56 +08:00
wenshao
b2ec7b068e fix(review): check all git remotes for cross-repo detection
Previously compared URL owner/repo against gh repo view (current repo
only). This caused fork-based workflows to be wrongly classified as
cross-repo (e.g., local clone of wenshao/jdk reviewing openjdk/jdk PR).

Now checks all git remotes (git remote -v) for a match. If any remote
points to the URL's repo, proceeds with full worktree mode using that
remote for fetch. Only falls back to lightweight mode if NO remote
matches.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 07:14:20 +08:00
Shaojin Wen
5df8fa0ff2
Merge pull request #2889 from wenshao/feat/dangerous-actions-guidance
feat(prompt): add dangerous actions behavior guidance in system prompt
2026-04-07 06:58:50 +08:00
wenshao
3825962a8b fix(review): Step 9 owner/repo must respect cross-repo mode
Step 9 hardcoded gh repo view to get owner/repo, which returns the
current repo — wrong for cross-repo reviews. Now explicitly branches:
same-repo uses gh repo view, cross-repo uses URL-extracted owner/repo.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 05:07:32 +08:00
wenshao
720796e699 fix(review): safe branch cleanup + cross-repo agent count
- git branch -D: add 2>/dev/null || true to both cleanup sites
  (Step 1 stale cleanup + Step 11) to prevent abort if ref missing
- Cross-repo doc: clarify Agents 1-4 only (Agent 5 build/test
  requires local codebase, not available in cross-repo mode)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 05:02:13 +08:00
wenshao
6596362342 fix(review): 4 issues found in self-audit
1. Line 22: "Step 2" → "Step 4" (agents are Step 4, rules are Step 2)
2. PR section: clarify "same-repo URL" to avoid ambiguity with
   cross-repo lightweight path
3. Cross-file analysis: add "same-repo only" qualifier (no local
   files in cross-repo mode for grep_search)
4. Cross-repo lightweight mode: add existing PR comment fetching
   to avoid duplicating human feedback

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 04:24:45 +08:00
wenshao
875944544c fix(review): explicitly require parallel agent launch in single batch
Strengthen the parallel instruction from "five parallel review agents"
to explicitly requiring all 5 task tool calls in one response. Without
this, the LLM may serialize agents (wait for each to finish), losing
the wall-clock time benefit of parallel execution.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 04:22:34 +08:00
wenshao
559f2efd42 fix(review): fix cross-repo mode and add documentation
SKILL.md:
- Step 9 must use owner/repo from URL (not gh repo view) for cross-repo
- Step 2 (project rules) skipped in cross-repo mode (no local files)

User doc: add Cross-repo PR Review section with same-repo vs cross-repo
capability comparison table.

DESIGN.md: add "Why cross-repo uses lightweight mode" section explaining
CLI tools are inherently repo-local and our approach is best available.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 04:18:55 +08:00
wenshao
0e78ced15a fix(review): support cross-repo PR URLs in lightweight mode
Instead of rejecting cross-repo PR URLs, run in lightweight mode:
use gh pr diff <url> to get diff directly (no worktree needed),
skip deterministic analysis and build/test, and review diff text
only with LLM agents.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 04:16:06 +08:00
wenshao
afbede1d34 fix(review): detect and reject cross-repo PR URLs
When a PR URL points to a different repo (e.g., other-org/other-repo),
the review would silently operate on the wrong PR in the current repo.
Now verifies URL owner/repo matches current repo before proceeding.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 04:15:40 +08:00
wenshao
af4ae2cb83 fix: update stale Step 1.5 reference to Step 3 in DESIGN.md
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 04:13:28 +08:00
wenshao
01c105b5e7 refactor(review): renumber steps from sub-steps to sequential 1-11
Replace confusing sub-step numbering (1, 1.1, 1.5, 2, 2.5, 2.6, 3,
3.5, 4, 4.5, 5) with clean sequential numbering (1-11).

Mapping: 1→1, 1.1→2, 1.5→3, 2→4, 2.5→5, 2.6→6, 3→7, 3.5→8,
4→9, 4.5→10, 5→11

Updated all cross-references in SKILL.md, user docs, and PR description.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 04:12:45 +08:00
wenshao
b4ae04ec29 fix(review): capture headRefOid before autofix to prevent line drift
If autofix pushes a new commit in Step 3.5, the PR HEAD changes.
Step 4's inline comments would then reference the autofix commit
where line numbers may have shifted, causing comments on wrong lines.

Fix: capture headRefOid in Step 1 (before autofix) and reuse in
Step 4. Also fix stale Step 5 comment about worktree/commit SHA.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 03:57:14 +08:00
wenshao
e5127e6fc0 fix(review): shell safety for no-findings path, fix DESIGN.md table
- No-findings LGTM path now uses write_file + --body-file instead
  of inline --body (consistent with shell safety guidance)
- DESIGN.md: remove duplicate Agent 5 row from token table
- PR description: add DESIGN.md to scope list

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 03:54:57 +08:00
wenshao
fd3d2a8359 docs: add Fork Subagent as future optimization in DESIGN.md
Current 7 LLM calls send ~350K input tokens (50K system prompt × 7
independent subagents). Fork Subagent would share prompt cache across
all forks, reducing to ~120K effective tokens (~65% savings).

Documented as future optimization pending Fork Subagent platform
feature implementation.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 03:48:35 +08:00
wenshao
09c95c44c8 fix(review): address 5 Copilot comments
- Add error handling for git fetch and gh pr view failures in Step 1
- Skip worktree cleanup on autofix commit/push failure (preserve
  uncommitted fixes for manual recovery)
- Fix Agent 5 counting: it's 1 of the 5 LLM agents (not a separate
  zero-cost stage). Remove misleading "zero LLM" annotation and
  duplicate row from token efficiency table.
- Reverse audit skip-verification already implemented (comment #53
  was stale)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 03:42:20 +08:00
wenshao
ccaab1779b docs: add /review design document with architecture rationale
Records the WHY behind key decisions:
- Why 5 agents (not 1 like Copilot): dimensional coverage
- Why batch verification (not N agents): O(1) not O(N) cost
- Why reverse audit is separate: different cognitive task
- Why worktree (not stash/checkout): eliminates a class of bugs
- Why "silence > noise": Copilot's 60M review data
- Why base-branch rules: security against PR injection
- Why follow-up tips (not blocking prompts): UX consistency
- Why 7 fixed LLM calls: coverage vs cost balance
- Rejected alternatives table with reasoning

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 03:40:17 +08:00
wenshao
6d7afafe3c perf(review): skip verification for reverse audit findings
Reverse audit agent already has full context (all confirmed findings +
entire diff), so its findings don't need a second opinion. This brings
the actual LLM call count to 7 (5 review + 1 verify + 1 reverse),
matching the documented claim.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 03:38:49 +08:00
wenshao
d6b9b35350 fix(review): handle interrupted review cleanup
If a previous review was interrupted (Ctrl+C, crash), stale worktree
and local ref would block the next review. Now Step 1 checks for and
cleans up stale .qwen/tmp/review-pr-<N> worktree and qwen-review/pr-<N>
ref before creating new ones.

Step 5 also cleans up the local ref alongside the worktree.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 03:35:00 +08:00
wenshao
6b28920a07 docs: fix autofix section redundancy and add pre-fix verdict note
- Remove duplicate worktree commit+push bullet (lines 107 vs 109)
- Add note that PR submission uses pre-fix verdict since remote
  isn't updated until autofix push completes

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 03:31:48 +08:00
wenshao
ce47f64ae6 docs: replace Mermaid with plain-text pipeline diagram
Mermaid only renders on GitHub; shows as raw code on Nextra,
Docusaurus, VS Code preview, and offline viewing. Plain-text
ASCII diagram is universally compatible and includes LLM call
cost annotations on each stage.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 03:30:34 +08:00
wenshao
1db1dec517 docs: replace step list with Mermaid flowchart in How It Works
Visual pipeline diagram showing:
- Sequential flow from scope detection to cleanup
- 5 parallel agents subgraph
- Decision branches for autofix and PR comments
- Zero-LLM-cost stages marked
- GitHub renders Mermaid natively

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 03:29:20 +08:00