Estimated reading time: 22 minutes

TL;DR

I set out to build long-horizon engineering tasks for aec-bench: tasks where an agent had to preserve engineering meaning across documents, decisions, and revisions. In hindsight, the work had reached an earlier milestone: a static world in which agents could work this way and, for the first time, produce a review state worth carrying into a later interaction. I built this first world wrong twice.

The first mistake was scale. In the first pass, I produced 150 working “long-horizon” tasks across 152 engineering packages1, with perfect completion numbers and almost none of the judgment that makes engineering work difficult. The second mistake was subtler. After I rebuilt the tasks around design review, the agent in charge of iterating on the tasks to improve their design (and harness) ended up writing the hidden defects’ expected answers into the instructions, one model run at a time, until the scores returned to 1.00.

The first useful review design appeared when I stopped that loop: keep the model blind to which version it received2, grade the evidence behind its review rather than only its conclusion, and treat universal perfect scores as a warning rather than completion.

A benchmark task is not finished because models score perfectly. A perfect score is a reason to inspect the task.

Once the answers stopped leaking, the first results showed models that were unsafe in both directions: they missed real defects and invented defects in clean packages. One of the strongest small models passed a defect-free review only once in five attempts.

This article is the story of how the benchmark manufactured success, how expected answers leaked into the instructions, and which permanent construction rules now stop model failures from being edited away. It ends with a complete review performed in a single sitting. The next article in this series begins when that review record has to survive time.

The Starting Point

Task Worlds and Meta-Harnesses argued that agent tasks are worlds, not prompts: they decide what the agent sees, which rules have authority, what counts as evidence, and which failures can even be named. It also argued that failures serious enough to break the world’s language — Events, in that essay’s vocabulary — should force new distinctions into the machinery that generates worlds.

This post applies that theory — and reports what it cost to apply it.

I catalogued 184 calculation tasks across civil, structural, mechanical, electrical, and ground engineering, clustered them into nineteen families, each built around a shared physical system — a road corridor, a pump station, a coastal boundary, or a fire-water system — and added one overlay for standards and approval authorities. Constructing tasks within each family, piece by piece, quickly revealed something that, in hindsight, might be obvious:

Long-horizon difficulty in engineering is not simply adding more steps. It is preserving engineering meaning across time: source values, unit conventions, case selections, handoffs between disciplines, contradictions, and a final artifact for someone to audit.

The underlying idea was right: related engineering tasks should form a connected world rather than a collection of isolated questions. But the first implementation gave the model every document and earlier decision at once, in a single bundle, instead of letting that history unfold over time. We also lacked a rigorous record of how the task had been assembled—where each piece of evidence came from, which version was used, and when it became available.

The Coverage Illusion

The first build reached full coverage on its own terms: all nineteen families were represented, all 152 engineering packages were covered, and 150 generated long-horizon tasks were working. Every known-correct answer scored 1.0 against its own verifier. The tracking documents recorded zero remaining items.

The dashboard vs. the autopsy
the tracking documents
19/19 engineering worlds covered
152/152 engineering packages
150 working tasks
1.0 every known-correct answer
0 remaining items
the same tasks, reread
143 / 150 tasks with every input fixed to a single value — each produces the same problem every time
full formula sheet printed in the instructions, including the algebraic rearrangements
0 files in the working folder — every value appears in the instructions
1 response enough to solve it: no tools, no remembered state, no sequence of work
not long-horizon
Two readings of the same body of work. The coverage dashboard reports completeness; rereading the tasks reports what was actually built.

The finding that matters most is the rule for calling a task finished: tasks were debugged until two models used during construction — one strong, one small — both scored 1.0. The build log entries below show what that rule did in practice. When a model stumbled over an engineering choice, that choice was moved into the instructions until the score reached 1.0.

