What's Changed
- fix(ci): add default bash shell to container jobs in qwen-triage by @qwen-code-dev-bot in #7838
- fix(web-shell): preserve pasted text in composer by @ytahdn in #7824
- feat(web-shell): add monitor task details by @ytahdn in #7817
- fix(ci): add git safe.directory for container jobs by @qwen-code-dev-bot in #7843
- fix(ci): add --init to container jobs to reap zombie processes by @qwen-code-dev-bot in #7848
- fix(core): wait for output stream flush before settling background shells by @ComplexSimply in #7833
- fix(scripts): retry model calls and surface degraded release notes by @he-yufeng in #7535
- feat(web-shell): Scope voice to composer workspace by @doudouOUC in #7754
- feat(hooks): Add submitted prompt provenance by @doudouOUC in #7762
- fix(ci): prevent worktree cleanup from failing the verify job by @qwen-code-dev-bot in #7857
- perf(acp): Preload providers after session creation by @doudouOUC in #7767
- test(channels): run the feishu, weixin and qqbot suites in CI by @chinesepowered in #7853
- feat(autofix): retry deterministic rejection once by @qqqys in #7796
- fix(release): publish all channel packages, not just channel-base by @yiliang114 in #7845
- feat(web-shell): add Channel management page by @qqqys in #7793
- feat(acp): add session-scoped runtime MCP by @qqqys in #7847
- feat(core): persist and replay Goal v3 state by @qqqys in #7815
- feat(core): add full-resolution image zoom tool by @qqqys in #7809
- fix(scripts): harden retry classification and preserve deadline error context by @yiliang114 in #7854
- feat(web-shell): add composer footer renderer by @dreamWB in #7856
- fix(core): fast-fail permanent quota-exhaustion 429s instead of silent retry by @yiliang114 in #7842
- fix(web-shell): isolate history and session drafts by @ytahdn in #7810
- fix(triage): retry a transient npm ci before blaming the PR for it by @wenshao in #7884
- fix(webui): fall back to history_truncated marker recordId for transcript pagination anchor by @wenshao in #7829
- feat: Gate session writer lease behind opt-in by @doudouOUC in #7894
- fix(review): give the review retry the remaining time budget by @wenshao in #7852
- fix(integration): configure Docker sandbox networking for submitted-prompt provenance test (#7879) by @qwen-code-dev-bot in #7881
- fix(cli): report a genuine $0.00 cost instead of N/A by @chinesepowered in #7784
- fix(core): reject socks5h and socks4a proxy URLs by @chinesepowered in #7786
- fix(core): correct the character classes in checkContentLoop by @chinesepowered in #7788
- fix(web-shell): make /copy with a bare index work by @chinesepowered in #7789
- fix(core): decline combined sed flags where -i is not last by @chinesepowered in #7790
- fix(core): pass the Grep pattern behind -e so a leading dash is not an option by @chinesepowered in #7863
- feat(ci): Deduplicate E2E failure issues by commenting on existing issue by @yiliang114 in #7792
- fix(core): cap a bare Error's message like every other getErrorMessage path by @chinesepowered in #7865
- fix(cli): make wrapToVisualLines count zero-width characters like its sibling by @chinesepowered in #7873
- fix(core): charge the separator and ellipsis to the preview budget by @chinesepowered in #7874
- fix(cli): do not count a partial trailing line when re-opening a split fence by @chinesepowered in #7875
- fix(cli): make /copy select the code block by @chinesepowered in #7883
- feat(triage): add revert-pattern high-risk path detection by @yiliang114 in #7414
- feat(web-shell): add native workspace folder picker by @qqqys in #7849
- feat(web-shell): add Channel configuration flows by @qqqys in #7893
- fix(test): Restore first-output benchmark measurement validity and correct its artifact schema by @doudouOUC in #7820
- fix(daemon): harden Todo Stop Guard continuations by @doudouOUC in #7821
- fix(core): read the stash reflog from the common git dir by @chinesepowered in #7774
- fix(core): keep Draft 4 boolean exclusive bounds in toOpenAPI30 by @chinesepowered in #7782
- fix(core): apply maxDepth to flat-format memory imports by @chinesepowered in #7851
- fix(core): render a thought part's reasoning instead of the boolean flag by @chinesepowered in #7866
- fix(core): bridge tool-result images for text-only models by @LaZzyMan in #7484
- fix(cli): patch ink to clear staticNode on indirect subtree removal by @chiga0 in #7816
- fix(core): auto-retry transient network errors during API calls by @chiga0 in #7898
- fix(cli): hide stale sticky todos from previous turns by @chiga0 in #7900
- fix(serve): Release managed session writer locks on shutdown by @doudouOUC in #7812
- perf(core): add early Anthropic cache breakpoint on the stable system prefix by @DragonnZhang in #7912
- fix(cli): add polling fallback for git branch name display by @qwen-code-dev-bot in #7830
- fix(cli): remove redundant 'Read file' prefix from @mention tool card by @qwen-code-dev-bot in #7902
- feat(core): Add ARMS session user ID by @doudouOUC in #7921
- fix(safe-mode): preserve caller-supplied top-tier MCP servers by @VitaliBabkin in #7827
- fix(ci): keep the post-merge E2E signal on main alive by @wenshao in #7795
- fix(core): short-circuit the flush wait when the output stream cannot flush by @ComplexSimply in #7905
- fix(core): track quotes inside a command substitution in splitCommands by @chinesepowered in #7870
- fix(core): count the per-server and per-tool always-allow outcomes as approvals by @chinesepowered in #7869
- fix(web-shell): report intended workspace to host when starting a new chat by @wenshao in #7910
- fix(cli): default to virtualized terminal history by @ZevGit in #5738
- fix(ci): restore workspace ownership in cleanup to prevent EACCES by @qwen-code-dev-bot in #7931
- perf(ci): cut the E2E suite from ~40min to ~24min by @wenshao in #7798
- feat(channels): expose loop tools in daemon sessions by @qqqys in #7891
- fix(review): recover the resolved effort when --effort is not re-threaded by @wenshao in #7855
- feat(web-shell): honor voice hold mode by @callmeYe in #7839
- feat(web-shell): manage Channel pairing requests by @qqqys in #7909
- feat(channels): dispatch GitHub notifications by reason by @yiliang114 in #7826
- feat(web-shell): add git branch picker, commit dialog, and create PR flow by @wenshao in #7731
- feat(triage): surface the sandboxed lanes on the CI path by @wenshao in #7917
- fix(scripts): slim release-note model prompts and log request timing by @yiliang114 in #7941
- feat(web-shell): suggest BTW for side questions by @carffuca in #7935
- fix(release): pin channel-base dep to exact version during release bump by @yiliang114 in #7953
- feat(triage): make the verify report readable in Chinese by @wenshao in #7918
- fix(triage): make the build-process guard diagnosable and zombie-aware by @wenshao in #7858
- fix(ci): give each job its own proxy wrapper directory by @wenshao in #7951
- feat(autofix): defer suggestions after five change rounds by @qqqys in #7913
- feat(core): connect Goal v3 to the turn engine by @qqqys in #7895
- feat(core): bound image reads for reliable zoom by @qqqys in #7911
- fix(integration): scale interactive read-then-write waits with env timeout (#7942) by @qwen-code-dev-bot in #7943
- test(integration): deflake asyncGenerator canUseTool content assertion (#7937) by @qwen-code-dev-bot in #7939
- fix(ci): clean stale .qwen/ before checkout to prevent Permission denied by @qwen-code-dev-bot in #7977
- feat(triage): make the not-verified sentence a mechanical 2b-bis trigger by @wenshao in #7965
- fix(ci): restore verify workspace permissions by @yiliang114 in #7992
- feat(external-context): Add submitted-prompt auto recall by @doudouOUC in #7877
- fix(ci): update the Qwen binary used by ECS runners by @yiliang114 in #8000
- feat(web-shell): render streaming charts with markdown-chart by @zhangxy-zju in #7916
- feat: robust ripgrep by @water-in-stone in #7888
- fix(core): mark folders the item budget never expanded by @chinesepowered in #7868
- fix(feishu): keep code-fence chunks within the message size limit by @chinesepowered in #7850
- fix(web-shell): preserve token and base path in session URLs by @ytahdn in #7926
- ci: add isolated DSW SWE-bench release pipeline by @DennisYu07 in #7656
- fix(web-shell): polish Channel pairing requests by @qqqys in #7997
- fix(cli): correct hardware cursor off-by-one in fullscreen mode by @chiga0 in #7998
- fix(cli): prevent SGR mouse events from being swallowed as paste on Windows by @chiga0 in #7988
- feat(channels): add DingTalk interactive cards by @BenGuanRan in #6930
- feat(web-shell): refine advanced table controls by @ytahdn in #7999
- fix(serve): allow bounded reads of large text files by @doudouOUC in #7947
- fix(web-shell): prefer artifact type metadata in cards by @ytahdn in #7973
- fix(web-shell): reduce composer input latency by @ytahdn in #8015
- fix(webui): stabilize session history pagination by @ytahdn in #8001
- fix(release): skip notes-start-tag when previous release diverges from target (#7969) by @qwen-code-dev-bot in #7970
- fix(sdk): raise daemon browser bundle budget to 177KB by @wenshao in #8024
- fix(cli): map Kitty Super (Command) modifier to meta by @chiga0 in #7996
- fix(daemon): distinguish draining channel worker diagnostics by @destire-mio in #7932
- feat(triage): lead the verify comment with a qualitative verdict, fold the Chinese by @wenshao in #7974
- fix(review): preflight free disk before build-test installs and builds by @wenshao in #7986
- test(integration): migrate flaky E2E tests to fake-openai-server by @yiliang114 in #7934
- feat(triage): run external /verify on ECS behind a workspace wipe by @wenshao in #7985
- fix(cli): reserve Ctrl+Shift+C for terminal copy, not quit/clear by @chiga0 in #8011
- fix(core): auto-record artifact file writes by @chiga0 in #7914
- fix(cli): MCP prompt completion no longer blocks Enter for optional params by @qwen-code-dev-bot in #7995
- feat(hooks): add security.allowPrivateNetworkHooks to bypass SSRF range checks for trusted scopes by @xurik in #7968
- feat(web-shell): add split pane header action slot with overflow by @samuelhsin in #7808
- feat(channels): add GitLab polling channel adapter by @OrbitZore in #7862
- fix(channels): disable native cron in daemon sessions by @qqqys in #8034
- feat(channels): add pairing approval management API by @qqqys in #8045
- feat(github-channel): filter notification reasons by @xianjianlf2 in #8031
- fix(channels): reject unusable GitHub self-allowlists by @zjunothing in #8055
- fix(core): drop top-level oneOf from send_message tool schema by @netbrah in #7989
- fix(cli): stop resize repaint from causing scroll storm by @chiga0 in #8009
- feat(review): disclose a zero-finding Approve on a non-trivial diff as low signal by @wenshao in #7987
- fix(core): rebind fork capabilities on resume by @DragonnZhang in #7927
- feat(core): preload deferred tools within a context-window threshold by @DragonnZhang in #7922
- fix(channels): make GitHub final response publication single-shot by @yiliang114 in #8033
- fix(ci): restore workspace ownership before checkout in PR review job by @yiliang114 in #8062
- fix(release): bump preview base past published stable by @yiliang114 in #7978
- test(web-shell): expand restored-history pagination regression coverage by @PratikWayase in #7907
- fix(serve): Add certified session writer handoff by @doudouOUC in #7976
- test(integration): Measure immediate prompt dispatch stages by @doudouOUC in #7994
- fix(core): allow transport stream retry during the thinking-only phase by @ComplexSimply in #7938
- fix(github-channel): validate and document reasonFilter by @yiliang114 in #8035
- fix(core): guard against CJK-driven char/4 under-count in output clamp by @zambalee in #7963
- fix(core): preserve active Todo context across tool turns by @yiliang114 in #7919
- feat(review): add
review run— headless review with a machine-readable verdict by @wenshao in #7983 - fix(cli): stamp QWEN_CODE_CLI at the workspace entry and publish QWEN_CODE_MODEL by @wenshao in #7993
- feat(verify-pr): add seven techniques from maintainer verification rounds by @wenshao in #8010
- feat(triage): raise the /verify agent budget from 25m to 120m by @wenshao in #8014
- fix(autofix): cumulative timeout breaker, narrowed retry prompt, truthful handoff wording by @wenshao in #8044
- feat(autofix): post a takeover milestone digest every tenth pushed round by @wenshao in #8046
- fix(autofix): post the takeover engage ack from the command itself by @wenshao in #8043
- test(e2e): force delegation in flaky subagent case (#8070) by @qwen-code-dev-bot in #8073
- fix(web-shell): stabilize enhanced table controls by @ytahdn in #8041
- feat(github-channel): add transient working reaction by @yiliang114 in #8061
- fix(integration): make interactive read-then-write test deterministic (#8060) by @qwen-code-dev-bot in #8064
- feat(autofix): back off scan inspection of idle candidates by @wenshao in #8049
- fix(web-shell): show server queue status for pending messages by @wenshao in #8065
- fix(web-shell): improve artifact previews by @ytahdn in #8078
- feat(triage): make /verify evidence screenshots actually possible by @wenshao in #8016
- fix(ci): gate the attachment guard before it allocates a runner by @wenshao in #8095
- fix(web-shell): translate legacy /skills invocations by @ytahdn in #8103
- fix(verify-pr): budget evidence capture in scope selection by @wenshao in #8104
- fix(web-shell): show prompt send failure and retry action by @ytahdn in #8106
- fix(web-shell): make question submission retryable by @ytahdn in #8096
- fix(web-shell): preserve approved tool results by @ytahdn in #8099
- fix(autofix): answer round-cap refusals on the PR instead of only in logs by @wenshao in #8067
- fix(autofix): salvage race-lost pushes by merging the moved head and retrying by @wenshao in #8042
- feat(autofix): per-source feedback budget in Critical-only mode by @wenshao in #8071
- feat(core): tag UserPromptSubmit hook context and record display provenance by @zjgzx1988 in #7956
- fix(core): abort workflows during session shutdown by @qqqys in #8107
- fix(test): resolve turn completion on result messages in setModel E2E test (#8072) by @qwen-code-dev-bot in #8075
- feat(serve): page large text files by byte cursor by @doudouOUC in #8002
- fix(test): give multi-model E2E turns more CI timeout headroom (#8108) by @qwen-code-dev-bot in #8111
- fix(serve): Prevent repeated workspace skill rescans by @doudouOUC in #8080
- feat(review): statement-level mutation probes in test-efficacy by @wenshao in #8020
- feat(web-shell): add contextual task panels by @ytahdn in #7929
- feat(agent): add fork tool execution allowlist by @destire-mio in #8066
- fix(serve): Isolate daemon session maintenance writers by @doudouOUC in #7975
- fix(serve): restore build by routing side-task rollback through the workspace session service by @wenshao in #8144
- fix(web-shell): isolate worktree session execution by @wenshao in #8068
- feat(web-shell): manage pairing approvals by @qqqys in #8081
- fix(test): allow slow permission mode E2E responses by @wenshao in #8149
- fix(test): make auto-edit permission E2E deterministic by @wenshao in #8154
- feat(web-shell): enhance composer and empty-session animations by @ytahdn in #8098
- fix(web-shell): constrain session details and add copy action by @dreamWB in #8127
- feat(hooks): include session source in lifecycle hook payloads by @xurik in #8155
- feat(review): check cache identity when reviewing workflow PRs by @wenshao in #8205
- fix(cli): allow scratch workspace without bearer token by @wenshao in #8204
- feat(channels): isolate daemon adapter state by workspace by @qqqys in #8178
- fix(test): route setPermissionMode E2E timeouts through TEST_TIMEOUT (#8133) by @qwen-code-dev-bot in #8135
- refactor(web-shell): simplify plugin page action button labels by @ytahdn in #8174
- feat(verify-pr): ship a one-command capture helper by @wenshao in #8114
- fix(github-channel): retry definite no-write deliveries by @yiliang114 in #8087
- fix(core): Tolerate transcript timestamp drift by @doudouOUC in #7886
- feat(anthropic): support extended 1h cache_control TTL by @netbrah in #8048
- fix(cli): add Ctrl+Tab alternative for @ completion tab switching by @qwen-code-dev-bot in #8074
- fix(cli): prevent silent VP-mode crash by adding uncaughtException handler and error visibility by @chiga0 in #8088
- fix(core): keep compactString within its limit when the marker does not fit by @chinesepowered in #7872
- feat(ci): fail the startup bundle check when the CLI entry is hoisted into a chunk by @wenshao in #8203
- fix(web-shell): localize built-in agent type names in zh-CN by @wenshao in #8209
- fix(release): keep notes anchored and cap the release body by @wenshao in #8199
- fix(core): strip assistant-turn prefill and fix thinking.display on 4.6+ models by @netbrah in #8040
- fix(anthropic): move tool_result blocks first in mixed-content user messages by @netbrah in #8165
- fix(anthropic): sanitize tool_use.id / tool_result.tool_use_id by @netbrah in #8164
- feat(gitlab-channel): add transient 👀 award emoji while agent is working by @OrbitZore in #8119
- feat(core): Normalize tool-call terminal telemetry by @doudouOUC in #8176
- fix(web-shell): adaptive dropdown width for long model names by @wenshao in #8220
- refactor(core): extract workflow run ownership by @qqqys in #8140
- fix(integration-tests): stabilize async SDK MCP tool handler E2E (#8222) by @qwen-code-dev-bot in #8223
- fix(test): isolate the worktree symlink test's temporary sibling directory by @wenshao in #8228
- fix(cli): pick the memory unit from the rounded figure, not the raw bytes by @chinesepowered in #7871
- fix(core): prevent subagents from asking users by @DragonnZhang in #8219
- feat(hooks): add SessionDelete event by @xurik in #8059
- fix(core): treat a bare & as a command boundary in splitCompoundCommand by @chinesepowered in #7864
- feat(serve): support caller-supplied sessionId in POST /session by @qwen-code-dev-bot in #7836
- feat(cli): run safe slash commands during streaming by @DragonnZhang in #8130
- fix(cli): add Option+V for clipboard image paste on macOS by @qwen-code-dev-bot in #8120
- feat(core): add a host tool invocation guard by @chiga0 in #8032
- feat(core): add GenAI time-to-first-chunk tracing by @doudouOUC in #8150
- fix(ui): suppress stale mouse events during dialog transitions by @kagura-agent in #8089
- docs: worked example for a PreToolUse HTTP hook backed by an external judgment service by @babyblueviper1 in #8202
- test(integration): migrate acp-cron to fake-openai-server (#8076) by @qwen-code-dev-bot in #8082
- fix(ci): avoid verify capture color conflict by @ytahdn in #8236
- fix(serve): isolate managed memory by selected workspace by @qqqys in #8056
- fix(web-shell): keep pasted text visible by @ytahdn in #8230
- fix(autofix): guard review thread resolution by @wenshao in #8231
- test(e2e): inherit suite timeout in flaky subagent cases (#8244) by @qwen-code-dev-bot in #8246
- fix(autofix): Extend suggestion handling to ten rounds by @wenshao in #8247
- feat(triage): start the verify lane alongside /triage on a pull request by @wenshao in #8249
- feat(daemon): raise default max sessions from 20 to 32 by @wenshao in #8235
- fix(core): recover XML-style tool calls from plain text content by @qwen-code-dev-bot in #8037
- test(e2e): skip two model-flaky SDK E2E cases (#8256) by @qwen-code-dev-bot in #8259
- feat(web-shell): add artifact downloads by @ytahdn in #8234
- feat(memory): protect pinned files during forked Dream by @destire-mio in #7714
- fix(external-context): harden MCP dependencies by @doudouOUC in #8206
- fix(anthropic): dedup duplicate tool_result blocks sharing a tool_use_id by @netbrah in #8163
- fix(web-shell): quiet background task polling failures by @han-dreamer in #7923
- fix(channel): recover ACP bridge after wake by @yiliang114 in #8211
- refactor(core): thread the descriptor instead of forking text-read helpers by @doudouOUC in #7967
- fix(cli): filter SGR mouse escape sequences in early input capture by @qwen-code-dev-bot in #8268
- feat(core): add project-level fork profiles by @destire-mio in #8148
- feat(skills): add disabled skill levels by @zhangxy-zju in #8057
- fix(cli): stabilize thinking block height, replace transcript overlay with inline Ctrl+O toggle by @chiga0 in #8077
- feat(autofix): unify local and CI flows in one skill by @yiliang114 in #8121
- fix(cli): complete image routing across entry points by @yiliang114 in #7206
- fix(integration): use QWEN_CODE_TEST_CRON_FAST in acp-cron test (#8237) by @qwen-code-dev-bot in #8243
- fix(anthropic): cascade-strip stale thinking siblings when their tool_use is orphaned by @netbrah in #8166
- fix(web-shell): compact advanced tables in narrow messages by @ytahdn in #8264
- fix(web-shell): stabilize mobile composer after resume by @ytahdn in #8263
- fix: make the test suite portable on Windows by @yiliang114 in #8050
- fix(triage): render the verify report as sanitized markdown, not an escaped pre dump by @wenshao in #8147
- feat(workflows): bubble workflow agent approvals by @qqqys in #8240
- refactor(cli): remove ACP private serve dependencies by @yiliang114 in #8141
- fix(web-shell): isolate automatic recap by session by @wenshao in #8262
- feat(verify): sweep sibling shapes, calibrate replays, measure suggested fixes by @wenshao in #8242
- fix(triage): say what the re-run summary measured, in both languages by @wenshao in #8273
- fix(ci): harden self-hosted runner workspace ownership recovery by @qwen-code-dev-bot in #8115
- feat(skills): add auto-skill curator by @DragonnZhang in #7846
- feat(review): Test Plan claim check, base-tree A/B harness, per-hunk probes by @wenshao in #8215
- fix(web-shell): deduplicate permission options with same display label by @qwen-code-dev-bot in #8250
- feat(verify): check the accepting end, and separate empty from unmeasured by @wenshao in #8295
- fix(vscode): traverse distinct resolved versions in notices generator by @yiliang114 in #8272
- feat(cli): Add agent view supervisor runtime by @ZijianZhang989 in #7799
- fix(qqbot): expose full sender openid in group message prompt by @Eric-GoodBoy-Tech in #8233
- fix(autofix): state the primary agent budget and use the step's headroom by @wenshao in #8257
- feat(review): Include CLI version in attribution by @wenshao in #8294
- test(sdk-typescript): make abort-signal canUseTool E2E deterministic (#8297) by @qwen-code-dev-bot in #8300
- feat(web-shell): support mutable default mid-turn messages by @ytahdn in #8229
- feat: visualize ordinary-session plan execution by @yiliang114 in #7580
- feat(cli): add /model --compaction for configurable chat compression model by @Aleks-0 in #7818
- feat(cli): adopt Goal v3 in interactive TUI by @qqqys in #8005
- feat(workflows): support opt-in background runs by @qqqys in #8303
- feat(review): measured failure attribution, round ledger, richer mutants, doc parity by @wenshao in #8218
- perf(core): memoise ancestor-directory ignore lookups in the file-search crawler by @dexhunter in #8253
- feat(cli): add TUI image display tool by @DragonnZhang in #8217
- test(web-shell): pass locale to approval renderer by @yiliang114 in #8314
- fix(cli): add ui.mouseTracking setting to restore right-click and URL clicks by @qwen-code-dev-bot in #8198
- Fix ACP startup failure when extension is loaded from a symlinked directory by @Wchoi189 in #8309
- docs(web-shell): organize design documents by feature area by @water-in-stone in #8304
- fix(webui): make long tool output collapsible by @destire-mio in #8251
- feat(review): render adjudication, workflow step extraction, three verification lenses by @wenshao in #8225
- docs: document skill learning and live reload by @DragonnZhang in #8298
- feat(review): borrow recall, a fix loop, and a size-derived budget from Claude /review by @wenshao in #8315
- feat(review): carry the round ledger in the posted review body by @wenshao in #8255
- feat(review): mined disciplines — effective-diff guard, positive control, seven lenses by @wenshao in #8261
- test(sdk-typescript): make orchestration E2E deterministic by @yiliang114 in #8312
- docs: complete TUI keyboard shortcut reference by @DragonnZhang in #8327
- fix(core): unblock history pagination on oversized transcript turns by @wenshao in #8335
- fix(ci): ensure qwen CLI before triage action to avoid redundant install by @yiliang114 in #8337
- fix(review): a mutant whose own test was red is not a survivor either by @wenshao in #8345
- fix(core): redact sibling directives from forked subagent history by @harjothkhara in #8344
- feat(cli): /summary supports custom export path by @qwen-code-dev-bot in #8116
- ci: gate merges on deterministic no-AK E2E by @yiliang114 in #8313
- fix(todo): preserve compatibility outside active plans by @yiliang114 in #8334
- docs: refresh architecture overview by @DragonnZhang in #8325
- feat(review): teach the verifier the falsify-not-verify asymmetry by @wenshao in #8346
- test(sdk-typescript): make permission control E2E deterministic by @yiliang114 in #8302
- ci: auto-update ECS runners on stable publish and harden update job by @wenshao in #8343
- fix(sdk-java): accept ERROR terminal in teardown E2E to fix flaky race by @wenshao in #8354
- feat(review): drive — readiness polled, completion proven, cleanup guaranteed by @wenshao in #8349
- fix(core): reuse prompt cache during chat compression by @DragonnZhang in #8339
- fix(cli): allow pasting sensitive extension settings by @DragonnZhang in #8342
- feat(serve): resolve and report the daemon memory budget by @doudouOUC in #8245
- test(extension): stop a hand-written projection from racing the store's clock by @wenshao in #8362
- docs: document compaction and image model selection by @DragonnZhang in #8348
- fix(github-channel): recover interrupted inbound tasks by @yiliang114 in #8306
- feat(review): mock-provider — the protocol is a fixture, the answer is yours by @wenshao in #8355
- test(review): pin drive's capped-stream case to its invariant, not to bash 5.2 by @wenshao in #8366
- feat(desktop): package Web Shell as a release-ready desktop app by @yiliang114 in #8132
- fix(core): retry leaked JSON tool protocol output by @yiliang114 in #8301
- feat(serve): make sub-session concurrency caps configurable by @wenshao in #8341
- fix(ci): ask GitHub what the PR changed, not what the base gained by @wenshao in #8372
- fix(ci): trigger ECS runner reconciliation after updater changes by @yiliang114 in #8373
- feat(ci): add repo-hygiene skill and weekly patrol workflow by @ZijianZhang989 in #7908
- docs(review): tell the agents drive and mock-provider exist, and how a fix's test earns its place by @wenshao in #8369
- feat(ci): size-aware default timeout for the PR review job by @wenshao in #8377
- fix(review): follow output language in Tip lines and saved reports by @wenshao in #8370
- feat(channels): add Web Shell management support for GitHub and GitLab by @OrbitZore in #8310
- fix(cli): re-stamp QWEN_CODE_CLI for the review run child by @wenshao in #8378
- fix(core): resume long streams cut by a socket-level close by @LHMQ878 in #7896
- test(integration): select acp-cron notification by source, not wall-clock (#8333) by @qwen-code-dev-bot in #8336
- fix(external-context): Dispose of Auto Recall proxy dispatcher by @doudouOUC in #8352
- feat(review): publish evidence images to a user-designated assets repo by @wenshao in #8351
- fix(review): read why the collocated test was not green, do not assert it by @wenshao in #8374
- fix(review): hold a Critical the base tree already fails by @wenshao in #8380
- feat(cli): add a Java/JVM performance path rule to /review by @wenshao in #8379
- feat(ci): expand code owner pool for packages/core by @wenshao in #8347
- feat(web-shell): gate Session Workflow behind an experimental setting by @yiliang114 in #8391
- feat(cli): adopt Goal v3 in non-interactive mode by @qqqys in #8324
- fix(review): deprioritize Maven generated test sources by @wenshao in #8405
- feat(memory): configure background agent turn limits by @tomatotomata in #8171
- feat(desktop): bridge Electron users to Tauri updates by @yiliang114 in #8392
- fix(web-shell): prevent table dialog close scroll jump by @carffuca in #8407
- ci: remove broken legacy scheduled PR triage workflow by @wenshao in #8434
- feat(telemetry): Track tool execution outcomes by @doudouOUC in #8180
- fix(core): Clarify write_file prior-read guidance by @doudouOUC in #8428
- fix(desktop): read Windows smoke log from LocalAppData by @yiliang114 in #8381
- fix(core): Avoid replaying unsafe MCP tool calls by @doudouOUC in #8387
- fix(core): stop Goal retries after evidence catalog exhaustion by @qqqys in #8430
- fix(review): keep drifted-but-delivered launches out of the repair loop by @wenshao in #8466
- feat(review): Add structured Web Shell review results by @wenshao in #8402
- ci: reduce SDK Java runner queueing by @yiliang114 in #8441
- fix(core): align MCP reconnect timeout test with safe replay policy by @wenshao in #8478
- feat(core): support Qwen 3.8 reasoning effort by @DragonnZhang in #8472
- fix(ci): align review workflow tests with externalized timeout variables by @wenshao in #8486
- feat(browser-ext): add alpha readiness diagnostics by @yiliang114 in #6739
- docs: document headless Goal workflows by @DragonnZhang in #8503
- feat(core): guide recording of PR, issue, and comment URLs as artifacts by @wenshao in #8453
- ci: route trusted-author fork PRs and no-checkout jobs to the ECS pool by @wenshao in #8502
- fix(web-shell): keep pending background agents active by @carffuca in #8413
- fix(desktop): rotate Tauri updater signing key by @yiliang114 in #8511
- fix(web-shell): add explicit ::selection for message content in Firefox by @C0d3N1nja97342 in #8417
- refactor(core): move review skill incident narratives to DESIGN.md by @wenshao in #8499
- fix(core): harden Qwen 3.8 reasoning effort wire shape by @wenshao in #8488
- perf(review): issue independent setup calls in one response by @wenshao in #8487
- fix(review): stop the reverse-audit loop while there is still time to report by @wenshao in #8468
- fix(autofix): normalize paginated fetches to one flat array per file by @wenshao in #8438
- feat(web-shell): bind plan approval to its Todo revision by @yiliang114 in #8393
- fix(core): resolve DashScope thinking-knob conflicts by family (#8488 round 2) by @wenshao in #8536
- fix(cli): stop review test-efficacy tests depending on ambient tmpdir vitest by @wenshao in #8537
- feat(serve): add a required external tool guard provider by @chiga0 in #8125
- fix(desktop): codesign ripgrep and node binaries before tauri build by @yiliang114 in #8518
- fix(core): reuse prompt cache for multimodal compression by @DragonnZhang in #8419
- fix(cli): preserve Qwen Review startup version in footers by @yiliang114 in #8431
- fix(serve): detect lineEnding across the file, not the returned slice by @doudouOUC in #8383
- perf(core): clear tool results to a low watermark to preserve prompt cache by @doudouOUC in #8464
- feat(review): a cost ledger from the records already on disk by @wenshao in #8471
- fix(review): admit evidence images by content, not by name — magic-byte sniffing by @wenshao in #8459
- test(ci): align resolve-workflow timeout expectations with externalized variables (#8460 follow-up) by @wenshao in #8485
- fix(ci): clean review worktrees after cancellation by @yiliang114 in #8474
- fix(webui): recover complete turns after live journal truncation by @doudouOUC in #8414
- fix: add onCompromised handlers to proper-lockfile calls to prevent daemon crash by @wenshao in #8442
- perf(autofix): build the review CLI bundle once per scan and fan it out to legs by @wenshao in #8548
- perf(review): retire dry chunks and pipeline verification in the reverse audit by @wenshao in #8498
- chore(cua-driver): sync upstream v0.17.0 by @LaZzyMan in #8564
- feat(web-shell): add native Live Voice by @LaZzyMan in #7859
- fix(release): reuse configured Apple signing secrets by @LaZzyMan in #8574
New Contributors
- @VitaliBabkin made their first contribution in #7827
- @xianjianlf2 made their first contribution in #8031
- @zambalee made their first contribution in #7963
- @babyblueviper1 made their first contribution in #8202
- @Wchoi189 made their first contribution in #8309
- @LHMQ878 made their first contribution in #7896
- @tomatotomata made their first contribution in #8171
Full Changelog: dsw-manual-poc-20260727-1...desktop-v0.1.0