Driftproof

A worked example of compare

Which section did the work?

Three popular skills, each with its longest stretch of text under one heading removed by a fixed rule, run again on the same tasks. What moved, what did not, and how to try it yourself.

What we did

A skill is a file of instructions that people add to an AI assistant. A long file raises a fair question: which lines do anything? Driftproof's compare command runs two versions of a file on the same tasks and says whether the scores clearly moved between them.

This page is a worked example. We took three skills Driftproof had already measured in Report 018, removed from each the longest stretch of text under one heading by the rule below, and ran compare: the whole file against the file without that text.

Claude Haiku 5.5 answered every task and Claude Haiku 5.5 graded each answer 5 times, the same arrangement as Report 018. For each skill the whole file ran first, then the reduced file. The run was made by Driftproof on 2026-11-08.

How the three were chosen, and what was removed

The skills are the first three, in Report 018's own order, whose result there read “Clearly helped”, that are not routers (a router's whole text hands the task to another skill), and whose file has at least two sections below its title. No skill was chosen by hand.

In each file we measured the text under every heading, from its heading line to the next heading line of any level, so a subsection is measured on its own and does not count toward the heading above it. A heading line starts with one to six # characters and a space. The title at the top and anything inside a code block do not count. The heading with the most bytes of its own text was removed, with that text. Every other byte stayed as it was.

This is not how the --list-sections option measures. It runs each section to the next heading of the same or a higher level, so a heading's subsections count toward its size. On two of the three files above it shows a section called Process as larger than the one removed, because Process holds it. The cards used the any-level measure. Each heading removed has no subsections, so naming it to the --without-section option on the pinned file gives the same reduced file.

What this can and cannot say

Read these before the readings below. They apply to every card.

The three skills

Each card gives the plain reading first, then the exact lines compare prints for the two folders, worked out again from the sealed receipts in today's wording. A reading is about these tasks on this day; it is not advice about the skill.

Three of three pairs completed.

mattpocock/skills

improve-codebase-architecture

With “2. Present candidates as an HTML report” removed, answers on the report task scored lower on average, by more than their usual spread, and there were too few answers to tell on the adr and candidate tasks.

Task by task

  • report: answers scored lower on average without the section, by more than their usual spread
  • adr: too few answers to tell
  • candidate: too few answers to tell

A = whole file, B = file without the section

What compare prints for these two folders