How 1.0 was manufactured
Bearing-capacity task
0.79
written into the instructions factor convention and water-table correction written into the instructions
1.0
Pipe-support task
0.89
written into the instructions exact bearing-capacity factor values written into the instructions
1.0
Road drainage task
0.76
written into the instructions roughness coefficient spelled out to defeat display rounding
1.0
Three entries from the build log. In each case the score gap was closed by writing the resolution of an engineering ambiguity into the instructions.

Auto-research is fun, but be careful when it happens during task design!

In my previous post, the flagship example of what makes engineering tasks hard was a bearing-capacity problem where a strong model had every input and still failed — because it reached for the textbook factor convention when the project used a different one. Same inputs, roughly twenty percent difference in allowable capacity. That choice — which convention, standard, rule, or specification has authority here — is one of the engineering judgments a long-horizon task must preserve.

So what did the agent do when the model chose the wrong convention? It changed the task. The project-specific factors were printed in the instructions, and the judgment disappeared from the test. That was the metric doing exactly what we asked of it. If “done” means both models score 1.0, every difficult engineering choice starts to look like a bug during task design rather than the thing the task should measure. The simple lesson here was:

Task counts measure how quickly tasks were produced. If model success is your rule for accepting a task, you will create a benchmark that is saturated at birth.

Goodhart’s Law is undefeated.

How Engineers Review Each Other’s Work

To redesign these tasks properly, I turned to the procedures senior engineers use to review one another’s work — the documents that decide whether someone else’s work is safe to accept. Across disciplines, these procedures share a spine.

  • Inventory exactly what documents you were given.
  • Extract the design basis.
  • Work through a checklist.
  • Give every item exactly one status — pass, fail, not applicable, or insufficient data.
  • Cite evidence for every failure.
  • Name the exact missing information.
  • Convert everything unresolved into findings and actions.
  • Then, and only then, decide whether the package is ready to issue.

Two things about this spine changed how I approached building these tasks.

First: before an interaction can become long-running, it needs a state worth preserving. Most senior engineering work is reviewing things other people computed, assembled, revised, and (sometimes) half-updated. A review record supplies that state: findings, requests, accepted decisions, and readiness. The first task we designed gave the model all documents at once; it did not yet test whether the review record survived later evidence.

Second: missing data is a first-class outcome. A reviewer who invents a missing value is a dangerous reviewer.

This was exactly my point in Plausible Answers, Failed Workflows, but now promoted to a task-design principle: engineering benchmarks cannot be designed to measure prose.

Building A State Worth Preserving

The first rebuilt task is small enough to describe completely.

The task centres on a sag point in a road — the low spot where water ponds during a storm — alongside a roadside equipment cabinet, a variable message sign, and their supporting power and communications systems. The agent is the independent reviewing engineer. In its sandbox it finds seven project documents: a document register, road geometry, the drainage design package, the equipment layout, the power and network schedule, the traffic operations case, and a criteria memo with the review comments. The instruction contains no numbers at all. Every value, and every assessment method, lives in the documents — the criteria memo states which formulas and conventions govern, which is exactly what a real design-criteria document is for.

Each generated task uses one of eight versions of the review material: one clean and seven with a single planted change.

The agent must produce the full review record: which documents it received; a cross-check that they all refer to the same road, location, equipment, and design scenario; one status for each review item; its own recomputed evidence; findings and requests for missing information; actions with owners; and a final decision on whether the work is ready to issue.

A state worth preserving
the agent sees
  • Document register
  • Road geometry
  • Drainage design package
  • Equipment layout
  • Power & network schedule
  • Traffic operations case
  • Criteria memo + review comments
the work
  1. 01 Inventory
  2. 02 Identity
  3. 03 Recompute
  4. 04 Status
  5. 05 Findings & requests
  6. 06 Decision
