# 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 --remove-label parked`), so a `label:parked` search lists only open parked issues. GitHub leaves labels alone when a merged PR's `Closes #` 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 --duplicate-of `) | `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 --add-label