Skip to content

Add Claude Haiku 5.5 and move the references to policyengine-us 2.38.6 (release dashboard-data-20261010, 47 models) - #208

Merged
MaxGhenis merged 78 commits into
mainfrom
release-haiku55
Oct 10, 2026
Merged

MaxGhenis merged 78 commits into
mainfrom
release-haiku55

Conversation

@MaxGhenis

Copy link
Copy Markdown
Contributor

Release dashboard-data-20261010. Claude Haiku 5.5 joins the board (47 models), Max's rulings of 2026-10-06 apply (d1022, d994), and the references move from policyengine-us 2.15.17 to 2.38.6. That is the first PyPI release with #10027, #10031, #10032 and #10034 (wheel uploaded 2026-10-10 05:39:47Z, version commit e92f4c6b95). Board snapshot: "Snapshot 2026-10-10".

Board

What moves

Change Outputs Evidence
2.38.6 fixes the engine defects behind them; regenerated and scored 18: 14 excluded in 20261006, plus d1022's four engine-defect cells (AZ 018, OH 025, CO 043, NY 082), which stay scored instead of being excluded. 16 land within $1 of their exclusion record's corrected value. Two (005 state, 082 federal) are held to the audit's fix-module values on 2.37.2. reference_audit/2026-10-09-engine-upgrade/, sidecar regenerated_exclusions
d1022 scope: dependent must file their own return 4 newly excluded (PA 123, MO 093; federal and state income tax) reference_audit/2026-10-05-reference-adversary/ (#200); ruled records in docs/haiku55/spec.json
d994: Louisiana's 2026 standard deduction, published after the freeze 2 newly excluded (LA 051, 077) reference_audit/2026-10-05-louisiana/README.md; docs/haiku55/spec.json
2.38.6 counts Indiana county income tax; no prompt names the county 2 newly excluded (IN 015, 067 local income tax) sidecar new_exclusions
2.38.6 counts Idaho's $10 permanent building fund tax ID 076 state income tax: 6,818.34 → 6,828.34 (scored) sidecar changed
Rechecked on 2.38.6; stay excluded 17, including CA 099 state. It computes at its record's corrected value, but its reference rests on a further engine defect: California does not conform to the federal educator-expense deduction (R&TC 17072). The US hub holds a draft fix. sidecar excluded_outputs_rechecked
  • Each model is scored on 1,926 of 1,984 outputs (was 1,920 = 1,920 + 14 − 8). Exclusions go from 64 to 58 in 42 households (42 unlisted input, 14 engine defect, 2 later law). Adjudications go from 77 to 70: 14 decisions on regenerated records are dropped (the Regenerate the SNAP child support reference (r33) now that policyengine-us#9586 has merged: release 20260922c #178 precedent) and 7 are added.
  • 23 references change in all: 18 regenerated, 2 newly excluded, Idaho, and two moves within $1. Each changed output has a corrected narrative (reference_audit/2026-10-09-engine-upgrade/hand_corrected_narratives.{json,md}).
  • d1029 (whether v2's income tax outputs should cover only the head and spouse's return) is undecided and v2-only. Nothing here depends on it: d1022 excludes the four dependent-return cells.

Driver, gates, invariants

scripts/finish_haiku55.py runs the release: pin-inputs, prepare, install-exclusions, install-references, judge, adjudicate-exclusions, provenance, triage, export. scripts/freeze_haiku55.py freezes it. The references are built by reference_audit/2026-10-09-engine-upgrade/scripts/build_references_upgrade.py, run through sweep_timing.py run. That wrapper checks the installed engine against its wheel RECORD in the computing process, with a fresh bytecode cache. It refuses symlinks, unrecorded importables and editable installs, and it requires fresh outputs. Six pre-T review rounds (GPT-6.1 Sol) covered this machinery.

Invariants (tests):

  • Every scored move is explained by an action. An approved output must move, and an excluded output that moves needs a recheck. A new exclusion must move. The records don't depend on the order of the actions. (test_build_references_upgrade.py, Hypothesis.)
  • Installing references is idempotent for any build. The ruled records come out in one order whatever the files' order. The excluded-set equality holds for any dropped decisions. (test_finish_haiku55.py, Hypothesis.)
  • The frozen manifest changes only where the release may; every other leaf equals 20261006's. Payload differences are empty exactly when the bytes match. (test_freeze_haiku55.py, Hypothesis.)
  • A sweep follows its engine's upload and install. verification/sweep_timing.json: 2.38.6 was the newest release when the sweep began (first output 05:45:24Z) and still the newest at 06:53:19Z. (test_sweep_timing.py.)
  • Differential: a recomputation of the board from the scorer equals the payload's exact rates to 1e-9 for all 47 models. The note's facts recompute from the frozen snapshot. (tests/test_notes.py.)
  • The restored-target sentence counts both kinds of target for any mix of record and fix-module targets (Hypothesis, with the sidecar's own two fix-module targets).

Asset

Uploaded as non-latest before CI: https://github.com/PolicyEngine/policybench/releases/tag/dashboard-data-20261010

  • dashboard-data.json: 128,756,688 B, sha256 f834478e65191f8426ef479506f9f6fe32c2e7107f30fdbf4e7ba0e6acba6410. GitHub's asset digest matches, and so does app/src/data.artifact.json.
  • predictions.csv.gz: 43,680,233 B, sha256 0183ab75…, byte-identical to the frozen snapshot copy. GitHub's digest matches.

Validation

  • Paper render: exit 0 (HTML and PDF). Re-pinned with --rendered-only.
  • App: bun test tests 171/171, bun run lint exit 0. uv run ruff check . and ruff format --check . pass.
  • Release tests (test_notes, test_paper_results, test_disclosures, test_adjudications): 151 passed, 2 skipped. The full suite runs in this PR's CI; the local run is held because free disk is under the fleet's floor.
  • Independent review: Subfleet 20261010-032143-pb-haiku-final-review (GPT-6.1 Sol, hard tier). Its verdict will be posted here.

After merge: gh release edit dashboard-data-20261010 --latest, then a prod check on policybench.org (47 models, Claude Haiku 5.5 at 79.6%, Snapshot 2026-10-10). Max posts the social drafts.

🤖 Generated with Claude Code

MaxGhenis and others added 30 commits October 9, 2026 13:35
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
docs/haiku55/spec.json lists d1022's eight records (pinned by sha256 in
reference_audit/2026-10-05-reference-adversary/proposed_changes.json) and
d994's two Louisiana records (reference_audit/2026-10-05-louisiana/
proposed_exclusions.json, reference_law_published_after_freeze: the 2026
return amount Louisiana published, $12,838, came after the freeze), with
their adjudication classes and reasoning.

- install-exclusions writes release 20261006's 64 records plus the ten into
  the stage and rebinds the record in stage.json.
- adjudicate-exclusions decides the ten from each case's bound Opus 5.5
  verdict, restating scenario_051's 2026-09-22 regeneration in place.
- Triage accepts exactly those entries and the 2026-10-06 wave in the date
  conventions.
- Export requires 1,910 scored outputs per model and, with 20261006's record
  put back, byte-identical incumbent modelStats.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The excluded-output note said the frozen value of a
reference_law_published_after_freeze record "used the engine's
projection". Louisiana's $12,835 (d994), the first such record, is a
computation from published CPI-U, not a projection, so the note now says
"the engine's own figure", which fits both. The Louisiana records state the
ruling as the earlier records do ("decision d994"). Adds Claude Haiku 5.5's
display name to the paper and app rosters for the release that folds it in.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… remote cost map

The card review of #201 found that the parametrized registration test reads
litellm's already-loaded map, which the remote fetch can fill, so it passes
without the local entry. This test disables the remote map in a subprocess,
checks the bundled backup lacks the newest ids, and requires each locally
registered model at its override prices.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… three driver bugs

- scripts/freeze_haiku55.py adapts freeze_gpt61sol.py. It rebuilds the
  payload from the receipt-bound stage, checks the installed exclusions, and
  writes the snapshot (74-record exclusion record), annotations, pointer and
  version label. It appends this release's wording amendments to release
  20261006's committed list rather than replacing it.
- tests/test_finish_haiku55.py ports the GPT-6.1 Sol driver tests and covers
  the new steps (reworded cases, spec records, exclusion build, ruled
  adjudications, date conventions, install, the scope gate), with Hypothesis
  properties. tests/test_freeze_haiku55.py does the same for the freeze, on
  fixtures only.
- docs/haiku55/design.md: procedure, gates and invariants.

Driver fixes the new tests caught:
- a restated scenario_051 was rebuilt with release 20261006's judge fields,
  so triage, export and the freeze would refuse it;
- reworded_since_seed compared rows with their pandas index, so a reordered
  file would read as reworded;
- a re-export after the freeze was refused at the committed exclusion
  record, which the freeze replaces with the release's.

The spec's record_edits now name each engine defect's upstream fix (#9928,
#9946, #9948, merged 2026-10-09; Ohio #10020, open, #9925 related). The
later-law docstring no longer calls the frozen value a projection.
592 passed, 2 skipped, 1 strict xfail (the spec's adjudications_written_on,
set when the adjudication step runs).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
--step provenance builds docs/haiku55/judge_provenance.json from each
re-opened case's sidecar: its hashes, its sidecar fields with addresses
withheld, and its group by declared account (the pb-judge setup-token
login, or subfleet lane claude-18's token for the cases judged after that
login's weekly limit). It then runs verify_judge_provenance on the result,
so export's gate holds by construction. Tests cover the grouping, the
refusals and, locally, the live stage.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
BASE_COMMIT is #202's merge on main (9ce4ade), BASE_SHA256 the shipped
payload aa34e5c9..., and the exclusion pin the shipped record (92741dfd...,
whose two scenario_081 sentences the release's review reworded). Reference
explanations, values, scenarios and predictions are unchanged, so every
staged prompt and verdict still binds. The design note's base table follows.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The spec names 2026-10-09 as the day the ten ruled outputs' decisions were
written (adjudicate-exclusions). docs/haiku55/judge_provenance.json lists the
231 new Opus 5.5 verdicts: 210 on the pb-judge setup-token login and 21 on
subfleet lane claude-18's token after that login's weekly limit. Each was
judged isolated with a token login, and every transcript passes the
runner's checks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ewer policyengine-us)

Generalized from reference_audit/2026-09-28/scripts/build_references_latest.py
(#182). Reads release 20261006 from git, recomputes all 1,984 outputs with the
pinned pre-freeze conventions, and gates every move against an actions file:
approved scored moves, regenerated engine-defect exclusions, new exclusions,
and rechecked excluded outputs that keep their decided values (rule 5).
Narratives regenerate the explanation of each changed output.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
EngineUpgrade and its accessors key the paper's figures to the last upgrade,
keep the September (2.15.17) facts pinned to that revision, and rebuild the
exclusion record and references as they stood on any date. A mock second
upgrade (tests/second_engine_upgrade.py, labelled mock data) exercises them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Gates a reference build against release 20261006 before writing anything,
renders the audit it gives in memory, installs it in place, sets aside only
the verdicts whose prompts change, and holds every later step (exclusions,
adjudications, triage, export) to the installed build. The freeze refuses an
upgraded stage until it learns to carry one.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tale record

A 20261006 engine-defect record decided on 1.755.4 keeps that engine's
corrected value, which other engine changes have since moved (scenario_005
federal: record 107,198.34; the fix module on 2.35.3 gives 108,525.58). A
regeneration now names its audited target: the record's alternative_value
(kind record), or its fix modules' corrected value on an older engine that
still has the defect, from a committed evidence file (kind fix_modules). The
builder applies the modules again on the new engine and refuses if they still
move the output; the driver re-derives the target from the evidence file and
the modules committed at BASE_COMMIT. Evidence mode writes that file.

Also: copy r19_irs_sales_tax_2025.json beside the conventions it serves, and
write the judge provenance record with indent=1 as docs/gpt61sol's is.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
24 engine-defect outputs, each on 2.37.2 with the pinned conventions alone and
with its audited fix modules after them. Every module still moves its output
beyond $1 there, so each defect is present on 2.37.2; the corrected values are
the targets a later engine's regeneration must land on.

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

Runs the builder's regeneration gate early: each evidence item must land
within $1 of its corrected value, and its fix modules must leave it
unchanged, on the policyengine-us that PYTHONPATH puts first.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
docs/haiku55/spec.json's upgrade_adjudications holds one item per output the
installed build newly excludes (the Indiana county cells), in the ruled
adjudications' shape. adjudicate-exclusions appends each one's entry, built
from its item, its build record and its case's bound verdict and dated by the
record; the date conventions then name the upgrade's wave, with the day the
spec says its decisions were written. Triage's gate holds the staged record
to exactly those entries, so every excluded output stays decided.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Renders byte for byte as before. The upgrade facts move to
r.september_upgrade and r.excluded_outputs_by_engine_version_phrase, so a
second engine upgrade can add its own without changing them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…their merges

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Max, 2026-10-09: wait for the fixed engine and regenerate the cells it fixes.
The spec now names d1022's four defect cells as regenerated by the upgrade,
decides the two Indiana county outputs the upgrade newly excludes
(upgrade_adjudications), and dates those decisions. The Idaho approval's basis
cites policyengine-us #9810 and Idaho Code 63-3082.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The builder and policybench.paper_results name it "record"; the driver read
"removed_record", which only its mock build wrote, so a real build failed
install-references. A local test now runs the 2.37.2 rehearsal build through
load_build.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A rebuild on a newer engine rewrites every changed output's narrative, and
judges' prompts render it, so each rewrite costs a verdict. --reuse-from keeps
the earlier narrative when the value, cause, grounding (its engine's name
aside), PolicyEngine variable and trace are byte-identical and the narrative
does not name the earlier engine; the reused rows are listed beside the
output.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…he old annotations

On the upgraded references the judge flagged WI 064 state, regenerated by
#9801: it applied a $500 Wisconsin capital loss limit. The 2025 Wisconsin
Schedule WD limits a net capital loss to $3,000 ($1,500 married filing
separately) or less, as policyengine-us does, so the reference stands. The
spec's triage_adjudications now carries such decisions (affirmed references
only, on re-opened cases, dated by a wave the release names, read only with
an upgrade installed); adjudicate-exclusions appends each from its case's
bound verdict after dropping the regenerated records' decisions, and the
gate holds it exact. A dropped case's new entry is new, not a restatement.

The upgrade's scope export puts release 20261006's references back but keeps
the stage's annotations, which follow the new references, so it now checks
the dashboard schema without requiring an annotation on every wrong answer;
it is read only for modelStats. The judge provenance record describes the
working stage that carries the upgrade.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
freeze_haiku55.py now freezes an upgraded stage as strictly as a plain one:
it re-gates the installed build and the recorded drops, requires the export
receipt to bind every retained build file, holds the staged, committed and
manifest reference pins to the build (scenarios stay release 20261006's),
takes the build's explanations, exclusion record and counts (69 records,
1,915 scored outputs on the 2.37.2 rehearsal), names exactly the manifest
fields the last upgrade may change, counts exclusions by their recorded
engines in the version text, and checks the adjudication record with the
upgrade's new-exclusion and triage decisions. freeze_snapshot.py follows the
sidecar's last engine_upgrade revision, not the first. A stage without an
upgrade freezes byte for byte as before.

Built on a Subfleet build lane (GPT-6.1 Sol); its final regression run was
stopped under a disk alert and re-run here. The scope export keeps calling
release_20261006.export_payload, now with require_failure_annotations=False.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…and tolerances, correct eight narratives

From the GPT-6.1 Sol review of the upgrade machinery (findings 3-8; 1 and 2
were already fixed in the scope export and triage commits):

- A fix module that loads a sibling (r01, r02 and r03's v2 modules) now pins it:
  the builder and the evidence record each sibling's bytes as committed at the
  base, and the driver re-derives them. The 2.37.2 evidence is re-run with
  them; its values are unchanged.
- Non-finite engine, module, evidence and action values are refused.
- The installer requires an approval for every scored move beyond $1, and
  holds each regeneration to its own tolerance (at most $1).
- Narrative reuse checks the earlier narratives file is that build's (each
  changed row once, for the US, no error, at the build's value), and keeps a
  narrative naming the engine only when the engine is the same.
- A narrative states its amount only as a dollar figure equal to the cent; a
  bare "2026" no longer passes for $0.
- Eight narratives that misstated a figure or the mechanism behind the change
  are hand-corrected from the engine's own values
  (hand_corrected_narratives.json, with the reasons in its .md).

Also re-pins the spec to #200's merged proposed_changes.json (each record now
names decision d1022; CO 043's reading is reworded), names d994 on the two
Louisiana records, and drops an unverified Idaho statute citation from the
drafted approval basis.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The case's re-judged verdict, after its narrative was corrected, raises no
flag, so the release records no triage decision; the design note keeps the
earlier verdict's $500 capital-loss hypothesis and why the reference stands.
The judge provenance record follows the re-judged stage.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The board row forces the answer tool, which leaves Claude's extended thinking
off (the onboarding probe's forced-tool response carries no thinking block);
the 2026-10-08 re-run with tool_choice: auto declares the tool and leaves it
to the model. Its predictions (results/local/haiku55-stage/auto-run, model
renamed claude-haiku-5.5-thinking) are committed as a deterministic gzip, and
the by-variable and rescore scripts take it. Its scores, would-rank and
by-variable asset are written by the rescore after the 47-model board is
frozen.

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

Both are drafts: every bracketed value is the rehearsal's and becomes a fact a
test recomputes from the frozen release; the note and paper proper replace
them once the release on the fixed policyengine-us is frozen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…pgrade's counts

ruled_records gathers the records the 2026-10-06 rulings decided, from the
exclusion record and from a later upgrade's regenerated_exclusions, and
refuses one that names no ruling; the counts split them by ruling and by
whether the upgrade regenerated them. Word forms of the last upgrade's counts
use digits above ten. Tested on the real 2.37.2 rehearsal build (local) and
the mock second upgrade, whose 2026-10-06 record now names its ruling.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 16 commits October 10, 2026 00:28
The release is built on the policyengine-us release that carries #10032,
which reaches PyPI on 2026-10-10 UTC: the tag, snapshot date, upgrade wave
day, note, judge-evidence file and the card and test names follow.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The engine check and the builder now run in one process under the venv's
interpreter (ENGINE_RUNNER via run_on_engine), launched with -P and a
fresh, empty bytecode-cache prefix: no script or working directory joins
the import path, and no __pycache__ beside the sources is read, so every
module compiles from the verified source. The check also refuses
unrecorded importable files (sourceless bytecode, native extensions) and
accepts sha384 and sha512 RECORD hashes. sweep_timing.py run runs the
reference build the same way.

Regressions run the real runner on MOCK installs: stale unchecked-hash
bytecode that a plain interpreter executes, a package beside the builder
script, an unrecorded native extension, each permitted hash algorithm, and
a missing scratch parent.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…pre-T review round 5)

The engine check refuses any symlink in the installed package: a linked
directory hid its files from the scan and could shadow a recorded module,
so installs must be copies (uv's default link modes). sweep_timing.py run
refuses an existing receipt or an out-dir already holding computed.csv,
and refuses after the run unless the builder wrote a new one; path
arguments are resolved in the parent, which a new test showed mattered:
the child runs in the repository root, so a relative --out-dir named
another directory there.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
sweep_timing.py run now parses the builder's arguments with the builder's
own flags (equals forms, abbreviations, last occurrence), refuses unknown
ones, resolves every path and passes them on in one canonical form. The
file it holds to freshness is the one the builder writes: --computed-csv
when given, else <out-dir>/computed.csv. A test keeps the replica's flags
equal to the builder's.

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

The narrative writer's drafts were checked against each output's trace by an
independent reviewer; these texts state the final engine's value and figures,
and the notes give what each draft got wrong.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…r expenses

The release's judge flagged the regenerated reference: California does not
conform to the federal educator expense deduction (FTB Instructions for
Schedule CA (540), Section C, line 11), and policyengine-us 2.38.6 still
allows it in California AGI, so the reference is about $26.90 low. The
output keeps its record (the build's actions list it under
excluded_outputs_rechecked), and its corrected narrative comes out: the
release installs 23 corrected narratives, not 24.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ine-us 2.38.6 references

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e 2.38.6 board

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…r defect

An engine-defect record whose output later engine changes moved is judged
fixed against the corrected value the audit's committed fix-module
evidence gives, not only the record's own value: CA 005 and CT 120 federal
income tax land on theirs, so the IRA phase-out they rest on is no longer
counted unfixed. A record whose recorded defect is fixed but whose
reference rests on a further defect the engine has (CA 099's California
income tax) is its own kind: counted with the defects upstream has not
fixed in the abstract and limitations, and said so in the paper. A landed
record that names neither reason is refused.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The card's engine, October move and exclusion breakdown, the paper guide's
counts, the app's engine constant and the release note's facts follow the
frozen release; the note's match count is the lower median (half of the
newly scored outputs are answered within $1 by at most one model).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Re-pins the rendered PDF and web files in the manifest and paperSnapshot,
syncs the app's serving config with the frozen copy, and commits the sweep
timing and publication-check record the card and paper cite.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The judge-verdict dating script built on the working tree's evidence, so a
rehearsal pass's 2026-10-09 wave (release dashboard-data-20261009) survived
into the T evidence beside the real 2026-10-10 wave. The script now keeps
release 20261006's waves and rewrites this release's on every pass, with a
regression test, and the evidence is regenerated from the T stage (only
that wave's six lines change; the restatements file is byte-identical).

Test pins move from the rehearsal to T: 70 adjudications (14 regenerated
records' decisions dropped), 58 excluded outputs in 42 households, 1,926
scored per model, 659 parse failures (644 less four on the new exclusions
plus 19 on the 14 restored outputs), 718 contract violations, 8,001/7,997/
2,138 audit counts, GPT-6 Sol's 95.6% headline, and Fable 5.1's program
rates (federal 67/84 after seven restored outputs and two removed). The
restored-target mock tests now count the sidecar's own two fix-module
targets beside the mocked ones, and the judge-day check for the 2026-10-06
wave is back to the 2026-10-08 and 2026-10-09 runs it reviewed.

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

vercel Bot commented Oct 10, 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 10, 2026 7:43am UTC

Request Review

… file

Final review (20261010-032143-pb-haiku-final-review) and the PR's first CI
run:

- Blocker: test_reference_exclusions and test_snapshot_artifacts still held
  rehearsal counts. They now pin T's: 58 exclusions (42 unlisted input, 14
  engine defect, 2 later law; 38/18/2 by engine), 8,001 annotated rows,
  7,997 misses, 10,139 below full bounded score, 7,342 llm_error and 659
  parse failures. CI also failed test_freeze_haiku55's rehearsal snapshot
  dates (now the spec's 2026-10-10) and its other-tag test, which the date
  roll had left naming the driver's own tag (it now derives the day after).
- sweep_timing.py read st_birthtime directly, which Linux's stat lacks, so
  every timing test crashed on CI. birth_time() now refuses on such a
  platform rather than date the record by a modification time, and the
  tests use a labeled MOCK modification-time source there only (they create
  each dated file once). Checked under a simulated Linux stat locally.
- Should-fix: the paper said the move returns all 18 fixed outputs to
  scoring. A new accessor, engine_upgrade_restored_split_sentence (a pure
  restored_split_sentence with a Hypothesis test), says 14 that earlier
  releases excluded return and the four ruled on 2026-10-06 while still
  scored stay scored; the table cell says the same. The 2026-10-06
  paragraphs in the paper and card now say PolicyBench ruled to exclude ten.
  Paper re-rendered and re-pinned.
- Nit: the build's final_actions.json is now committed byte for byte (the
  sidecar's actions_sha256 ef23b50e...), as the 2026-09-29 upgrade's is. Its
  note predates CA 099's move to the rechecks and says 19 and 16; the new
  README's erratum says so, and a test holds the arrays at 18 and 17 against
  the sidecar.

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

Copy link
Copy Markdown
Contributor Author

Final review, round 1 (Subfleet 20261010-032143-pb-haiku-final-review, GPT-6.1 Sol, hard tier, at cb42e48): REQUEST CHANGES, with four findings. All four are answered in 4e10d12.

  1. Blocker: test_reference_exclusions and test_snapshot_artifacts still held rehearsal counts. They now pin T's values. This PR's first CI run also failed 16 more tests, all fixed in the same commit:
    • Rehearsal snapshot dates and an other-tag test in test_freeze_haiku55 and test_finish_haiku55.
    • st_birthtime in sweep_timing.py, which Linux runners lack. It now refuses there rather than date the record by a modification time; the tests use a labeled MOCK source only where birth times are missing.
  2. The paper said all 18 fixed outputs return to scoring. It now says the 14 that earlier releases excluded return, and the four ruled on 2026-10-06 while still scored stay scored. That sentence comes from a new accessor with a Hypothesis test. The October 6 paragraphs now say "ruled to exclude". The paper is re-rendered and re-pinned.
  3. The social drafts no longer say every model's row forces a tool call.
  4. The build's final_actions.json (the sidecar's actions_sha256) is now committed byte for byte. A README erratum notes that its free-text note predates CA 099's move to the rechecks, and a test holds its arrays to the sidecar.

The reviewer found these sound:

  • all 1,926 scored references against computed.csv;
  • every regeneration target, including both fix-module values, recomputed exactly;
  • the engine receipts, the upstream-PR ancestry and the publication check;
  • the 23 narratives, and the 70 adjudications and 56 verdicts;
  • the board, the note's facts, and the card and paper accessors.

Round 2 (20261010-034130-pb-haiku-final-review-r2) reviews the answers at 4e10d12.

@MaxGhenis
MaxGhenis merged commit 5a8164a into main Oct 10, 2026
6 checks passed
@MaxGhenis

Copy link
Copy Markdown
Contributor Author

Final review, round 2 (Subfleet 20261010-034130-pb-haiku-final-review-r2, at 4e10d12): APPROVE. All four round-1 findings are resolved. Two non-blocking nits matter only in a future upgrade: the table cell's 0- or 1-ruled wording, and "restored" naming all 18 fixed outputs. Both are queued for a follow-up.

Merged at 4e10d12 (--squash --match-head-commit) once gh pr checks exited 0 and the PR was MERGEABLE/CLEAN.

After the merge:

@MaxGhenis
MaxGhenis deleted the release-haiku55 branch October 10, 2026 08:14
MaxGhenis added a commit that referenced this pull request Oct 13, 2026
…cyengine-us 2.41.0

- scripts/freeze_musewonder.py wrote the snapshot, the annotations (462
  verified wording amendments), the app pointer (payload sha 14a61510...),
  the version label and the serving configuration: 48 models, 1,936 scored
  outputs per model, 48 exclusions, 60 adjudications.
- Date the judge verdicts the release's decisions name
  (docs/musewonder/judge_verdicts_20261013.json); release 20261010's two
  waves now carry its commit (5a8164a, #208).
- Publication check: policyengine-us 2.41.1, PyPI's newest at 09:39 UTC,
  gives 2.41.0's value for all 1,984 outputs
  (verification/publication_check_2_41_1.csv).
- Pin policyengine-us 2.41.0 in pyproject.toml and uv.lock.
- Rescore the five sensitivity runs on the 48-model board.

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

This branch was successfully deployed

1 active deployment
Preview — 4e10d126 Deployed Oct 10, 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