EDD A colleague brief in plain language

The code is no longer the bottleneck. Knowing it is right is.

Expectation-Driven Development is not primarily a testing technique. It is governance for acceptance: implementations, tests, and agents may produce evidence, but none may define the expected outcome or grant itself PASS. A change passes only when the system reproduces a protected, approved expectation through the declared write path.

AI did not create the verification problem. It made it impossible to ignore.

01 / The blind spot

Two green checks can share the same wrong idea.

Testing remains necessary, but a test is a question inside an authored boundary—not the authority that decides what “done” means. Normal development asks the implementation team to produce both the code and the proof that the code works. That is efficient, but it is not independent. When the same misunderstanding shapes the implementation and its tests, both can be wrong in the same direction.

The dangerous failure is not red. It is green for the wrong reason.

The familiar loop

Code defines the behavior. Tests repeat the understanding.

If neither author imagined the missing field, the overwritten value, or the untouched neighboring record, the check never asks about it. Green means the asked questions passed.

The EDD break

The implementation cannot own its answer key.

The application must reconstruct the governed outcome through its declared entry point. Neither the evaluated application nor its implementing agent may rewrite the answer key, silently ignore unknown state, or mint the verdict.

02 / The mechanism

The acceptance authority cannot report to the implementation.

EDD is a method. Gold-State Parity™ is its deterministic acceptance gate. The gate separates what is being built from the authority that decides whether it is right.

Freeze the expected world

A trusted, versioned gold state holds the approved data and outcomes. It is governed outside the code-writing agent’s unreviewed write authority.

Enter through the real door

The system receives only the inputs an ordinary user could supply through the declared interface. The evaluated application cannot read the protected expected state at runtime.

Observe what actually persisted

After the write path reaches a declared stable point, the gate captures the resulting business state, related records, and named durable effects.

Compare contract-completely—and fail closed

Every in-scope observable must be compared, translated, checked by a named invariant, or explicitly delegated. Missing, stale, ambiguous, or newly unclassified state stops the run.

No agent votes on PASS. An agent may diagnose a failure and propose a repair. The accept-or-reject path remains deterministic, and the repair does not count until the gate independently witnesses it again.

03 / The failure that looks like success

A user changes one date. An unrelated promise disappears.

Imagine a subscription record with a service level. Months later, someone changes only its renewal date. The renewal form rebuilds the whole record from the fields on that screen. Service level is not on that screen, so the update quietly writes an empty value over it.

  1. Change the renewal date
  2. The screen reports success
  3. The renewal-date test passes
  4. The stored service level is gone

The test is not careless. It proves the renewal date changed and the save succeeded. Both statements are true.

The defect lives in the fact nobody thought to assert: what must remain unchanged.

EDD turns that loss from a review hunch into a named disagreement: this record, this field, expected this value, received that one.

04 / Making it real at scale

Two lanes. One deliberately bounded claim.

Driving a full production-sized corpus through a real interface would be too slow. EDD divides the proof obligation without pretending either half proves the other.

Proof · /prove · deep and narrow

Did the selected real interface traces behave correctly?

The real UI is driven through ordinary interactions. It establishes declared interface obligations, selected end-to-end state parity, and the exact command variants observed at the capture boundary.

Validate · /validate · broad and below the boundary

Did the full in-scope corpus persist correctly?

The official command entry point processes the volume, but only through command shapes tethered to passing Proof evidence for the same declared identity. An unseen or ambiguous shape is a hard failure.

identity-bound evidence required

A green Validate run cannot repair a missing interface trace. A green Proof run cannot establish full-corpus fidelity. Green is always scoped to the versioned behaviors and observables actually inside the gate.

05 / Intertwined with the codebase

The method has teeth because the repository can say no.

Tests remain evidence; they are not acceptance authority. In the reference application, EDD became four linked enforcement layers so that an incomplete, stale, bypassed, or misremembered check cannot quietly redefine done.

The runs

In the implemented design, /prove drives selected scenarios through the real UI. /validate drives the full in-scope corpus through command shapes the UI proved for the same evidence identity. Both compare persisted state with the protected known-good state.

The gates

Repository hooks and CI refuse a commit or push when required evidence is missing, stale, or bound to a different build. “I ran it earlier” is not an acceptable substitute for current evidence.

The written decisions

Architecture Decision Records preserve why a rule, scope boundary, or exemption exists. The next person—or agent—does not get to re-litigate it from memory.

Tests that check the decisions

Architecture tests fail the build when executable behavior and the governing ADR disagree. The decision is not merely documentation; it has an enforcement path.

The implementation rule is simple: if a load-bearing constraint depends on memory, give it an executable failure path.

