/steer:issues¶
The high-level GitHub Issues lifecycle for the /spec spine. A thin
orchestrator: it delegates product/spec reasoning to /steer:spec, audit
findings to /steer:audit, drift to /steer:audit spec, and question promotion to
/steer:questions — and routes GitHub reads/writes through
/steer:tracker-sync, with one sanctioned exception: the bootstrap-labels
mode's inline label creation.
When to use
Use to manage the backlog: capture an idea, triage the inbox, brainstorm, materialize a spec, decompose into work, check status, or reconcile.
Argument hint: [capture | triage | brainstorm | materialize | decompose | epic | status | board | reconcile [--all] | publish-audit | publish-drift | publish-adoption | publish-findings [--source <id>] | bootstrap-labels] [#issue | feature-id]
Phases¶
flowchart LR
capture --> triage --> brainstorm --> materialize --> decompose --> status --> board --> reconcile
| Phase | What it does |
|---|---|
capture |
Record a raw idea as an issue without losing open questions. Searches the existing backlog first — open and closed — to dedupe and to link related/dependent/conflicting issues. A closed duplicate is the one that matters most: filing it again is how the same rejected or already-shipped idea re-enters the backlog. |
triage |
Sort the inbox; set state/labels, and escalate-only auto-set the native Priority field from mechanical signals (risk:security→Urgent, blocking-question gate→High, …) — max(current, floor), never downgrading a human's value. Effort/dates stay human-set. |
brainstorm |
Explore an idea before committing to a spec. Searches the existing issues (open and closed) to surface overlaps, dependencies, and conflicts, and records them as related-issue cross-links. |
materialize |
Turn an explored idea into a /spec intent. (Features only — an epic has no intent and is not materializable.) |
decompose |
Break an approved spec into tracked work items (Feature → Tasks/Bugs). |
epic |
Manage the tier above features: create an epic (--new) and link existing features under it (#E --add #F1,#F2) as native sub-issues, so a goal spanning several features is one Epic → Feature → Task hierarchy. Type=Epic is set only when the org enables it; otherwise the epic keeps steer:kind=epic with the Type unset. Milestones stay release grouping — an orthogonal axis. |
status |
Report lifecycle state across issues; for an epic, a child-feature rollup. |
board |
Read-only ranked, relationship-aware backlog overview (Ranked / Relationships / Dedup candidates / Hygiene). Never writes; defers cross-workflow "what's most critical" to /steer:next. |
reconcile [--all] |
Bounded re-sync of issues against the spine. --all widens the sweep to every open issue — the after-the-fact recovery path for issues created without a contract. |
publish-audit |
File an /steer:audit finding set as an audit-run parent plus selected finding children. |
publish-drift |
File an /steer:audit spec finding set as decision-checklist spec-drift issues; never auto-resolves. |
publish-adoption |
Reconcile selected spec/PRODUCTIONIZATION.md gaps into kind=finding / source:adoption issues (stable finding-key per gap). |
publish-findings |
File kind=finding issues from a /code-review or /security-review run (--source code-review\|security-review). |
bootstrap-labels |
Idempotently create/reconcile the supported label taxonomy (gh label create --force) so Issue Forms and agent labels actually apply. |
Boundaries¶
/steer:issuesnever edits code — that's/steer:work's job./specstays product truth; the issue is the work/decision layer.- In a polyrepo, the tracker and the specs live in the workspace. A member
repo (
spec/PRODUCT.md) carries neitherspec/tracker.mdnorspec/features/**by design, so both are resolved at the workspace first — never filed locally to work around the absence. Two facts shape decomposition: sub-issues do cross repositories within an org (100 children per parent, 8 levels), so a workspace epic can parent member issues unmodified; closing keywords do not, so a workspace issue never auto-closes from a member PR and is closed explicitly after merge. See Product spine. - Agent-authored issues follow a machine-readable contract (stable headings + hidden markers + managed blocks) so they round-trip safely.
- Clickable references. Rendered issues surface their references for a human
reader without disturbing the markers: every spec/code file path becomes a
Markdown link to the file on the default branch (
REPO_BLOB_BASE/<path>, with a#L<n>anchor when a line is cited), and implementable kinds carry a visibleDeliveryline mirroring thesteer:pull-request/steer:branchmarkers so the delivering PR/branch is clickable. Markers stay canonical; the links and line are the derived view. - Related-issue links. When
brainstorm/capturefind a connection to another issue, it's recorded under aRelated issuesheading as#N — <relationship> (why)—relates-to,depends-on,blocks,conflicts-with,supersedes, orsuperseded-by. The#Nmention creates GitHub's native backlink (GitHub has no typed relationship beyond parent/sub-issue). Aconflicts-with/supersedesis surfaced for a human, never auto-resolved.
See the Lifecycle for the full state set, and
/steer:work for execution.