Issue Triage Living Playbook — From Evidence to Action
Status: Living Practice / v0.1 (under evaluation) Owner: River Review maintainer Started: 2026-10-10 Tracking: Issue #2635 Rules SSoT: Issue / Project operation rules Values: Practice Evolution Policy
Purpose and authority
Keep open Issues as a backlog of verifiable, actionable work rather than a store of historical discussions. GitHub Issues/PRs, current main, tests and execution evidence are the factual sources of truth. This page is an adaptable practice, not a new mandatory gate or a replacement for the existing rules about labels, contributions, approval, merging or releases.
HOTL (Human-on-the-Loop) in this guide describes the development agents helping maintain River Review: they may investigate, propose, build fixtures, implement within delegated authority, test, prepare PRs and assemble a decision packet before escalating only the actual owner decision. The River Review product remains a read-only review and decision-support system. It does not own code changes, Gate changes, merging, releases or risk acceptance.
Evidence is not Judgment; Review Verdict is not Approval; Observation is not Attestation; Trigger is not Permission. Gathering sufficient evidence does not create new authority.
1. Small-batch triage (Loop A)
Start with 3–5 Issues and verify the outcome of a batch before applying similar changes elsewhere. Triage security, credentials, approval bypasses and other severe risks separately.
- Select: Record the Issue set, observation date, main SHA, relevant PRs and scope.
- Observe: Compare Issue body and latest comments, PR merge status, code, tests and acceptance criteria (AC). Do not treat stale body text as the latest fact.
- Propose: Mark each AC as
verified / unverified / unmet; specify dependencies, residual risks, proposed outcome and independently executable next work. - Review: Check for premature closure, lost AC, false green, security failure, authority confusion and incorrect relationships. A self-review is not an independent approval.
- Apply: Within existing permission, update evidence, dependencies and links; create small fixes/PRs; and conduct verification. Move remaining AC and create bidirectional links before closing a duplicate.
- Verify: Re-fetch GitHub state, closure reason, links, remaining AC, PR head and CI. Keep an Issue open if the essential evidence is missing.
- Recover: On a false closure, lost AC or permission breach, stop changes of the same kind, reopen/correct the record and inspect affected items.
Test a single case before bulk updates. Neither an unchecked checklist nor a merged PR's Closes #N text proves that all AC are complete. Conversely, do not leave old Issues stalled indefinitely: use the cheapest useful verification and evaluate present-day residual risk.
Triage outcomes (not new labels)
- Completed: All AC are fulfilled in current main and verified. Record the evidence and close as completed.
- Duplicate: Goal and remaining AC match another Issue. Transfer AC, add bidirectional links, then close as duplicate/not planned.
- Superseded: Replaced by an adopted design or successor Issue. Record successor and transferred AC, then close as not planned.
- Obsolete / not reproducible: Checked against current behavior with reasonably low residual risk. Record investigation limits and revisit trigger, then close as not planned.
- Out of scope: An authorized decision has been made not to proceed. Record rationale and revisit condition, then close as not planned.
- Actionable: A verification, implementation or evaluation slice can proceed. Keep open and define the smallest useful slice.
- Blocked / decision required: A prerequisite or human-owned authority is missing. Keep open; record the unblock condition and parallel work.
Related/parent Issues are not necessarily duplicates. Never close a still-relevant security, privacy, data-loss, fail-open or approval-bypass risk merely because it is old or hard to reproduce.
2. HOTL: do not equate owner decisions with a total work stop
Treat ability to work and authority to decide as independent dimensions:
- E0 Observe: Read existing code, Issues, PRs and constraints.
- E1 Prepare: Provide alternatives, recommendation, trade-offs, fixtures, rollback and stop conditions.
- E2 Execute: Within previously delegated authority, carry out reversible Issue maintenance, small changes, tests, PR creation and review; re-fetch evidence.
- E3 Decision packet: Isolate the remaining owner decision and continue independent work that is safe to perform.
- E4 Human-owned authority: Risk acceptance, irreversible operations, formal policy approval, mandatory independent approvals and merging follow existing repository governance. E0–E3 do not replace E4.
A decision packet should provide Problem / Evidence (refs and observation time) / Unknown / Options / Recommendation / Cost & risk / Executable now / Explicit owner decision / Stop & recovery. Unavailable evidence is not 0 or PASS.
Examples: #2601 can proceed with dogfood independently of a proposal for navigable artifact links. #2455 can improve offline fixtures and contracts without implying permission for provider-backed evaluation or promotion.
3. Evolve the process itself (Loop B)
After approximately two batches, choose one recurring friction or failure and run one small improvement experiment over the next one or two batches. Use evidence to decide Keep / Adapt / Revert / Defer and update this playbook only as useful.
Observe incorrect closures, missing AC transfers, wrong links/dependencies, unnecessary human escalation, time to actionable next step, recovery time and reviewer effort. The number of closed Issues is not a success metric. Report missing measurements as unknown.
The initial hypothesis is that batches of 3–5 plus immediate re-fetch identify harmful triage errors sooner than a single large cleanup. The benefit is not yet demonstrated. Reduce or revert the process if the first trials show unnecessary overhead.
4. Safety and SSoT boundaries
- Issue operation rules own the actual labels. Do not bulk replace
P0/P1/P2andpriority:P1/P2/P3before inspecting automation and semantic differences. - Merging a child PR is not completing a parent Epic. Keep unmet AC traceable and the parent open.
- Before merging, check current head, required CI, comments, blocked labels and the maintainer approval policy. Self-review is not independent review.
- Stop the same kind of change upon evidence of false closure, secret exposure, permission escalation, data loss or false green; document recovery and affected scope.
- Prefer existing Issue/PR records and the Practice Evolution Policy, rather than adding mandatory agents, bots, databases, labels or gates without demonstrated value.
5. Initial pilot
Log batch-level findings in Issue #2635. Batch A: #2601, #2577, #2633, #2455 (delivered slices vs remaining AC); Batch B: #2033, #2203, #2202 (secret and suppression risk). If #2633 is already closed, verify its closure evidence; do not reopen and reclose it without cause.
Review the impact after these two batches. This page may change with evidence; it does not rewrite historical decisions or their source records.