Files
gstack/docs/triage.md
T
Garry Tanandcapy-ai[bot] 188e574d84 v1.91.235.0 docs(triage): parked issues stay open under the parked label; closing means fixed, duplicate or won't fix (GSTA-99) (#3427)
* docs(triage): parked issues stay open under the parked label; closing means fixed, duplicate or won't fix (GSTA-99)

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

* docs(triage): already-fixed reports close as fixed, duplicates use GitHub's duplicate reason

/ship adversarial review on #3427 (outside voice openai/gpt-6.1-sol, native
claude-sonnet-5-5): the non-reproduction rule sent reports that main had
already fixed to "won't fix"; the Duplicate row said close reason "not
planned" although GitHub and gh have a native duplicate reason; a duplicate of
an issue that already shipped had no close path; and TODOS.md's "73 open
feature requests" sat beside the "75 parked" the CHANGELOG and docs/triage.md
state without saying the two extra are #3061 and #3122.

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

* docs(triage): parked label comes off at close; CHANGELOG entry follows the user-facing style

/ship adversarial review pass 2 on #3427: docs/triage.md said the label "goes
with" a fixed close but nothing about duplicate or won't-fix closes, and a lane
"may" remove it, which left an open lane-owned issue either parked or not. The
CHANGELOG entry named TODOS.md in the user-facing summary and listed the
GitHub-side label under Added; docs/CHANGELOG_STYLE.md keeps contributor
details in a "For contributors" section.

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

* docs(triage): removing the parked label is a manual step after a merge closes the issue; close labels are added separately

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

* v1.91.235.0 stamp

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

---------

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
2026-10-26 07:37:42 +00:00

86 lines
4.6 KiB
Markdown

# Issue triage
How gstack issues move between open, parked and closed, and what each state
promises the reporter. The rule exists because a closed issue reads as "fixed"
or "rejected" to the person who filed it. On 2026-10-11 a triage pass closed 75
feature requests into TODOS.md themes with a "not rejected" note, and reporters
still saw a closed issue with no fix. Those were reopened on 2026-10-25 under
the `parked` label, and this page is the rule going forward.
## The three states
| State | Meaning | How it looks on GitHub |
|-------|---------|------------------------|
| **Open** | We intend to act on it and nothing is decided yet, or a lane is on it now. | Open, no `parked` label. `next-wave` marks issues accepted for the next fix wave. |
| **Parked** | We intend to fix it later, not now. | Open, labelled `parked`, with one comment that says where it is tracked and what fixes it. |
| **Closed** | Fixed, duplicate, or won't fix. Nothing else. | Closed with the matching reason (below). |
An issue we still intend to fix is never closed. Grouping it into a theme,
folding it into a tracking issue, or deciding it waits for other work are all
"parked", not "closed".
## Parking an issue
1. Add the `parked` label.
2. Post one comment with two facts: **where it is tracked** (the TODOS.md
theme, by link, or the tracking issue such as #3137, #3138 or #3139) and
**what fixes it** (the work that, when it ships, closes this issue). One or
two sentences. No other comment is needed.
3. Add the issue number to the TODOS.md entry so the theme credits the reporter
when it is picked up.
When the work ships, close the issue as fixed with the version or PR. Whatever
the close reason, remove the `parked` label when the issue closes
(`gh issue edit <n> --remove-label parked`), so a `label:parked` search lists
only open parked issues. GitHub leaves labels alone when a merged PR's
`Closes #<n>` closes the issue, so the lane that ships the fix removes the label
itself. When a lane picks a parked issue up, it removes the label while it works
on it (the issue is open again, with the lane on it); an issue the lane later
drops goes back to parked with an updated comment.
## Closing an issue
Each close names its reason in the closing comment. GitHub's close reason and
the labels match:
| Reason | Comment says | Close reason | Label |
|--------|--------------|--------------|-------|
| **Fixed** | the version, commit or PR that fixed it, and what changed | completed | — |
| **Duplicate** | the issue that tracks it (and that issue is open or parked; if it was already fixed, close this one as fixed too, with the same version) | duplicate (`gh issue close <n> --duplicate-of <m>`) | `duplicate` |
| **Won't fix** | why: out of scope, a different design was chosen, the premise no longer holds | not planned | `wontfix` |
`gh issue close` sets only the close reason; add the `duplicate` or `wontfix`
label separately with `gh issue edit <n> --add-label <label>`.
A duplicate of a parked issue is still a duplicate: close it with the link,
and the parked issue's comment or TODOS.md entry credits both reporters. A
report that no longer reproduces on current main closes as fixed when a commit,
PR or version explains why (cite it, as `/investigate --backlog` does with
`already_fixed <commit>`); when nothing does, it closes as won't fix with the
version it was checked against and an invitation to reopen with a repro.
## Labels this page uses
- `parked`: not fixed yet, not rejected; stays open, with a comment saying
where it is tracked and what fixes it.
- `tracking`: a tracking issue for a theme; stays open until the theme ships.
- `next-wave`: accepted for the next fix wave.
- `duplicate`, `wontfix`: the two non-fix close reasons.
- `needs Windows verification`: a merged fix awaiting confirmation on real
Windows hardware; the issue stays open until then.
## Where the themes live
Parked feature requests are grouped in TODOS.md under "feature themes from the
Wave 9 triage": new hosts (#3137), provider pluralism (#3138), install
footprint and layout (#3139), new skills, ship/review/safety, planning reviews,
state root and project identity, browser and mobile QA, prompt cost and skill
shape, customization and localization, retro, and CI supply chain. Parked bugs
sit under "parked in Wave 9" in the same file. Pick a theme up as a whole and
credit every linked reporter in the CHANGELOG entry.
Community pull requests follow the wave process in
[CONTRIBUTING.md](../CONTRIBUTING.md#community-pr-triage-wave-process); a
closed PR gets the same courtesy as a closed issue: a comment saying why and
what supersedes it.