# Catenation evaluation method

Checked September 21, 2026 (UTC).

## Expanded biology teams

The completed September 21 run contains **30 campaign teams, 37–44 AI agents per team, and 1,215 unique saved audits**. The 30 public PNGs were originally byte-identical to their selected native-source renders. On September 22, 2026 they were re-rendered from the same saved terminal cells by `scripts/render-cells.py` to fix clipped glyphs; the terminal text is unchanged, and the caption strip names the model as a local open-weight 27B model (the exact identifier is on the evaluation page). Source-cell hashes and before/after image hashes are recorded in `evidence/rerender-20260922/manifest.json`. On September 23, 2026 the native recording (`/media/biology-expanded.mp4`) was re-encoded the same way: its 69 recorded frames were re-rendered from the saved cells and encoded with the original ffmpeg arguments and frame timing, with no frame added, dropped, or retimed. Before/after video hashes are recorded in `evidence/rerender-20260922/video/manifest.json`. All 1,215 final output files match the exact transcript responses in the preserved archive. Its SHA-256 is `e13735718c02717f86988cde48c06fb25e4bf3c4d0f67110a0a3dc267d6d6709`. Owned demo workers were stopped before preservation; source inputs remained unchanged during archiving.

The expanded gallery’s [capture manifest](/bio-expanded.json) records each completed team’s roster, runtime activity, queued and active model calls, timestamp, model, image, and output count. `modelRequestSampledAt` identifies the relay observation; `capturedAt` identifies the terminal frame. Null identifies unsampled telemetry.

Each agent receives the full campaign brief and a distinct source-audit assignment. The direct profile uses `huihui-qwen3.8-27b-abliterated`, a four-call model queue, and concise outputs. Campaigns run in batches. Native session counts identify the agent teams; request telemetry records generating and waiting calls.

For each campaign, the evidence retains the assigned roster, source materials, session bindings, output artifacts and hashes, request telemetry, and the native terminal capture. Publication follows completion of the team’s saved audits.

The native Rust terminal is captured through a pseudoterminal. Rendered frames preserve the original cells, counts, work states, and research text. Video timing follows the original capture timestamps. Captions identify the model and shared four-call queue.

The outputs are source and study-design audits. The [architecture notes](/technical-notes.html) describe the scientific tools, research ledger, and harness refinement available to campaigns.

### Recovery and request accounting

The run resumed from saved state across model-service interruptions, retaining completed audits and continuing the remaining assignments. Readiness probes checked the model service before research resumed.

The 1,216 completed requests reconcile to 1,215 final audits and one retained length-limited reply. The [evaluation data](/evaluation-data.json) preserves request outcomes, queue events, readiness probes, and accepted research outputs as separate records.

## Original recorded workload

The native fleet captures show 49 simultaneous Kunz AI agents and 30 concurrent biology campaign sessions in separate 45-second recordings.

An archive recount matched 79 bindings to 79 distinct research transcripts: 49 Kunz and 30 biology. One separate arithmetic runtime probe makes 80 transcripts in total. The probe is excluded from research-session counts.

The output directories contain 188 Markdown documents:

- 79 initial research drafts;
- 79 follow-up self-audits;
- 30 biology launch-audit documents.

One additional controlling Kunz source document sits outside the output directories. Each follow-up request asked the original AI agent to review its saved result. These same-session self-audits preserve the checks and corrections alongside the initial drafts.

The archive SHA-256 is `8b34ba2c10f6f002baeef05be10cde2602da65350ab9f546cafe1335f9a84140`. The public report contains aggregate counts and hashes, without private transcripts or runtime configuration.

## Controlled local state checks

The checks ran locally with the Windows release binary `forge-research 0.4.8`, SHA-256 `7d3acaf1dfbd5241101d84177bc4a66d6d2bf8539e81a6519fadacb8e9017248`, on Windows 11 build 26200 and Python 3.14.0.

### Fixture

Create a new disposable workspace with:

1. One versioned target, moved from draft through locked to active.
2. One imported proof-role artifact, initially an import candidate.
3. One verifier assertion granting current evidence authority.
4. One premise and one goal claim that depends on that premise. Both carry synthetic exact grades and cite the fixture artifact.
5. One obligation linked to the dependent claim with a `PROVES` relation, then strictly discharged.

Synthetic statements and review identities exercise record handling and completion policy.

### Fresh-process reconstruction

Run `context --goal <fixture-goal> --claim <dependent-claim>` through the compiled CLI. Check that the response includes both claims and their dependency edge and that `transcripts_included` is false. Canonicalize the complete JSON by sorting object keys.

Launch twenty separate CLI processes against the closed on-disk fixture. Require every response to equal the baseline canonical JSON. Observed result: **20 of 20 matched**.

The protocol uses normal process exits, a warm operating-system cache, and a fixed two-claim fixture.

### Completion control and evidence withdrawal

Advance the fixture to candidate state. Add four distinct synthetic reviewer identities, assign the final review roles, and record candidate-bound passes citing both claims and the artifact.

After the CLI exits, copy the disposable workspace. Run the completion transition on the clone. Observed result: **COMPLETE**.

On the original fixture, revoke its sole verifier assertion using a distinct synthetic identity. Attempt completion again. Require rejection for missing current verified authority, rather than an unrelated error. Observed result: **completion rejected for missing current verified authority**.

The original claims remained active immediately after evidence withdrawal. The fixture exercises artifact-authority withdrawal and claim retraction as distinct ledger operations.

### Premise withdrawal

Retract the original premise, then read a fresh snapshot. Require all four postconditions:

1. Premise validity is `RETRACTED`.
2. Dependent validity is `INVALIDATED_BY_DEPENDENCY`.
3. The obligation is `OPEN`, with discharge basis `NONE`.
4. The goal has returned to `ACTIVE`.

Observed result: **all four postconditions held in the controlled retraction case**.

## Provenance

The local evidence record retains the executed script, command arguments and exit codes, before-and-after context, snapshots, hashes, and both disposable workspaces. The public JSON contains aggregate results without private paths or session identities.

- Measurement script SHA-256: `6956c266ec7c6494fd6f0df5c1638204a6684012b6781dc356a2d4c144df0b37`.
- Complete local result SHA-256: `db2d79e55296505e11391723bb03a91f10bfcb21ff66fb64cab69cdfc9cc34b0`.
- Measurement start: `2026-09-21T04:43:56.339953+00:00`.

The binary hash identifies the exact executable used for these checks.

For ProteinGym and Terminal-Bench Science, see the [benchmark methods](/evaluation.html#benchmarks) and [downloadable results](/benchmarks.json).
