Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
363f87e
feat(review): procedural correctness finders, effort levels, and post…
wenshao Jul 11, 2026
4e905cb
docs(review): fix stale topology numbers flagged in review
wenshao Jul 11, 2026
3816799
fix(review): address review feedback on effort/verify/lightweight edg…
wenshao Jul 11, 2026
8b3bf3c
fix(review): close 422-relocation verdict hole and lightweight-mode c…
wenshao Jul 11, 2026
fb9a1c4
docs(review): reconcile verifier rejection rule and close remaining e…
wenshao Jul 11, 2026
dc54c7b
fix(review): close flag-parse, context-unavailable, and downgrade edg…
wenshao Jul 11, 2026
a9bc695
fix(review): close verdict-upgrade and body-Critical re-check gaps
wenshao Jul 11, 2026
0156055
fix(review): compose COMMENT bodies from clauses and harden the body-…
wenshao Jul 11, 2026
5acf658
fix(review): correct the cross-repo capability table and close nine r…
wenshao Jul 11, 2026
e1e6845
feat(review): promote removed-behavior to a whole-diff agent in 3B
wenshao Jul 12, 2026
b73b950
fix(review): serialize cannot-tell blockers, gate the no-blockers ope…
wenshao Jul 12, 2026
1bf6e08
fix(review): wire whole-diff 1b into the gates, cap the event on unre…
wenshao Jul 12, 2026
cd2398b
fix(review): select body Criticals offline, propagate unreviewed dime…
wenshao Jul 12, 2026
bf1dc0b
feat(review): sink argument parsing into a tested parse-args subcommand
wenshao Jul 12, 2026
b05338d
feat(review): sink event selection and body composition into compose-…
wenshao Jul 12, 2026
853e7a7
feat(review): render review bodies in full, quarantine replied Critic…
wenshao Jul 12, 2026
ab38bda
test(review): register parse-args and compose-review in the exact-lis…
wenshao Jul 12, 2026
a1a8a85
fix(review): carry every disclosure on REQUEST_CHANGES and select blo…
wenshao Jul 12, 2026
0b13786
fix(review): stdin transport for parse-args, validated compose input,…
wenshao Jul 12, 2026
37b2dbb
fix(review): nested-safe stdin guard, validated presubmit, refetchabl…
wenshao Jul 12, 2026
99e0d3b
feat(review): deterministic overlap disposal, --host routing, machine…
wenshao Jul 12, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
132 changes: 88 additions & 44 deletions docs/users/features/code-review.md

Large diffs are not rendered by default.

12 changes: 6 additions & 6 deletions docs/users/features/commands.md
Original file line number Diff line number Diff line change
Expand Up @@ -130,12 +130,12 @@ Commands for managing AI tools and models.

These commands invoke bundled skills that provide specialized workflows.

| Command | Description | Usage Examples |
| ------------ | ----------------------------------------------------------- | ------------------------------------------------- |
| `/review` | Review code changes with 9 parallel review agents | `/review`, `/review 123`, `/review 123 --comment` |
| `/loop` | Run a prompt on a recurring schedule | `/loop 5m check the build` |
| `/simplify` | Review recent changes and apply safe cleanup edits directly | `/simplify`, `/simplify focus on duplication` |
| `/qc-helper` | Answer questions about Qwen Code usage and configuration | `/qc-helper how do I configure MCP?` |
| Command | Description | Usage Examples |
| ------------ | ----------------------------------------------------------- | ------------------------------------------------------------------------- |
| `/review` | Multi-agent code review (12 parallel agents at high effort) | `/review`, `/review 123`, `/review 123 --comment`, `/review --effort low` |
| `/loop` | Run a prompt on a recurring schedule | `/loop 5m check the build` |
| `/simplify` | Review recent changes and apply safe cleanup edits directly | `/simplify`, `/simplify focus on duplication` |
| `/qc-helper` | Answer questions about Qwen Code usage and configuration | `/qc-helper how do I configure MCP?` |

See [Code Review](./code-review.md) for full `/review` documentation.

Expand Down
25 changes: 22 additions & 3 deletions packages/cli/src/commands/review.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,31 +15,50 @@ import { reviewCommand } from './review.js';
// can't silently re-add `deterministic`, drop one of the others, or let the
// `describe` / demand text drift.
describe('reviewCommand', () => {
function registeredSubcommands(): string[] {
function inspectBuilder(): { names: string[]; demandMessage: string } {
const names: string[] = [];
let demandMessage = '';
const stub = {
command: (m: CommandModule) => {
names.push(String(m.command).split(' ')[0]);
return stub;
},
demandCommand: () => stub,
demandCommand: (_min: number, msg: string) => {
demandMessage = msg;
return stub;
},
version: () => stub,
} as unknown as Argv;
(reviewCommand.builder as (y: Argv) => Argv)(stub);
return names;
return { names, demandMessage };
}

function registeredSubcommands(): string[] {
return inspectBuilder().names;
}

it('registers exactly the expected internal helper subcommands', () => {
expect(registeredSubcommands()).toEqual([
'parse-args',
'fetch-pr',
'plan-diff',
'pr-context',
'load-rules',
'presubmit',
'compose-review',
'cleanup',
]);
});

it('the demandCommand message names every registered subcommand', () => {
// The error message is the one place that enumerates the interface for
// a user who typed `qwen review` bare; it once omitted plan-diff.
const { names, demandMessage } = inspectBuilder();
for (const name of names) {
expect(demandMessage).toContain(name);
}
});

it('does not register the removed `post-suggestions` subcommand', () => {
expect(registeredSubcommands()).not.toContain('post-suggestions');
});
Expand Down
6 changes: 5 additions & 1 deletion packages/cli/src/commands/review.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
// can stay short and the logic stays testable.

import type { Argv, CommandModule } from 'yargs';
import { parseArgsCommand } from './review/parse-args.js';
import { composeReviewCommand } from './review/compose-review.js';
import { fetchPrCommand } from './review/fetch-pr.js';
import { planDiffCommand } from './review/plan-diff.js';
import { prContextCommand } from './review/pr-context.js';
Expand All @@ -22,15 +24,17 @@ export const reviewCommand: CommandModule = {
'Internal helpers used by the /review skill (PR worktree setup, context fetch, rules loading, presubmit checks, cleanup)',
builder: (yargs: Argv) =>
yargs
.command(parseArgsCommand)
.command(fetchPrCommand)
.command(planDiffCommand)
.command(prContextCommand)
.command(loadRulesCommand)
.command(presubmitCommand)
.command(composeReviewCommand)
.command(cleanupCommand)
.demandCommand(
1,
'Specify a subcommand: fetch-pr, pr-context, load-rules, presubmit, or cleanup.',
'Specify a subcommand: parse-args, fetch-pr, plan-diff, pr-context, load-rules, presubmit, compose-review, or cleanup.',
)
.version(false),
handler: () => {
Expand Down
Loading
Loading