--- name: tau-papercut-triage description: > Use when asked to "triage papercuts", review clanker-reported problems, or analyze and clear tau dev papercut reports. Distinguish agent mistakes, recurring environment issues, and Tau defects; queue actionable follow-ups for approval before clearing analyzed reports safely. advertise: true --- # Triage papercuts Use a senior researcher for this task. Triage is investigation and reporting, not permission to fix code, change configuration, restart sessions, or bypass isolation. Respect any concurrent project update owner. ## Capture the complete inventory privately 1. Load `dpc`, `tau-self-knowledge-debugging`, and applicable project instructions. Read the papercut and relevant trust-boundary sections of `SECURITY.md`. Load `dpc-rustgrep` before structural Rust lookups, and `linked-specs` before investigating governed behavior through its specs. 2. Verify the installed interface and build rather than assuming flags: ```sh tau --version tau dev papercut --help tau dev papercut list --help tau dev papercut clear --help ``` 3. Capture one complete authoritative CLI snapshot in an owner-private directory. Reports contain unredacted model text and may contain secrets. Do not dump raw reports into shared `/tmp/public`, tickets, or the conversation. ```sh umask 077 private_dir=$(mktemp -d /tmp/tau-papercut-triage-XXXXXXXX) tau dev papercut list --markdown > "$private_dir/snapshot.md" && sha256sum "$private_dir/snapshot.md" > "$private_dir/snapshot.sha256" ``` Stop if listing fails; do not clear malformed/unreadable data. `--state-dir ` is supported on both `list` and `clear`; use the same explicitly selected root for both when overriding the default. This CLI covers the standard `std-utils` instance, not arbitrary reporter instances. 4. Give every report a stable ordinal within that snapshot and preserve its timestamp and attribution privately. Count actual report records, not arbitrary Markdown heading matches inside report bodies. If taking plain and Markdown snapshots separately, verify their record sequences agree: each list call takes its own snapshot and reports may arrive between them. Plain output escapes controls but is not a general structured interchange format. Record capture time, first/last report timestamp, count, snapshot hash, CLI build, and inspected source revision. ## Classify evidence, not reporter conclusions Account for every report, including duplicates and multi-symptom reports. Group repeated symptoms into findings but retain an ordinal-to-finding ledger. Repeated reports from one incident are not independent reproductions. For each finding record category, priority, confidence, recurrence, concrete evidence, disposition, and the smallest useful follow-up: * **Agent mistake / expected behavior:** usually low priority; ignore once explained. Record useful prevention improvements when mistakes recur or have meaningful consequences. A quoting mistake that runs a command or an overly broad cleanup is not harmless merely because the harness behaved correctly. * **External environment / configured integration:** medium priority by default. Distinguish one-off recovery, recurring contention, stale paths/builds, missing tools, configured policy denials, and a fixable integration mismatch. Identify the responsible project or configuration rather than automatically filing a Tau core defect. * **Tau harness/product defect or suspected defect:** highest investigative attention, with impact-based severity. Separate proven defects from observations still needing a minimal reproduction. Include misleading tool schemas/docs, inspection failures, and visibility defects, not only crashes. * **Already fixed / stale / unresolved:** use these as dispositions, not as a substitute for a category. A source commit is not proof every live daemon runs the fix. State which target you actually rechecked. Check exact submitted arguments and canonical tool results before attributing a problem to Tau. Particularly useful counterchecks: * Backticks in double-quoted shell prose execute substitutions. Check quoting before alleging command/result mixups. Use literal heredocs/files for prose. * Look for earlier successful unlocks before concluding a manual lock vanished. * Check human UI and peer-message ingress before calling a child's work unsolicited. * Automatic tool backgrounding does not remove the command's explicit/default timeout. A completion notification is not necessarily a consumed result. * A deduplication pointer means identical **output**, not skipped command execution. * `jj` reads may snapshot/import mutable working-copy state. Pin immutable Git objects or use documented `jj --ignore-working-copy` when appropriate. * Directory-scoped wrappers and direnv may write before a nominally read-only command. Avoid inspecting through a mutating wrapper when a neutral workdir and explicit target path suffice. * Hidden runtime mounts can make discovery empty by design. Distinguish that from mixed-version exact-admission failure and real discovery bugs. * Provider-hosted `web.run` failures are not automatically Tau registered-tool failures. Keep the documented provider/native boundary clear. Use bounded local source/history and diagnostic inspection. Durable agent logs are canonical replay evidence; session debug JSONL is incomplete, so a missing debug row does not prove an event never happened. Raw provider captures, tool arguments, and logs stay private. Do not run mutating probes, broad tests, or restoration operations without separate authority. Consult the relevant persistence/interface gates before proposing semantic changes; do not expand this task into hostile local-IPC hardening. ## Report and queue before clear Produce a sanitized report with: 1. Main findings and category/priority counts, with the scope of uncertainty. 2. Deduplicated findings and actionable scopes, including stale fixes and harmless explanations. 3. A complete per-report coverage ledger and the exact reviewed snapshot cut. 4. Reproduction/evidence references without raw secrets. 5. Clear status and any late-arrival or access blocker. Write actionable follow-ups as discrete project task/ticket entries on the **active work queue, initially blocked pending the user's review and approval**. State proposed scope, evidence/confidence, priority, and approval gate in each entry. Use the project's actual ticket/queue workflow; when delegated, send entries to the coordinator who owns those writes rather than duplicating them. Record useful agent-prevention and environment work too, not only suspected harness bugs. Only under an explicit user delegation may the coordinator approve an **obvious Tau bug with an obvious narrow fix**. Record the delegation, exact scope, and reason it qualifies; retain normal engineering review and CI. Non-obvious, uncertain, environmental, or meaningful semantic work stays user-gated. This exception is not blanket permission to auto-implement or dispatch triage findings. Ask the coordinator to acknowledge durable recording before clearing. Shared reports may use an unpredictable `mktemp /tmp/public/papercut-triage-XXXXXXXX.md` path, but `/tmp` alone is not durable tracking: preserve the sanitized findings and coverage in the project's ticket/report workflow before removal of the source reports. ## Clear only through supported archival semantics Recheck the installed clear behavior before acting. In the current CLI, `list` is lock-consistent and `clear` takes the same cross-process append lock, validates the active file, then atomically renames it to a non-overwriting numbered archive. It reports the cleared record count and archive path. Reports admitted before the serialized clear boundary are recoverable from that archive; appends admitted after it create a fresh active file and remain visible to `list`. Archives retain the original private bytes indefinitely and are not listed, expired, or deleted automatically. The interface has no ID selection, snapshot token, `--before`, `--dry-run`, or compare-and-clear option. 1. Confirm clearing is authorized and the report/queue entries are durable. If the original user request already authorized clear after triage, do not ask for duplicate approval; coordinate the execution boundary with the parent/coordinator. 2. Capture and compare the final complete active sequence, then run: ```sh tau dev papercut clear && tau dev papercut list --markdown > "$private_dir/post-clear.md" && sha256sum "$private_dir/post-clear.md" > "$private_dir/post-clear.sha256" ``` Add the same `--state-dir ` to both if a non-default root was used. Record the exact clear count, archive path, and a sanitized post-clear status. Compare the archived record sequence with the reviewed snapshot and analyze/report/queue any additions that arrived before the clear boundary. Keep archive contents, remaining report text, and attribution private. New post-clear reports are not evidence that clearing failed; do not blindly clear again. Do not manipulate the reporter store directly or delete the archive. Finish with a concise summary of what was analyzed, what deserves user review, which reports were cleared (or why none were), and where the durable report and approval-gated or explicitly delegated follow-ups live.