Strickle Works Strickle Works™

Did your test suite keep pace with the code your agents now write?

You bought the agent seats. Your team is merging more code than anyone can read line by line, and the test suite is the only thing left between that code and production.

$9,500 · Go teams · a measured baseline, and the same measurement again on day 28

01

The question

What gets measured is verification, not output: whether your tests catch faults, not how much code anyone ships. The question is not whether anyone got faster. It is whether the thing that catches mistakes kept pace with the volume.

Covered is not verified. A line your coverage report counts as exercised can still carry a fault no test notices, which is the gap this measures and the reason a green suite is not an answer.

02

What you get

  • A measured baseline. Small faults injected into your Go packages, and a count of how many your test suite catches.
  • The worst-scoring package fixed, with agents, in a branch your team reviews, using the review protocol you are adopting.
  • An adoption plan for one champions cohort, with a named owner on every row.
  • The same measurement on day 28, against the same packages, and a short written delta, so the plan gets graded rather than filed.

You keep a measured baseline and a standards document, not a slide deck, and your code never leaves your infrastructure.

03

What a measurement looks like

Before you pay for a measurement of your code, here is one of mine. Real, not illustrative, and every figure recomputes from the per-mutant records I retain.

Specimen: a Go repository of mine, not named here
Mutable sites in the repository 536, all measured
Caught by the suite, before 393 of 536 · 73.3%
Caught by the suite, after 442 of 536 · 82.5%
Same run, runnable sites only 442 of 504 · 87.7%
Production code changed none

Forty-nine faults that survived the first run were caught by the second, with no production code changed between them. The gain is tests that were missing, written after the measurement said where to look. That is the engagement in one table.

How to read the two percentages

The same 536 faults were put to two versions of one suite, so neither row is a different sample. Both percentages are that one run counted twice: 82.5% is every site, and 87.7% sets aside 32 sites in a WebAssembly build and an example agent that cannot execute in the test environment, so were never catchable. Both are here because publishing only the flattering cut is the habit this work exists to catch.

One fault, before and after

In cmd/cmd_verify.go, the line that decides whether a chain verified reads:

if r.ChainPresent && r.ChainOK && !r.HeadMatched {

Change one && to || and the condition fires when it should not. On the first run the entire suite passed with that fault in place, which means nothing verified the logic that reports whether verification succeeded. On the second run a test failed, because by then one existed. The fault is the same fault; only the suite moved.

Covered is not verified, measured

In a separate specimen, a third-party library I do not own and do not name here, one line executed 78 times during a single run of the suite. Coverage counted it as covered, correctly. A small fault injected into that line survived: every test still passed.

Exercised and unverified at once. That gap is invisible to a coverage report, and it is the gap a mutation baseline measures. The library is competent and widely used, which is the point rather than an aside.

What this score does not tell you
  • The specimen is my own repository. I knew where the suite was thin, which makes the second number easier to move here than it would be in code I had never read. The first number is the one nobody chose: 73.3% is what the suite scored before anyone went looking.
  • It is evidence about the suite, not a grade for the code. A surviving fault says a test is missing, not that a bug is shipping.
  • Some survivors are equivalent. A loosened comparison guarding a value nothing downstream observes behaves identically, and no compiler can prove which ones those are. A person still reads them.
  • Scores do not compare across repositories. The mix of code shapes sets the denominator, so a parser and an orchestrator score differently for reasons unrelated to test quality.
  • It says nothing about faults outside the operator set. A repository can score 100% here and still miss a race, a wrong requirement, or a fault shape never injected.

Every figure on this page was recomputed from the raw per-mutant records before it was published, and three figures in the underlying work were wrong and were corrected. A measurement corpus whose numbers do not reconcile cannot ask you to trust the ones that matter, and a record that only ever accumulates favorable results is advertising. The specimen above rests on the same per-mutant records an engagement delivers, so what you would receive is the thing producing the numbers on this page, corrections included.

04

How it runs

This is measured twice, which is the part that matters. The baseline injects small faults into your Go packages and counts how many your test suite catches. The worst-scoring package is fixed with agents, in a branch your team reviews, using the review protocol you are adopting, then write the adoption plan with a person's name on every row. On day 28 the same measurement runs again against the same packages.

What is in scope, fixed before work starts
  • What the number is. Whether your suite catches small injected logic faults, measured before and after. It is not a measure of developer productivity, output, or agent quality, and no number here should be read as one. The name of this engagement is broader than the instrument: what gets measured is verification, under a protocol we agree on first.
  • One repository, up to three Go packages, and at most sixty faults, chosen together in writing the week before.
  • First: a mutation baseline on the selected packages, read against your seat count and your weekly active users.
  • Then: the worst-scoring package fixed in a branch your team reviews, using your own AI coding tools.
  • Then: a written adoption plan for one champions cohort, with a named owner on every row.
  • Day 28: one re-run on the same packages and a short written delta.
  • Out of scope: anything that is not Go, additional repositories or packages, ongoing support, and any guarantee about adoption percentages or productivity outcomes.
05

Price and timing

Fee
$9,500.
For
Go teams.
Scope
One repository, up to three Go packages, and at most sixty faults.
Measured again
Day 28: one re-run on the same packages and a short written delta.
06

What this is not

It is not a measure of developer productivity, output, or agent quality, and no number here should be read as one. Out of scope: anything that is not Go, additional repositories or packages, ongoing support, and any guarantee about adoption percentages or productivity outcomes.

07

Who does the work

Douglas Adolph. I designed and built the deployment system behind a fleet of thousands of production Kubernetes clusters at a Fortune 50 company, and took deployments to that fleet from weeks down to seconds, and I still maintain it today. Around it I have written the controllers that keep a fleet honest, the authentication path teams use to reach clusters at all, the secrets tooling, and the post-deploy verification that catches a release which reconciled cleanly and is quietly unhealthy.

The engineer who scopes your work is the engineer who does it.

Longer background, and the public code I own, at douglasadolph.com. Read the source before you talk to me.

08

Send me the problem

Tell me what you are trying to find out and I will tell you whether I can help, including when the answer is that you do not need me.

  • What is stuck, or what you are trying to measure.
  • What you have already tried, and what happened.
  • Any date you are working against.

A short note beats a long form. What comes back is a reply from me rather than a scheduling link, which engagement fits or that none of them does, and for a build, a scope and a number before you owe anything.

hello@strickleworks.com