- report: B (improve-codebase-architecture, the folder given second) scored clearly lower than A (improve-codebase-architecture, the folder given first)
- adr: too few answers
Not enough draws to conclude at this effect floor. Draws needed: no draw count at these spreads (case adr: the two arms' spreads sum to 0.332, at or above the 0.05 floor).
- candidate: too few answers
Not enough draws to conclude at this effect floor. Draws needed: no draw count at these spreads (case candidate: the two arms' spreads sum to 0.058, at or above the 0.05 floor).
B (improve-codebase-architecture, the folder given second) scored lower than A (improve-codebase-architecture, the folder given first) on the report task, and no other task separated. This is a separation detected under the rule (the two averages differ by more than their usual spread), not proof of its cause.

The edit

Section removed
### 2. Present candidates as an HTML report
Its size
2304 bytes, 38.4% of the file, about 576 estimated tokens (the whole file's estimate minus the reduced file's)
Whole file
6000 bytes, about 1500 estimated tokens; its hash (sha256) 552240a5ab5cec6b67c15dd1ad6e9f6962b1bca6ce870059a8c2713760c20392
Reduced file
3696 bytes, about 924 estimated tokens; its hash (sha256) e2111574b01a03c22fd746fced2c4e42413a6732c6c1323f0d8a94a88b0980ca
Source
mattpocock/skills at commit 49dd158d1076134a641b33efb035946536778336, skills/engineering/improve-codebase-architecture/SKILL.md
Receipts
whole file f95f2a97f82743a4039ece0c0cc3bbc3aff33368e6c459dc15d6b7617d59a5ff, run 2026-11-08; reduced file 3c42e2155cb6c63bebdd50471de6df5de4074ab9b617bb0c649b04cd6c35b4e1, run 2026-11-08

heygen-com/hyperframes

hyperframes-cli

With “Agent conventions” removed, there were too few answers to tell on these three tasks.

Task by task

  • render: too few answers to tell
  • timeline: too few answers to tell
  • loop: too few answers to tell

A = whole file, B = file without the section

What compare prints for these two folders

- render: too few answers
Not enough draws to conclude at this effect floor. Draws needed: no draw count at these spreads (case render: the two arms' spreads sum to 0.098, at or above the 0.05 floor).
- timeline: too few answers
Not enough draws to conclude at this effect floor. Draws needed: no draw count at these spreads (case timeline: the two arms' spreads sum to 0.050, at or above the 0.05 floor).
- loop: too few answers
Not enough draws to conclude at this effect floor. Draws needed: no draw count at these spreads (case loop: the two arms' spreads sum to 0.141, at or above the 0.05 floor).
No separation was detected between A (hyperframes-cli, the folder given first) and B (hyperframes-cli, the folder given second) on any task at this sample size; this is not evidence that the two files behave alike.

The edit

Section removed
## Agent conventions
Its size
6659 bytes, 25.6% of the file, about 1664 estimated tokens (the whole file's estimate minus the reduced file's)
Whole file
25989 bytes, about 6491 estimated tokens; its hash (sha256) be481984f8d3c871c353a4ba82bb295a416634e11938de2081b950e9e488a3ff
Reduced file
19330 bytes, about 4827 estimated tokens; its hash (sha256) bfe78e0b081ab280292f11e65d034c9a03e16f013177068a8bab7f9b4e8813d0
Source
heygen-com/hyperframes at commit c4440dfb200def5e0c0afee938778f05b5985039, skills/hyperframes-cli/SKILL.md
Receipts
whole file 2961784c8388bbd3fed5e88c22b015ea49163f35e5bea8d3794615e3f63a2043, run 2026-11-08; reduced file 73f7eb993f53d23133cff1a2e2da8edd78bcd4e33f4258b70a4d1404dbe134ca, run 2026-11-08

mattpocock/skills

setup-matt-pocock-skills

With “2. Present findings and ask” removed, answers on the monorepo task scored lower on average, by more than their usual spread, and there were too few answers to tell on the labels and local tasks.

Task by task

  • monorepo: answers scored lower on average without the section, by more than their usual spread
  • labels: too few answers to tell
  • local: too few answers to tell

A = whole file, B = file without the section

What compare prints for these two folders

- monorepo: B (setup-matt-pocock-skills, the folder given second) scored clearly lower than A (setup-matt-pocock-skills, the folder given first)
- labels: too few answers
Not enough draws to conclude at this effect floor. Draws needed: no draw count at these spreads (case labels: the two arms' spreads sum to 0.121, at or above the 0.05 floor).
- local: too few answers
Not enough draws to conclude at this effect floor. Draws needed: no draw count at these spreads (case local: the two arms' spreads sum to 0.186, at or above the 0.05 floor).
B (setup-matt-pocock-skills, the folder given second) scored lower than A (setup-matt-pocock-skills, the folder given first) on the monorepo task, and no other task separated. This is a separation detected under the rule (the two averages differ by more than their usual spread), not proof of its cause.

The edit

Section removed
### 2. Present findings and ask
Its size
2814 bytes, 40.3% of the file, about 704 estimated tokens (the whole file's estimate minus the reduced file's)
Whole file
6978 bytes, about 1745 estimated tokens; its hash (sha256) f148858ffb7f63c03c06fca06e6fdb1d91a35c6b293244b8fdfacd5f4cc028c4
Reduced file
4164 bytes, about 1041 estimated tokens; its hash (sha256) 686627dd3cb7ba6829a0d641a1ffd097ffa96ad5a10d954fd916cd23490a7ef7
Source
mattpocock/skills at commit 49dd158d1076134a641b33efb035946536778336, skills/engineering/setup-matt-pocock-skills/SKILL.md
Receipts
whole file de973b2be878049b7c236e782010db51004d5c73d4a2f150de890e02c2ec78d4, run 2026-11-08; reduced file 3517654bcdb0c2f3ad9cc03e02319eb7bda47d92331bc964f9ee2db5837b4926, run 2026-11-08

Do this to your own file

The same two commands work on any Markdown rules file, such as a CLAUDE.md or AGENTS.md, with a tasks file beside it. The first lists the sections and their sizes without spending anything. The second removes one named section, runs both versions on your tasks, and writes the two receipts and the reading. Both count a heading's subsections as part of its section, unlike the rule the cards used.

npx driftproof compare FILE.md --list-sections
npx driftproof compare FILE.md --without-section "Heading" --suite tasks.json

For a skill folder, make a copy, remove the section from the copy's SKILL.md, keep the same evals/evals.json in both, and compare the two folders. To redo one of the three above, fetch the pinned file from the repository at the commit shown, check its hash, apply the removal rule, and check the reduced file's hash against the card.

npx driftproof compare skill-a skill-b --models claude-haiku-5-5 --samples 5

The removal rule in one line: find the heading below the title with the most bytes of its own text, from its heading line to the next heading line of any level, and remove those lines, leaving every other byte as it was.

Where the evidence is

The six receipts, the three readings and the manifest are in the public repository. Each receipt has its own page with the two arms, what was verified and how to check the file yourself.

The receipts, readings and manifest · Every receipt page · Every task we gave a skill · Report 018

Words with a dotted line link to the glossary, where each is explained in plain words.