Build artifact · correction + extension · three-experiment arc

Skills 2.0 — falsified, partially fixed, then fixed

Issue BW-2026-006
Type 04 · build artifact (correction)
Published 2026-05-29
Supersedes BW-2026-005
Data 1,080 traces · 720 ratings · κ=1.000

TL;DR

Three weeks ago BW-2026-005 said Skills 2.0 lifts median trust score across five skills from 0.25 to 0.53, and to 1.00 on the fully-implemented growth-accounting. The numbers were real. The interpretation was wrong.

This issue corrects the record. We ran a controlled three-arm experiment (EXP-008), the original Skills 2.0 runtime lost, we identified the mechanism, fixed it twice, and the third version won the original hypothesis. Everything below is pre-registered SHA-locked and blind-judged with κ_self-consistency = 1.000 across three experiments.

The headline is not "Skills 2.0 works." The headline is three experiments, three different verdicts, and a v1.0 product specification that falls out of the data.

The three-row table.

One table, the entire story. Anyone who reads only this paragraph gets the truth.

Experiment A3 mechanism A3 mean FF vs A2 (checklist) Gates passed
EXP-008 v0.5 — telemetry-only runtime 2.83 −0.43 (lost) 1 of 6
EXP-009 v0.6 — mandatory @step narration 3.06 −0.20 2 of 4
EXP-010 v0.7 — runtime narration + LLM case elaboration 3.83 +0.57 (won) 5 of 6

Procedural compliance, same arc: v0.5 = 3% → v0.6 = 100% → v0.7 = 98%. Cumulative framework-fidelity lift v0.5 → v0.7: +1.00 points on the 0–4 scale (35% improvement). The v0.7 win is the first time the contract-runtime arm beats the prompt-checklist arm on framework fidelity in the entire program.

Skills 2.0 v1.0 product specification: transformer + runtime + elaborator. Three modules, each empirically load-bearing. Remove any one and the lift disappears.


The correction.

BW-2026-005 reported 0.25 → 0.53 trust-score lifts using a self-built 3-axis metric (FIDELITY × COVERAGE × ANCHORING) on cases I had written and tuned the runtime against. EXP-008 redid the work properly: three arms (prose alone, prose + step checklist, full skills2 runtime), 120 prompts authored by a separate LLM session that never saw the runtime, 40 cases per skill across three skills, blind LLM judge using a rubric also authored by an independent session, two-pass self-consistency check.

The headline number from BW-2026-005 does not survive that protocol. Under blind judging:

SkillA1 mean FFA2 mean FFA3 v0.5 mean FF
growth-accounting (fully implemented)3.233.262.83
psych-framework (transformer stubs)2.004.004.00
abw-design (transformer stubs)3.973.892.63

A3 lost the comparison that mattered (A3 vs A2, the strong baseline) on two of three skills, by 0.43 and 1.26 points respectively. Five of six pre-registered gates failed. The pre-registered falsifier — "A3 ≤ A2 OR Δ < 0.20 across all three skills" — fired on the first clause.

The 0.53 number BW-2026-005 reported was the trust-score metric I had built into the audit. It rewarded structural compliance (steps fired, schema validated) without checking whether the response text reflected the framework. The blind judge — reading the response_text the user would see — disagreed.

I shipped BW-2026-005 too soon. EXP-008 is the experiment that should have run before that case-file went out.

What broke.

The skills2 v0.5 runtime fires Python @step functions in order, with Pydantic I/O validation and invariant enforcement, and records everything in steps.jsonl. EXP-008's judge transcripts said the same thing across every A3 cell:

Mechanically executes the framework. Correctly halts on broken data. Procedural compliance: 1 of 35 cases. The runtime is firing — telemetry shows 347 of 350 step calls succeeded — but the procedure isn't in the response.

The contract was enforced. The user couldn't see it. The judge — modeling the user — couldn't see it. The trust-score metric could see the telemetry. The user can't. A skill that does the right thing in the audit and the wrong thing in the response is exactly the output-passing behavioral regression pattern Paper 1 names. Skills 2.0 v0.5 was a behavioral regression of itself.


Three stages, three verdicts.

EXP-008 · v0.5 telemetry only · pre-reg af019866…30b6f92

Falsified.

Three skills, 120 cases, 360 traces, 720 blind judge ratings. A3 lost to A2 by 1 median point on framework fidelity. Procedural compliance 3% — the runtime fires, the prose doesn't reflect it. Five of six pre-registered gates failed. The pre-registered falsifier triggered. Full INTERPRETATION.

EXP-009 · v0.6 mandatory narration · pre-reg d8e4738e…c0c44d

Procedural compliance fixed; framework fidelity still below baseline.

v0.6 fix: @step decorator now accepts (output, narration). Runtime accumulates narrations and exposes render_narrations(). The procedure surfaces in prose alongside the typed output.

Procedural compliance: 3% → 100%. Largest single mechanism improvement in the program. Mean framework fidelity: 2.83 → 3.06 (+0.23). Still 0.20 below A2 (3.26). Judge transcripts named the next ceiling:

