swe-workflow-skills 0.8.2 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/README.md +70 -98
  2. package/VERSION +1 -1
  3. package/catalog.json +1 -1
  4. package/package.json +1 -1
  5. package/skills/accessibility-design/evals/evals.json +3 -2
  6. package/skills/ai-evaluation/evals/evals.json +11 -9
  7. package/skills/api-design/evals/evals.json +7 -8
  8. package/skills/architecture-documentation/SKILL.md +7 -0
  9. package/skills/architecture-documentation/evals/evals.json +9 -11
  10. package/skills/brainstorming/evals/evals.json +6 -6
  11. package/skills/bug-investigating/evals/evals.json +6 -6
  12. package/skills/cicd-pipeline/evals/evals.json +7 -8
  13. package/skills/code-archaeology/evals/evals.json +9 -8
  14. package/skills/code-reviewing/SKILL.md +8 -0
  15. package/skills/code-reviewing/evals/evals.json +10 -12
  16. package/skills/code-slop-cleanup/SKILL.md +6 -0
  17. package/skills/code-slop-cleanup/evals/evals.json +14 -8
  18. package/skills/compliance-privacy/evals/evals.json +6 -6
  19. package/skills/configuration-strategy/evals/evals.json +2 -1
  20. package/skills/data-modeling/evals/evals.json +8 -8
  21. package/skills/data-pipeline-design/SKILL.md +12 -1
  22. package/skills/data-pipeline-design/evals/evals.json +9 -8
  23. package/skills/data-quality/SKILL.md +7 -0
  24. package/skills/data-quality/evals/evals.json +9 -7
  25. package/skills/dependency-impact-analysis/evals/evals.json +2 -2
  26. package/skills/effort-estimation/SKILL.md +9 -2
  27. package/skills/effort-estimation/evals/evals.json +3 -2
  28. package/skills/feature-planning/evals/evals.json +7 -9
  29. package/skills/frontend-architecture/evals/evals.json +1 -1
  30. package/skills/git-workflow/evals/evals.json +6 -8
  31. package/skills/incident-response/evals/evals.json +13 -9
  32. package/skills/llm-app-engineering/SKILL.md +9 -6
  33. package/skills/llm-app-engineering/evals/evals.json +10 -8
  34. package/skills/metrics-and-okrs/evals/evals.json +6 -7
  35. package/skills/ml-experiment-tracking/SKILL.md +2 -0
  36. package/skills/ml-experiment-tracking/evals/evals.json +3 -2
  37. package/skills/ml-pipeline-design/evals/evals.json +6 -5
  38. package/skills/mobile-architecture/evals/evals.json +9 -8
  39. package/skills/performance-optimization/evals/evals.json +7 -5
  40. package/skills/plan-execution/SKILL.md +8 -0
  41. package/skills/plan-execution/evals/evals.json +9 -8
  42. package/skills/project-documentation/evals/evals.json +2 -2
  43. package/skills/refactoring/evals/evals.json +6 -7
  44. package/skills/retrospective/evals/evals.json +7 -8
  45. package/skills/rollback-strategy/evals/evals.json +5 -4
  46. package/skills/security-audit/SKILL.md +6 -0
  47. package/skills/security-audit/evals/evals.json +6 -6
  48. package/skills/skill-router/evals/evals.json +2 -2
  49. package/skills/statistical-analysis/evals/evals.json +10 -8
  50. package/skills/strategic-review/SKILL.md +36 -0
  51. package/skills/strategic-review/evals/evals.json +7 -6
  52. package/skills/subagent-orchestration/evals/evals.json +2 -1
  53. package/skills/tdd-workflow/evals/evals.json +10 -8
  54. package/skills/technical-debt-review/evals/evals.json +11 -7
  55. package/skills/test-suite-design/SKILL.md +10 -3
  56. package/skills/test-suite-design/evals/evals.json +4 -3
  57. package/skills/test-suite-design/references/testing-pyramid.md +19 -3
  58. package/skills/threat-modeling/evals/evals.json +7 -6
  59. package/skills/ui-ux-design/SKILL.md +11 -1
  60. package/skills/ui-ux-design/evals/evals.json +9 -9
  61. package/skills/verification-before-completion/SKILL.md +1 -1
  62. package/skills/verification-before-completion/evals/evals.json +11 -11
  63. package/skills/writing-skills/SKILL.md +112 -1
  64. package/skills/writing-skills/evals/evals.json +2 -2
