Report #002 — does a skill's benefit hold across substrates?
Substrate durability report
Cross-provider skill durability, not a model ranking.
The same 10 suites (Report #001 v1.2 rubrics) and the same fixed judge (claude-haiku-4-5, temp 0, n=5) run on two substrates: claude-sonnet-5 and gpt-5.6-sol. The headline per skill is its with/without lift on each substrate — the judge-affinity-robust metric — read through the same 0.05 effect floor. Absolute cross-provider scores are context, never a ranking. See the neutrality policy and methodology.
Surfaces (disclosed): claude-sonnet-5 → claude-cli (subscription) · gpt-5.6-sol → openai-cli (subscription). Both columns run on the vendor’s own first-party subscription CLI (claude -p and codex exec), so the surface type is held constant across substrates — matched, not merely disclosed.
Matched first-party vendor CLI surfaces, per-surface overhead disclosed. The openai-cli (Codex) surface prepends a fixed ~12–15k-token base-instruction preamble to every call (recorded in each receipt's surface_overhead_note); the claude-cli (claude -p) surface carries a smaller first-party harness/system context. Neither is authored by Driftproof. Absolute cross-substrate scores are not a ranking — the two columns sit behind different first-party harnesses. The headline metric is the within-substrate with/without-skill delta (same baseline, same surface), which cancels the vendor-side constant and isolates the skill. Read the delta down each column; do not read across as a scoreboard. See the neutrality policy.
Per-skill durability
| skill | claude-sonnet-5 — with_skill (Δ lift) | gpt-5.6-sol — with_skill (Δ lift) | Δ / 1k skill-tok (C / G) | post-checks (C · G) | durability |
|---|---|---|---|---|---|
code-review-and-quality |
0.825 ± 0.083 Δ -0.002 | 0.867 ± 0.029 Δ +0.073 | -0.000 / +0.014 | — · — | SUBSTRATE-DEPENDENT |
git-workflow-and-versioning |
0.839 ± 0.085 Δ -0.031 | 0.809 ± 0.128 Δ +0.001 | -0.009 / +0.000 | — · — | REGRESSES on Claude |
documentation-and-adrs |
0.739 ± 0.301 Δ +0.027 | 0.817 ± 0.100 Δ +0.021 | +0.011 / +0.009 | — · — | SUBSTRATE-DEPENDENT † low-res |
commit-work |
0.867 ± 0.012 Δ +0.004 | 0.831 ± 0.061 Δ +0.057 | +0.007 / +0.092 | 5/5 · 5/5 | SUBSTRATE-DEPENDENT |
writing-clearly-and-concisely |
0.850 ± 0.056 Δ -0.003 | 0.853 ± 0.060 Δ +0.025 | -0.003 / +0.026 | — · — | NO EFFECT |
crafting-effective-readmes |
0.789 ± 0.235 Δ -0.085 | 0.849 ± 0.028 Δ -0.014 | -0.127 / -0.021 | — · — | REGRESSES on Claude & GPT † low-res |
naming-analyzer |
0.833 ± 0.084 Δ +0.119 | 0.845 ± 0.034 Δ +0.088 | +0.052 / +0.038 | — · — | DURABLE † low-res |
requesting-code-review |
0.736 ± 0.202 Δ +0.119 | 0.801 ± 0.059 Δ +0.037 | +0.162 / +0.050 | — · — | DURABLE † low-res |
writing-plans |
0.759 ± 0.186 Δ +0.104 | 0.805 ± 0.084 Δ +0.161 | +0.061 / +0.093 | — · — | DURABLE † low-res |
skill-creator |
0.876 ± 0.014 Δ +0.059 | 0.815 ± 0.113 Δ -0.030 | +0.007 / -0.004 | — · — | SUBSTRATE-DEPENDENT |
Columns: each substrate's with-skill band (mean ± stddev over 5 judge samples) and its lift Δ vs baseline (shown as context); the value-per-token lift (Δ per 1,000 SKILL.md tokens) for Claude / GPT; the supplementary deterministic post-checks passed/total (Claude · GPT), reported alongside the judge and never folded into the verdict; and the cross-substrate durability verdict. The verdict does not rest on the aggregate Δ: following Report #001's anti-cry-wolf discipline, a skill is called improved/regressed on a substrate only when a per-case with_skill vs baseline band separation (non-overlapping bands, n=5) clears the 0.05 floor — a wide aggregate band from one outlier case never manufactures a verdict, and a real per-case effect hidden under a flat aggregate mean is not missed. A † low-res mark means a driving case rests on a zero-width judge point band. Every number is re-derived from the receipts under receipts/report-002/.
Post-checks footnote. Deterministic post-checks are authored only where a mechanical assertion is groundable in the skill's SKILL.md text (currently commit-work). A — in the post-checks column means no checks are defined for that skill, not that checks failed.
- REGRESSES on X — a substrate that purely regresses (regressed cases, none improved). This outranks everything: a clean regression on any one side is named even when the other side helps or is mixed. Example:
git-workflow-and-versioningpurely regresses on Claude (commit-message-conventional-type, none improved) while GPT is mixed (1 regressed, 2 improved) → REGRESSES on Claude. A pure regression is the actionable risk, so it takes the label over the other side's mixed result. If both substrates purely regress, both are named (e.g.crafting-effective-readmes→ REGRESSES on Claude & GPT). - DURABLE — both substrates help, neither regresses.
- NO EFFECT — both substrates flat (no case separated beyond the floor).
- SUBSTRATE-DEPENDENT — anything else: helps on one substrate and flat on the other, or a mixed substrate with no pure-regression side. The benefit does not hold uniformly.
Verdict basis — the per-case band-separated drivers behind each label. A case drives a verdict only when its with_skill and baseline bands (mean ± stddev, n=5) do not overlap AND the mean moves ≥ 0.05. Cases marked †point-band rest on a zero-width band (all 5 judge samples identical) — see the low-resolution note.
code-review-and-qualityongpt-5.6-sol: 🔼severity-labeled-findings(Δ+0.396), 🔼oversized-change-split(Δ+0.070)git-workflow-and-versioningonclaude-sonnet-5: 🔻commit-message-conventional-type(Δ-0.214)git-workflow-and-versioningongpt-5.6-sol: 🔻split-into-atomic-commits(Δ-0.338), 🔼changelog-curated-by-impact(Δ+0.238), 🔼semver-hidden-breaking-change(Δ+0.062)documentation-and-adrsonclaude-sonnet-5: 🔼document-public-api-function(Δ+0.200) †point-bandcommit-workongpt-5.6-sol: 🔼conventional-commit-single-change(Δ+0.376), 🔻full-workflow-multi-concern-diff(Δ-0.056)crafting-effective-readmesonclaude-sonnet-5: 🔻lead-with-one-sentence-problem(Δ-0.596)crafting-effective-readmesongpt-5.6-sol: 🔻categorize-task-before-writing(Δ-0.070) †point-bandnaming-analyzeronclaude-sonnet-5: 🔼boolean-prefixes-js(Δ+0.164), 🔼abbreviations-wellknown-js(Δ+0.310), 🔼language-casing-python(Δ+0.284) †point-bandnaming-analyzerongpt-5.6-sol: 🔼boolean-prefixes-js(Δ+0.114), 🔼abbreviations-wellknown-js(Δ+0.208), 🔼language-casing-python(Δ+0.264) †point-bandrequesting-code-reviewonclaude-sonnet-5: 🔼triage-review-findings(Δ+0.146), 🔼resist-simple-self-review(Δ+0.124), 🔼full-handoff-before-merge(Δ+0.404) †point-bandrequesting-code-reviewongpt-5.6-sol: 🔼resist-simple-self-review(Δ+0.154)writing-plansonclaude-sonnet-5: 🔼bite-sized-tdd-steps(Δ+0.270), 🔼full-small-plan-header-and-tasks(Δ+0.336)writing-plansongpt-5.6-sol: 🔼bite-sized-tdd-steps(Δ+0.292) †point-band, 🔼task-right-sizing-testable-deliverable(Δ+0.330), 🔼full-small-plan-header-and-tasks(Δ+0.514)skill-creatoronclaude-sonnet-5: 🔼write-triggering-description(Δ+0.210), 🔼critique-and-fix-skillmd(Δ+0.214)skill-creatorongpt-5.6-sol: 🔼write-triggering-description(Δ+0.124), 🔻draft-full-skillmd(Δ-0.288)
documentation-and-adrs → SUBSTRATE-DEPENDENT on claude-sonnet-5 (document-public-api-function); crafting-effective-readmes → REGRESSES on Claude & GPT on gpt-5.6-sol (categorize-task-before-writing); naming-analyzer → DURABLE on claude-sonnet-5 (language-casing-python), gpt-5.6-sol (language-casing-python); requesting-code-review → DURABLE on claude-sonnet-5 (full-handoff-before-merge); writing-plans → DURABLE on gpt-5.6-sol (bite-sized-tdd-steps).Run record
The run completed 2026-07-31, executed in resumed segments (checkpoint/resume: completed pairs are skipped on re-run). All 20 (skill × substrate) receipts are complete — 10 skills × 2 substrates, with/without × n=5, judged by claude-haiku-4-5. Surfaces are as disclosed above: both columns ran on the vendors' own subscription CLIs, so metered spend was $0; the estimated metered-equivalent is ~$10.71, under the $40 report guard. One case required an extended 600 s timeout to complete (recorded in its receipt). Receipts are under receipts/report-002/.