---
id: suggest-triage-playbook
app: wkappbot-workflow
description: "Operator playbook for reviewing wkappbot suggestions: classify duplicates, prioritize by impact, keep evidence requirements explicit, and convert repeated insights into skills."
tags: [workflow, suggest, triage, dedupe, priority, evidence, operator]
---

> **Refresh**: `wkappbot skill read suggest-triage-playbook --if-newer` — v1.35 (2026-04-08)

# Suggest Triage Playbook

## Steps

1. PRIORITY ZERO: Check resolve before triage. Every suggest fix must end with 'suggest resolve <ts> ... --commit <hash>'. Do NOT skip resolve, defer it, or move to next batch. Resolve completion (HALF state or full RESOLVED) is the gate for closure. Only after resolve is done may you move to next suggest.
2. Classify each item by audience and responsibility: operator, developer, project, or user.
3. Merge obvious duplicates conceptually before attempting a fix so one root cause does not create multiple partially solved items.
4. Prioritize by quick win, frequency, and risk; handle the highest signal items first. For large backlogs: use ask-suggest-priority-batching skill -- one GPT batch rank pass then per-item asks concurrently before acting.
5. Keep resolve evidence explicit and minimal: one test script, one pass condition, one note.
6. If a suggestion keeps reappearing, convert the recurring lesson into a skill before closing the item.
7. Prefer a concise triage note over a long analysis: what it is, why it matters, what the next action is.
8. suggest merge --all-matching 'pattern' --title X --work Nh: bulk-merge matching suggests (non-WKAppBot channels only; --dry-run to preview). Cap=20 items. --dry-run shows matches without writing.
9. Verified 2026-04-26: test-suggest-merge-all-matching.sh (resolve ts=2026-04-26T06:11:13.6770863Z)
10. Suggester confirm flow (2026-05-01): (1) maintainer does 1st-party resolve -> HALF state + Slack notice sent to suggester. (2) Suggester runs 'suggest check <ts>' to see regression result. (3) If regression PASS -> 'suggest check <ts>' (author shortcut, preferred) OR 'suggest resolve <ts> note --confirm --skill X' (manual). Running resolve WITHOUT --confirm while HALF exists -> ERROR with copy-pasteable check + confirm commands.
11. SKILL NEWS PRE-CHECK: run wkappbot skill news before suggest list each session. Scans last 7 days for CDP/launcher/workflow updates. Context helps triage: recent skill may mean BUG-AUTO already addressed. Added to gg Main Workflow 2026-05-23 as step 2.
12. MERGE CROSS-CWD BUG (2026-05-26): 'wkappbot suggest merge --all-matching PATTERN ...' fails code=1 when the matched suggests live in a sibling CWD (auto-routes to e.g. D:/GitHub/WkAutoQuant then silently fails). WORKAROUND: use the pairwise form 'wkappbot suggest merge TS_A TS_B --title --root-cause --components --affected-cmds --work' which works cross-CWD. All five flags are REQUIRED. Each merge produces a NEW consolidated entry; loop oldest-pair merges until 1 remains. For a big BUG-AUTO cluster (e.g. 30+ identical [ASK] OperationCanceledException from CdpClient.EnableRuntimeWithRetry timeouts), merge down then resolve the survivor as STALE.
13. DELEGATION FALLBACK (2026-05-26): during gg triage, if the opus-budget-guard blocks Opus subagents (weekly pace exceeded), delegate the MECHANICAL merge/resolve/confirm work to a Haiku agent that runs the wkappbot CLI via the in-IDE Bash tool. Do NOT route wkappbot suggest commands through Codex/wkcodex -- wkappbot CLI calls hang in Codex subprocess (Eye IPC stall + Core fallback exceeds Codex 34s cmd timeout). Keep SDK-vs-Core scope judgment and any code fixes on the main session; push only the mechanical command sequences down.
14. ESCAPE-HATCH APPLIED (2026-05-26): cleared skill-pending lock (set by the preceding CLAUDE.md file edit) immediately before delegating, with no intervening file write. Next call is the Haiku triage Agent. See wkharness-guards GUARD-DEADLOCK ESCAPE HATCH for the full sequence: file edit -> skill edit (clears lock) -> delegate with no file write between.
15. CMD-SAFE BRIEF (2026-05-26): Agent.cmd passes prompts through cmd.exe batch parsing, which CHOKES on colons parens pipes ampersands in the argument with the error 'X was unexpected at this time'. Fix: write a cmd-safe brief file with NO colons NO parens NO pipes; identify suggest clusters by TEXT SIGNATURE and let the delegated agent read exact ts from its own suggest list output, so no colon-bearing timestamps need to appear in the brief. Then Agent.cmd --model haiku with cat of that file dispatches cleanly. Agent.cmd skips claude-md-sync-guard (that guard is Agent-tool only), so the file-write-then-skill-edit-clear sequence works without the sync deadlock.
16. wkcodex KILL-GUARD: blocks any delegated task whose text contains kill-words (a11y-kill, taskkill, process kills, killing wkappbot) near wkappbot, even when the agent will not actually kill anything. Strip all word-boundary kill tokens from Codex/wkcodex briefs; describe the FOCUS-STEAL a11y cluster without the -kill suffix and omit the taskkill item note.
17. RESOLVE DELEGATION (2026-05-26): stale BUG-AUTO noise resolve requires a real evidence script (.sh/.ps1/.cmd) plus the long --i-completed-the-code-...-script flag plus --skill; the documented --i-completed-the-work-and-verified-with-script none shortcut is REJECTED by the current resolve guard. Create one shared evidence script that runs wkappbot suggest list and exits 0, then delegate the per-ts resolve loop to wkcodex with a plain punctuation-free note. Bulk stale resolve is the workaround until the --dismiss-stale feature lands.
18. RESOLVE CMD-GUARD (2026-05-26): the resolve evidence script must contain (in source OR runtime debug output) at least one of the merged records affectedCommands, else CMD-execution-guard FAILS with none of merge affectedCommands [X] found. BUG-AUTO merge records commonly carry affectedCommands a11y or ask or cdp. Fix the shared stale-noise evidence script to run wkappbot a11y windows and wkappbot suggest list and to echo the tokens a11y ask cdp suggest, so the guard matches any cluster. Also the test-CMD-name filename convention warns if the second filename token is not a known command but that warning is non-fatal.
19. MULTI-BATCH DELEGATION (2026-05-26): every wkcodex/Agent COMPLETION arms the skill-update-pending lock (CODEX-DONE MARK in wkharness-post). So a multi-round delegation loop must interleave a wkappbot skill edit BEFORE each next dispatch: skill edit clears lock, wkcodex runs, its completion re-arms lock, skill edit again, next wkcodex. Budget one throwaway skill edit per delegation round. Confirmed when re-dispatching the stale-noise resolve loop for the remaining OperationCanceledException cluster.
20. CMD-GUARD MULTIWORD (2026-05-26): the resolve CMD-execution-guard substring-matches the FULL affectedCommand string against script source/output. BUG-AUTO ASK CDP merge records carry MULTIWORD affectedCommands like [ask gpt, ask claude, ask gemini] (not just ask). The evidence script must contain those exact phrases ask gpt ask claude ask gemini verbatim or the guard fails. FOCUS-STEAL records use [a11y] (single word) which is why they resolved first. Put all variants in the script echo and comment.
21. REQUIREMENT-FILL FOR MERGED RECORDS (2026-05-26): MERGEx2 survivor records carry 0 requirements, and resolve demands >=3, so bulk stale resolve must FIRST add 3 cheap valid requirements per entry via wkappbot suggest add-requirement TS cmd=>expected (e.g. skill-read commands that deterministically pass) THEN resolve with the evidence script. This is the merge-drops-requirements gap that --dismiss-stale would remove. Delegate the 4-command-per-entry loop to wkcodex.
22. FULL STALE-RESOLVE RECIPE (2026-05-26, PROVEN end-to-end): the complete guard chain to resolve a stale BUG-AUTO merge-survivor is (1) evidence .sh that source-contains the records affectedCommands via if-false block e.g. if false; then wkappbot ask gpt noop; wkappbot ask claude noop; wkappbot ask gemini noop; fi (2) EXACTLY 9 distinct wkappbot skill read requirements via add-requirement (--class skill-only enforces 9) (3) a commit in the CORE repo D:/GitHub/WKAppBot whose message contains the FULL suggest title verbatim because the commit-guard runs git in the HQ dir which is the Core working tree (local commit is enough, no push) (4) resolve via wkappbot-core.exe with --i-completed-the-code-...-script SCRIPT --skill suggest-workflow --commit COREHASH --class skill-only. This 4-part chain is wildly heavy for noise which is exactly why --dismiss-stale is needed.