the grader checks
Checklist answers 0.30
count only with supporting calculations or sources
Evidence checked from documents 0.20
values reproduced from the documents
Findings tied to evidence and requests 0.20
every failure cited; every gap requested
Final issue decision 0.20
supported by evidence; agrees with the rest of the review
Cross-document consistency and claim limits 0.10
details stay consistent; no overclaims
hidden from the agent
each task uses one hidden version
The model sees the documents, but not which version it received.
  • Clean
  • Missing level
  • Stale revision
  • Datum conflict
  • Copied scenario
  • Critical comment open
  • Minor comment carried
  • Criterion failure masked
The task turns documents into a review record whose parts must support one another: sources, evidence, findings, actions, and a final issue decision that a later interaction can test.

Three design rules mattered here.

The verifier checks the review in stages. A checklist status earns credit only when the agent supplies the correct calculation or source evidence behind it. The final issue decision earns credit only when that evidence supports it and the decision agrees with the checklist and unresolved findings. If every fragment earned points independently, a fluent guesser could assemble a good score from an incoherent review. The stages force the parts to agree.3

The task must be solvable from the documents alone. A separate test reads the finished documents exactly as the model receives them, recalculates every expected result from scratch, and confirms that those results match the answer key.

A perfect model score is a warning, not the goal. The known-correct answer must score exactly 1.0. If a strong model also scores 1.0 on every version, I inspect the task: the defect may be too easy to spot, or the instructions may be giving the answer away.

The Leak

With the reference task built and the pattern documented in an authoring guide, I assigned a team of agents to extend it across the rest of the road-corridor family: seven more review tasks — intersections, lighting and CCTV, detour operations, bus priority, driveway access, cabinet serviceability, and design-review response — each based on an earlier calculation task kept for comparison.

The software quality looked good. Thirty-plus tests per task. Each document clearly stated what it did not establish. A detailed log linked every model run to the edit that followed. That log is the only reason what happened next was catchable.

The log records this sequence for a small model on one version containing a planted defect: 0.78 → 0.70 → 0.56 → 0.81 → 0.85 → 1.00 across five successive “hardenings.” Each hardening edits the prompt. Each edit is documented as an improvement. And by the fifth, the instruction for the design-review response task contains a paragraph that (with document names generalized) reads:

“A pending revised chainage is a missing-data case, not a failed calculation. Keep the design-basis item as pass; set the adequacy item to insufficient data; omit the changed-chainage value from your evidence; and raise an information request for the missing chainage against the marked-up plan.”

That is one hidden version’s complete expected answer — item, status, evidence field to leave blank, document to cite — printed in the task prompt. Sibling tasks received equivalent paragraphs pre-emptively, for planted defects no model had ever attempted. The judgment the planted change was meant to test had been converted into a reading-comprehension exercise, eight tasks wide.

The leak, as a trajectory
0.500.550.600.650.700.750.800.850.900.951.00score →123456instruction-edit round →evidence rulestightenedreview-boundaryrules addedone-defect boundaryrule addedexpected answer spelled out
One version with a planted defect, five instruction edits. The rising score looked like progress; the notes reveal that the expected answer was gradually being written into the instructions.

I want to be precise about what this was: the agent was not cheating. It followed the goal it had been given: treat every score below 1.0 as a task bug and revise until the score reached 1.0. It even wrote careful notes about residual concerns. The previous essay warned that systems which revise their own tasks can hide every failure by adding more hints or relaxing the verifier. Here it happened in the real building process, wrapped in the same careful caveats I had written to prevent it.

The detection test that now guards against it is very simple:

Variant-blindness: a reader of the task instructions alone must not be able to list the hidden versions or their expected statuses. If they can, the task is leaking.

The fix was equally unglamorous: remove every passage that linked a planted defect to its expected answer. Keep only changes that clarified the required answer format, moved engineering conventions into the project documents, or allowed equivalent wording to receive the same score. The automated checks now search for the leaked phrases and fail if any reappear.

When Is a Low Score the Task’s Fault?

Stripping the leak reopened a question the leak had been suppressing: when a model scores below 1.0, what are you allowed to fix?

I settled on a two-part rule for deciding the cause, and it is the most reusable thing in this whole story.

