One issue now gets one comment instead of two posted minutes apart
(the old triage bot asked questions its reproduce sibling then answered
itself). The combined issue-intake agent, driven by an audit of recent
bot output:
- duplicate check before anything else — duplicates are closed, not
reproduced (the duplicate label had zero uses across 1,353 issues
while the bot found duplicates in prose)
- reproduction artifacts live in a collapsed block inside the comment;
the reproduce/issue-N branch convention is retired (382 stale branches
removed from origin)
- reproducible:true renamed to root-cause:found — it asserts a traced
mechanism, not reporter-confirmed causation; confirmed:reporter is the
human-set complement
- the bot no longer sets priority (maintainer-only flag), announces its
labels, opens with flattery, or interrogates feature reporters about
design decisions
- comment opens with a For-the-maintainer line (fix-ready /
needs-reporter / duplicate / likely-fixed / feature)
- label taxonomy cut from 65 to ~26: api:*, reproduction-steps:*,
priority:medium/low, 13 near-zero-use area labels, ios/android
platforms, and orphans removed
- runs on zai-coding-plan/glm-5.3-flash via ZHIPU_API_KEY
- new triage-issues skill mirrors the PR triage pipeline: mechanical
sweep, verdict fan-out, approved batch actions, fix backlog
Post-merge hardening of the session-to-worktree move (#2998), driven by
review findings on the follow-up pass:
- an ambiguous transport failure (relay abort, timeout) on the
change-carrying move no longer force-deletes the fresh worktree that
may hold the user's only copy of their changes; both intent kinds
surface honest guidance and refresh both directories
- assertSdkSuccess re-tags ambiguous transport errors when wrapping SDK
failures, so ambiguity classification survives the wrapper on every
path, matching the prompt-send precedent
- session liveness checks scan all child stores plus the global status
index, and report unknown (not idle) when no store covers the session
— an evicted background directory can no longer make a busy session
look movable
- incomplete-rollback errors carry the changes-may-be-in-destination
guidance instead of swallowing it
- move-message assembly shared across the three call sites; tests now
exercise the real ambiguity classifier (extracted to
send-failure-classification.ts) instead of a hand-mirrored mock
- i18n fallout from the merge train: Turkish gains the 21 worktree-move
keys, all 12 locales get the hedged ambiguous-failure toast; owning
DOCUMENTATION.md files record the new contracts
Comments and reviews from patrick-motard and mattv8 are strong human
signals during batch triage: their approval upgrades confidence, their
concerns become findings to verify. They write free-form; sweeps map
their conclusions onto the verdict ladder.
Re-enable the automated PR review (pull_request_target + /oc-review
comments) on zai-coding-plan/glm-5.3-flash via ZHIPU_API_KEY.
Recalibrate the output contract based on an audit of 69 past reviews
(22 PRs, Aug 15-18): 18 of 27 BLOCKED verdicts were template-policing,
3.1 reviews per PR, ~8.4K chars per comment.
- BLOCKED now means code/merge problems only; handoff/template gaps move
to a separate one-line Handoff flag that never changes the verdict
- re-reviews emit deltas (verdict + what changed) instead of full
re-emission; push-triggered re-reviews are throttled to one per 15
minutes (manual /oc-review always runs)
- hard length budgets by change class; the applied-guidance table is
gone (guidance is applied silently, named only when it produced a
finding); empty evidence/security sections are omitted
- evidence demands are single-shot and escapable, never raised for
dependency bumps, string edits, server code, or packaging
- the comment opens with a one-line maintainer verdict (merge / merge
after X / don't merge because Y), enforced by the workflow
- triage-prs skill treats review:* labels as a pre-sort for verdict
reviews
Follow-ups promised on merge, plus review findings on the batch itself:
- chat: task-tool output now respects the 512KiB render cap; quick-open
icon is visible at rest on coarse pointers and reachable by keyboard
(row keydown no longer swallows inner-button Enter/Space); composer
inline-code decoration drops the metric-shifting padding; a btw fork
send carries only the boundary instruction, never the promotion notice
- sync: cascade revert/unrevert aborts busy descendants, busy state is
read from every child store at the moment of use; rule 9 documents
redo clearing all descendant revert markers
- electron: renderer recovery keeps memory-eviction (a valid
render-process-gone reason) and both windows share one
attachRendererRecovery helper
- vscode: process registry is a thin re-export of the web module
(provider-env-aliases precedent) with ordered register/unregister
writes and an awaited close
- server/cli: managed-process registry takes injectable deps (fixes the
unreaped-orphans ReferenceError), corrupt settings errors name the
file, getWorktrees test restores console.warn
- tests: module-mock harnesses removed (AgentsSidebar, SettingsView
mobile focus — behaviors stay live but uncovered, accepted trade),
QuestionMarkdown asserts rendered DOM
- i18n: German gains the debug-panel request keys, Japanese/German drop
removed worktree keys, Ukrainian unit spacing fixed
- changelog: Copilot AI Credits entries (main + VS Code)