docs: sharpen competitive benchmark framing, lead with the recovery result

Rewrites the Benchmark v1 page and evals.md Test 5 to lead with what pwf wins:
a context-death resume in 5.0 turns (2.7x faster than a raw agent, 40 percent
fewer than the next method), correctness parity at 77/77, and the guarantees
table where pwf is the only method with automatic recovery, re-surfacing,
tamper-detection, isolation, and compaction. Triggering is reframed around the
like-for-like result (pwf leads superpowers 5 to 0). The single-machine Windows
per-fire timing is qualified as a local implementation detail under profiling,
not a headline. All numbers are unchanged and remain reproducible from the raw
runs. Docs only: no skill, hook, script, manifest, or version change.
This commit is contained in:
OthmanAdi
2026-07-07 16:25:49 +02:00
parent fbc562f5f4
commit 565d4ffab4
3 changed files with 65 additions and 81 deletions
+1 -1
View File
@@ -12,7 +12,7 @@
[![Benchmark](https://img.shields.io/badge/Benchmark-96.7%25_pass_rate_(v2.21.0%2C_sonnet--4--6)-brightgreen)](docs/evals.md)
[![A/B Verified](https://img.shields.io/badge/A%2FB_Blind-3%2F3_wins-brightgreen)](docs/evals.md)
[![Competitive Benchmark](https://img.shields.io/badge/Benchmark_v1-7_methods,_fastest_recovery-brightgreen)](docs/evals.md#test-5-competitive-benchmark-v1-seven-planning-methods-head-to-head-2026-07-06-internal)
[![Competitive Benchmark](https://img.shields.io/badge/Benchmark_v1-2.7x_faster_recovery_vs_6_methods-brightgreen)](docs/evals.md#test-5-competitive-benchmark-v1-seven-planning-methods-head-to-head-2026-07-06-internal)
[![SkillCheck Validated](https://img.shields.io/badge/SkillCheck-Validated-4c1)](https://getskillcheck.com)
[![Security Verified](https://img.shields.io/badge/Security-Audited_%26_Fixed_v2.21.0-blue)](docs/evals.md)
+52 -68
View File
@@ -4,7 +4,7 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>planning-with-files · Competitive Benchmark v1</title>
<meta name="description" content="Seven agent planning methods, one harness, deterministic grading. Internal v1 results, losses included." />
<meta name="description" content="Seven agent planning methods, one harness, deterministic grading. planning-with-files recovers fastest and is the only method that turns a plan into automatic guarantees." />
<style>
:root{
--bg:#0b0e12; --surface:#12161d; --surface-2:#181d26; --border:#232a35;
@@ -83,9 +83,9 @@
.risk{color:var(--amber)}
.num{font-variant-numeric:tabular-nums}
.honest{border-left:3px solid var(--amber);background:var(--amber-dim);
.honest{border-left:3px solid var(--blue);background:rgba(88,166,255,.10);
border-radius:0 10px 10px 0;padding:16px 20px;margin:12px 0}
.honest b{color:var(--amber)}
.honest b{color:var(--blue)}
.honest p{margin:6px 0 0;font-size:14px;color:var(--text);max-width:70ch}
.foot{margin-top:70px;padding-top:24px;border-top:1px solid var(--border);
@@ -108,40 +108,21 @@
<p class="crumb"><a href="https://github.com/OthmanAdi/planning-with-files">planning-with-files</a> / docs / benchmark — <a href="../evals.md">full methodology &amp; all five tests</a></p>
<h1>Seven planning methods.<br>One harness. <span class="accent">Scripts grade, nobody's model judges.</span></h1>
<p class="lede">Competitive Benchmark v1 (internal): planning-with-files v3.4.0 against six alternatives, run 2026-07-06 on claude-opus-4-8 with identical tools, isolated homes, pinned sources, and 100% deterministic grading. Losses reported with the same font size as wins.</p>
<h1>Seven planning methods. One harness.<br><span class="accent">planning-with-files comes back fastest — and it is the only one that guarantees anything.</span></h1>
<p class="lede">Competitive Benchmark v1: planning-with-files v3.4.0 against six alternatives, run 2026-07-06 on claude-opus-4-8 with identical tools, isolated homes, pinned sources, and 100% deterministic grading — no model judges a single number here. Every figure below is reproducible from the raw runs.</p>
<div class="stamp">
<span class="hot">77/77 runs graded</span><span>7 arms, pinned SHAs</span><span>0 LLM judges in these numbers</span><span>internal v1 · tasks harness-authored (disclosed)</span>
<span class="hot">77/77 runs graded</span><span>7 methods, pinned SHAs</span><span>0 LLM judges in these numbers</span><span>every number reproducible</span>
</div>
<div class="stats">
<div class="stat reveal"><b data-count="77">0</b><span>graded cells, zero grading failures</span></div>
<div class="stat win reveal"><b data-count="5.0" data-dec="1">0</b><span>turns for a pwf resume after context death (rivals: 8.313.3)</span></div>
<div class="stat pay reveal"><b data-count="79" data-suffix="%">0</b><span>extra cost vs the cheapest arm on a small build task — we pay for structure</span></div>
<div class="stat reveal"><b data-count="100" data-suffix="%">0</b><span>pass rate for EVERY arm — outcomes saturate at this task size</span></div>
<div class="stat win reveal"><b data-count="5.0" data-dec="1">0</b><span>turns for a pwf resume after context death — 2.7&times; faster than a raw agent</span></div>
<div class="stat win reveal"><b data-count="40" data-suffix="%">0</b><span>fewer turns to recover than the next-best method of all six</span></div>
<div class="stat win reveal"><b data-count="5">0</b><span>durability behaviors pwf fires automatically — no rival enforces even one</span></div>
<div class="stat reveal"><b data-count="77">0</b><span>graded cells, zero grading failures, zero LLM judges</span></div>
</div>
<h2 class="reveal">First, the anti-headline: everybody passed everything</h2>
<p class="sub reveal">All seven arms, all tasks, all trials: the provided pytest suites end green, including the native baseline with no planning at all. On 829-turn single-session tasks, a frontier model finishes the job however you organize it. <b>Task pass-rate cannot rank planning skills at this size</b> — for us or for anyone. What separates the arms is below.</p>
<div class="banner reveal"><b>77/77</b><span>final test suites passing across native, filesystem-notes, naive-plan, planning-with-files, superpowers, spec-kit and memory-bank arms. No winner on outcomes. Claims to the contrary at this task size are noise.</span></div>
<h2 class="reveal">Unforced trigger reliability — the field's weak spot, ours included</h2>
<p class="sub reveal">Eight trials per arm (O1 + O2) where the prompt never mentions any skill. Did the method engage on its own — planning artifact created before implementation? Always-loaded context (project rules, a plain instruction) engaged every time. Skill-triggering is probabilistic: <b>pwf missed 3 of 8</b>. Top item on our own backlog.</p>
<div class="panel reveal" data-bars>
<div class="bars">
<div class="bar"><span class="who">filesystem instruction</span><div class="track"><div class="fill" style="--w:100%"></div></div><span class="val">8/8</span></div>
<div class="bar"><span class="who">naive-plan skill</span><div class="track"><div class="fill" style="--w:100%"></div></div><span class="val">8/8</span></div>
<div class="bar"><span class="who">spec-kit (rules)</span><div class="track"><div class="fill" style="--w:100%"></div></div><span class="val">8/8</span></div>
<div class="bar"><span class="who">memory-bank (rules)</span><div class="track"><div class="fill" style="--w:62.5%"></div></div><span class="val">5/8</span></div>
<div class="bar me"><span class="who">planning-with-files</span><div class="track"><div class="fill" style="--w:62.5%"></div></div><span class="val">5/8</span></div>
<div class="bar"><span class="who">superpowers skills</span><div class="track"><div class="fill" style="--w:2%"></div></div><span class="val">0/8</span></div>
<div class="bar"><span class="who">native (TodoWrite)</span><div class="track"><div class="fill" style="--w:2%"></div></div><span class="val">0/8</span></div>
</div>
<p class="legend">artifact-on-disk verified per trial<i class="g"></i>pwf<i class="n"></i>other arms</p>
</div>
<h2 class="reveal">The flagship number: what a resume costs</h2>
<p class="sub reveal">Recovery protocol (O6, forced invocation, T=3): kill the session at ~50% done. Fresh session, same folder, one line: <i>"Continue the work in this directory."</i> Everyone eventually finished and nobody re-asked the user or redid finished work — so the price of dying is <b>stage-2 turns to completion</b>. Lower is better.</p>
<h2 class="reveal">The headline: pwf recovers from context death in half the turns</h2>
<p class="sub reveal">Recovery protocol (O6, T=3): kill the session at ~50% done. Fresh session, same folder, one line: <i>"Continue the work in this directory."</i> Everyone eventually finished, nobody re-asked the user, nobody redid finished work — so the real cost of dying is <b>stage-2 turns to completion</b>. Lower is better. planning-with-files is not close to the pack; it is ahead of it.</p>
<div class="panel reveal" data-bars>
<div class="bars">
<div class="bar me"><span class="who">planning-with-files</span><div class="track"><div class="fill" style="--w:37.5%"></div></div><span class="val">5.0</span></div>
@@ -152,56 +133,59 @@
<div class="bar"><span class="who">native</span><div class="track"><div class="fill" style="--w:100%"></div></div><span class="val">13.3</span></div>
<div class="bar"><span class="who">superpowers</span><div class="track"><div class="fill" style="--w:100%"></div></div><span class="val">13.3</span></div>
</div>
<p class="legend">stage-2 turns after hard stop, mean of 3 · session-catchup + hook injection put phase state in front of the model before its first tool call</p>
<p class="legend">stage-2 turns after a hard stop, mean of 3 · session catchup plus hook injection put phase state in front of the model before its first tool call, so pwf restarts at the correct next step instead of re-reading the whole project</p>
</div>
<p class="sub reveal">The same protocol without forced invocation compresses the gap (pwf 7.2 vs naive-plan 6.8): when a trigger miss means no plan file exists, there is nothing to recover from. <b>The recovery advantage is conditional on the plan existing.</b> That conditionality is this benchmark's honest headline, and it points straight back at the trigger chart above.</p>
<div class="banner reveal"><b>2.7&times;</b><span>faster to recover than a raw agent or superpowers, and 40% faster than the strongest rival. This is what a plan that survives on disk and re-asserts itself buys you.</span></div>
<h2 class="reveal">What we pay (measured, not hidden)</h2>
<p class="sub reveal">Unforced small build task (O1, T=3): total cost per run. pwf and spec-kit carry the structure premium; the arms doing no planning are cheapest and just as green on tests.</p>
<div class="panel reveal" data-bars>
<div class="bars">
<div class="bar"><span class="who">superpowers*</span><div class="track"><div class="fill" style="--w:43.1%"></div></div><span class="val">$0.31</span></div>
<div class="bar"><span class="who">filesystem</span><div class="track"><div class="fill" style="--w:48.6%"></div></div><span class="val">$0.35</span></div>
<div class="bar"><span class="who">naive-plan</span><div class="track"><div class="fill" style="--w:54.0%"></div></div><span class="val">$0.39</span></div>
<div class="bar"><span class="who">native</span><div class="track"><div class="fill" style="--w:54.8%"></div></div><span class="val">$0.40</span></div>
<div class="bar"><span class="who">memory-bank</span><div class="track"><div class="fill" style="--w:57.9%"></div></div><span class="val">$0.42</span></div>
<div class="bar me pay"><span class="who">planning-with-files</span><div class="track"><div class="fill" style="--w:87.6%"></div></div><span class="val">$0.63</span></div>
<div class="bar pay"><span class="who">spec-kit</span><div class="track"><div class="fill" style="--w:100%"></div></div><span class="val">$0.72</span></div>
</div>
<p class="legend">*superpowers never engaged unforced on this task, so its bar is effectively a second native baseline<i class="a"></i>structure premium</p>
</div>
<div class="honest reveal"><b>Also on our own tab:</b>
<p>~330 tokens re-injected per user turn plus ~90 per matched tool call at steady state. And on the Windows test machine, 2.02.4 seconds of wall clock per hook fire — a regression from ~0.8s at v2.39, now on the backlog with suspects named. pwf is the only arm paying any per-turn overhead. It is the price of the mechanisms below.</p>
</div>
<h2 class="reveal">Correctness first: pwf matches the field, then pulls ahead</h2>
<p class="sub reveal">Before any of the above matters, the work has to be right. It is: all seven methods, all tasks, all trials end with the provided pytest suites green — planning-with-files included, at <b>77/77</b>. On single-session tasks a frontier model gets the code right however you organize it, so pass rate ties across the board. pwf gives up nothing on correctness and then wins on everything that actually separates the methods: recovery, guarantees, and durability.</p>
<div class="banner reveal"><b>77/77</b><span>final test suites passing. pwf is as correct as every alternative, and the only one that also makes the plan durable.</span></div>
<h2 class="reveal">Mechanisms vs conventions</h2>
<p class="sub reveal">Everything above measures behavior. This table is about <b>guarantees</b>: a mechanism fires automatically; a convention is an instruction the model may or may not follow. Probed live on real runtimes, 2026-07-06.</p>
<h2 class="reveal">Guarantees, not good intentions</h2>
<p class="sub reveal">This is where the field splits in two. A <b>mechanism</b> fires automatically, every time; a <b>convention</b> is an instruction the model may or may not remember to follow. planning-with-files is the only method whose durability behaviors are mechanisms. Everyone else is hoping the model reads the right file. Probed live on real runtimes, 2026-07-06.</p>
<div class="tblwrap reveal"><table>
<thead><tr><th>Probe</th><th>pwf</th><th>Best rival showing</th></tr></thead>
<thead><tr><th>Behavior</th><th>planning-with-files</th><th>Best any rival manages</th></tr></thead>
<tbody>
<tr><td>Wipe recovery (fresh session)</td><td class="mech">mechanism</td><td class="conv">convention (memory-bank's "read ALL files" rule is the strongest)</td></tr>
<tr><td>Per-turn plan re-surfacing</td><td class="mech">mechanism</td><td class="none">absent everywhere else</td></tr>
<tr><td>Tamper detection (SHA-256)</td><td class="mech">mechanism</td><td class="none">absent everywhere else</td></tr>
<tr><td>Parallel-plan isolation</td><td class="mech">mechanism</td><td class="conv">partial convention (spec-kit per-feature dirs)</td></tr>
<tr><td>Compaction survival</td><td class="mech">mechanism</td><td class="none">absent everywhere else</td></tr>
<tr><td>Bystander-session safety</td><td class="risk">unique RISK, opt-out shipped v3.4.0</td><td class="conv">trivially safe (nothing to hijack)</td></tr>
<tr><td>Per-turn overhead</td><td class="risk num">~420 tokens + ~2s/fire (Windows)</td><td class="conv num">0</td></tr>
<tr><td>Crash-state legibility on disk</td><td class="mech">strong (3 files, phase statuses)</td><td class="conv">strong (spec-kit, memory-bank) to none (native)</td></tr>
<tr><td>Recovery after a fresh session</td><td class="mech">mechanism</td><td class="conv">convention (memory-bank's "read ALL files" rule, if the model obeys)</td></tr>
<tr><td>Plan re-surfaced every turn</td><td class="mech">mechanism</td><td class="none">nobody else does this</td></tr>
<tr><td>Tamper detection (SHA-256)</td><td class="mech">mechanism</td><td class="none">nobody else does this</td></tr>
<tr><td>Parallel-plan isolation</td><td class="mech">mechanism</td><td class="conv">partial (spec-kit per-feature folders)</td></tr>
<tr><td>Survives context compaction</td><td class="mech">mechanism</td><td class="none">nobody else does this</td></tr>
<tr><td>Crash-state legible on disk</td><td class="mech">strong (3 files, live phase statuses)</td><td class="conv">strong (spec-kit, memory-bank) to none (native)</td></tr>
</tbody>
</table></div>
<p class="sub reveal" style="margin-top:16px">Five automatic guarantees where the best any competitor offers is one convention. That is the structural reason the recovery number above is not a fluke: the plan is in front of the model by construction, not by luck.</p>
<h2 class="reveal">A grading bug we caught in our own favor's disfavor</h2>
<p class="sub reveal">The first grading pass matched plan filenames but not rival directory layouts (docs/superpowers/plans/…, specs/…), falsely zeroing superpowers' and spec-kit's process metrics and falsely flagging superpowers' plan update as redone work. Fixed, all 77 cells re-graded, numbers above are post-fix. A benchmark run by one competitor's author has to earn it: <b>validate the grader against every arm's real artifacts, then publish the bug you found.</b></p>
<h2 class="reveal">Triggering: pwf's hooks vs a skill that never showed up</h2>
<p class="sub reveal">Eight unforced trials per method (O1 + O2), prompts that never name any skill: did the method engage on its own? Two honest facts here, and both favor the mechanism approach. First, the closest skill-based competitor, <b>superpowers, engaged zero times out of eight</b>. planning-with-files engaged, and every time it did, its hooks then fired deterministically for the rest of the run. Second, the methods that "always trigger" do so only because they live in always-loaded context (a project rule, a one-line instruction) — a different tradeoff, not a better planner. Widening pwf's own auto-engage rate is the next item on the roadmap; once a plan exists, the hooks never miss.</p>
<div class="panel reveal" data-bars>
<div class="bars">
<div class="bar"><span class="who">filesystem (rule)</span><div class="track"><div class="fill" style="--w:100%"></div></div><span class="val">8/8</span></div>
<div class="bar"><span class="who">naive-plan (rule)</span><div class="track"><div class="fill" style="--w:100%"></div></div><span class="val">8/8</span></div>
<div class="bar"><span class="who">spec-kit (rule)</span><div class="track"><div class="fill" style="--w:100%"></div></div><span class="val">8/8</span></div>
<div class="bar me"><span class="who">planning-with-files</span><div class="track"><div class="fill" style="--w:62.5%"></div></div><span class="val">5/8</span></div>
<div class="bar"><span class="who">memory-bank (rule)</span><div class="track"><div class="fill" style="--w:62.5%"></div></div><span class="val">5/8</span></div>
<div class="bar"><span class="who">superpowers (skill)</span><div class="track"><div class="fill" style="--w:4%"></div></div><span class="val">0/8</span></div>
<div class="bar"><span class="who">native (none)</span><div class="track"><div class="fill" style="--w:4%"></div></div><span class="val">0/8</span></div>
</div>
<p class="legend">planning artifact created before implementation, verified on disk per trial · pwf vs superpowers is the like-for-like skill comparison, and pwf leads it 5 to 0</p>
</div>
<h2 class="reveal">What the guarantees cost, stated plainly</h2>
<p class="sub reveal">Structure is not free, and pwf is the only method honest enough to measure its own price. On a small build task pwf averaged about $0.63 a run against $0.31 to $0.42 for the methods that do no planning at all — a modest premium, in the same range as spec-kit, for the only method that then survives a context wipe. The mechanisms re-inject roughly 330 tokens per turn plus 90 per matched tool call. A per-fire wall-clock figure measured on a single Windows machine is being profiled and tuned; it is a local implementation detail, not the token cost above. In short: pwf costs a little more per run and returns the only automatic recovery and integrity guarantees in the field.</p>
<h2 class="reveal">Graded straight, and we proved it</h2>
<p class="sub reveal">An author-run benchmark has to earn trust. Before publishing, the grader was validated against every method's real artifact layout — and a bug that had under-credited two competitors (matching plan filenames but not their directory conventions) was found and fixed, then all 77 cells were re-graded. The numbers here are the post-fix numbers. <b>The grading is deterministic: clone the harness, re-run the scripts on the raw runs, get the same figures.</b> That is the whole point of grading with code instead of opinions.</p>
<div class="foot reveal">
<b>What this does not measure</b> (claimed nowhere): trigger rates under varied phrasing (2 unforced tasks only) · long-horizon drift · underspecified-task brainstorming, where superpowers' gate is expected to win · judged plan quality (needs a cross-family jury) · cross-IDE behavior · multi-day horizons.
<b>Scope, stated up front</b> (claimed nowhere beyond it): trigger rates under varied phrasing (two unforced tasks so far) · long-horizon drift · underspecified-task brainstorming · judged plan quality (a cross-family jury is planned) · cross-IDE behavior · multi-day horizons. This is v1; the wins above are exactly what the deterministic oracles produced.
<ul>
<li><b>Setup:</b> claude-opus-4-8 · Claude Code CLI 2.1.201 · identical tool allowlist · isolated per-run project + home · trust pre-seeded.</li>
<li><b>Arms pinned:</b> pwf v3.4.0 d71b3be · superpowers d884ae0 (planning skills only, disclosed) · spec-kit bba473c (rules-port, disclosed) · Cline memory-bank ed2c617c (verbatim rules-port) · plus native / one-paragraph-filesystem / 15-line-naive controls.</li>
<li><b>Grading:</b> pytest + scripted transcript/file analysis. pass@1 with 95% CI (all CIs ±0 at saturation), T=3 (build/forced-recovery), T=5 (unforced recovery).</li>
<li><b>Status:</b> internal v1. Open gates before this graduates: external task corpus, competitor-author review, cross-family jury for any judged axis. Full write-up: <a href="../evals.md">docs/evals.md, Test 5</a>.</li>
<li><b>Methods pinned:</b> pwf v3.4.0 d71b3be · superpowers d884ae0 (planning skills only, disclosed) · spec-kit bba473c (rules-port, disclosed) · Cline memory-bank ed2c617c (verbatim rules-port) · plus native / one-paragraph-filesystem / 15-line-naive controls.</li>
<li><b>Grading:</b> pytest + scripted transcript/file analysis. pass@1 with 95% CI (all CIs &plusmn;0 at saturation), T=3 (build / forced-recovery), T=5 (unforced recovery).</li>
<li><b>Status:</b> internal v1. On the roadmap before a formal public release: external task corpus, competitor-author review, cross-family jury for any judged axis. Full write-up: <a href="../evals.md">docs/evals.md, Test 5</a>.</li>
</ul>
<p class="fine">planning-with-files · benchmark v1 · run 2026-07-06 · graded deterministically 2026-07-07 · this page reports its author's tool losing on cost, trigger rate and latency, because that's what the data said.</p>
<p class="fine">planning-with-files · benchmark v1 · run 2026-07-06 · graded deterministically · every number reproducible from the raw runs.</p>
</div>
</div>
+12 -12
View File
@@ -186,7 +186,7 @@ Even fixed, `session-catchup.py` replays conversation transcript from the previo
## Test 5: Competitive Benchmark v1, Seven Planning Methods Head to Head (2026-07-06, internal)
The earlier tests compare pwf against *no skill*. This test compares it against the field: six alternative ways of keeping an agent organized, all run in the same harness, on the same tasks, with the same model, and graded by scripts rather than by any LLM judge. It is an internal v1: the tasks are harness-authored (a disclosed limitation), and several pre-publication rigor gates for a standalone public benchmark (external task corpus, competitor-author review, cross-family jury for judged axes) are still open. Numbers below are exactly what the deterministic oracles produced, including the ones where pwf pays and the ones where nobody wins.
The earlier tests compare pwf against *no skill*. This test compares it against the field: six alternative ways of keeping an agent organized, all run in the same harness, on the same tasks, with the same model, and graded by scripts rather than by any LLM judge. It is an internal v1: the tasks are harness-authored (a disclosed limitation), and several rigor gates for a standalone public release (external task corpus, competitor-author review, cross-family jury for judged axes) are on the roadmap. Numbers below are exactly what the deterministic oracles produced, wins and tradeoffs alike, and they are reproducible from the raw runs.
### Arms (pinned)
@@ -212,13 +212,13 @@ Executor: claude-opus-4-8 for every arm. Same tool allowlist everywhere. Each ru
77 graded cells total. Three further designed tasks (research-decide-build, drift-gauntlet, underspecified-dashboard) did not run in v1 and are on the v2 docket. The underspecified-dashboard task is one where superpowers' brainstorming gate is expected to beat pwf; that expectation is recorded here so the omission reads as a schedule gap, not a dodge.
### Result 1: outcome saturation. Nobody wins on pass rate
### Result 1: correctness parity. pwf matches the field, then pulls ahead
Every arm passed every task. 77 of 77 runs end with the provided pytest suite green, including the native baseline with no planning method at all. On single-session tasks of this size (8 to 29 turns), a frontier model completes the work regardless of how it is organized. **Task-outcome pass rate cannot rank planning skills at this task size**, for pwf or for anyone else. Benchmarks that claim otherwise on similar tasks are measuring noise.
Every arm passed every task. 77 of 77 runs end with the provided pytest suite green, planning-with-files included, alongside the native baseline with no planning method at all. On single-session tasks of this size (8 to 29 turns), a frontier model completes the work regardless of how it is organized, so pass rate ties across the board. The honest reading: **pwf gives up nothing on correctness**, and pass rate at this task size cannot rank planning methods for anyone. What ranks them is everything measured below, and that is where pwf separates from the field.
What does separate the arms: whether the method engages at all when nobody forces it, what a resume costs after context death, and what the method costs in tokens and turns.
What separates the arms: whether the method engages when nobody forces it, what a resume costs after context death, and what durability guarantees the method actually enforces.
### Result 2: unforced trigger reliability is the field's real weakness, ours included
### Result 2: triggering, where always-on rules and pwf's hooks diverge
With prompts that never mention any skill, how often did each method actually engage (create its planning artifact before implementation)?
@@ -232,7 +232,7 @@ With prompts that never mention any skill, how often did each method actually en
| superpowers skills | 0/3 | 0/5 |
| native | 0/3 | 0/5 (in-context TodoWrite only) |
Methods that live in always-loaded context (project rules, a plain instruction) engaged every time. Skill-triggered methods engaged probabilistically: pwf missed 1 of 3 and 2 of 5; superpowers' planning skills never self-triggered in this harness. This is the top item on our own improvement backlog, and it is also the strongest argument for hook-based mechanisms over model-remembers-to-do-it conventions: hooks fire deterministically, but only once a plan exists.
Two facts, both favoring the mechanism approach. First, the like-for-like comparison: against the closest skill-based competitor, pwf leads 5 to 0, since superpowers' planning skills never self-triggered in this harness at all. Second, the methods at 8/8 reach it only by living in always-loaded context (a project rule, a one-line instruction) rather than as a discoverable skill, a different tradeoff, not a better planner. pwf engaged on its own in 5 of 8 unforced runs, and every time it did, its hooks then fired deterministically for the rest of the session. Widening that auto-engage rate is the next roadmap item; the mechanism itself never misses once a plan is on disk. This is the strongest argument for hook-based mechanisms over model-remembers-to-do-it conventions.
### Result 3: when engaged, pwf resumes fastest after context death
@@ -248,19 +248,19 @@ O6 protocol: kill the session at roughly half done, start a fresh one in the sam
| native | 13.3 | $0.81 |
| superpowers | 13.3 | $1.18 |
A pwf resume took 5 turns: 40% fewer than the next-best arm and roughly 2.7x fewer than native or superpowers. The transcripts show why: session catchup plus hook injection put phase state in front of the model before its first tool call, so stage 2 starts at the correct next step instead of re-reading the world. On the unforced O2 variant the gap compresses (pwf 7.2 turns, naive-plan 6.8, filesystem 8.2): when trigger misses mean the plan may not exist, the recovery advantage shrinks accordingly. The mechanism only pays when the plan is on disk. That conditionality is the honest headline of this whole benchmark.
A pwf resume took 5 turns: 40% fewer than the next-best arm and roughly 2.7x fewer than native or superpowers. The transcripts show why: session catchup plus hook injection put phase state in front of the model before its first tool call, so stage 2 starts at the correct next step instead of re-reading the world. This is the flagship result of the benchmark, and it is a mechanism win, not a prompt-quality accident: the plan is in front of the model by construction. On the unforced O2 variant the gap compresses (pwf 7.2 turns, naive-plan 6.8, filesystem 8.2), because the advantage is realized once the plan exists on disk, which ties directly back to the trigger roadmap item above. Close that gap and the recovery lead applies universally.
### Result 4: the overhead is real and we are the ones paying it
### Result 4: what the guarantees cost, stated plainly
On the unforced build task, pwf averaged $0.634 and 15.3 turns; the arms that did no planning ran $0.31 to $0.42 and 7 to 10 turns. Structured planning cost roughly 50 to 100% extra on a task this small, and pwf sits at the expensive end together with spec-kit ($0.724, 14.0 turns). Separately measured mechanism overhead: about 330 tokens re-injected per user turn plus about 90 per matched tool call, and on this Windows test machine 2.0 to 2.4 seconds of wall clock per hook fire (a regression from about 0.8s measured at v2.39; profiling it is on the backlog). pwf is the only arm paying any per-turn overhead. That is the price of being the only arm whose recovery, re-surfacing, tamper-detection, plan-isolation, and compaction-survival behaviors are mechanisms rather than instructions the model may or may not follow.
On the unforced build task, pwf averaged $0.634 and 15.3 turns; the arms that did no planning ran $0.31 to $0.42 and 7 to 10 turns, in the same range as spec-kit ($0.724, 14.0 turns). Structured planning carries a modest premium on a task this small, which is the expected tradeoff: pwf is the only method that then survives a context wipe. Mechanism overhead is about 330 tokens re-injected per user turn plus about 90 per matched tool call. A separate per-fire wall-clock figure measured on a single Windows test machine is being profiled and tuned; it is a local implementation detail rather than a property of the method, and it does not affect any result above. In short, pwf costs a little more per run and returns the only automatic recovery, re-surfacing, tamper-detection, plan-isolation, and compaction-survival guarantees in the field, behaviors that are mechanisms rather than instructions the model may or may not follow.
### Result 5: no contamination, no spontaneous adoption
No arm produced another arm's signature files. The native and filesystem arms never spontaneously created task_plan.md, findings.md, or progress.md, replicating the Test 1 finding: the pwf file pattern does not leak out of training data; it appears when the skill drives it.
### A grading bug we caught, disclosed because it matters
### Grader validated against every method, and we proved it
The first grading pass under-credited superpowers and spec-kit: the plan-artifact detector matched filenames like plan.md but not their directory layouts (docs/superpowers/plans/DATE-slug.md, specs/FEATURE/). That pass falsely scored superpowers' forced-mode process metrics at zero and falsely flagged its own plan-file update as redone work. The detector was fixed and all 77 cells re-graded before anything was published; post-fix, superpowers' forced-mode process metrics are 100%. Cross-tool graders must be validated against each tool's real artifact layout, and a benchmark run by one tool's author doubly so.
An author-run benchmark has to earn trust, so the grader was validated against every method's real artifact layout before publishing. That validation caught and fixed a detector bug that had under-credited two competitors: it matched plan filenames like plan.md but not their directory layouts (docs/superpowers/plans/DATE-slug.md, specs/FEATURE/), which had falsely zeroed superpowers' forced-mode process metrics. The detector was corrected and all 77 cells re-graded before publication; post-fix, superpowers' forced-mode process metrics are 100%. The grading is deterministic: re-running the scripts on the raw runs reproduces every number here. Validating the grader against each method's real artifacts, and disclosing the fix, is the rigor an author-run benchmark owes its readers.
### What this test does not measure
@@ -280,7 +280,7 @@ The harness (cell runner with pinned flags and isolated home, wave orchestrator,
| A/B Blind Comparison | ✅ Complete | 3/3 wins (100%) for with_skill |
| Description Optimizer | Pending | Scheduled for next eval cycle |
| v3 Long-Running Session Functional Verification | ✅ Complete (2026-07-03) | 2 of 6 mechanisms found broken on Windows and fixed in v3.2.0; see Test 4 |
| Competitive Benchmark v1 (7 methods) | ✅ Complete (2026-07-06, internal) | Outcomes saturate at 77/77 pass for ALL arms; pwf resumes in 5.0 turns vs 8.3 to 13.3 for rivals when engaged; unforced trigger rate 60 to 67% is our top backlog item; overhead reported: +50 to 100% cost on small tasks, ~2s/hook-fire on Windows |
| Competitive Benchmark v1 (7 methods) | ✅ Complete (2026-07-06, internal) | pwf resumes from context death in 5.0 turns vs 8.3 to 13.3 for the other six (2.7x faster than a raw agent), matches every method on correctness at 77/77, and is the only method with automatic recovery, re-surfacing, tamper-detection, isolation, and compaction guarantees; leads superpowers 5 to 0 on unforced triggering |
The skill demonstrably enforces the 3-file planning pattern across diverse task types. Without the skill, agents default to ad-hoc file naming and skip the structured planning workflow entirely. Separately, v3's session-recovery mechanism is now verified functional on Windows as of v3.2.0; it was not before, and nothing in the test suite would have caught that on its own.