You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
|`prompt_cancelled`| S->C | Prompt was cancelled through explicit `cancelSession` route **or** originator SSE disconnect | Envelope stamps `originatorClientId` for the canceling client. This means "cancellation requested", not "cancellation confirmed". Peer subscribers learn that the prompt has ended. |
130
-
|`turn_complete`| S->C | A turn completed successfully |`sessionId, stopReason, promptId?`. `promptId` links to non-blocking prompt responses (`202`). The SDK matches SSE events to the originating prompt through it. |
131
-
|`turn_error`| S->C | A turn failed |`sessionId, message, code?, promptId?`; same `promptId` correlation mechanism. |
|`session_branched`| S->C |`POST /session/:id/branch` created a branch from an existing session |`sourceSessionId, newSessionId, displayName, originatorClientId?`|
134
-
|`followup_suggestion`| S->C | ACP child generated ghost-text follow-up suggestions after `end_turn`, forwarded over per-session SSE |`sessionId, suggestion, promptId`; wire only carries suggestions whose `getFilterReason()===null`. Clients render them as input-placeholder ghost text and invalidate them on next `sendPrompt`. |
135
-
|`user_shell_command`| S->C | User started a shell command through `POST /session/:id/shell`; fanned out to other subscribers in the same session |`sessionId, command, shellId, originatorClientId?`. There is no typed `DaemonXxxData` interface yet; `asKnownDaemonEvent` returns `undefined` and the UI normalizer parses it ad hoc. |
136
-
|`user_shell_result`| S->C | Result of the shell command above |`sessionId, shellId, exitCode, output, aborted`. Same ad hoc parsing note as `user_shell_command`. |
127
+
| Type | Direction | Trigger | Key payload fields |
|`prompt_cancelled`| S->C | Prompt was cancelled through explicit `cancelSession` route **or** originator SSE disconnect | Envelope stamps `originatorClientId` for the canceling client. This means "cancellation requested", not "cancellation confirmed". Peer subscribers learn that the prompt has ended. |
130
+
|`turn_complete`| S->C | A turn completed successfully |`sessionId, stopReason, promptId?, branchPoint?`. `promptId` links to non-blocking prompt responses (`202`). Eligible completed turns include `branchPoint: { assistantRecordUuid, checkpointUuid }`.|
131
+
|`turn_error`| S->C | A turn failed |`sessionId, message, code?, promptId?`; same `promptId` correlation mechanism. |
|`session_branched`| S->C |Legacy compatibility event; the current branch endpoint returns its result directly and does not publish this event |`sourceSessionId, newSessionId, displayName, originatorClientId?`. Readers retain support for older producers.|
134
+
|`followup_suggestion`| S->C | ACP child generated ghost-text follow-up suggestions after `end_turn`, forwarded over per-session SSE |`sessionId, suggestion, promptId`; wire only carries suggestions whose `getFilterReason()===null`. Clients render them as input-placeholder ghost text and invalidate them on next `sendPrompt`. |
135
+
|`user_shell_command`| S->C | User started a shell command through `POST /session/:id/shell`; fanned out to other subscribers in the same session |`sessionId, command, shellId, originatorClientId?`. There is no typed `DaemonXxxData` interface yet; `asKnownDaemonEvent` returns `undefined` and the UI normalizer parses it ad hoc. |
136
+
|`user_shell_result`| S->C | Result of the shell command above |`sessionId, shellId, exitCode, output, aborted`. Same ad hoc parsing note as `user_shell_command`. |
Copy file name to clipboardExpand all lines: docs/users/features/code-review.md
+3-3Lines changed: 3 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -299,9 +299,9 @@ For PR reviews the manifest is read from the merge base, so the PR under review
299
299
300
300
## Issue Fidelity
301
301
302
-
For bugfix PRs, the Issue Fidelity agent fetches issue evidence directly instead of relying on PR description text. It uses `gh pr view <pr> --repo <owner/repo> --json closingIssuesReferences` for GitHub's strong closing-issue metadata, then `gh issue view <number> --repo <issue_owner>/<issue_repo> --json title,body,comments` for the original report and discussion — the `--json` form includes the issue **body** (the reporter's original repro), which `--comments` alone omits, and the issue's own repository is read from each reference (a PR can close an issue in a different repo). This agent runs only for PR targets; local-diff and file-path reviews skip it.
302
+
For bugfix PRs, the Issue Fidelity agent fetches issue evidence directly instead of relying on PR description text. It runs the `qwen review issue-context <pr> --repo <owner/repo> --out <file>` subcommand, which resolves GitHub's strong closing-issue metadata and then fetches each referenced issue's title,**body** (the reporter's original repro), and full comment thread — each from the issue's own repository (a PR can close an issue in a different repo). This agent runs only for PR targets; local-diff and file-path reviews skip it.
303
303
304
-
`closingIssuesReferences`is a discovery hint rather than proof the author linked the right issue: if it is empty but the PR references an apparent target issue, the agent still fetches it after judging relevance. Fetched issue text is treated as untrusted data (facts extracted, embedded instructions ignored). For relevant issues, the original reproduction, observed payload, expected behavior, and maintainer comments are treated as the highest-priority evidence for whether the PR fixes the right problem.
304
+
The closing-issue set is a discovery hint rather than proof the author linked the right issue: if it is empty but the PR references an apparent target issue, the agent still fetches it after judging relevance (re-running with `--issue <n>`; a bare number resolves in the PR's repo, while `--issue <owner>/<repo>#<n>` fetches a cross-repo reference from its own repo). Fetched issue text is treated as untrusted data (facts extracted, embedded instructions ignored). For relevant issues, the original reproduction, observed payload, expected behavior, and maintainer comments are treated as the highest-priority evidence for whether the PR fixes the right problem.
305
305
306
306
If the issue evidence shows an upstream service or provider returned malformed data outside the client contract, client-side parser or sanitizer changes are not treated as a valid root-cause fix unless a maintainer explicitly requested a defensive workaround. A test that replays malformed upstream output proves only that the workaround handles that shape; it does not prove the workaround is architecturally appropriate.
307
307
@@ -361,7 +361,7 @@ Medium- and high-effort reviews also save a structured JSON companion with the s
361
361
362
362
The deterministic halves of the pipeline — argument parsing (`qwen review parse-args`) and the event/body decision (`qwen review compose-review`) — are tested subcommands rather than prompt text, so `--effort` grammar, `--comment` forcing, verdict caps, and downgrade behavior are pinned by unit tests and cannot drift with the model.
363
363
364
-
**GitHub Enterprise:** reviewing a PR URL on a non-`github.com` host routes every GitHub call at that host — the review subcommands (`fetch-pr`, `pr-context`, `comment-status`, `presubmit`) accept `--host` and set it in code, so a forgotten host cannot silently retarget the review at `github.com`.
364
+
**GitHub Enterprise:** reviewing a PR URL on a non-`github.com` host routes every GitHub call at that host — the review subcommands (`match-remote`, `meta`, `fetch-pr`, `pr-context`, `comment-status`, `issue-context`, `fetch-diff`, `comment-body`, `plan-diff`, `test-plan`, `presubmit`, `compose-review`, `submit`, `publish-assets`) accept `--host` and set it in code, so a forgotten host cannot silently retarget the review at `github.com`.
365
365
366
366
Every run ends with one machine-readable line (`Review complete: <target> — <disposition>`), so scripts and CI wrappers can detect completion and outcome with a single `^Review complete: ` match.
0 commit comments