Labels
Issue labels help FJX govern workflow state. Create these three at the organization level so that every repo inherits them:
- lifecycle:
agent/* - work type:
type/* - risk:
risk/*
Required: Agent Lifecycle
The agent/* set drives the state machine. These are the only labels FJX actively relies on. Create them as exclusive so only one agent/* can be applied at a time — the state machine is single-state by design.
Dispatch is by assignment, not label. The label says "what state is this in." The assignee says "who runs next." See the state diagram for the full transitions and the agents for who reads which label when.
Phase lives in the brief, not in labels. A dev cycle in the propose phase and one in the apply phase both carry agent/working; the PM brief distinguishes them. Don't reach for agent/propose or agent/apply labels — they're not part of the model.
Required: Work Type
Helps the PM give DEV & QA appropriate context & prompts.
Recommended: Risk
Risk and workflow phase are independent axes — a simple-phase change can still be risk/high (see Scenario 2: bump dependencies). PM uses risk to shape the brief; humans use it to decide where to look closely.
Recommended: Complexity
This label can help choose an appropriate agent (eg jr vs sr dev) or level of effort (eg simple qa vs penetration testing).
Optional: Domain labels
area/*, kind/*, pri/* — anything your team finds useful. FJX is neutral on these; apply your existing conventions.
Creating the label set
Two reasonable paths:
- Forgejo UI —
<org>/-/labels→ New label. Apply the table above, set the fouragent/*as exclusive. One-time setup, takes a few minutes. fjx label list— populates the cache from existing labels; useful for verifying a fresh org's setup is complete before pointing agents at it.
Per-repo, no further label work is needed — org labels are inherited automatically.
When labels and reality drift
Working agents are allowed (and expected) to fix label state when it disagrees with what they observe:
- A claimed issue without
agent/working→ addagent/working. - A handed-off issue still wearing
agent/working→ strip and addagent/review. - An
agent/blockedissue that no longer has the underlying blocker → stripagent/blocked(this is normally a PM/unblock, but a working agent picking up a stale blocker can clear it with a ledger note).
PM does not police label state. It applies labels under the /<command> vocabulary and trigger conditions; everything else is the working agent's surface.