Skip to content

Add GPT-6.1 Terra (release, 51 models) [WIP] - #247

Draft
MaxGhenis wants to merge 35 commits into
mainfrom
release-gpt-6.1-terra
Draft

MaxGhenis wants to merge 35 commits into
mainfrom
release-gpt-6.1-terra

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

WIP draft. The driver passed review; the release is being staged. Nothing is frozen or published.

The next board release, dashboard-data-20261027, adds OpenAI's GPT-6.1 Terra (card: #245, merged) to dashboard-data-20261014, taking the board to 51 models. The same release installs the reviewed 2026-10-22 reference build (#242), which moves the references from policyengine-us 2.41.0 to 2.60.0.

What this PR adds

  • scripts/finish_terra.py: the release driver. It is the Gemini 4 Argon driver (finish_argon.py) with Muse Wonder's install-references step. It prepares Terra's pinned run, installs the reference build, re-judges the cases that Terra or the moved references re-open, triages, and exports a hash-bound stage.
  • scripts/freeze_terra.py: freezes that bound stage, re-running every gate.
  • docs/terra/: the release spec, the seed digest of release 20261014's audit, and the design note. The design note's result lines are placeholders for the lead.
  • tests/test_finish_terra.py and tests/test_freeze_terra.py, on synthetic fixtures.

