Label Taxonomy
Try this to apply workflow labels:
Apply the go:yes label to issue #42 and target it for v0.5.0
Try this to filter by priority:
Show me all issues with priority:p0
Try this to route work to a specific agent:
Add squad:fenster to issue #23
Squad uses structured, namespaced labels as the state machine. Labels drive workflow automation — not just tags. Five namespaces control lifecycle, priority, ownership, and release targeting.
The Five Namespaces
| Namespace | Purpose | Values | Mutual Exclusivity |
|---|---|---|---|
go: |
Verdict — yes/no/needs-research | go:yes, go:no, go:needs-research |
✅ One per issue |
release: |
Release target | release:v0.4.0, release:v0.5.0, release:backlog |
✅ One per issue |
type: |
Issue category | type:feature, type:bug, type:spike, type:docs, type:chore, type:epic |
✅ One per issue |
priority: |
Urgency level | priority:p0, priority:p1, priority:p2 |
✅ One per issue |
squad:{member} |
Agent assignment | squad:fenster, squad:mcmanus, squad:hockney |
❌ Can have multiple (pair work) |
Mutual Exclusivity Rules
Within go:, release:, type:, and priority: namespaces, only one label is allowed. Applying a second label in the same namespace auto-removes the first.
Example:
- Issue has
go:needs-research - You apply
go:yes - Result:
go:needs-researchremoved,go:yesapplied
The squad:{member} namespace allows multiple labels for collaborative work:
squad:fenster+squad:hockney= pair programming or handoff
Workflow Automation
Labels drive four automation layers:
1. Enforcement (Mutual Exclusivity)
GitHub Actions workflow label-enforcement.yml watches for label changes. If multiple labels from the same namespace are applied, it removes all but the most recent.
2. Sync (Cross-Namespace Consistency)
Some label changes trigger cascading updates:
go:noapplied → auto-addsrelease:backlog, removes other release targetspriority:p0applied → ensuresgo:yesis set (p0 implies approved)
3. Triage (Auto-Assignment)
Ralph (work monitor) uses labels to route work:
squad:fenster→ Fenster picks it up- No
squad:*+type:bug→ Routes to Tester or Lead based on routing.md go:needs-research→ Routes to Lead for investigation
4. Heartbeat (Periodic Check)
The squad-heartbeat.yml workflow runs every 30 minutes and:
- Finds issues with
squadlabel but nosquad:{member}→ auto-triages - Finds
go:yes+squad:{member}but no assignee → spawns agent - Finds stale
go:needs-research(>7 days) → escalates to Lead
State Machine Flow
New issue → squad label → Triage
↓
Lead assigns go:* + type:* + priority:*
↓
go:yes → squad:{member} assigned
↓
Agent works → Draft PR
↓
Review → Approved
↓
Merge → Issue closed
Adding Labels
Labels are created automatically during init or upgrade. To add custom labels:
gh label create "squad:designer" --color "0366d6" --description "Work assigned to Designer"
Or via the GitHub UI: Issues → Labels → New label
Label Colors
Squad uses a consistent color scheme:
| Namespace | Color | Hex |
|---|---|---|
go: |
Green (yes), Red (no), Yellow (research) | #0e8a16, #d73a4a, #fbca04 |
release: |
Blue | #0366d6 |
type: |
Purple | #6f42c1 |
priority: |
Orange (p0), Yellow (p1), Gray (p2) | #d93f0b, #fbca04, #d4c5f9 |
squad:{member} |
Teal | #008672 |
Querying by Label
# All approved features for v0.4.0
gh issue list --label "go:yes,release:v0.4.0,type:feature"
# All p0 bugs assigned to Fenster
gh issue list --label "priority:p0,type:bug,squad:fenster"
# All issues needing research
gh issue list --label "go:needs-research"
Sample Prompts
Mark issue #42 as approved for v0.4.0
Applies go:yes and release:v0.4.0 labels. Removes any conflicting labels.
Change issue #15 from needs-research to no
Updates verdict: removes go:needs-research, applies go:no, adds release:backlog.
Assign issue #28 to Fenster and Hockney for pair work
Applies squad:fenster and squad:hockney labels. Both agents can pick it up.
List all p0 features approved for the next release
Queries: priority:p0 + type:feature + go:yes + release:{current milestone}.
Show me all issues in the backlog
Filters for release:backlog or go:no labels.