style(no-slop): remove every em-dash + banned words across all modules + capstone

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
This commit is contained in:
2026-06-22 23:21:09 -04:00
parent 513d7e7ac8
commit 389ac2e460
99 changed files with 1324 additions and 1315 deletions
@@ -1,11 +1,11 @@
# Label taxonomy the triage agent's instructions
# 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
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).
@@ -13,27 +13,27 @@ 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 wrong
- `type:feature` a request for new behavior
- `type:docs` documentation only
- `type:question` a usage question, not a code change
- `type:bug`: something is broken or behaves wrong
- `type:feature`: a request for new behavior
- `type:docs`: documentation only
- `type:question`: a usage question, not a code change
Priority (exactly one):
- `priority:p0` data loss, security, or the app is unusable for everyone
- `priority:p1` a serious bug with no good workaround
- `priority:p2` a real bug with a workaround, or a wanted feature
- `priority:p3` minor, cosmetic, or nice-to-have
- `priority:p0`: data loss, security, or the app is unusable for everyone
- `priority:p1`: a serious bug with no good workaround
- `priority:p2`: a real bug with a workaround, or a wanted feature
- `priority: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
- `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
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
- `ready:ai-ready`: small, well-scoped, reproducible; safe to hand to an issue-to-PR agent (the
kind of agent Module 25 builds). Route `assignee_type: agent`.
- `ready:needs-human` ambiguous, risky, or needs a product decision. Route `assignee_type: human`.
- `ready:needs-human`: ambiguous, risky, or needs a product decision. Route `assignee_type: human`.
## Output format