Pulse/docs/ISSUE_TRIAGE.md
pulse-triage[bot] 6cb5d3046b Preserve secondary issue feedback
Contract-Neutral: issue-triage intake only; no product, deployment, or release contract change
Change-source: pulse-maintainer
2026-08-29 12:24:03 +01:00

55 lines
2.8 KiB
Markdown

# Issue Triage and Topic Integrity
Pulse issue triage must preserve every actionable topic a reporter contributes.
Resolving the primary defect does not dispose of secondary bugs, feature requests,
documentation gaps, or operator workflows described in the same report.
## Intake contract
Issue forms ask for one primary outcome and provide an **Additional actionable
topics** field. Entering anything other than `None` applies the
`needs-decomposition` label automatically. This is a queue-integrity signal,
not a statement that every topic will be built.
Reporters may still write free-form issues, edit form output, or discover a
second topic during discussion. Triage owns decomposition in those cases; it
must not require the reporter to refile information they already supplied.
## Required disposition
Before removing `needs-decomposition` or declaring a mixed report triaged:
1. Enumerate each independently actionable topic in the issue body and comments.
2. Keep the original issue focused on its primary reproducible problem.
3. Give every other topic one linked disposition:
- a new or existing issue for a distinct defect or independently actionable
product request;
- a demand-ledger entry for evidence that is useful but not yet build-ready;
- a Discussion or support path when there is no reproducible defect or
product decision to track;
- an explicit decline, with the reason, when the topic conflicts with Pulse's
product or safety boundaries.
4. Use GitHub sub-issue relationships when separate issues share the same source
report and the authenticated mutation path supports them. A plain backlink
remains in each child body so the evidence survives clients that do not
render sub-issues and remains the fallback for bounded bot identities.
5. Post a concise topic-to-disposition summary on the source issue. Never say a
topic is “recorded” without naming where it is recoverable.
Decomposition does not multiply demand. Every child points to the same reporter
and source thread, and the demand ledger counts that as one signal per capability.
Do not copy credentials, private diagnostics, or personal data into a child
issue; summarize only the minimum sanitized evidence needed to preserve the
operator problem.
## Automation boundary
The label synchronizer detects the structured form field deterministically and
fails quietly for legacy forms. It does not use keyword heuristics to invent
topics or create issues automatically. A maintainer or triage agent reviews the
source context, chooses the correct destination, creates links, and is
accountable for the disposition.
This boundary is deliberate: preserving an explicit reporter declaration is
safe to automate, while deciding whether two observations are one root cause is
a product and technical judgment.