First, failures in the task or its grading. The known-correct answer cannot earn full marks. The verifier crashes. Two answers say the same thing in different words but one receives zero. Seven correct pieces of evidence are discarded because an eighth is missing. These are fairness problems. Fix the verifier, required answer format, or criteria documents — never by telling the model what defect to find.

A failure belongs here when the model followed the stated instructions but was penalized by an unstated rule. Only once the written instructions match what the verifier actually requires can a failure tell us something about the model.

Second, failures that belong to the model’s review. The model wrongly turns one defect into five failed checklist items. It invents a value a document marks as pending. It declares a package ready while its own checklist shows an unresolved failure. These are results, not task bugs. Record them and leave the task unchanged.

The dividing line: a fair-grading fix does not change what a competent reviewer must work out. If an edit gives away anything about the planted defect, it is giving away the answer.

This distinction helped immediately. Both models had turned one missing survey measurement into three separate failures. The checklist had not made the boundary clear enough, so I added the same rule to every task: missing information is not a conflict. Mark only the check that depends on it as insufficient data; leave the others unchanged.

Then I ran the models again.

One definition, two models, split verdict
Strong model — missing-value rule
  1. before the fix 0.88
  2. after the fix 0.95
Small model — missing-value rule
  1. before the fix 0.75
  2. after the fix 0.72
Strong model — evidence-scoring fix
  1. before the fix 0.95
  2. after the fix 0.99
The same clarification stopped the strong model from spreading one defect across several checklist items, but the small model still did so. Unclear task rules no longer explained the small model's remaining errors.

The split was now clear. The strong model applied the definition and confined the defect to the correct item, showing that the revised wording was usable by at least one capable reader. The small model still spread it across several items. The remaining error was therefore less likely to come from unclear instructions. One general sentence made the comparison fairer and the difference between the models easier to see.

For this first set of model runs, each summary recorded the random seed and exact code version, so I could recreate the task; I stored the full model responses separately. That was enough to debug these tasks. Later experiments (part 2 of this series), where evidence will arrive over time, need permanent records of exactly how every run was produced, plus a clear separation between runs used to tune the setup and unseen tasks used only for final evaluation.

What The Single-Pass Reviews Revealed

With the tasks clean again, I ran the models twenty-one times. Eleven runs covered all eight road-corridor review tasks. The other ten formed the first reliability check: five fresh versions of one task with no planted defect, and five with a genuine defect. Most runs used the small model; three used the strong one. Each was scored independently.

These runs were exploratory. I had not used one set of tasks to choose how the models would run and then tested that choice on a separate, unseen task. The results could diagnose the tasks and model behaviour, but not yet demonstrate performance on new work.

Three main findings came out of this:

Defect localisation

Models spread one defect too far. Given one planted defect, the small model routinely fails adjacent checklist items that are independently fine — turning one finding into four. The strong model usually confines the failure to the correct checklist item. In review work, over-flagging buries the real finding in noise and makes the review record less credible.

Decision consistency

Final decisions contradict the analysis. The most persistent failure is a contradiction between the checklist and the final issue decision: the checklist shows an unresolved critical failure, and the final decision says ready anyway — or the inverse. One run scored 0.97 with this as its only loss. The final judgment is the easiest sentence to produce and the most expensive one to get wrong.

False-positive control

Models invent findings when no defect is present. Every run used the same issue-readiness brief, and the model was not told whether a defect was present. The brief did ask it to look first for conflicts, stale revisions, contradictory datums, and missing evidence, so this measures false positives inside a realistic review setting. Across five fresh clean packages, the small model produced scores of 0.59, 0.63, 0.94, 0.95, and 1.00. It raised unsupported identity conflicts and adequacy failures in two of them. Across five fresh packages containing a real defect, it never scored 1.0.

