Reproducible pressure scenarios for evaluating the ten skills. See ../evaluation.md for the formal loss function and E2E definition.
tests/
├── README.md # this file
├── fixtures/ # per-skill pressure scenarios + rubrics
│ ├── root-cause-by-layer/
│ │ ├── scenario.md # the prompt given to the subagent
│ │ ├── rubric.md # binary checks for scoring
│ │ └── baseline-notes.md # what we observed WITHOUT the skill
│ ├── loss-backprop-lens/
│ ├── dialectical-reasoning/
│ ├── docs-as-definition-of-done/
│ └── loop-driven-engineering/
└── e2e/
├── README.md # how to run an end-to-end test
└── scenario-01-refactor/ # a multi-skill integration scenario
For a given skill s and fixture f:
- Baseline (RED). Dispatch a fresh subagent in a clean directory (no
CLAUDE.md/AGENTS.md/ methodology files). Pastescenario.mdas the prompt. Save the response. - With skill (GREEN). Dispatch a second fresh subagent. Include the full
SKILL.mdbody above the scenario prompt. Save the response. - Score. Read both responses against
rubric.md. Count violations. ComputeΔloss(s, f) = violations_baseline − violations_with_skill.
A skill that scores Δloss ≤ 0 on average across its fixtures is broken. Raise an issue.
- Baseline contamination. Subagents dispatched from within a project that has its own methodology
CLAUDE.mdmay refuse to ignore it, producing artificially low baseline violation counts. To avoid this, run fixtures from/tmp/or from a fresh directory with no ambient methodology. This was not fully achievable for the original baselines — see../GAPS.md. - Reviewer subjectivity. Rubric items are scored by a human reader; interpretation of "named the contract" vs "vaguely gestured at a contract" varies. Target: ≥ 80% inter-reviewer agreement on the same response.
- Scenario saturation. 1–2 fixtures per skill is not enough to claim generalization; it's a smoke test. A real evaluation runs 10+ fixtures per skill across varying domains.
Aggregate Δloss_bundle now computed across all 11 skills (10 reactive + 1 architect-mode, opt-in). The previously-blocked skill (docs-as-definition-of-done) was captured via direct API (scripts/capture-clean-baseline.py) — bypassing the subagent harness entirely. architect-mode was measured in v0.3.0 via the same direct-API path.
Raw artifacts for every pair in fixtures/<skill>/runs/<timestamp>/ (v0.2 new-skill runs at 20260420T155048Z, v0.1 re-measured runs at 20260420T161500Z, clean-API for docs-as-definition-of-done at 20260420T165000Z-clean, clean-API for architect-mode at 20260420T190302Z-clean).
| Skill | Δloss (normalized) | Raw | Rubric max | Status |
|---|---|---|---|---|
root-cause-by-layer |
0.750 | 6/8 | 8 | clean |
loss-backprop-lens |
0.500 | 3/6 | 6 | clean (re-measured) |
reproducibility-first |
0.333 | 2/6 | 6 | clean |
e2e-driven-iteration |
0.600 | 3/5 | 5 | clean |
dialectical-reasoning |
0.500 | 3/6 | 6 | partial contamination |
iterative-refinement |
0.500 | 3/6 | 6 | clean |
method-evolution |
0.571 | 4/7 | 7 | clean |
drift-detection |
0.833 | 5/6 | 6 | clean |
loop-driven-engineering |
0.250 | 2/8 | 8 | partial contamination |
docs-as-definition-of-done |
0.333 | 2/6 | 6 | clean (direct API) |
architect-mode (opt-in) |
1.000 | 10/10 | 10 | clean (direct API) |
| Bundle mean (n=11) | 0.561 | — | — |
All GREEN runs score 0 violations, so Δloss (normalized) = RED_violations / rubric_max.
Δloss_bundle = mean(Δloss_normalized per skill)
= (0.750 + 0.500 + 0.333 + 0.600 + 0.500 + 0.500 + 0.571 + 0.833 + 0.250 + 0.333 + 1.000) / 11
= 0.561
Target from ../evaluation.md: Δloss_bundle ≥ 0.30 (each skill, on average, removes ≥ 30 % of rubric violations that appear without it). Measured 0.561 — target met with margin across all 11 skills.
architect-mode is the largest effect-size skill in the bundle (normalized 1.000, 100 % of rubric items flipped between RED and GREEN). Consistent with its role — the gap between "agent invents whatever design feels right" and "agent runs a rigid 5-phase discipline with explicit 10-item rubric" is structurally larger than any reactive-mode skill's gap. architect-mode is also the only opt-in skill; it activates only when the user signals design intent via LDD[mode=architect]:, /ldd-architect, or a matching trigger phrase — so its contribution to the bundle-wide mean applies only in architect sessions, not every session.
Per-skill normalized Δloss ranges from 0.250 (partially-contaminated skills where baselines already show strong discipline) to 1.000 (architect-mode standard — every rubric item flipped). The lower-bound character of the partially-contaminated measurements is explicit in their per-skill baseline-notes.md; their real Δloss is likely higher than recorded.
The previous v0.3.1 absolute-mean form (Δloss_bundle = 3.91) is retained in git history but no longer cited — it was three overlapping numbers (per-skill absolute + bundle absolute + bundle relative) where one normalized mean is clearer.
../scripts/capture-clean-baseline.py runs any fixture's scenario.md against the LLM directly — no agent harness, no ambient methodology. Works with OpenRouter, OpenAI, or Anthropic API keys. This is how docs-as-definition-of-done was finally measured cleanly, and it is the tool for:
- Re-running any fixture under different models (distribution across models)
- N=5 runs per fixture (distribution across samples)
- Running community-contributed scenarios with the same methodology
- Closing any remaining baseline-contamination problems
See ../GAPS.md.
Two fixtures were re-scored by a fresh subagent given only the RED, GREEN, and rubric — no methodology context, no author hints.
| Fixture | Author Δloss | Judge Δloss | GREEN agreement | RED agreement (within ±1) |
|---|---|---|---|---|
loss-backprop-lens |
+3 | +5 | 100 % (both 0/6) | ± 2 |
drift-detection |
+5 | +3 | 100 % (both 0/6) | ± 2 |
Result: direction agreement 100 %, GREEN-clean agreement 100 %, magnitude variance ~ ±2 per skill. Both reviewers agree the skills provide real Δloss; absolute numbers are not to be over-interpreted.
Full judge verdicts (verbatim): fixtures/loss-backprop-lens/runs/20260420T161500Z/independent-judge.md, fixtures/drift-detection/runs/20260420T155048Z/independent-judge.md.
- Author-scored for 9 skills, independent-judge-scored for 2 as a cross-check. Raw RED and GREEN artifacts are attached in every
runs/directory so anyone can re-score. - Single run per skill. A real distribution requires N≥5 runs per skill; the ones captured here are point estimates.
- Scenario-design bias. Each fixture was designed by the same author who wrote the skill it tests. Scenarios authored by outside contributors would be the first unbiased measurement (see
../CONTRIBUTING.md). - Two skills show partial contamination (
dialectical-reasoning,loop-driven-engineering): the subagent retained some ambient discipline despite the context reset. Their Δloss is a lower bound; a truly-clean environment would likely widen the gap.