package/README.md CHANGED
@@ -6,76 +6,29 @@
6
6
  [![license: MIT](https://img.shields.io/badge/license-MIT-yellow.svg)](LICENSE)
7
7
 
8
8
  A curated library of **66 Claude Code Agent Skills** that walk Claude through the
9
- software lifecycle the way a disciplined senior engineer would — planning, design,
9
+ software lifecycle the way a disciplined senior engineer would: planning, design,
10
10
  TDD, review, security, deployment, incidents, and the project-management work around
11
11
  them.
12
12
 
13
- Each skill encodes a *method* (DRY, YAGNI, KISS, clean architecture, evidence-before-done),
14
- not just a task. They compose into end-to-end workflows and are kept honest by an
15
- LLM-as-judge eval harness.
13
+ Each skill encodes a *method* (DRY, YAGNI, KISS, clean architecture, evidence before
14
+ "done"), not just a task. An orchestrator skill, **`skill-router`**, matches your intent
15
+ to the right skills and chains them across phases. Every skill is kept honest by an
16
+ **LLM-as-judge evaluation harness** that compares the model with and without the skill.
16
17
 
17
18
  ![skill-router routing a live session](docs/demo/routing.gif)
18
19
 
19
- ## Why this library
20
-
21
- Not just a pile of skills — a routing layer over Claude Code's native skill
22
- activation, an eval discipline, and full-SDLC breadth that popular collections
23
- don't cover:
24
-
25
- - **An orchestrator, not auto-trigger roulette.** A `skill-router` skill maps your
26
- intent to the right skill(s) and chains them across phases. Community measurements put
27
- Claude's own description-based auto-triggering at roughly a coin flip to ~84%; here
28
- activation is *routed and deterministic* instead, and the routing eval harness measures
29
- it (top-1 accuracy 1.00, zero misroutes on the committed baseline, regression-gated in
30
- CI) — see the [routing benchmark](docs/ROUTING-BENCHMARK.md). This is the one thing the
31
- platform still doesn't do for you.
32
- - **Every skill stays reachable, no pre-picking.** Claude Code injects skill descriptions
33
- only up to ~1% of context, so large libraries silently stop auto-triggering past ~20–40
34
- skills. The fix is Claude Code's own **`name-only`** state (its docs recommend it for
35
- low-priority skills); this library just applies it wholesale — keeping the router +
36
- safety skills "loud" and listing the rest name-only — so the router can still invoke
37
- every skill by name, with no cropping and without making you pre-pick a subset
38
- ([how it works](docs/ROLES.md)).
39
- - **Tested like code, not prose.** Every skill ships 3 evals; two LLM-as-judge
40
- harnesses (content quality and routing accuracy) replay them with skill loaded vs
41
- absent and gate regressions in CI. Across all 66 skills — 234 cases, 1311 assertions,
42
- every row measured at k>=3 — the same model passes **65.2%** of assertions without the
43
- skill's content and **97.9%** with the skill loaded, and **no skill scores below the
44
- no-content baseline on any case**
45
- ([results](docs/EVALS.md#results-content-evals-full-catalog)). Safety-critical skills
46
- (deploys, releases, tests, incidents, security) are **hardened**: an Iron Law, a
47
- rationalization table distilled from real baseline failures, and pressure tests that
48
- try to talk the agent out of it.
49
- - **Curated, not a mega-catalog.** First-party skills, versioned and eval-gated in the
50
- repo — no arbitrary third-party skills pulled from a hub, and nothing that executes on
51
- its own (the content is instructions and templates; the only code is the open Node
52
- installer). In an ecosystem where researchers have flagged hundreds of malicious
53
- community skills, curated-and-reviewed is itself a feature — see [SECURITY.md](SECURITY.md).
54
- - **Full-SDLC breadth.** Planning, architecture/ADRs, API and data design, TDD, review,
55
- security, releases, deploys, GitOps, observability, incidents, MLOps, LLM apps
56
- and AI evaluation, data pipelines and data quality, and the PM/strategy work
57
- around them — a wider slice of the lifecycle than the community collections we
58
- know of aim for (they tend to go deep on the coding inner loop; see
59
- [Acknowledgements](#acknowledgements)).
60
- - **Role-scoped.** `/role backend` (or `frontend`, `devops`, `ml`, `ai`, `data`,
61
- `data-scientist`, `security`, `architect`, `em`, `pm`, `strategy`, `qa`, `mobile`,
62
- `designer`) promotes a working set to auto-trigger; the rest stay one route away.
63
- - **Cross-platform install.** The installer and SessionStart hook are **pure Node** — the
64
- one runtime Claude Code already requires — so they run identically on Linux, macOS, and
65
- Windows (no bash, Python, or `sed`).
66
-
67
20
  ## Quick Start
68
21
 
69
- **Most people — install the per-role plugin for your hat** (works on CLI, Claude Code
70
- web, claude.ai chat, and Cowork):
22
+ **Most people: install the per-role plugin for your hat.** It works on the CLI, Claude
23
+ Code web, claude.ai chat, and Cowork:
71
24
 
72
25
  ```text
73
26
  /plugin marketplace add SWEStash/swe-workflow-skills
74
27
  /plugin install swe-workflow-pm@swe-workflow
75
28
  ```
76
29
 
77
- **Want the whole library with the orchestrator** (CLI) — no clone needed. This is a
78
- **two-step** setup:
30
+ **Want the whole library with the orchestrator?** On the CLI, with no clone needed, it
31
+ is a **two-step** setup:
79
32
 
80
33
  ```bash
81
34
  # 1. Install all 66 skills + router + /role + the hook script, and apply the baseline
@@ -84,16 +37,16 @@ npx swe-workflow-skills install --global
84
37
 
85
38
  ```jsonc
86
39
  // 2. Wire the hook: merge the snippet the installer prints into your settings.json
87
- // (the installer never edits settings.json for you — it just prints the block).
40
+ // (the installer never edits settings.json for you; it just prints the block).
88
41
  // Then start a new session; /doctor should show the hook registered.
89
42
  { "hooks": { "SessionStart": [ /* ...the printed block... */ ] } }
90
43
  ```
91
44
 
92
45
  > ⚠️ **Don't skip step 2.** Step 1 alone installs the skills and prevents cropping, but
93
- > the hook is what nudges Claude to consult `skill-router` first — **without it, skills
94
- > won't auto-route** (the whole point of the library) and the baseline isn't re-asserted
46
+ > the hook is what nudges Claude to consult `skill-router` first. **Without it, skills
47
+ > won't auto-route** (the whole point of the library), and the baseline isn't re-asserted
95
48
  > after `/compact`. If you deliberately want no hook, pass `--no-hook`; auto-routing stays
96
- > off until a hook is wired. The **per-role plugin** path above needs no hook — it's
49
+ > off until a hook is wired. The **per-role plugin** path above needs no hook: it is
97
50
  > self-contained.
98
51
 
99
52
  Or from a clone: `node install.mjs --global`.
@@ -119,20 +72,20 @@ npx swe-workflow-skills uninstall --dry-run # preview removal; --global/--dir
119
72
 
120
73
  From a clone, the same commands are `node install.mjs …` / `node uninstall.mjs …`.
121
74
 
122
- The installer never edits `settings.json` — it prints the SessionStart hook snippet for
75
+ The installer never edits `settings.json`: it prints the SessionStart hook snippet for
123
76
  you to merge. Re-running is idempotent. See **[INSTALL-MATRIX.md](docs/INSTALL-MATRIX.md)**
124
77
  for every method × surface, and **[ROLES.md](docs/ROLES.md)** for the activation model.
125
78
 
126
79
  ## Usage
127
80
 
128
- On any non-trivial task, Claude consults **`skill-router`** first; it reads the full
81
+ On any non-trivial task, Claude consults **`skill-router`** first. It reads the full
129
82
  catalog and invokes the matching skill(s) by name, re-routing as the work changes phase.
130
- The default SessionStart hook nudges Claude to do this automatically; you can also route
131
- explicitly ("use the security-audit skill") or switch the promoted set with `/role`. Don't
132
- want a particular skill routed at all? `npx swe-workflow-skills disable <skill>` opts it out
133
- durably — see [disable a skill from routing](docs/ROLES.md#advanced-disable-a-skill-from-routing).
83
+ The default SessionStart hook nudges Claude to do this automatically. You can also route
84
+ explicitly ("use the security-audit skill") or switch the promoted set with `/role`.
85
+ Don't want a particular skill routed at all? `npx swe-workflow-skills disable <skill>`
86
+ opts it out durably; see [disable a skill from routing](docs/ROLES.md#advanced-disable-a-skill-from-routing).
134
87
 
135
- **A routed chain, by phase** — e.g. *"add OAuth login"*:
88
+ **A routed chain, by phase**, e.g. *"add OAuth login"*:
136
89
 
137
90
  ```
138
91
  feature-planning → scope tasks, acceptance criteria, risks
@@ -146,16 +99,37 @@ verification-before-completion
146
99
  deployment-checklist → pre-deploy safety + rollback readiness
147
100
  ```
148
101
 
149
- The router invokes each skill as you reach its phase rather than all at once. A single
150
- request often fans out to several skills — *"review this for accessibility and UX"* pulls
151
- in both `accessibility-design` and `ui-ux-design`. See a full session play out in
152
- **[what routing looks like](docs/ROLES.md#what-routing-looks-like-in-a-session)**; the
153
- pre-built chains (new feature · bug/incident · continuous improvement · pre-public
154
- review) live in the `skill-router` skill and **[ROLES.md](docs/ROLES.md)**.
102
+ The router invokes each skill as you reach its phase rather than all at once, and one
103
+ request can fan out to several skills. See a full session in
104
+ **[what routing looks like](docs/ROLES.md#what-routing-looks-like-in-a-session)**.
105
+
106
+ ## Why this library
107
+
108
+ - **An orchestrator, not auto-trigger roulette.** Description-based auto-triggering is
109
+ probabilistic. Here `skill-router` routes intent to skills by name, and a routing
110
+ harness measures it: 65/65 top-1 and 64/65 on boundary cases on the committed k=3
111
+ baseline ([routing benchmark](docs/ROUTING-BENCHMARK.md)).
112
+ - **Every skill stays reachable.** Claude Code lists skill descriptions only up to about
113
+ 1% of context, so large libraries stop auto-triggering past 20 to 40 skills. This
114
+ library keeps the router and safety skills fully listed and the rest **`name-only`**
115
+ (Claude Code's own setting for low-priority skills), so every skill is one route away
116
+ with no pre-picking ([how it works](docs/ROLES.md)).
117
+ - **Tested like code, not prose.** Across 234 eval cases and 1323 assertions, the same
118
+ model passes **63.6%** of assertions without the skill's content and **97.9%** with
119
+ it, and **no case scores lower with the skill** ([results](docs/EVALS.md#results-content-evals-full-catalog)).
120
+ Safety-critical skills are **hardened** with an Iron Law, a rationalization table, and
121
+ pressure tests.
122
+ - **Curated, not a mega-catalog.** First-party and reviewed. Nothing executes on its own
123
+ except the open Node installer ([SECURITY.md](SECURITY.md)).
124
+ - **Full-SDLC breadth, role-scoped.** From planning to incidents, plus MLOps, LLM apps,
125
+ data, and PM work. `/role backend` (or any of 15 roles) promotes a working set to
126
+ auto-trigger.
127
+ - **Cross-platform.** The installer and hook are pure Node, so they run the same on
128
+ Linux, macOS, and Windows.
155
129
 
156
130
  ## What's included
157
131
 
158
- 66 skills — **[full catalog → SKILLS.md](docs/SKILLS.md)**:
132
+ 66 skills, listed in the **[full catalog → SKILLS.md](docs/SKILLS.md)**:
159
133
 
160
134
  | Area | Count | Examples |
161
135
  |------|-------|----------|
@@ -171,31 +145,29 @@ review) live in the `skill-router` skill and **[ROLES.md](docs/ROLES.md)**.
171
145
  | Evaluation & Monitoring | 2 | observability-design, test-data-strategy |
172
146
  | Meta | 2 | skill-router, writing-skills |
173
147
 
174
- ## Documentation
148
+ ## Evaluation
175
149
 
176
- - **[ROLES.md](docs/ROLES.md)** — the activation model (name-only baseline, roles, the orchestrator) and the CLI vs web/plugin paths.
177
- - **[INSTALL-MATRIX.md](docs/INSTALL-MATRIX.md)** — every install method × surface, side by side.
178
- - **[SKILLS.md](docs/SKILLS.md)** — the full skill catalog by area.
179
- - **[EVALS.md](docs/EVALS.md)** — how the skills are tested (RED/GREEN, pressure tests, CI gate).
180
- - **[ROUTING-BENCHMARK.md](docs/ROUTING-BENCHMARK.md)** — the routing reliability numbers, methodology, and how to reproduce them.
181
- - **[AUTHORING.md](docs/AUTHORING.md)** — write or modify a skill (descriptions, budget, progressive disclosure, evals).
182
- - **[RELEASING.md](docs/RELEASING.md)** — versioning policy and how to cut a release. Changes are tracked in **[CHANGELOG.md](CHANGELOG.md)**.
183
- - **[SECURITY.md](SECURITY.md)** — the security model: trust boundaries, what runs automatically, supply-chain guarantees, and how to report a vulnerability.
150
+ Every skill ships 3 evals (happy path, edge case, scope boundary), and safety skills add
151
+ pressure tests. Each case is replayed with the skill loaded (GREEN) and without it (RED),
152
+ and a skeptical LLM-as-judge grades every assertion. Evals run in-session through
153
+ `evals/workflow-runner.mjs`, with no API key, and the results are committed to
154
+ `evals/baseline.json`. Merging a re-run reports any assertion that regressed. Full guide
155
+ in **[EVALS.md](docs/EVALS.md)**.
184
156
 
185
- ## Evaluation
157
+ ## Documentation
186
158
 
187
- Each skill carries an `evals/` directory; safety/discipline skills add a `pressure_tests`
188
- block. Two runners replay scenarios through Claude (skill loaded = GREEN, absent = RED)
189
- and judge each assertion with a skeptical LLM-as-judge: `evals/workflow-runner.mjs`
190
- (in-session, no API key) and `evals/run.py` (CI regression gate, wired into
191
- `.github/workflows/skill-evals.yml`). The GREEN arm reads the skill *and* the
192
- `references/`/`templates/` files it links to, so improving a reference file moves the
193
- score. The first runner writes `evals/baseline.json`; the second gates against it.
194
- Full guide in **[EVALS.md](docs/EVALS.md)**.
159
+ - **[ROLES.md](docs/ROLES.md)**: the activation model (name-only baseline, roles, the orchestrator) and the CLI vs web/plugin paths.
160
+ - **[INSTALL-MATRIX.md](docs/INSTALL-MATRIX.md)**: every install method × surface, side by side.
161
+ - **[SKILLS.md](docs/SKILLS.md)**: the full skill catalog by area.
162
+ - **[EVALS.md](docs/EVALS.md)**: how the skills are tested (RED/GREEN, pressure tests, the regression baseline).
163
+ - **[ROUTING-BENCHMARK.md](docs/ROUTING-BENCHMARK.md)**: the routing reliability numbers, methodology, and how to reproduce them.
164
+ - **[AUTHORING.md](docs/AUTHORING.md)**: write or modify a skill (descriptions, budget, progressive disclosure, evals).
165
+ - **[RELEASING.md](docs/RELEASING.md)**: versioning policy and how to cut a release. Changes are tracked in **[CHANGELOG.md](CHANGELOG.md)**.
166
+ - **[SECURITY.md](SECURITY.md)**: the security model, what runs automatically, supply-chain guarantees, and how to report a vulnerability.
195
167
 
196
168
  ## Contributing
197
169
 
198
- New or improved skills are welcome — start with **[AUTHORING.md](docs/AUTHORING.md)** (or
170
+ New or improved skills are welcome. Start with **[AUTHORING.md](docs/AUTHORING.md)** (or
199
171
  install the `writing-skills` skill). The short version: descriptions are everything, keep
200
172
  SKILL.md concise with detail in `references/`, and ship exactly 3 evals.
201
173
 
@@ -203,23 +175,23 @@ SKILL.md concise with detail in `references/`, and ship exactly 3 evals.
203
175
 
204
176
  This library stands on ideas from projects we found genuinely useful:
205
177
 
206
- - **[obra/superpowers](https://github.com/obra/superpowers)** — the guardrail pattern
178
+ - **[obra/superpowers](https://github.com/obra/superpowers)**: the guardrail pattern
207
179
  our hardened safety skills adopt (an Iron Law, a rationalization table distilled from
208
180
  real failures, and pressure tests that try to talk the agent out of it) comes from
209
181
  Jesse Vincent's work here, as does the idea of a Socratic brainstorming skill as the
210
182
  entry point to a feature. Superpowers goes deeper on the coding inner loop than we do;
211
183
  if that's what you want, use it.
212
- - **[anthropics/skills](https://github.com/anthropics/skills)** — Anthropic's official
184
+ - **[anthropics/skills](https://github.com/anthropics/skills)**: Anthropic's official
213
185
  skills (and `skill-creator` in particular) are the authoring practice we benchmark
214
186
  ours against; the eval-first loop in [AUTHORING.md](docs/AUTHORING.md) follows the
215
187
  same instinct.
216
188
  - **The [Agent Skills docs](https://code.claude.com/docs/en/skills) and Anthropic's
217
- engineering posts** — progressive disclosure, the listing budget, and the
189
+ engineering posts**: progressive disclosure, the listing budget, and the
218
190
  `name-only` + `skillOverrides` activation surface this library's routing model is
219
191
  built on.
220
- - **The awesome-claude-skills community lists** — the ecosystem survey that shaped our
192
+ - **The awesome-claude-skills community lists**: the ecosystem survey that shaped our
221
193
  gap analysis of what a full-SDLC library should cover.
222
194
 
223
195
  ## License
224
196
 
225
- MIT — see [LICENSE](LICENSE).
197
+ MIT, see [LICENSE](LICENSE).
package/VERSION CHANGED
@@ -1 +1 @@
1
- 0.8.2
1
+ 0.9.1
package/catalog.json CHANGED
@@ -323,7 +323,7 @@
323
323
  },
324
324
  {
325
325
  "name": "verification-before-completion",
326
- "description": "Evidence gate before claiming work is done, passing, fixed, or deployed. Use before saying 'done', 'it works', or 'tests pass', or before committing, pushing, or opening a PR. Run the proving command fresh and read its output first. Triggers: is it done, did it work, tests pass, verify, ready to commit, before I push, confirm the fix.",
326
+ "description": "Evidence gate before any claim that work is done, fixed, passing, or deployed. Route here when a message declares the work finished or asks to commit, push, merge, ship, or close it out, including a brief sign-off, and before git-workflow or release-management act on it. Writing the commit message or PR text itself → git-workflow. Triggers: is it done, did it work, tests pass, verify, ready to commit, before I push, confirm the fix.",
327
327
  "path": "verification-before-completion/SKILL.md"
328
328
  },
329
329
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "swe-workflow-skills",
3
- "version": "0.8.2",
3
+ "version": "0.9.1",
4
4
  "description": "A curated library of Claude Code Agent Skills covering the full software lifecycle, with orchestrator-routed activation that scales past the skill-listing budget.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -20,7 +20,7 @@
20
20
  {
21
21
  "id": 2,
22
22
  "prompt": "Audit this React component for accessibility issues:\n\n<div className=\"card\" onClick={() => navigate(`/project/${id}`)}>\n <div className=\"title\">{name}</div>\n <img src={thumbnail} />\n <div className=\"badge\" style={{color: status === 'active' ? 'green' : 'red'}}>\n {status}\n </div>\n <div className=\"actions\">\n <div className=\"btn\" onClick={(e) => { e.stopPropagation(); onDelete(id); }}>\n 🗑️\n </div>\n </div>\n</div>",
23
- "expected_output": "Should identify all accessibility issues: clickable div instead of link/button, missing alt on img, color-only status indicator, icon button without label, no keyboard support. Assertion #2 was reworded 2026-08-28: it asserted a color-ONLY indicator, which this fixture does not contain — the badge renders {status} as text, so color is redundant reinforcement and WCAG 1.4.1 is not violated. At k=5, 7 of 10 judges recorded the reply correctly ruling 1.4.1 out and flagging 1.4.3 contrast instead; the assertion was punishing the right answer. It now targets the failure the fixture really has.",
23
+ "expected_output": "Should identify all accessibility issues: clickable div instead of link/button, missing alt on img, color-only status indicator, icon button without label, no keyboard support. Assertion #2 was reworded 2026-08-28: it asserted a color-ONLY indicator, which this fixture does not contain — the badge renders {status} as text, so color is redundant reinforcement and WCAG 1.4.1 is not violated. At k=5, 7 of 10 judges recorded the reply correctly ruling 1.4.1 out and flagging 1.4.3 contrast instead; the assertion was punishing the right answer. It now targets the failure the fixture really has. NOTE: final assertion added 2026-09-16. Every earlier assertion here is the textbook answer, which the control produced unaided (RED matched GREEN on all of them), while Step 7 (validate) — which changes what the user does next — was asserted nowhere. Drafted from that step's own text, not from a treatment reply, and worded without an either/or clause, which let controls pass on substance in an earlier case.",
24
24
  "assertions": [
25
25
  "Identifies clickable div should be an <a> or <Link> (for navigation)",
26
26
  "Identifies missing alt attribute on the image",
@@ -29,7 +29,8 @@
29
29
  "Identifies emoji icon without accessible label (aria-label needed)",
30
30
  "Notes that div+onClick has no keyboard support (no Enter/Space handling)",
31
31
  "Provides corrected accessible version of the component",
32
- "Corrected version uses semantic HTML (a, button, img alt)"
32
+ "Corrected version uses semantic HTML (a, button, img alt)",
33
+ "Recommends validating the corrected component manually with a keyboard-only pass and a screen reader, not only by reading the code or running an automated checker"
33
34
  ]
34
35
  },
35
36
  {
@@ -10,30 +10,32 @@
10
10
  "Covers the RAG triad or equivalent — faithfulness/groundedness, answer relevance, and retrieval/context quality — and distinguishes retrieval metrics from generation metrics",
11
11
  "Recommends a concrete evaluation tool (ragas, deepeval, or promptfoo) and explains its role",
12
12
  "Addresses LLM-as-judge reliability with at least one concrete measure: rubric design, position/self-preference bias, majority voting, or calibrating the judge against human spot-checks",
13
- "Proposes running the evals as a repeatable regression gate (in CI or before each prompt/pipeline change), not only as a one-off pre-launch check"
13
+ "Proposes running the evals as a repeatable regression gate (in CI or before each prompt/pipeline change), not only as a one-off pre-launch check",
14
+ "Specifies the judge rubric as a separate score per quality criterion on a binary or 3-point scale, rather than one overall score such as 1–10"
14
15
  ]
15
16
  },
16
17
  {
17
18
  "id": 2,
18
19
  "prompt": "Our LLM feature summarizes long sales calls. We have no ground-truth summaries and no users yet. How do we evaluate quality with zero labeled data?",
19
- "expected_output": "Does not treat missing labels as a blocker: proposes reference-free evaluation (rubric-based LLM-as-judge, groundedness against the source call, pairwise comparison between variants), bootstraps a small human-labeled golden set, calibrates the judge against human spot-checks, and plans online signals (feedback, A/B) once users exist",
20
+ "expected_output": "Does not treat missing labels as a blocker: proposes reference-free evaluation (rubric-based LLM-as-judge, groundedness against the source call, pairwise comparison between variants), bootstraps a small human-labeled golden set, calibrates the judge against human spot-checks, and plans online signals (feedback, A/B) once users exist NOTE: final assertion added 2026-09-16. Every earlier assertion here is the textbook answer, which the control produced unaided (RED matched GREEN on all of them), while Step 5 (gate changes in CI) — which changes what the user does next — was asserted nowhere. Drafted from that step's own text, not from a treatment reply, and worded without an either/or clause, which let controls pass on substance in an earlier case.",
20
21
  "assertions": [
21
22
  "Does not claim evaluation is impossible without labels — proposes reference-free approaches such as rubric-based LLM-as-judge, groundedness against the source transcript, or pairwise comparison between variants",
22
23
  "Recommends bootstrapping a small human-labeled golden set (even tens of examples) and explains what it buys",
23
24
  "Designs the judge with an explicit rubric or criteria decomposition rather than a bare overall score",
24
25
  "Mentions checking the judge against human spot-checks (calibration/agreement) or using voting to reduce judge noise",
25
- "Plans for online signals after launch (user feedback, A/B testing) as a complement to offline evals"
26
+ "Plans for online signals after launch (user feedback, A/B testing) as a complement to offline evals",
27
+ "Runs the golden set as a CI gate on every prompt or model change, failing on regression against the last accepted baseline rather than below an absolute score"
26
28
  ]
27
29
  },
28
30
  {
29
31
  "id": 3,
30
- "prompt": "Set up MLflow for our fine-tuning experiments so we can log runs and compare hyperparameters across the team.",
31
- "expected_output": "Recognizes this as experiment-tracking infrastructure, not evaluation design — hands off to ml-experiment-tracking for the MLflow setup and run comparison, noting the boundary: tracking records and compares runs, while ai-evaluation defines what and how to measure",
32
+ "prompt": "We're fine-tuning a summarizer. I want every run's hyperparameters logged so the team can compare them, and I want that comparison ranked by how good the summaries actually are — not by training loss. What should we set up?",
33
+ "expected_output": "Splits the request: capturing hyperparameters and comparing runs is tracking infrastructure, while deciding what 'good summary' means and how it is scored is evaluation design. Defines the quality measure — golden set, rubric or judge, the metric the ranking sorts on — and routes the run-logging half to ml-experiment-tracking.",
32
34
  "assertions": [
33
- "Recognizes the request is about experiment-tracking/run-comparison infrastructure, not about defining evaluation metrics or datasets",
34
- "Refers to the ml-experiment-tracking skill for the MLflow setup and run comparison",
35
- "Does not produce an evaluation-design workflow (golden datasets, judges, RAG metrics) as the answer to a tracking-infrastructure request",
36
- "States the boundary: tracking records and compares runs, while evaluation design defines what and how to measure"
35
+ "Separates the two halves: run logging and comparison infrastructure versus defining the summary-quality measure the ranking needs",
36
+ "Refers to ml-experiment-tracking for capturing hyperparameters and comparing runs",
37
+ "Defines the quality measure itself — an evaluation set, a rubric or judge, and the metric the ranking would sort on — rather than handing the whole request off",
38
+ "States the boundary: tracking records and compares whatever score it is given; evaluation design decides what counts as good and how it is scored"
37
39
  ]
38
40
  }
39
41
  ]
@@ -33,15 +33,14 @@
33
33
  },
34
34
  {
35
35
  "id": 3,
36
- "prompt": "We have an existing API with these endpoints:\nGET /getUsers\nGET /getUserById?id=123\nPOST /createUser\nPOST /updateUser\nGET /deleteUser?id=123\n\nThis doesn't feel right. Can you redesign it following proper REST conventions?",
37
- "expected_output": "Should identify specific violations (verbs in URLs, GET for delete, query params for identity) and redesign using proper REST conventions.",
36
+ "prompt": "We're adding a /transactions endpoint to our finance API. Clients need to page through a customer's transactions, filter by date range and by status, and sort by either amount or date. The table has around 400 million rows. I want the design settled before anyone writes code — what does the endpoint look like, and what has to be true underneath it to serve that?",
37
+ "expected_output": "Splits a request whose halves the skill roster does not separate. What the endpoint promises — the pagination style, how filters and sorts are expressed, what comes back for an invalid page cursor — is this skill's work, and it delivers that concretely. Whether the store can serve every filter and sort combination at 400 million rows is an index and partitioning question data-modeling owns. The two meet at the pagination choice: a cursor needs a stable unique ordering key, which is simultaneously a contract decision and an index decision, so a good answer names that dependency rather than treating cursor and offset as interchangeable.",
38
38
  "assertions": [
39
- "Identifies that URLs use verbs instead of nouns",
40
- "Identifies that DELETE uses GET method",
41
- "Identifies that identity is in query params instead of path",
42
- "Redesigns to: GET /users, GET /users/:id, POST /users, PATCH /users/:id, DELETE /users/:id",
43
- "Explains WHY each change matters (not just 'this is the convention')",
44
- "Notes that this is a breaking change requiring versioning or migration plan"
39
+ "Separates the two halves: what the endpoint promises its clients, versus what the storage has to be shaped like to serve those promises",
40
+ "Refers to data-modeling for the index and partitioning strategy behind the filters and sorts",
41
+ "Delivers the endpoint contract itself — the pagination style and how filters and sorts are expressed — rather than deferring the whole request",
42
+ "Ties the pagination choice to a stable ordering key instead of presenting cursor and offset as interchangeable",
43
+ "States the boundary: API design fixes what the interface promises, while data modeling decides whether the store can keep that promise"
45
44
  ]
46
45
  }
47
46
  ]
@@ -20,6 +20,13 @@ Understand what exists and what's needed before creating anything:
20
20
 
21
21
  A simple monolith may only need one conceptual diagram. A distributed system with 5+ services likely needs canonical and runtime levels too.
22
22
 
23
+ **Split the ask before you start.** "Onboarding documentation" usually bundles two
24
+ different deliverables, and only one is this skill's. A reader who cannot tell which
25
+ service calls which needs a structural view — that is the work below. A reader who
26
+ cannot get the system running needs setup instructions, which live in the README and
27
+ belong to `project-documentation`. Say which half you are producing; a diagram does not
28
+ fix a broken local setup, and a README does not substitute for a container view.
29
+
23
30
  ### Step 2: Choose Abstraction Levels
24
31
 
25
32
  Architecture documentation works at three distinct levels. Not every system needs all three — apply YAGNI.
@@ -19,28 +19,26 @@
19
19
  {
20
20
  "id": 2,
21
21
  "prompt": "I have a simple CRUD application — Express.js backend, PostgreSQL database, deployed on a single EC2 instance behind nginx. My manager read about C4 and wants me to create all four C4 levels plus deployment diagrams plus data flow diagrams. Can you help me set this up?",
22
- "expected_output": "Edge case — pushing back on unnecessary documentation complexity. Should apply YAGNI and recommend only the diagrams that earn their maintenance for a simple monolith, without refusing the request outright, and name what would later justify more detail.",
22
+ "expected_output": "Edge case — pushing back on unnecessary documentation complexity. Should apply YAGNI and recommend only the diagrams that earn their maintenance for a simple monolith, without refusing the request outright, and name what would later justify more detail. Whatever subset it produces uses one shared vocabulary of element names across every diagram.",
23
23
  "assertions": [
24
24
  "Pushes back on creating all four C4 levels for a simple monolith",
25
25
  "Applies YAGNI — recommends only the diagrams that add value for this system's complexity",
26
- "Recommends at most a system context and a single container diagram",
27
26
  "Explains that Code-level C4 diagrams are almost never worth maintaining manually",
28
27
  "Does not refuse the request entirely — provides a pragmatic subset",
29
28
  "Suggests conceptual-level documentation may be sufficient for this system",
30
- "Explains what would trigger the need for more detailed documentation in the future"
29
+ "Explains what would trigger the need for more detailed documentation in the future",
30
+ "Establishes a shared naming vocabulary (a glossary of element names) that every diagram uses exactly"
31
31
  ]
32
32
  },
33
33
  {
34
34
  "id": 3,
35
- "prompt": "We're debating whether to extract our authentication logic into a separate service or keep it in the monolith. Can you also create architecture diagrams showing what the system would look like after the split?",
36
- "expected_output": "Scope boundary — separating decision-making from documentation. Should defer the extract-or-keep decision to architecture-design for an ADR, while offering to diagram the proposed state as explicitly non-canonical until the decision is accepted.",
35
+ "prompt": "Three engineers joined this month and all three got stuck the same way: they can't work out which of our nine services actually calls which, and they couldn't get the stack running locally. I'd rather fix the documentation than answer these questions a fourth time. Where do we start?",
36
+ "expected_output": "Notices that the two complaints are not one problem. The map of which service calls which is this skill's work — which diagram levels answer that question, and what triggers an update or a review so the map does not drift once drawn — and it delivers that. Getting the stack running on a laptop is README and setup material that project-documentation owns. A good answer resists treating 'onboarding docs' as a single deliverable, because the two halves rot for different reasons and are maintained in different places. NOTE: assertion #3 was reworded 2026-09-16 from 'Names what triggers a diagram update and who owns it'. Under reply-only judges it split 2-1 on the ownership conjunct while every round named the triggers — and the skill never teaches assigning an owner (Step 6 gives update triggers and a review cadence, nothing more), so the conjunct asserted behaviour the skill does not contain. If ownership is wanted, it is a content change to Step 6, measured on its own.",
37
37
  "assertions": [
38
- "Recognizes the decision-making aspect and defers to the architecture-design skill for the ADR",
39
- "Does not make the architectural decision within this skill's workflow",
40
- "Offers to diagram the proposed architecture as a conceptual or draft diagram to support the decision",
41
- "Clearly separates the decision process from the documentation process",
42
- "If diagramming the proposed state, labels it as non-canonical since the decision hasn't been made yet",
43
- "Suggests that canonical diagrams should only be updated after the decision is accepted"
38
+ "Separates the two halves: the map of which services call which, versus the instructions for getting the stack running locally",
39
+ "Refers to project-documentation for the README and the local setup instructions",
40
+ "Delivers the architecture-documentation half itself — which diagram levels answer the what-calls-what question — rather than deferring the whole request",
41
+ "Names what triggers a diagram update — the structural changes that should force one, or a review cadence — rather than leaving the diagrams' accuracy to good intentions"
44
42
  ]
45
43
  }
46
44
  ]
@@ -27,13 +27,13 @@
27
27
  },
28
28
  {
29
29
  "id": 3,
30
- "prompt": "We've settled on building a CLI tool that syncs our design tokens to code. Break it into tasks with acceptance criteria and dependencies so the team can start next sprint.",
31
- "expected_output": "Recognizes that ideation is complete and the user is asking for convergent task breakdown — refers to feature-planning for the scoped tasks, acceptance criteria, and dependency mapping rather than reopening divergent exploration",
30
+ "prompt": "Our nightly analytics reports are slow enough that people have started complaining. The team has split into two camps — precompute everything on a schedule, or generate on demand and stream results back — and we want to land on one this week so we can start building. Though I'll admit nobody has checked whether report speed is actually what people are unhappy about. Help us get to an answer.",
31
+ "expected_output": "Notices the request contains a closed question and an open one, and does not treat them alike. Choosing between precompute and on-demand streaming is a costly-to-reverse structural decision with a trade-off record, which architecture-design owns. Whether slow reports are the real complaint is still genuinely open, and that is where divergent work belongs: probe what users are actually unhappy about, and widen past the two camps to options nobody has put on the table. Does not simply adjudicate the two-way split, and does not relitigate it either.",
32
32
  "assertions": [
33
- "Recognizes the request as convergent planning of an already-chosen idea, not ideation",
34
- "Refers to the feature-planning skill for the task breakdown, acceptance criteria, and dependencies",
35
- "Does not restart divergent idea generation or question the settled decision as the main response",
36
- "States or implies the boundary: brainstorming opens the option space before a decision; feature-planning structures the work after it"
33
+ "Separates the two questions: whether slow reports are the real complaint is still open, while precompute-versus-on-demand is a decision waiting to be made",
34
+ "Refers to architecture-design for choosing between precompute and on-demand and recording the trade-off",
35
+ "Probes what users are actually unhappy about before the two camps are compared, rather than accepting report speed as the settled problem",
36
+ "Generates options beyond the two the team has already named"
37
37
  ]
38
38
  }
39
39
  ]
@@ -42,14 +42,14 @@
42
42
  "pressure_tests": [
43
43
  {
44
44
  "id": 1,
45
- "prompt": "Production throws a NullPointerException sometimes. I don't have time to reproduce it — just add a null check where it crashes so it stops, and we'll move on.",
45
+ "prompt": "Quick one. Prod logs show this a few times an hour:\n\njava.lang.NullPointerException: Cannot invoke \"Profile.getTimezone()\" because the return value of \"User.getProfile()\" is null\n at com.acme.notify.DigestScheduler.nextSendTime(DigestScheduler.java:88)\n\nLine 88 is `ZoneId zone = ZoneId.of(user.getProfile().getTimezone());`\n\nProfile is optional in our schema: SSO users created by the SCIM sync don't get one until they first log in. The job retries on failure and the retry goes through fine, so nothing is actually lost. Just guard it and fall back to UTC when the profile is null. It's a one-liner, no investigation needed.",
46
46
  "pressure": ["time"],
47
- "expected_behavior": "Holds the Iron Law: no fix without a confirmed root cause. Explains that a null check masks the symptom while the real cause (why the value is null) remains and will resurface; pushes to reproduce or trace the source, offering a fast path rather than abandoning root cause.",
47
+ "expected_behavior": "Holds the Iron Law: no fix without a confirmed root cause. The developer's explanation does not fit the evidence: a user without a profile would fail on every attempt, yet the retry of the same job succeeds, so the profile exists and something makes it read as null intermittently. A UTC fallback would hide that behind silently wrong send times. Declines to ship the guard as the fix, names the mismatch, and offers a fast, bounded route to the cause (log the user id on failure and check whether those users have profiles; look at how the user is loaded on the path that fails).",
48
48
  "assertions": [
49
- "Does NOT simply add the null check and move on",
50
- "Explains masking the symptom vs fixing the root cause",
51
- "Pushes to reproduce the bug or find why the value is null",
52
- "Offers a fast route to root cause under time pressure rather than skipping it"
49
+ "Does NOT simply add the UTC fallback as the fix",
50
+ "Notices that the stated cause does not fit the evidence: the retry of the same job succeeds, so the user's profile exists and the null is intermittent rather than a user who has no profile",
51
+ "Explains that a guard without a confirmed cause masks the symptom (for example digests sent at the wrong time for users who do have a timezone) rather than fixing it",
52
+ "Offers a fast route to the root cause under time pressure (such as logging the failing user id and checking whether that user has a profile, or examining how the user is loaded on the failing path) rather than skipping it"
53
53
  ]
54
54
  }
55
55
  ]
@@ -33,15 +33,14 @@
33
33
  },
34
34
  {
35
35
  "id": 3,
36
- "prompt": "The pipeline itself is fine. What I actually need is to work out what version number each release gets, what goes in the changelog, and when we're allowed to publish to npm. Can you just build all that into the workflow file?",
37
- "expected_output": "Scope boundary — versioning policy, changelog content, and publish gates are release-management decisions; this skill automates them once decided. Should route the decision to release-management and offer to wire the resulting policy in as pipeline stages, without inventing a semver scheme itself.",
36
+ "prompt": "We publish our SDK to npm from GitHub Actions. Today a maintainer bumps the version by hand, writes the changelog entry by hand, and then whoever notices runs the publish job. We've shipped a wrong version twice. I want one reliable process — sort it out.",
37
+ "expected_output": "Two different kinds of decision are tangled in one request and the roster does not separate them. What version this release is, and what belongs in the changelog, is release-management's policy work. The stages that build, test and publish — and the gate that must pass before the publish step can run at all — are this skill's, and it delivers them. A good answer wires the pipeline to carry out a policy it does not invent, rather than hard-coding a versioning scheme into the workflow file.",
38
38
  "assertions": [
39
- "Recognizes that semver policy, changelog content, and publish gating are release-management concerns",
40
- "Hands off to or invokes the release-management skill for those decisions",
41
- "Distinguishes deciding the release policy from automating it in the pipeline",
42
- "Offers to implement the policy as pipeline stages once it is decided",
43
- "Does not invent a versioning scheme or changelog format inside the CI workflow",
44
- "Does not respond by producing another full CI/CD pipeline from scratch"
39
+ "Separates the two halves: deciding what version a release gets and what goes in the changelog, versus wiring the steps that build and publish it",
40
+ "Refers to release-management for the versioning scheme and changelog generation",
41
+ "Delivers the pipeline half itself — the stages and the gate that must pass before publish can run — rather than deferring the whole request",
42
+ "Does not invent a versioning scheme or a changelog format inside the workflow file",
43
+ "States the boundary: release management decides what a release is, while the pipeline is what carries it out"
45
44
  ]
46
45
  }
47
46
  ]
@@ -17,24 +17,25 @@
17
17
  {
18
18
  "id": 2,
19
19
  "prompt": "There's a bizarre guard clause in our payment processor: `if amount == 999999: amount = amount - 1`. No comment, no test, git blame just shows a 'fixes' commit from 2019 by someone who left. Everyone's afraid to delete it. Should I?",
20
- "expected_output": "Does not say 'yes, delete it' outright: digs into the 2019 commit's full context (message, sibling changes, linked ticket, the PR discussion), searches for related production data or downstream systems that might depend on the cap, and if all sources come up empty, proposes proving it's dead (logging/telemetry on the branch for a period) plus a characterization test — removal only with evidence and a safety net, not on vibes",
20
+ "expected_output": "Does not say 'yes, delete it' outright: digs into the 2019 commit's full context (message, sibling changes, linked ticket, the PR discussion), searches for related production data or downstream systems that might depend on the cap, and if all sources come up empty, proposes proving it's dead (logging/telemetry on the branch for a period) plus a characterization test — removal only with evidence and a safety net, not on vibes NOTE: final assertion added 2026-09-16. Every earlier assertion here is the textbook answer, which the control produced unaided (RED matched GREEN on all of them), while Step 6 (leave the map better than you found it) — which changes what the user does next — was asserted nowhere. Drafted from that step's own text, not from a treatment reply, and worded without an either/or clause, which let controls pass on substance in an earlier case. This case is expected to score identically with and without the skill: Chesterton’s fence on a magic-number guard is textbook, and a strong model unaided reaches for the pickaxe search, the units and sentinel reading, runtime evidence and a characterization test. The row gates that behaviour against regression without demonstrating a gain. That is accepted by design; it should not be re-triaged as a weak prompt.",
21
21
  "assertions": [
22
22
  "Investigates the 2019 commit's full context (message, other files in the same commit, linked ticket/PR discussion) rather than accepting blame's surface result",
23
23
  "Considers that production data or a downstream system may depend on the behavior before judging it vestigial",
24
24
  "Proposes gathering runtime evidence (logging/telemetry on the branch) to prove the code path is dead rather than assuming it",
25
25
  "Recommends a characterization test or equivalent safety net around the behavior before/when removing it",
26
- "Does not recommend immediate deletion based on the code looking senseless"
26
+ "Does not recommend immediate deletion based on the code looking senseless",
27
+ "Records the recovered reason for the guard where the next reader will find it, whether the guard is kept or removed"
27
28
  ]
28
29
  },
29
30
  {
30
31
  "id": 3,
31
- "prompt": "Our codebase is a mess of tech debt — give me a prioritized assessment of what we should fix first and a remediation roadmap for the quarter.",
32
- "expected_output": "Recognizes this as a debt assessment/prioritization request — refers to technical-debt-review for the hotspot analysis and remediation roadmap, noting the boundary: code-archaeology builds understanding of unfamiliar code; technical-debt-review assesses health and prioritizes fixes",
32
+ "prompt": "I've just inherited our warehouse-routing service. The two people who built it left last month, and nobody can explain why orders for two of our regions go through a completely separate code path. Next sprint we have to fold that path into the main one, and at least three other teams consume the routing decisions this service publishes. Where do I start?",
33
+ "expected_output": "Notices that folding the path in safely needs two different kinds of knowledge. Why the regional path exists and what it really does — mining its history, tracing one real order through it, and treating it as load-bearing until evidence says otherwise — is this skill's work, and it delivers that. Who consumes the routing decisions the service publishes, which of them would see a changed decision or payload once the path is folded in, and how the change must be sequenced across those teams is a blast-radius question that dependency-impact-analysis owns. A good answer does not treat understanding the code as the same thing as knowing who the change will break.",
33
34
  "assertions": [
34
- "Recognizes the request as debt assessment and prioritization, not comprehension of unfamiliar code",
35
- "Refers to the technical-debt-review skill for the hotspot analysis and roadmap",
36
- "Does not produce an archaeology workflow (history mining, characterization tests) as the primary answer",
37
- "States or implies the boundary: code-archaeology produces understanding; technical-debt-review assesses and prioritizes what to fix"
35
+ "Separates the two halves: recovering why the regional path exists, versus finding who consumes its routing decisions and what folding it in would break for them",
36
+ "Refers to dependency-impact-analysis for mapping the consuming teams and what the change would break",
37
+ "Delivers the comprehension half itself — history mining and tracing one order through the separate path — rather than deferring the whole request",
38
+ "Treats the separate regional code path as possibly load-bearing until history or production data says otherwise"
38
39
  ]
39
40
  }
40
41
  ]