Twenty-one model runs, mapped
Single-pass model runs by section, task, model, task version, score, and recorded finding
Section Task Model Task version Score Recorded finding
Across all eight review tasks LH-01 Drainage Small model Genuine freeboard defect 0.86 The final decision contradicted the checklist; a required connection from the finding was also missing.
Across all eight review tasks LH-01 Drainage Strong model Genuine freeboard defect 1.00 Complete after correcting a verifier wording inconsistency.
Across all eight review tasks LH-02 Intersection Small model Pedestrian clearance defect 0.78 Points were lost only on the affected item.
Across all eight review tasks LH-03 Road visual Small model Missing PoE budget 0.77 The final decision contradicted the checklist, and another checklist item also lost points.
Across all eight review tasks LH-04 Detour Small model Battery runtime defect 0.88 Points were lost only on the affected item.
Across all eight review tasks LH-05 Bus priority Small model Missing cabinet capacity 0.97 Points were lost only on the affected item.
Across all eight review tasks LH-06 Driveway Small model Access freeboard defect 0.76 Points were lost only on the affected item.
Across all eight review tasks LH-07 Cabinet Strong model Thermal capacity defect 0.99 Only the cross-document consistency check lost points.
Across all eight review tasks LH-08 Comments Strong model Missing revised chainage 0.95 The defect stayed confined to one item; one checklist item and one required piece of evidence still lost points.
Across all eight review tasks LH-08 Comments Small model Missing revised chainage 0.72 One defect spread into otherwise sound checklist items.
Across all eight review tasks LH-08 Comments Small model Copied scenario 0.72 One defect spread into otherwise sound checklist items.
Repeated on one task No planted defect Small model No planted defect 0.63 Invented findings in work with no planted defect.
Repeated on one task No planted defect Small model No planted defect 0.59 Invented findings in work with no planted defect.
Repeated on one task No planted defect Small model No planted defect 1.00 Complete review.
Repeated on one task No planted defect Small model No planted defect 0.94 No specific failure pattern was recorded.
Repeated on one task No planted defect Small model No planted defect 0.95 No specific failure pattern was recorded.
Repeated on one task Genuine defect Small model Genuine freeboard defect 0.78 No specific failure pattern was recorded.
Repeated on one task Genuine defect Small model Genuine freeboard defect 0.83 No specific failure pattern was recorded.
Repeated on one task Genuine defect Small model Genuine freeboard defect 0.86 No specific failure pattern was recorded.
Repeated on one task Genuine defect Small model Genuine freeboard defect 0.92 No specific failure pattern was recorded.
Repeated on one task Genuine defect Small model Genuine freeboard defect 0.83 No specific failure pattern was recorded.
Each mark is one model run. Circles show the small model, diamonds the strong model, and horizontal position shows the score. Rings label only failure patterns recorded in the run notes. The final ten marks show five fresh versions of one task with no planted defect and five with a genuine defect.

Across these runs, the models produced fluent, professionally worded review records with safety-relevant failures in both directions: missed defects and false findings. The ten repeated runs showed both within one task family. The difference between those failure modes is invisible to any evaluation that reads the final memo and checks the final number. It takes a verifier that checks every status against its evidence, traces findings into actions, and confirms that the final decision agrees with the review to see it. That is what a human review process is for.

Run The Review Yourself

This example is not a reconstruction made for the article. It is a live aec-bench task. The commands below check out the public version used here, generate the same freeboard-deficient road review, and run it with the strong model shown in the figure.

git clone https://github.com/TheodoreGalanos/aec-bench.git
cd aec-bench
git checkout 1e78c3c
uv sync --extra pydantic-ai

uv run aec-bench generate task road-low-point-issue-review-package \
  --instances 3 --difficulty medium --seed 20260706 \
  --output demo-tasks

TASK=demo-tasks/civil/road-review/road-low-point-issue-review-package
uv run aec-bench run-local \
  "$TASK/urban-arterial-sag-urban-arterial-02" \
  --model "au.anthropic.claude-sonnet-4-6" \
  --adapter pydantic_ai --output demo-run --no-import

