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.
- package/README.md +70 -98
- package/VERSION +1 -1
- package/catalog.json +1 -1
- package/package.json +1 -1
- package/skills/accessibility-design/evals/evals.json +3 -2
- package/skills/ai-evaluation/evals/evals.json +11 -9
- package/skills/api-design/evals/evals.json +7 -8
- package/skills/architecture-documentation/SKILL.md +7 -0
- package/skills/architecture-documentation/evals/evals.json +9 -11
- package/skills/brainstorming/evals/evals.json +6 -6
- package/skills/bug-investigating/evals/evals.json +6 -6
- package/skills/cicd-pipeline/evals/evals.json +7 -8
- package/skills/code-archaeology/evals/evals.json +9 -8
- package/skills/code-reviewing/SKILL.md +8 -0
- package/skills/code-reviewing/evals/evals.json +10 -12
- package/skills/code-slop-cleanup/SKILL.md +6 -0
- package/skills/code-slop-cleanup/evals/evals.json +14 -8
- package/skills/compliance-privacy/evals/evals.json +6 -6
- package/skills/configuration-strategy/evals/evals.json +2 -1
- package/skills/data-modeling/evals/evals.json +8 -8
- package/skills/data-pipeline-design/SKILL.md +12 -1
- package/skills/data-pipeline-design/evals/evals.json +9 -8
- package/skills/data-quality/SKILL.md +7 -0
- package/skills/data-quality/evals/evals.json +9 -7
- package/skills/dependency-impact-analysis/evals/evals.json +2 -2
- package/skills/effort-estimation/SKILL.md +9 -2
- package/skills/effort-estimation/evals/evals.json +3 -2
- package/skills/feature-planning/evals/evals.json +7 -9
- package/skills/frontend-architecture/evals/evals.json +1 -1
- package/skills/git-workflow/evals/evals.json +6 -8
- package/skills/incident-response/evals/evals.json +13 -9
- package/skills/llm-app-engineering/SKILL.md +9 -6
- package/skills/llm-app-engineering/evals/evals.json +10 -8
- package/skills/metrics-and-okrs/evals/evals.json +6 -7
- package/skills/ml-experiment-tracking/SKILL.md +2 -0
- package/skills/ml-experiment-tracking/evals/evals.json +3 -2
- package/skills/ml-pipeline-design/evals/evals.json +6 -5
- package/skills/mobile-architecture/evals/evals.json +9 -8
- package/skills/performance-optimization/evals/evals.json +7 -5
- package/skills/plan-execution/SKILL.md +8 -0
- package/skills/plan-execution/evals/evals.json +9 -8
- package/skills/project-documentation/evals/evals.json +2 -2
- package/skills/refactoring/evals/evals.json +6 -7
- package/skills/retrospective/evals/evals.json +7 -8
- package/skills/rollback-strategy/evals/evals.json +5 -4
- package/skills/security-audit/SKILL.md +6 -0
- package/skills/security-audit/evals/evals.json +6 -6
- package/skills/skill-router/evals/evals.json +2 -2
- package/skills/statistical-analysis/evals/evals.json +10 -8
- package/skills/strategic-review/SKILL.md +36 -0
- package/skills/strategic-review/evals/evals.json +7 -6
- package/skills/subagent-orchestration/evals/evals.json +2 -1
- package/skills/tdd-workflow/evals/evals.json +10 -8
- package/skills/technical-debt-review/evals/evals.json +11 -7
- package/skills/test-suite-design/SKILL.md +10 -3
- package/skills/test-suite-design/evals/evals.json +4 -3
- package/skills/test-suite-design/references/testing-pyramid.md +19 -3
- package/skills/threat-modeling/evals/evals.json +7 -6
- package/skills/ui-ux-design/SKILL.md +11 -1
- package/skills/ui-ux-design/evals/evals.json +9 -9
- package/skills/verification-before-completion/SKILL.md +1 -1
- package/skills/verification-before-completion/evals/evals.json +11 -11
- package/skills/writing-skills/SKILL.md +112 -1
- package/skills/writing-skills/evals/evals.json +2 -2
package/README.md
CHANGED
|
@@ -6,76 +6,29 @@
|
|
|
6
6
|
[](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
|
|
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
|
|
14
|
-
not just a task.
|
|
15
|
-
|
|
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
|

|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
131
|
-
explicitly ("use the security-audit skill") or switch the promoted set with `/role`.
|
|
132
|
-
want a particular skill routed at all? `npx swe-workflow-skills disable <skill>`
|
|
133
|
-
durably
|
|
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
|
|
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
|
|
150
|
-
request
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
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
|
|
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
|
-
##
|
|
148
|
+
## Evaluation
|
|
175
149
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
-
|
|
179
|
-
-
|
|
180
|
-
|
|
181
|
-
|
|
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
|
-
##
|
|
157
|
+
## Documentation
|
|
186
158
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
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
|
|
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)
|
|
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)
|
|
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
|
|
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
|
|
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
|
|
197
|
+
MIT, see [LICENSE](LICENSE).
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
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
|
|
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.
|
|
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": "
|
|
31
|
-
"expected_output": "
|
|
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
|
-
"
|
|
34
|
-
"Refers to
|
|
35
|
-
"
|
|
36
|
-
"States the boundary: tracking records and compares
|
|
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
|
|
37
|
-
"expected_output": "
|
|
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
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"
|
|
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": "
|
|
36
|
-
"expected_output": "
|
|
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
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
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": "
|
|
31
|
-
"expected_output": "
|
|
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
|
-
"
|
|
34
|
-
"Refers to
|
|
35
|
-
"
|
|
36
|
-
"
|
|
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": "
|
|
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.
|
|
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
|
|
50
|
-
"
|
|
51
|
-
"
|
|
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": "
|
|
37
|
-
"expected_output": "
|
|
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
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"
|
|
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": "
|
|
32
|
-
"expected_output": "
|
|
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
|
-
"
|
|
35
|
-
"Refers to
|
|
36
|
-
"
|
|
37
|
-
"
|
|
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
|
]
|