← Red Eagle project hub

Section 05 · Learnings · 28 Aug 2026

Five failures, and the control each one shipped.

None of these were anticipated in the plan. Each is a dated entry in the delegation log with a root cause and a change that followed — and each one shipped a reusable artifact, because a lesson without an artifact is a lesson that has to be learned again.

Failures logged

5

Each dated, with root cause and disposition.

Caught by the controls

3

A fabricated research return, two false verdicts of the register's own, two continuity defects.

Caught by a human

2

An inverted audit and a stale correction stamp — both found by reading the output, not by a check.

Artifacts shipped

5

Gates, schemas, scripts and contracts, all subject-independent. Port intact

The record

Failure, cause, change, artifact

The rightmost cell in each row is what makes these reusable rather than merely learned. Three of the five were caught by an instrument the project had built; two were caught by a person reading output that no instrument was checking — which is itself the finding.

01

A research return that was fabricated in full

2026-08-22

Problem

An agent answered a complete research task about a 673-page volume it had never received — inventing page numbers, transcriptions, an index, and an editorial note. All internally consistent. All false. A later report then repeated one of its claims by citing "the Volume III research."

Root cause

The access check tested content. It asked the agent to transcribe two lines as proof, and the agent transcribed two invented lines. A model without a source produces exactly the artifact the check was looking for.

Change

Gate on a fact already held, never on content. Blind-first ordering: the task naming the string being chased runs last, after the page is already transcribed. The void report was quarantined by name so nothing reasons from it.

Reusable artifact

G0 gate block, plus the access section of EMPLOYEE_BRIEF.md. Both are subject-independent and shipped in every packet since.

02

An audit that reported the rule as the violation

2026-08-24

Problem

The constraint reviewer read the canon's own sentences forbidding a redemptive reading and returned them as evidence of that reading. One task returned 57 hits of which 2 survived; another inverted outright, quoting the project's rule against itself.

Root cause

Two defects in what the packet supplied. The rule was undifferentiated, so every sympathetic beat qualified. And the input was the annotated working file, so directions written to block a reading arrived as candidate evidence for it.

Change

Rule rewritten as a scoped contract — two things forgivable, three not. An explicit negative-case clause: a prohibition is not the offence it prohibits. Input switched to a script-generated apparatus-free export.

Reusable artifact

build_exchange.py and the _clean/ export convention with its manifest, plus the negative-case clause now standing in every constraint prompt.

03

Two verdicts condemned by one source's silence

Pass 006

Problem

Two quotations were marked FABRICATED and purged. Both were real. The register — the instrument built to stop fabrication — had produced two false positives of its own.

Root cause

Absence of evidence read as evidence of absence. A single source was searched, came back empty, and the empty result was recorded as a finding rather than as a search boundary.

Change

No quotation is condemned on one source's silence. A FABRICATED verdict now means not found where we looked, and the looking is named. The register is cumulative and never rewritten backward — a downgraded verdict keeps its history with the correction attached.

Reusable artifact

The six-status register schema, and the append-only convention that makes a reversal visible instead of silently overwriting the record.

04

A correction stamp that outlived its correctness

2026-08-25

Problem

A line carrying four character ages was stamped "corrected to the written pages" — two days before the decision that moved the underlying spine. All four ages were wrong, in the file that tells an illustrator what to draw.

Root cause

Two, compounding. A stamp was trusted on its own confidence rather than its date. And the validation script that did surface the lines was never read — and could not have caught them anyway, because its token list held word-forms while the file used digits.

Change

Check a stamp's date against the decision it claims to satisfy. Token lists carry both notations. Validation output gets a named owner, because a check nobody reads is not a check.

Reusable artifact

check_age_spine.py with its dual-notation token list, and the standing rule: a correction stamp is not a guarantee.

05

Thirteen delegated tasks superseded by one command

2026-08-23

Problem

A whole task series was written to have an agent read volumes it could not receive, to answer questions a single search would resolve. Two more packets had a first step that was an impossible upload. The defect was invisible in the shape of the document.

Root cause

The boundary between mechanical work and judgment was never written down, so tasks were scoped by what seemed helpful rather than by what the agent was actually good at.

Change

The coordinator searches; the delegate reads and judges. A ✅/❌ scope table now sits in the standing config, and the first step of every packet is checked against it before writing the rest. Five packets have been withdrawn pre-send since.

Reusable artifact

The scope contract in EMPLOYEE_BRIEF.md and the scope rule at the head of TASK_QUEUE.md — plus the archive convention that keeps withdrawn packets with their stated reason.

The pattern

What the five have in common

The defect was in the input, not the instruction

Three of the five failed because of what a task supplied: an agent that never received the volume, a reviewer handed the annotated working file, a task series scoped to work the role could not do. Every packet looked correct in shape.

ControlPrompt review now covers inputs as a first-class surface, with a G0 access gate — line count, first line, last line — run before any task touches content.

A check nobody reads is not a check

The validation script that would have surfaced four wrong ages was never read, and could not have caught them anyway: its token list held word-forms while the file used digits.

ControlToken lists carry both notations, and validation output gets a named owner.

Absence of evidence is not evidence of absence

Two real quotations were marked FABRICATED and purged because one source was searched and came back empty. The instrument built to stop fabrication produced two fabrications of its own.

ControlNo quotation is condemned on a single source's silence. A verdict now means not found where we looked, and the looking is named.

The record is append-only

A later pass may overturn an earlier verdict, but it never rewrites it. Every reversal above is still visible in the register with its correction attached.

Why it mattersA register that only ever confirms itself is not a control. The self-corrections are the evidence that this one runs.
The one that is not in the table. Writing up this programme, an internal note claimed the pipeline had generated a set of images without a person writing a prompt. It had not — a person assembled every one. The author caught it by asking whether it was a mistake, and it was corrected in the run log, the decisions register and the handoff. A claim about method is the same class of error as an unsourced quotation, and it is the easiest one to make in a document like this.

Dates and register ids correspond to live entries in the project repository. Source IP: Aaron Zeanah, “The End of the Alabama Frontier,” International Journal of Interdisciplinary Social Sciences, Vol. 6, No. 4 (2012).