Generating the documents is local. The final command calls a model and therefore needs credentials for that provider.4 Its output directory contains the model’s review, the step-by-step working record, and the verifier’s itemised score.

The panel below follows four decisive moments from one completed run. Its footer links to the exact review instructions, document generator, verifier, and tests on GitHub, all pinned to the public code version above.

One complete review

One road review, from documents to decision

A strong model received seven synthetic project documents, recomputed the design evidence, isolated one critical defect, and refused to approve the work.

Not ready to issue
Model
Claude Sonnet 4.6
Source material
7 documents
Working record
16 steps
Score receipt
0.95 1.00

Why two scores? The response did not change. A wording-only verifier correction accepted “does not constitute” as equivalent to “does not claim”.

  1. Source check

    Seven files, no shortcuts

    The model began with the document register and opened every source before drawing a conclusion.

    Register
    DOC-REG-SSC01-01
    Design sources
    Road, drainage, equipment, power, traffic and criteria
    Read the exact excerpt
    “I’ll start by inventorying the source packet, then work through each review item systematically.”
  2. Recomputation

    Most of the maths checks out

    Runoff, gutter spread, hydraulic level and the controlling water level all reproduced the design values. The review did not turn one suspicion into a general rejection.

    Design values compared with the model's recomputation
    Check Design Recomputed
    Peak runoff 0.319 m³/s 0.3189 m³/s
    Gutter spread 4.563 m 4.5628 m
    Hydraulic level 42.889 m 42.8885 m
    Controlling water 43.613 m 43.6132 m
    Read the exact excerpt
    Controlling WL = max(43.613194, 42.888509) = 43.613194 m AHD. Package claims: 43.613 m AHD. Match: True.
  3. Critical finding

    One number does not

    Against the controlling water level, the cabinet had only 0.162 m of freeboard—0.188 m short of the requirement.

    Cabinet pad
    43.775 m AHD
    Controlling water
    43.613 m AHD
    Actual freeboard
    0.162 m
    Required
    0.350 m
    Read the exact excerpt
    43.775 − 43.613 = 0.162 m. Required freeboard: 0.350 m. Deficit: 0.188 m. FINDING: critical fail.
  4. Decision

    Turn the finding into an action

    The final decision followed the evidence: do not issue the work, raise or redesign the cabinet pad, correct the calculation, and review the next revision.

    Decision
    Not ready to issue
    Action
    Raise CAB-01 to ≥ 43.963 m AHD and reissue
    Hidden condition
    Freeboard-deficient version
    Read the exact excerpt
    NOT READY TO ISSUE. One critical failure is outstanding. The cabinet pad level is geometrically insufficient by 0.188 m.
The task documents are synthetic. The model was not told which hidden version it received.

The Messy Surface, The Structured World

You could fairly object to the world these tasks reproduce. It is the world as engineers actually receive it — values scattered across seven documents, methods buried in a criteria memo, revisions that half-agree — and building agents that merely cope with that world risks accepting its dysfunctions as inevitable. A benchmark does more than measure performance: it rewards a particular way of working. The world it rewards is the world it helps entrench. Train document archaeologists and the documents stay.

Meeting the work where it is remains the floor. An agent that only works once its inputs have been neatly structured avoids the hard part. Engineering evidence is messy, and errors in interpreting it have real consequences. That is where measurement has to begin.

But Executable Standards argued that the deeper harness boundary is the clause itself: criteria should stop living only as prose and become rules whose changes are tracked and that software can check. Look closely at these review tasks and that future is already inside them. The agent sees the messy surface: documents, a pending survey level, a stale revision. The verifier sees the structured one: precisely defined statuses, named pieces of evidence, and criteria expressed as rules it can run. The gap between those two surfaces is precisely what the benchmark measures.

