Apply the no-ai-slop standard (now binding in AGENTS.md): the em-dash character is banned outright (restructured, not blind-replaced), plus the banned word/phrase list (delve, leverage, robust, seamless, truly, unlock, etc.). 0 em-dashes remain in modules + capstone; the only "robust" left is the planted M10 ai-change.patch trap. Module H1 titles use a colon separator. All deliberate teaching devices preserved; labs compile/parse (py/sh/yaml/json); no junk. AGENTS.md updated with the hard no-slop rules. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TfzV5QvtPDz8LJS3Pu5VLT
2.1 KiB
Label taxonomy: the triage agent's instructions
The triage agent reads this file, then reads one incoming issue, and proposes labels, a priority, and where the issue should be routed. Like the review rubric, this is committed and versioned: your triage taxonomy is a project decision, not a setting buried in some bot's web UI.
The labels below are the only labels that exist. The agent must choose from this list. If it
invents a label that isn't here, the lab's triage.py rejects the whole suggestion; that rejection
is a guardrail, not a bug. An agent that can mint arbitrary labels is an agent that can quietly
reshape your taxonomy; keeping the allowed set in version control and validating against it is how
you keep the agent inside its lane (the least-privilege idea from Module 22).
Allowed labels
Type (exactly one):
type:bug: something is broken or behaves wrongtype:feature: a request for new behaviortype:docs: documentation onlytype:question: a usage question, not a code change
Priority (exactly one):
priority:p0: data loss, security, or the app is unusable for everyonepriority:p1: a serious bug with no good workaroundpriority:p2: a real bug with a workaround, or a wanted featurepriority:p3: minor, cosmetic, or nice-to-have
Area (zero or more):
area:cli: the command-line front end (cli.py)area:core: task logic (tasks.py)area:docs: README and lesson text
Readiness (exactly one). This is the one that decides routing, and it's the Module 9 idea made concrete: an issue can go to a person or be handed to an agent.
ready:ai-ready: small, well-scoped, reproducible; safe to hand to an issue-to-PR agent (the kind of agent Module 25 builds). Routeassignee_type: agent.ready:needs-human: ambiguous, risky, or needs a product decision. Routeassignee_type: human.
Output format
Return one JSON object, nothing else:
{
"labels": ["type:bug", "priority:p2", "area:cli", "ready:ai-ready"],
"assignee_type": "agent | human",
"rationale": "one or two sentences justifying the labels and the route",
"confidence": "high | medium | low"
}