06 / The evidence

This is not confidence dressed as process.

The parity exercise was seeded to isolate what persisted from what the interface-level checks believed had happened. It demonstrates a conviction stage for a narrow fault class, not organic discovery or a detection rate.

2 / 16

Planned seeded mutants actually executed

A later source audit established that two of sixteen planned mutants were executed. Those seeded runs produced seven reported parity failures while the corresponding behavioural checks remained green. The other fourteen outcomes were computed predictions, not observations.

This corrects the earlier 7/7 shorthand. It is a bounded conviction-stage demonstration, not a discovery or detection-rate claim. Read the public correction to Field Report 1. The artifacts are proprietary and not independently auditable, and no current full-chain run is claimed.

3

Defects found inside the safety machinery itself

A gate compared a token to itself, so one branch reported success while skipping its intended check. Its enforcement test read source text differently from runtime execution. A proposed exemption sounded right until measurement proved it wrong.

A sanitized practitioner incident from a separate application. The source artifacts are proprietary and the account is not independently auditable.

A real green-for-the-wrong-reason chain

The safety machinery said PASS while one branch was effectively switched off.

The lesson was not abstract. A vocabulary-renaming gate and the controls around it exposed three different ways verification can lie while looking disciplined.

  1. Failure 01

    The affected branch checked nothing

    A typo made one branch compare a token with itself. The condition always matched, so files carrying the retired spelling were silently skipped while the gate reported success.

  2. Failure 02

    The test could be bypassed

    The architecture test inferred behavior from source text, but the shell computed something different at runtime. A one-character change could bypass the affected gate branch while its test stayed green.

  3. Failure 03

    The rationale was wrong

    Three proposed exemptions sounded reasonable. The gate measured instead of agreeing, and one of the three justifications did not survive the evidence.

Three failures in the assurance chain. A careful-looking review and a green check had not made them visible.

07 / What changes for us

“Done” becomes a claim with coordinates.

EDD does not ask teammates to speak more confidently. It asks them to make smaller, sharper claims that survive contact with evidence.

“The tests pass.”
“This identified build passed this oracle version under this runtime profile with current Proof and Validate evidence.”
“The new field is covered.”
“The field is exercised with a value that cannot be mistaken for omission, on every command variant that transports it.”
“The unexpected table probably does not matter.”
“Unknown state is red until it is compared, translated, governed by an invariant, or explicitly delegated.”
“Change the test so the fix can pass.”
“Oracle changes travel through independent approval; the implementation cannot move the finish line on its own.”
“Rerun it until it goes green.”
“Every attempt re-verifies pre-state, identity, runtime, and closure; a later pass after a failed attempt is surfaced for judgment.”

08 / The price

The rigor is real. So is the tax.

A method that distrusts implementation evidence must also distrust its own comparator, projections, fixtures, gates, and evidence lineage. That recursion can find switched-off safety checks. It can also become a machine that mostly audits itself.

Where it earns its keep

Load-bearing, silent, expensive failures

A write path that runs everywhere, a gate that controls every push, a data transformation that can corrupt neighboring records—these fail quietly and are costly to reconstruct by eye.

Where it becomes tax

Small, visible, cheap-to-redo artifacts

If a mistake is obvious, contained, and inexpensive to repair, adding layers of oracle machinery can cost more than the defect class it is meant to catch.

One rename, fully enforced

The original question was answered early. Then the machinery had to prove itself.

  1. The rename decision
  2. A repository gate
  3. A fix to the gate
  4. An ADR authorizing an exemption
  5. An architecture test enforcing the ADR
  6. A second ADR for a second governed list
  7. A generalized architecture test
  8. A fix to the test’s parser

Five commits. Three review rounds. The first round found the switched-off safety check. The next two increasingly audited the auditors.

The sequence is retained; product, repository, file, test, and decision identifiers are deliberately omitted.

The recursion is real

Enforcement does not terminate itself.

The test that checks the ADR is itself unchecked code. A test checking that test would also be unchecked. People still have to decide when the remaining blast radius no longer justifies another layer.

Depth of enforcement should key to blast radius, not principle.

EDD has kill conditions. If oracle maintenance exceeds the review effort displaced, escaped defects remain comparable to review-only development, the gate becomes too slow or flaky, fault-injection detection stays poor, or oracle changes become coupled to ordinary implementation changes, the economics have failed.

The whole method in three words

Make done demonstrable.

EDD is not certainty, and it is not merely more testing. It is a disciplined refusal to confuse confidence with evidence—and a way to localize failure without giving the implementation, its tests, or the repairing agent authority over the verdict.