Per-flow diagnosis is always a generic template — "Retention is the foundation. Shift focus to growth loops" — regardless of the actual case scenario. No case-specific matched remedy. No resurrection-as-vanity warning. No Contraction-as-leading-indicator callout.

The hard-coded prescriptions in step bodies are generic by construction. Two of four gates pass. Full INTERPRETATION.

EXP-010 · v0.7 hybrid (runtime + LLM case elaboration) · same pre-reg as EXP-009

Won the original claim.

v0.7 keeps the runtime structural enforcement intact. After all steps fire, the LLM takes the rendered narration plus the user's case and elaborates the per-flow prescription with case-specific tactical advice. The runtime narration is the structural skeleton; the LLM adds case-conditional texture.

Mean framework fidelity: 3.06 → 3.83 (+0.77). Median: 3 → 4. A3 beats A2 by +0.57 mean / +1.0 median framework-fidelity points. First experiment in the program where the contract-runtime arm beats the prompt-checklist arm. Five of six gates pass. Full INTERPRETATION.

The elaboration is case-conditional, not blanket:

  • Resurrection-as-vanity warning fired on 12% of cases — only when Resurrected ≥ 1.5× New.
  • Big New + thin Retained → fix activation fired on 52% — only when Churned ≥ 60% of New and resurrection wasn't dominant.
  • Contraction as leading indicator fired on 9% — only when contraction was actually growing in the case data.
  • Aggregate MAU masking motivation fired on 100% of normal cases.
  • 1.5 quick-ratio threshold cited on 100% of normal cases.

The elaborator surfaces signals the data warrants. The judge rewarded that with 33 of 40 score 4s (vs. v0.6's 7 of 40 score 4s).


The skills2 v1.0 spec falls out.

The original Skills 2.0 thesis — runtime contracts > prompts — was half-right and half-wrong.

Half-right: runtime contracts deliver something prompts cannot. They enforce step order, validate I/O via Pydantic, and write telemetry that makes a session auditable. EXP-009 proved 100% procedural compliance versus 83% for the best prompt baseline.

Half-wrong: runtime contracts alone do not lift the quality of the response prose. They can't, because the prose has to adapt to the case and the runtime's hard-coded prescriptions can't. EXP-008 falsified "runtime contracts beat prompts on framework fidelity" as written.

v0.7 splits the job. The runtime owns structural compliance. The elaborator owns case-specific reasoning. Together they win.

Skills 2.0 v1.0 ships with three modules, each empirically load-bearing:

  1. Transformer — produces skill.toml + step inventory + Pydantic schemas from a v1 SKILL.md. Already valuable; powers the A2 prompt baseline.
  2. Runtime@step decorator with mandatory narration, telemetry, invariants. Proven by EXP-009: 100% procedural compliance.
  3. Elaborator — post-runtime case-specific reasoning that ties the runtime's structural narration to the user's specific data using the rubric's signal list. Proven by EXP-010: +0.57 framework fidelity mean over the strongest prompt baseline.

Removing any one of the three loses the lift. Runtime without narration = EXP-008. Runtime with narration but no elaborator = EXP-009. All three = EXP-010.


What this issue does not claim

(1) Generalization beyond growth-accounting. The v0.7 elaborator is packaged with a reference implementation for one skill; psych-framework and abw-design ship skeleton elaborators that need per-skill author extension before they hit the same lift. (2) Human-rater agreement. Judges are LLM (Sonnet 4.6 subagents). Self-consistency κ = 1.000 across all three experiments — the rubric is internally reliable. Human-LLM agreement on this rubric has not been measured. A small human anchor pass on a stratified sample is deferred to EXP-011. (3) Model independence. The elaboration uses the same model that judges. A different elaborator model could shift the gap. EXP-012 candidate. (4) Cost neutrality. The hybrid adds one LLM call per skill run on top of the runtime. Latency + token cost rise. Quantification not yet captured. (5) The original BW-2026-005 "0.25 → 0.53 across 5 skills" finding. It does not survive blind judging. We deprecate the 0.53 number.

What ships

Sources and pairings

  1. BW-2026-005 — the superseded issue. This issue corrects it. The original remains live for the historical record.
  2. Paper 1Output-Passing Behavioral Regressions. Skills 2.0 v0.5 turned out to be an instance of the failure mode Paper 1 names.
  3. Paper 3Mined Contracts via Process Mining. Produces the behavior-spec.yaml artifacts the runtime executes.
  4. Paper 3.5 (in progress) — Decomposing Skill-Runtime Lifts: How Structural Compliance and Case-Specific Elaboration Combine to Beat Prompt-Engineered Baselines. Academic writeup of the three-experiment arc.
  5. Anthropic (2025). Equipping agents with Agent Skills. anthropic.com/engineering. The v1 spec this work extends.
  6. cto-strategy vault-contract pattern (private repository). The three-tier enforcement scaffolding the runtime layer is built on.

Back to Behavior Watch