Case Study · 2026-09-04

741 engineering specs revealed which risk signal survives hindsight.

Across four AI-native codebases, integration risk scored the same before and after implementation. Review estimates did not. One of the four axes is assessable up front; the other three are contaminated by knowing how the work went.

This is dogfooding, not third-party adoption. All four codebases belong to the team that wrote CIRK. Read it as operational evidence from our own engineering, not as independent validation. The companion analysis of the upstream model is the DD6 case.

741specs carrying a CIRK vector
310classified before the spec closed
Kthe axis hindsight cannot touch
3 + 1mature codebases, one prospective cohort

The dataset

Three mature codebases and one prospective cohort.

Not four organisations adopting a standard — four engineering environments inside one team, which is why the rates below differ so widely. The spread is the point: it tracks when the discipline arrived, not how good each team is.

core618
Shared platform foundation

Reusable Django apps and TypeScript packages consumed by every other product: multi-tenancy, plugin loader, workflow engine, messaging.

2026-02-28started
306 specsclassified
32%at birth

No end users, but every change propagates to four consumers. High K by construction.

773 commits · 2 171 source files

orbit618
AI-native development governance engine

The product built to enforce this kind of discipline: intake classification, spec governance, agent execution policy.

2026-02-14started
222 specsclassified
13%at birth

Adopted CIRK latest of the four, and shows it. Included because it produces the worst number here.

425 commits · 1 364 source files

myastralmap
Consumer mobile product

Generated long-form readings with narrated audio, live in the App Store. The only one with real users and real revenue.

2026-02-28started
471 specsclassified
74%at birth

Shipping under load. Highest commit volume and the highest rate of follow-up fixes.

2 548 commits · 958 source files

connectus prospective cohort
Prospective cohort

The first product started after CIRK was already standard practice. Every spec classified at intake, none backfilled.

2026-08-24started
26 specsclassified
100%at birth

Not evidence of scale — evidence of what starting under the discipline looks like. Its value grows as implementation proceeds.

implementation has not started

Scored when?

A vector assigned after delivery governs nothing.

A CIRK vector decides review depth, test requirements and how a change ships. Assigned after the change shipped, it decided none of those. Only the 310 below carry operational meaning.

EnvironmentWith a vectorScored at birthBackfilledProspective
connectus 26260 100%
myastralmap 22916960 74%
core618 27086184 32%
orbit618 21629187 13%
Total741310 43142%

Read top to bottom, that column is a timeline. connectus 100% → myastralmap 74% → core618 32% → orbit618 13% is not four teams performing differently. It is one operating model arriving at four different moments — orbit618 last, which is why the governance engine itself scores worst on the discipline it exists to enforce.

Method. For each spec file, find the commit that created it, read the file as it existed in that commit, and check whether the vector was already present. Renamed files whose creation commit is unreachable are excluded. connectus has 26 specs and four source files — it is specified but essentially unbuilt, so its perfect rate reflects starting conditions, not sustained practice.

The finding

Backfilled scores are biased — and K is the exception.

310 scored-at-birth vectors against 431 backfilled ones, in the same repositories.

AxisNatureAt birthBackfilledDelta
R Review experiential 2.03 2.45 +0.43
C Context experiential 2.03 2.21 +0.18
I Iteration experiential 1.89 1.99 +0.10
K Integration risk structural 1.86 1.84 −0.02

The principle underneath

Structural risk can be estimated prospectively.
Experiential risk is contaminated by hindsight.

K asks questions you can answer by looking at a change: how many systems does it touch, which boundary does it cross, who consumes it, what is the blast radius. All of that exists before the code does. R, C and I ask how the work went — and once you know how it went, “how much review did this need” and “how much review did this get” become the same recollection.

Controlling for the repository

Repositoryn (birth / backfill)RK
core61886 / 1842.13 → 2.701.98 → 1.99
orbit61829 / 1872.28 → 2.352.03 → 1.72
myastralmap169 / 601.88 → 2.031.71 → 1.77

R rises in all three. K has no consistent direction — flat, down, up. The control confirms both.

The rule that falls out

Inheriting backfilled vectors? Trust K. Re-derive R.

Distribution

Where 741 specs land.

18 specs at 12 — 2.4%. A band that says “this should have been two specs” firing at that rate is about right. Zero would mean nobody was honest; eighty would mean the spec discipline had collapsed.

4–5 Trivial
63
6–7 Simple
201
8–9 Medium
267
10–11 Complex
192
12 Split Required
18

Where this sits

From problem uncertainty to execution economics.

CIRK is one link. It only means something because something upstream classified the problem and something downstream measures what execution actually cost.

Probleman intake arrives
→
DD6problem uncertainty
→
Specdiscovery output
→
CIRKexecution policy
Executionagent · tests · human gates
→
Telemetrytokens · review time · rework
↺
Calibrationback into DD6 and CIRK

The economic layer is not ours, and we are not proposing one

CIRK classifies risk; it does not price it. Measuring what an agentic change actually costs — input and output tokens, model class, retries, human review minutes — is a separate problem with independent work behind it, including ACEM, a cost estimation model for agentic software engineering, and empirical work on where agent tokens actually go.

We have no proprietary cost unit and do not intend to invent one. What we intend to publish is the join: which problem shapes and which execution vectors predict which costs.

What we have not proven

The number we did not publish.

Whether scoring before the work reduces rework afterwards is the question that decides whether any of this pays for itself. We measured it as follow-up fix: and revert: commits referencing a spec ID, split by scored-at-birth versus backfilled. Read naively, the result says scoring up front triples rework.

That conclusion is wrong. Writing the spec ID into the commit message and scoring the intake up front arrived in these repositories at the same time. Older specs did get fixed — those fixes carry no spec ID and are uncountable. Measuring a discipline through an instrument that arrived with it is circular.

What would settle it

A matched prospective cohort, and only that. Three populations exist in this data and only one of them can carry a causal claim:

A
Prospective matchedDD6 at birth + CIRK at birth + execution telemetry. The only cohort usable for calibration and prediction.
B
Partially retrospectiveOne of the two vectors backfilled. Exploratory only.
C
HistoricalBoth backfilled. Description of what was built, not measurement of a decision.

Cohort A is what connectus becomes once implementation starts — specs classified on both models before the work, with execution telemetry attached. Until that cohort has aged, the honest claim is that this is operational evidence, not proof, and the numbers above are reported on that basis.

If you are adopting

Four things this data would tell you.

  1. Start on day one, or do not count it. Same team, same period, same tooling: connectus 100%, orbit618 13%. The difference is when the discipline arrived, not who was disciplined.
  2. Do not backfill R. It is the axis hindsight distorts most, and it is the axis that decides how much human review a change gets.
  3. Trust inherited K. Structural risk survives being assigned late. It describes where the change lands, not how the work felt.
  4. Instrument cost and rework before you need them. We could not prove the model pays for itself, because the instrument arrived with the practice.

Data collected 2026-09-04 from four repositories at their dev HEAD. Method and queries are reproducible from the case file.