That reframes the long game. Measure agents in the world as it is; use the same machinery to pull the world toward what it could be. Every criteria memo in these tasks is one step from a criteria database, every checklist one step from a standard review format, and every verifier an early version of project software that could make half of these planted defects impossible to write in the first place. The grading machinery should handle the messy documents — and make the structured world the easier one to build in.

The Task-Building Process Needs Its Own Checks

The construction process needs the same kind of fixed rules as the task.

Documentation was not the problem. The coverage illusion passed every test; the leak appeared in meticulous diagnostic notes. What the task-building process lacked were checks that could stop a failure from being mistaken for progress:

  • A menu, not a queue. The catalogue grew to 152 possible review tasks across all nineteen worlds; I sorted them into three groups: roughly a third were worth building, a third were saved for later, and a third were cut because they repeated judgments already tested elsewhere. Building one of everything is how quantity becomes the goal again.
  • One owner per judgment. When two worlds claim the same physical product — a battery system that is both an energy asset and a fire hazard — one task gets built, owned by whichever discipline owns the judgment, and the other world references it. Twins drift.
  • Record temporary decisions instead of waiting. Domain experts are scarce. Each open engineering question gets a clearly marked, reversible interim answer, collected for experts to confirm against completed tasks and actual model results. Experts can give much better feedback on a completed review task than on a list of possible ones.
  • Stop and review after every task. Agents build one task at a time, then pause for review before marking it finished. The detailed edit log caught the leak; the planned pause makes that review routine.
  • Model runs diagnose; they do not teach. During task construction, model runs reveal unfair instructions or record model behaviour; they never justify teaching the task the observed answer. A later, pre-planned experiment may compare different ways of running the model and choose one, but it must not rewrite the task around the results.

The previous essay argued that when a failure breaks a world’s language, the world generator must gain the missing distinction. The leak required changing how tasks are built, not merely repairing one prompt. It gave us four permanent rules: hide the planted version and expected answer; test that leaked phrases stay absent; separate grading bugs from model failures; and stop for review after every task.

When agents build the benchmark, the building process needs to be checked as carefully as the tasks.

Where This First Build Stops

At this point, the documents are fictional and every review happens once, with all the material provided together. The tasks do not claim to use accepted project evidence, have approval from authorities, comply with standards, or be ready as a public benchmark. The scores come from a small set of runs across two models, not a broad model comparison.

Within those limits, the result matters. I built a review task that can distinguish missing information from failed checks, unfair grading from model mistakes, and fluent but unsupported conclusions from judgments backed by evidence. The same review structure now exists beyond the road corridor — in pump suction, fire classification, product certification, ground engineering, and coastal elevation — using documented temporary engineering decisions rather than claims of expert approval.

That completes the first part of the story. It does not complete the long-horizon work. These first review tasks still collapse the whole history into one sitting: every revision arrives at once, the agent reconstructs the history retrospectively, and the review ends after one submission. They did, however, produce a review record worth preserving. Each finding can be tracked. Missing information becomes a specific request. Accepted decisions point back to evidence. The final decision follows from everything recorded so far.

Part 2 of the series will begin there. Later evidence arrives only after the model has committed, and the audit trail has to survive what changes next.

Before the work could unfold over time, the review had to produce a record worth preserving.

Footnotes

  1. A self-contained bundle of files representing a piece of engineering work: its inputs, calculations, and supporting material. A review package adds what is needed to inspect that work and record a decision.

  2. The model is not told which version of the task it received — for example, whether the files contain no planted defect or one particular defect. It sees only the engineering documents and must work out what happened from the evidence, without labels or expected answers.

  3. Every task includes a deliberately bad memo that marks every item as passing, provides no evidence, and declares the work ready. An automated check runs that memo through the verifier every time. If a later change makes the verifier too lenient, the bad memo’s score rises and the test fails.

  4. aec-bench reads provider settings from a local .env file. To reproduce this Bedrock run, configure AWS credentials, a region, and access to the named model. You can substitute another supported model; its response and score may differ.