Review so far

  • Round 1 (GPT-6.1 Sol): REQUEST_CHANGES. The commits after 9c3fa2e address its four findings:

    1. The judge identity, runner and UTC timestamp are now required for every verdict this release judges, not only when Terra is among the wrong models. The same check over the staged audits of releases 20261014 and 20261013 passes every verdict they re-judged.
    2. The judge provenance note is generated from the record's entries, and export and the freeze refuse any other note.
    3. The freeze, and every step that resumes from stage.json, refuse a stage whose early or partial flag is anything but the boolean false. (install-references and a first bind-seed run before a stage receipt exists.)
    4. Failing-case tests now cover the release gates in the review's table. One synthetic non-dry freeze runs through the real gates. In 42 one-gate-off mutants, 39 make a test fail.
  • Rounds 2a and 2b (GPT-6.1 Sol): REQUEST_CHANGES. Round 2a agreed findings 1 to 3 are resolved and finding 4 is partial. Round 2b, a gate-coverage audit, found three more gaps. The 13 commits after d2027b5 address both rounds:

    1. Export and the freeze reject any by_model path before reading predictions, so every reader uses the bound combined predictions.csv.
    2. A case's parse_failure_only flag is derived from the predictions; a flag that disagrees in either direction stops export and the freeze.
    3. Every verdict this release judges must carry the hardened runner's isolation, token authentication and a transcript bound to its prompt and answer. Removing the isolation field no longer skips those checks.
    4. The export receipt binds the repository files the freeze reads (dependency files, the reference build's timing record, the snapshot manifest, data.versions.json and the rendered paper), and scoring's spec and weights files must equal the base commit's.
    5. Export builds its outputs in a scratch copy and promotes them only after every check passes; a refused export leaves the stage byte for byte unchanged.
    6. The provenance record is verified as a temporary candidate before an atomic replace, and each entry's group must match its sidecar's declared account.
    7. The run-state evidence-kind check and the applied-adjudication check each have their own failing case, and the baseline loaders are tested against real committed blobs.

    Each new gate has a reversal check: turning it off makes its new tests fail (10 reversals, 31 failures). The build also checked releases 20261014 and 20261013 against their committed records. Neither release has a by_model path, a parse-only flag that disagrees with its predictions, or a verdict judged without isolation.

  • Round 3 (GPT-6.1 Sol): REQUEST_CHANGES at 50f023d. It agreed the round-2 findings are fixed except two write-ordering paths, and found one new gap. The 7 commits after 50f023d address them:

    1. Export and the freeze refuse any verdict-bearing directory outside the manifest's judged cases, and any directory symlink under the cases. The published provenance tally reads only the validated, receipt-bound cases.
    2. Every audit consumer reads predictions through an explicit reader that opens only the bound combined file, never looks for per-model files and never writes. A by_model file that appears during the reference read is refused, and the combined file is left unchanged.
    3. CLI export runs triage and every later check in a disposable copy of the stage, then promotes the accepted outputs together. A refusal at any step leaves every stage file unchanged, its diagnostics, annotations and release receipt included.
    4. The design note lists the freeze's writes in order and says which failures after the first write need the stage restored or re-exported. A pointer-only failure, or an identical repeated freeze, leaves the bindings valid.

    Each fix has a reversal check: turning it off makes its new tests fail (4, 1 and 2 failures). The three shared modules gain keyword-only parameters whose defaults keep earlier releases' behaviour. At 8d01221, tests/test_finish_terra.py has 670 passed and 1 skipped, and tests/test_freeze_terra.py has 221 passed, both run serially.

  • Round 4 (GPT-6.1 Sol): AGREE at 8d01221, with no findings. It re-ran round 3's probes against the export and freeze gates, traced every audit consumer to the combined-only reader, checked the freeze's write order against the design note, and compared the shared modules' defaults with releases 20261014 and 20261013.

Staging so far

  • docs/terra/input_pins.json pins the board run's predictions and run state (b0cfa0d).
  • pyproject.toml and uv.lock pin policyengine-us 2.60.0, the reference build's engine (0805c28).
  • The reference build is installed and the stage is prepared. The Opus 5.5 judge is running on the isolated judge login.

Plan

  1. Pass round 4. Done.
  2. Stage the release from Terra's run, re-judge, triage and export, then freeze.
  3. Rerun the publication check on the newest policyengine-us release.
  4. Fill the design note's result lines and the paper's release prose.
  5. Publish only on Max's go.

Invariants the gates enforce

  • Every incumbent keeps release 20261014's serialized stats byte for byte on the base references; only the four approved reference moves may change a score.
  • A stage's every input is hash-bound in its receipt, and the freeze rebuilds the payload from those bound inputs before writing anything.
  • No rehearsal stage (early or partial) can become a release.
  • Every verdict judged for this release names the release's judge, runner and a UTC timestamp, and ran isolated under token authentication.
  • Export and the freeze read predictions only from the bound combined file.
  • A refused export, including a refusal in the CLI's triage step, leaves every stage file byte for byte unchanged. The freeze's own release gates run before it writes. Checks inside the shared freezer still run after its writes begin, and the design note says which of those failures need a restore or a re-export.
  • The published judge provenance counts only the validated, receipt-bound cases.

🤖 Generated with Claude Code

MaxGhenis and others added 10 commits October 26, 2026 17:39
Argon's finish/freeze driver plus Muse Wonder's reference install, built on
a Subfleet lane (run 20261026-141122-pb-terra-driver; 164 tests passed, ruff
clean there). Review r1 (GPT-6.1 Sol) requested changes; the fixes follow.

Co-Authored-By: GPT-6.1 Sol (Subfleet) <noreply@openai.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
validate_verdicts checked the judge's requested and reported model, runner
and timestamp only when a new model was among a case's wrong models. A case
re-opened because the installed build moved its reference, with Terra right
and only incumbents wrong, passed with any judge and no timestamp.

Every verdict that is not carried over from the seed (and any verdict naming
a new model) must now show JUDGE_MODEL requested and reported, the runner the
judge step runs (JUDGE_RUNNER, scripts/run_audit_claude.sh) and an ISO 8601
judged_at_utc in UTC. The judge step runs JUDGE_RUNNER, so the two cannot
drift apart. Tests cover a moved reference with Terra right and an incumbent
wrong under a wrong judge, a missing or non-UTC timestamp and a wrong runner,
in the driver and at the freeze, plus a property test of the identity gate.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The note finish_terra wrote into docs/terra/judge_provenance.json was
release 20261014's: one setup-token login, effort xhigh, judges run "two at
a time and then one at a time", and a retry history. A Terra run on another
listed account or at AUDIT_EFFORT=high would have published those claims.

provenance_note now builds the note from the entries alone: how many new
verdicts there are, and tallies of the judge model each sidecar reports, the
effort and template each records and whether each judge ran isolated, plus
what the verifier checks of an isolated entry. Logins stay in the group
counts. verify_judge_provenance refuses a record whose note is not the one
its entries give, so export and the freeze reject a hand-edited or inherited
note.

Ports Argon's judge provenance and transcript tests (record keys, tallies,
withheld addresses, token login, every transcript defect, the differential
check against the GPT-6.1 Sol driver's port) against this driver, and adds
tests that runs on each listed account at efforts high, xhigh and max get a
note stating only what their sidecars record, a round-trip property for the
note's tallies, and refusals of an inherited or edited note.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
freeze_terra read stage.json without its early and partial flags and
checked only the export receipt's partial field, so an audited stage marked
early, its receipt's stage hash refreshed, passed the freeze's own gates.
The driver's resume check read the flags by truthiness, so a missing flag
raised KeyError and a 0, null, [] or {} flag passed.

require_release_stage requires both flags to be the boolean False. The
driver's resumed steps and the freeze's verify_upgrade (before anything else
it reads) call it. Tests mutate each flag to True, missing and several
non-boolean values, at every resumed step and at the freeze, and a stage.json
that is not an object; the freeze fixtures now carry the two flags a real
prepare writes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Each later step refuses a stage that overlaps a read-only input, holds a
symlink, has changed staged inputs, or lacks the installed build or its
exclusion record. The seed section exercises the real prepare_cases on a
synthetic three-household board: a seed the committed digest does not
record, an edited or removed carried verdict, prompt partitions moved
between lists, a forged manifest the predictions contradict, bind-seed
disagreement before and after prepare, and a moved reference without an
installed build.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A synthetic Terra run on every reference key of release 20261014's
snapshot (read from git) folds onto two synthetic incumbents. Each
preparation gate gets a failing case: household completeness, unknown
or missing outputs, synthetic run states, treatment fingerprints,
provider identity, call and usage disclosures, registration and pricing,
a stale by_model folder, a short fold and a snapshot off its pins.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The judge loop runs against a scripted runner on a prepared seeded stage
with the real collect_audit: a verdict the identity, template or model
gate refuses, or a hedged one, is set aside and re-judged; three empty or
refused passes stop the step; an edited carried verdict or a missing seed
binding stops it before any judge runs. The triage port covers missing,
invalid and hedged verdicts, flags and unresolved rows, the case count,
exclusion agreement, record edits and drops, hand-written restatements,
date conventions and wording amendments.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A stage with the build installed and bound, Terra's pinned run and an
empty provenance record exports a receipt binding the build copy, the
run and the prepare-time hashes. Each refusal leaves no payload,
data.json or receipt: a staged or committed reference off the build's
pins, a run off its input pins, prepare-time hashes that no longer hold,
Terra rows that differ from the run, a provenance record the stage does
not give, a payload the dashboard schema refuses (also with the real
validator), a roster other than the incumbents plus Terra, and scope
drift. Early and partial exports never get a receipt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The exact-build pins refuse any changed byte first, and those tests stay.
These tests re-pin REFERENCE_BUILD, the sidecar's CSV and actions hashes
and the audit's publication record to the mutated bytes, so each of 47
mutations is refused by its own gate: the sidecar revision, the CSV
against its changed list, the actions, the traces, the explanations and
the exclusion record. An unchanged build re-pinned the same way passes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add section H to tests/test_freeze_terra.py: one synthetic stage, built
by the real driver steps (triage, write_judge_provenance, export) on the
pinned reference build, that freeze_terra.main accepts both as a dry run
and as a real freeze. Every gate in main runs unpatched. The stand-ins are
the data sources and the freezer's internals, each marked MOCK in the
section's header: Terra's run and the incumbent's answers, the base
payload, the two exporters' boards, the incumbent baseline rows, the seed
digest, the input pins as committed at HEAD, and freezer.main with its
serving and registry lookups. The driver's, freeze's and freezer's paths
point at a temporary checkout.

From that accepted stage, each test makes one change and asserts the
freeze refuses it before writing anything: receipt identity and binding,
the release spec and date, rehearsal flags, the provenance record and
note, payload edits, the export scope check, the strict dashboard
validator, roster and counts, verdicts, seed and prompt partitions, a
forged wrong-model claim, prepare-time hashes, Terra's rows, input pins,
annotation and adjudication record edits, the installed build's
narratives, drops, exclusions and scoring, held references, incumbent
prediction drift, incomplete run state, treatment off the registry, an
answer before the response window, and each defect in what the freezer
writes, which verify_frozen must catch.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@vercel

vercel Bot commented Oct 27, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
policybench-site Ready Ready Preview Oct 27, 2026 3:06pm UTC

Request Review

MaxGhenis and others added 13 commits October 26, 2026 21:13
Co-Authored-By: GPT-6.1 Sol (Subfleet) <noreply@openai.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: GPT-6.1 Sol (Subfleet) <noreply@openai.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: GPT-6.1 Sol (Subfleet) <noreply@openai.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: GPT-6.1 Sol (Subfleet) <noreply@openai.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Tighten the former unhardened-verdict acceptance test to require refusal.

Co-Authored-By: GPT-6.1 Sol (Subfleet) <noreply@openai.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: GPT-6.1 Sol (Subfleet) <noreply@openai.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: GPT-6.1 Sol (Subfleet) <noreply@openai.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: GPT-6.1 Sol (Subfleet) <noreply@openai.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: GPT-6.1 Sol (Subfleet) <noreply@openai.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: GPT-6.1 Sol (Subfleet) <noreply@openai.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: GPT-6.1 Sol (Subfleet) <noreply@openai.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: GPT-6.1 Sol (Subfleet) <noreply@openai.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ation

Supply hardened authentication and transcript evidence before each identity mutation, preserving the existing refusal assertions.

Co-Authored-By: GPT-6.1 Sol (Subfleet) <noreply@openai.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 4 commits October 26, 2026 23:11
Reject unlisted verdict directories before export or freeze and pass validated case IDs to the shared tally. Its historical default remains unchanged.

Co-Authored-By: GPT-6.1 Sol (Subfleet) <noreply@openai.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Keep prediction discovery and writes out of audit consumers, including when a shadow appears after the entry guard. Preserve shared audit defaults for historical releases.

Co-Authored-By: GPT-6.1 Sol (Subfleet) <noreply@openai.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Run the complete CLI export path in an independent stage copy and promote its diagnostics, annotations and payload only after every gate passes, with the receipt last. Exercise unresolved triage and downstream refusals against existing stage bytes.

Co-Authored-By: GPT-6.1 Sol (Subfleet) <noreply@openai.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Describe checks that run after writes begin and distinguish invalidated repository bindings from pointer-only failures and identical repeated freezes. Preserve the freeze write order.

Co-Authored-By: GPT-6.1 Sol (Subfleet) <noreply@openai.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 3 commits October 26, 2026 23:16
Supply carried sidecars with identity fields for the real tally test, and refuse directory symlinks that can conceal unlisted nested verdicts.

Co-Authored-By: GPT-6.1 Sol (Subfleet) <noreply@openai.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: GPT-6.1 Sol (Subfleet) <noreply@openai.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
List the numeric wrong rows and match verdict coverage so the existing isolation assertion reaches its original gate under the stricter inventory check.

Co-Authored-By: GPT-6.1 Sol (Subfleet) <noreply@openai.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 2 commits October 27, 2026 00:45
docs/terra/input_pins.json records the sha256 of the supervised run's
predictions.csv and run_state.json, written by finish_terra.py
--step pin-inputs from terra-runs/terra/run. prepare copies those files
into the stage, and export and the freeze refuse a staged copy whose bytes
differ from these pins.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The release installs reference_audit/2026-10-22-engine-upgrade/reference-build/,
which was computed on policyengine-us 2.60.0. pyproject.toml and uv.lock now
pin that version (uv lock --upgrade-package policyengine-us; no other package
moved), so the install step and the freeze check the build against the
engine the repository declares.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 2 commits October 27, 2026 07:39
Add schema enforcement to the fake CLI for StructuredOutput retries within one session. Cover case model bounds and IDs, a single-model case, and the exact schema digest in the sidecar. Keep malformed-answer injection available for the existing extraction and coverage tests.

The five regressions fail against the runner at 0805c28. The fixture limits Git discovery above its temporary tree so workspace-local test directories retain the nested-repository isolation checks.

Co-Authored-By: GPT-6.1 Sol (Subfleet) <noreply@openai.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Build the CLI schema in classify_one from the shared audit schema and the case manifest. Require the manifest model count and constrain model IDs to that case so schema refusals can be corrected within the same judge session.

Record the exact per-case schema argument's SHA-256 in verdict.meta.json and describe the constraints in the runner header. Keep the shared schema and post-extraction validator authoritative for duplicate IDs and missing manifest cases. Update the isolation expectation and extractor fixture arguments for the per-case schema.

Co-Authored-By: GPT-6.1 Sol (Subfleet) <noreply@openai.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The setup-token opt-in's token (sha256 6a6daf56361b) was declared by its
opt-in date in releases 20261013b and 20261014. This release's launcher
reads it from agent-secret's pb-judge and declares it that way, so
provenance generation found no group for the declared account. Map the
second declaration to the same isolated setup-token group, and test that
both declarations tally as one login.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis

Copy link
Copy Markdown
Contributor Author

CI note at 9a3bd31: the one failing test, tests/test_reference_upgrade.py::test_the_reference_engine_is_the_last_upgrades[working_tree], is expected at this head. 0805c28 pins policyengine-us 2.60.0 ahead of the freeze, and the freeze is the step that writes the 2.60.0 upgrade's reference refresh and bundle record into the working tree (scripts/freeze_terra.py, the installed engine upgrade's regenerated_at_utc and policyengine_bundles). The rest of the suite passes (6,719 passed, 89 skipped). The test must pass at the freeze head before this PR leaves draft.

🤖 Generated with Claude Code

This branch was successfully deployed

1 active deployment
Preview — 9a3bd31a Deployed Oct 27, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant