Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
78 commits
Select commit Hold shift + click to select a range
8b9200d
WIP: start the Haiku 5.5 release driver from finish_gpt61sol.py
MaxGhenis Oct 8, 2026
3495309
Pin Claude Haiku 5.5's finished run inputs
MaxGhenis Oct 8, 2026
d0bdb5b
Stage the ten exclusions Max ruled on 2026-10-06 in the Haiku 5.5 driver
MaxGhenis Oct 8, 2026
bbf5745
Name Claude Haiku 5.5 and release 20261006 in the driver's messages
MaxGhenis Oct 8, 2026
1f97563
Describe a later-law exclusion's frozen value as the engine's own figure
MaxGhenis Oct 8, 2026
1944407
Test the local Claude registration in a fresh interpreter without the…
MaxGhenis Oct 8, 2026
924a102
Add the Haiku 5.5 release's freeze driver, tests and design note; fix…
MaxGhenis Oct 9, 2026
2ccffeb
Write the judge provenance record from the stage's sidecars
MaxGhenis Oct 9, 2026
7ec9c75
Pin the Haiku 5.5 driver to release 20261006 as shipped
MaxGhenis Oct 9, 2026
52a0ed2
Record the 2026-10-06 wave's decision date and the judge provenance
MaxGhenis Oct 9, 2026
665f3a3
Add the reference builder for a second engine upgrade (2.15.17 to a n…
MaxGhenis Oct 9, 2026
6074876
Let the paper's reference facts follow any number of engine upgrades
MaxGhenis Oct 9, 2026
9b108a6
Add --step install-references to the Haiku 5.5 driver
MaxGhenis Oct 9, 2026
518bab3
Aim a drifted regeneration at its fix modules' pre-fix value, not a s…
MaxGhenis Oct 9, 2026
4bf7ced
Record the fix modules' pre-fix evidence on policyengine-us 2.37.2
MaxGhenis Oct 9, 2026
3613d74
Add a pre-merge check of a policyengine-us checkout against the fix e…
MaxGhenis Oct 9, 2026
5595354
Decide the outputs an engine upgrade newly excludes
MaxGhenis Oct 9, 2026
6990773
Point the paper's September upgrade facts at that upgrade
MaxGhenis Oct 9, 2026
3be304f
Name the upstream fixes behind WI 064 and VA 039 state, by bisecting …
MaxGhenis Oct 9, 2026
87a2cb9
Rule the engine upgrade into the release spec
MaxGhenis Oct 9, 2026
fa45d4e
Read a regeneration's removed record under the builder's key
MaxGhenis Oct 9, 2026
5588da2
Reuse an earlier build's narrative when its writer inputs are unchanged
MaxGhenis Oct 9, 2026
174323d
Name the build's own engine in the drafted Indiana county record
MaxGhenis Oct 9, 2026
4c2238d
Decide triage flags from the spec; scope-export the upgrade without t…
MaxGhenis Oct 9, 2026
9d466af
Freeze a stage that carries an engine upgrade of the references
MaxGhenis Oct 9, 2026
fa55444
Answer the machinery review: pin fix-module siblings, bind approvals …
MaxGhenis Oct 9, 2026
78ad5e7
Record WI 064's answered flag in the design note, not as a decision
MaxGhenis Oct 9, 2026
a0b4873
Stage Claude Haiku 5.5's tool_choice: auto sensitivity run
MaxGhenis Oct 9, 2026
39d09fa
Draft the Haiku 5.5 release note and paper changes on the 2.37.2 rehe…
MaxGhenis Oct 9, 2026
0779a3c
Add the paper's accessors for the 2026-10-06 rulings and the second u…
MaxGhenis Oct 9, 2026
462b27f
Name each regeneration's upstream fix from a committed map
MaxGhenis Oct 9, 2026
41ba29f
PRACTICE FREEZE on the policyengine-us 2.37.2 rehearsal (replaced at T)
MaxGhenis Oct 9, 2026
29cfb13
Address the delta review's findings 1-5
MaxGhenis Oct 9, 2026
2ddecc2
Rescore the sensitivity runs on the 47-model board and add Haiku 5.5's
MaxGhenis Oct 9, 2026
b5aa080
Carry the release chain's records and tests to release 20261009
MaxGhenis Oct 9, 2026
b5869b2
Move the paper, notes and cost tests to release 20261009
MaxGhenis Oct 9, 2026
ed879ca
Hold the snapshot tests to the real builder's setup (delta review fin…
MaxGhenis Oct 9, 2026
8d1a6a7
Write the release's paper text, card, guide and note
MaxGhenis Oct 9, 2026
6a758b8
PRACTICE re-pin of the rendered paper on the 2.37.2 rehearsal (replac…
MaxGhenis Oct 9, 2026
8561d0b
State the October sweep's timing in the paper from its timing record
MaxGhenis Oct 9, 2026
01c51ce
Count scored and excluded outputs apart in the publication check
MaxGhenis Oct 9, 2026
e323908
Derive the upgrade's day and release-named files in tests
MaxGhenis Oct 10, 2026
06c761f
Count engine-defect records whose defect is now fixed apart
MaxGhenis Oct 10, 2026
eaed82d
Expect the action-binding refusal where it now fires first
MaxGhenis Oct 10, 2026
4c09f83
Say the earlier models' rates fall, and how restored targets are known
MaxGhenis Oct 10, 2026
534b63c
Drop the superseded note and paper drafts
MaxGhenis Oct 10, 2026
38ece52
Bring the design note up to the engine upgrade
MaxGhenis Oct 10, 2026
a5e12ed
Say which restored outputs return to scoring and which stay scored
MaxGhenis Oct 10, 2026
56d5094
Hold the note's facts at the pre-T rehearsal's expected values
MaxGhenis Oct 10, 2026
d87d7fb
Tie the publication check to the release's build (pre-T review 1, 6)
MaxGhenis Oct 10, 2026
598ae78
Match the builder's target rule; separate unfixed defects (pre-T revi…
MaxGhenis Oct 10, 2026
a54d8db
Run the note's claim checks on recomputed facts (pre-T review 2)
MaxGhenis Oct 10, 2026
72dd44f
Test the card's hand-written counts against the frozen records (pre-T…
MaxGhenis Oct 10, 2026
41dc4b4
Hold the judge evidence to the decisions it names (pre-T review 7)
MaxGhenis Oct 10, 2026
fbe956d
Refuse more ways a fix module can reach local files (pre-T review 8)
MaxGhenis Oct 10, 2026
8b12164
Pin regeneration targets at the freeze; test the mock against every r…
MaxGhenis Oct 10, 2026
a09df45
Name later law among the sensitivity doc's exclusions; test its gain …
MaxGhenis Oct 10, 2026
99e8ba4
Run the publication check's sweep itself; require builder and sidecar…
MaxGhenis Oct 10, 2026
7f249bf
Close the re-review's nits (pre-T re-review 4-7)
MaxGhenis Oct 10, 2026
88ba63c
Check the imported engine is the wheel; keep the serving probes (pre-…
MaxGhenis Oct 10, 2026
202c7e9
Revert "PRACTICE re-pin of the rendered paper on the 2.37.2 rehearsal…
MaxGhenis Oct 10, 2026
a08e271
Revert "PRACTICE FREEZE on the policyengine-us 2.37.2 rehearsal (repl…
MaxGhenis Oct 10, 2026
07395f0
Roll the release's day to 2026-10-10
MaxGhenis Oct 10, 2026
26ceec6
Check the engine in the process that computes (pre-T review round 4)
MaxGhenis Oct 10, 2026
d06a7f5
Refuse symlinks in the engine; take only fresh receipts and outputs (…
MaxGhenis Oct 10, 2026
ad81894
Read the builder's arguments as the builder does (pre-T review round 6)
MaxGhenis Oct 10, 2026
4ee6443
Correct the reference narratives of all 24 outputs the 2.38.6 move ch…
MaxGhenis Oct 10, 2026
0e291e2
Record the judges of the cases the 2.38.6 references re-opened
MaxGhenis Oct 10, 2026
a4e76ad
Keep CA 099's state income tax excluded: California disallows educato…
MaxGhenis Oct 10, 2026
0041c76
Record the judge of CA 099's re-opened case
MaxGhenis Oct 10, 2026
0562d77
Pin policyengine-us 2.38.6, the references' engine
MaxGhenis Oct 10, 2026
2c4e254
Freeze release dashboard-data-20261010: Claude Haiku 5.5 on policyeng…
MaxGhenis Oct 10, 2026
4f573c1
Date the release's judge verdicts; rescore the sensitivity runs on th…
MaxGhenis Oct 10, 2026
b742031
Count fixed engine defects by the audit's evidence; separate a furthe…
MaxGhenis Oct 10, 2026
659b2ff
State the 2.38.6 release in the card, guide, app and note
MaxGhenis Oct 10, 2026
d191896
Render the paper on the 2.38.6 references and pin it
MaxGhenis Oct 10, 2026
cb42e48
Pin the tests to the 2.38.6 board and drop a stale judge wave
MaxGhenis Oct 10, 2026
4e10d12
Answer the final review: CI pins, the 14-of-18 split, and the actions…
MaxGhenis Oct 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Binary file modified app/public/paper/policybench.pdf
Binary file not shown.
Binary file modified app/public/paper/web/figures/positive_zero_scatter.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
894 changes: 461 additions & 433 deletions app/public/paper/web/index.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion app/src/components/ExclusionNote.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ export default function ExclusionNote({
<span className="font-[family-name:var(--font-mono)]">
{formatValue(exclusion.frozenValue, isBinary, currencySymbol)}
</span>{" "}
used the engine&rsquo;s projection.
used the engine&rsquo;s own figure.
</p>
<p className="mt-2 text-xs text-text-muted leading-relaxed">
{exclusion.law ? `Law: ${exclusion.law}. ` : ""}
Expand Down
8 changes: 4 additions & 4 deletions app/src/data.artifact.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
{
"asset": "dashboard-data.json",
"bytes": 127225036,
"bytes": 128756688,
"repo": "PolicyEngine/policybench",
"sha256": "aa34e5c9ea926848dc7af460a98f17021bc42dae54a8015c9988a85e79a5d462",
"tag": "dashboard-data-20261006",
"url": "https://github.com/PolicyEngine/policybench/releases/download/dashboard-data-20261006/dashboard-data.json",
"sha256": "f834478e65191f8426ef479506f9f6fe32c2e7107f30fdbf4e7ba0e6acba6410",
"tag": "dashboard-data-20261010",
"url": "https://github.com/PolicyEngine/policybench/releases/download/dashboard-data-20261010/dashboard-data.json",
"version": 1
}
4 changes: 2 additions & 2 deletions app/src/data.versions.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@
"artifact": {
"pointer": "live"
},
"description": "Scored reference outputs from policyengine-us 2.15.17 (the 64 excluded outputs keep the values they were decided on: 52 from policyengine-us 1.755.4, 12 from 2.15.17, and the 19 that move on 2.15.17 were re-reviewed and stay excluded); same household facts and requested outputs for every model; answer transport and request shape per model as recorded in the serving-configuration table - 46 models",
"description": "Scored reference outputs from policyengine-us 2.38.6 (the 58 excluded outputs keep the values they were decided on: 38 from policyengine-us 1.755.4, 18 from 2.15.17, 2 from 2.38.6, and the 17 that move on 2.38.6 were re-reviewed and stay excluded); same household facts and requested outputs for every model; answer transport and request shape per model as recorded in the serving-configuration table - 47 models",
"id": "1.1",
"label": "1.1",
"snapshotLabel": "Snapshot 2026-09-30"
"snapshotLabel": "Snapshot 2026-10-10"
},
{
"artifact": {
Expand Down
2 changes: 1 addition & 1 deletion app/src/lib/predictionStatus.ts
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ const EXCLUDED_REFERENCE_BASIS: Record<string, string> = {
"which assumes one reading of the unlisted input described above",
reference_engine_defect: "which carries the engine defect described above",
reference_law_published_after_freeze:
"which uses the engine's projection described above",
"which uses the engine's own 2026 figure described above",
};

/**
Expand Down
4 changes: 2 additions & 2 deletions app/src/lib/referenceEngine.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ import type { ReferenceExclusion } from "../types";
* the frozen sidecar.
*/
export const ENGINE_UPGRADE_RECHECK = {
engineVersion: "2.15.17",
rechecked: 19,
engineVersion: "2.38.6",
rechecked: 17,
};

function compareVersions(a: string, b: string): number {
Expand Down
18 changes: 13 additions & 5 deletions app/src/lib/servingSensitivity.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
* regardless); Claude Fable 5.1 rejects forced tool calls and answers as JSON,
* reasoning in both runs, so its comparison is one of transport. Claude Opus
* 5.5 and Claude Sonnet 5.5 reject forced calls the same way and have no auto
* re-run. Scores are
* re-run. Claude Haiku 5.5 accepts forced calls, so its board row is a
* forced-tool row like Claude Opus 5's. Scores are
* the pinned three-decimal measurements from sensitivity/data/*.json; round
* only for display. Each entry's "would rank" is derived from the live board
* rows at render time, never typed by hand.
Expand Down Expand Up @@ -35,37 +36,44 @@ const FORCED_TOOL =

export const SERVING_SENSITIVITY: Record<string, ServingSensitivity> = {
"claude-fable-5": {
autoExact: 92.817,
autoExact: 91.746,
boardTreatment: `${FORCED_TOOL}, one output per request`,
autoTreatment:
"re-run with tool_choice: auto and the whole household in one request",
thinkingSuppressedOnBoard: true,
noteHref: SENSITIVITY_DOC_HREF,
},
"claude-opus-5": {
autoExact: 91.252,
autoExact: 90.456,
boardTreatment: FORCED_TOOL,
autoTreatment: "re-run with tool_choice: auto",
thinkingSuppressedOnBoard: true,
noteHref: SENSITIVITY_DOC_HREF,
},
"claude-sonnet-5": {
autoExact: 86.076,
autoExact: 84.953,
boardTreatment: `${FORCED_TOOL}, one output per request`,
autoTreatment:
"re-run with tool_choice: auto and the whole household in one request",
thinkingSuppressedOnBoard: true,
noteHref: SENSITIVITY_DOC_HREF,
},
"claude-fable-5.1": {
autoExact: 93.037,
autoExact: 92.044,
boardTreatment:
"rejects forced tool calls, so its row answers as a JSON object and reasons at the provider default",
autoTreatment:
"re-run with the answer tool declared under tool_choice: auto (it reasons in both runs, so this compares transports)",
thinkingSuppressedOnBoard: false,
noteHref: "/notes/2026-09-01-claude-fable-5-1-added",
},
"claude-haiku-5.5": {
autoExact: 89.239,
boardTreatment: FORCED_TOOL,
autoTreatment: "re-run with tool_choice: auto",
thinkingSuppressedOnBoard: true,
noteHref: SENSITIVITY_DOC_HREF,
},
};

export function servingSensitivityFor(
Expand Down
61 changes: 59 additions & 2 deletions app/src/model-serving-config.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
},
"evidence_summary": {
"registry": 29,
"run_state": 17
"run_state": 18
},
"models": {
"claude-fable-5": {
Expand Down Expand Up @@ -108,6 +108,63 @@
"shared_completion_budget_tokens": null,
"tool_choice": "forced"
},
"claude-haiku-5.5": {
"answer_contract": "tool",
"evidence": {
"compared_columns": [
"scenario_id",
"variable",
"prediction",
"explanation",
"raw_response",
"provider_resolved_model",
"prompt_tokens",
"completion_tokens",
"error"
],
"fields": [
"answer_contract",
"chunk_size",
"completion_budget_ceiling",
"fingerprint_version",
"initial_completion_budget_tokens",
"max_repair_rounds",
"model_id",
"prompt_contract_version",
"request_timeout_seconds",
"thinking",
"tool_choice_mode"
],
"frozen_rows_sha256": "4a7373791a5f9df6e4c775b8aade37ecd58df87bd8b99f238889f1afe744621c",
"kind": "run_state",
"rows_match": true,
"run": "haiku55-runs/haiku55",
"source_predictions_sha256": "27a5e48f44ad875f6d0901571b91c06c67045a7a6841f95a5ab56ecf0cfc8344",
"source_rows_sha256": "4a7373791a5f9df6e4c775b8aade37ecd58df87bd8b99f238889f1afe744621c",
"treatment_fingerprint": {
"answer_contract": "tool",
"chunk_size": null,
"completion_budget_ceiling": 128000,
"fingerprint_version": 3,
"initial_completion_budget_tokens": 16384,
"max_repair_rounds": 2,
"model_id": "claude-haiku-5-5",
"prompt_contract_version": "2026-08-09-v2-scoring-contract",
"request_timeout_seconds": 300,
"thinking": {
"mode": "provider_default"
},
"tool_choice_mode": "forced"
}
},
"provider_id": "claude-haiku-5-5",
"reasoning_setup": "provider default; 16,384-token shared budget",
"registry_derived": [],
"request_shape": "whole scenario",
"request_timeout_seconds": 300,
"shared_completion_budget_tokens": 16384,
"tool_choice": "forced"
},
"claude-opus-4.7": {
"answer_contract": "tool",
"evidence": {
Expand Down Expand Up @@ -1528,7 +1585,7 @@
"tool_choice": null
}
},
"registry_commit": "cddd01812ad6d6311502ef997f93634f70c28fda",
"registry_commit": "0562d77a9d263c14bb9c9fa93ba3c765fcff95a9",
"sources": [
"policybench.config.MODELS",
"policybench.model_cards",
Expand Down
2 changes: 2 additions & 0 deletions app/src/modelMeta.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ export const MODEL_ORDER = [
"claude-sonnet-5.5",
"claude-sonnet-5",
"claude-sonnet-4.6",
"claude-haiku-5.5",
"claude-haiku-4.5",
"grok-4.3",
"grok-4.5",
Expand Down Expand Up @@ -60,6 +61,7 @@ export const MODEL_LABELS: Record<string, string> = {
"claude-opus-5": "Claude Opus 5",
"claude-opus-4.8": "Claude Opus 4.8",
"claude-opus-4.7": "Claude Opus 4.7",
"claude-haiku-5.5": "Claude Haiku 5.5",
"claude-haiku-4.5": "Claude Haiku 4.5",
"claude-sonnet-5.5": "Claude Sonnet 5.5",
"claude-sonnet-5": "Claude Sonnet 5",
Expand Down
90 changes: 90 additions & 0 deletions app/src/notes/2026-10-10-claude-haiku-5-5-joins-the-board.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
{
"slug": "2026-10-10-claude-haiku-5-5-joins-the-board",
"date": "2026-10-10",
"title": "Claude Haiku 5.5 joins the board as the references move to policyengine-us 2.38.6",
"paragraphs": [
"Claude Haiku 5.5 joined the board on {releaseDate}, bringing it to {nModels} models. It gets {haikuExact}% of answers within $1, weighted by household impact, #{haikuRank} of {nModels} and {haikuGain} points above Claude Haiku 4.5 ({haiku45Exact}%, #{haiku45Rank}). GPT-6 Sol still leads at {solExact}%, ahead of Claude Opus 5.5 ({opusExact}%) and GPT-5.6 Sol ({sol56Exact}%).",
"Claude Haiku 5.5 cost ${haikuCost} a household, the least of any row with a cost above zero; Claude Haiku 4.5 cost ${haiku45Cost}. Unlike Claude Opus 5.5 and Claude Sonnet 5.5, its API accepts a forced tool call, so its row takes the board's forced answer tool. A probe with that request returned no thinking block, where a request without the forced tool did, so the row answers without extended thinking, as Claude Opus 5's does. Re-run with tool_choice: auto, it gets {haikuAutoExact}%, which would rank #{haikuAutoRank}.",
"The release also moves PolicyBench's references from policyengine-us {previousEngine} to {engineVersion}, a release that fixes the engine defects behind {restored:words} outputs. The previous release excluded {newlyScored:words} of them, and they return to scoring at the new version's values. The other {restoredRuled:words} are the October 6 defects below, which stay scored at the new version's values. Each of the {restored:words} lands within $1 of the corrected value PolicyBench's audits computed for it. Between them they take the upstream fixes for {restoredFixes}. PolicyBench still builds each reference from the stated facts and from law published before it froze the references on 2026-07-03, under the same publication conventions.",
"Two rulings of October 6 apply too. PolicyBench's reference adversary flags the scored outputs where many models, or several of the strongest, agree on an answer the reference does not give, and a judge that cannot yet see the engine's derivation works each one from primary law. Its findings led to rulings to exclude {adversaryOutputs:words} outputs. Four were engine defects, in Arizona, Ohio, Colorado and New York; the new version fixes them, so PolicyBench keeps scoring those four instead. The other four are the federal and state income tax of a Pennsylvania and a Missouri household whose dependent earns $45,000 of wages and must file their own return. The output definitions do not say whether the household's income tax includes that return, so PolicyBench stops scoring them. It also stops scoring {louisianaOutputs:words} Louisiana households' state income tax, whose reference rests on a 2026 standard deduction computed from published price indexes; Louisiana published the amount itself on September 28, after the freeze.",
"The new version counts Indiana county income tax in local income tax, and the prompt names no county, so PolicyBench stops scoring the local income tax of {indianaOutputs:words} Indiana households. It also counts Idaho's $10 permanent building fund tax in state income tax, which moves one household's reference from ${idahoBefore} to ${idahoAfter}. Every model is now scored on {scoredOutputs} of its {totalOutputs} requested outputs; PolicyBench excludes the other {excluded}.",
"Against the previous release, the exact rate of every one of the {incumbents} earlier models falls, by {fallMin} to {fallMax} points. The cause is the {newlyScored} restored outputs that the previous release did not score, which few models get right: half of them are answered within $1 by at most {newlyScoredHalfAtMost:words} of the {nModels} models, and {newlyScoredUnmatched:words} by none. Had they stayed excluded, every earlier model's rate would have risen, by {riseWithoutMin} to {riseWithoutMax} points."
],
"facts": {
"releaseDate": "2026-10-10",
"nModels": 47,
"haikuExact": 79.6,
"haikuRank": 37,
"haiku45Exact": 74.8,
"haiku45Rank": 43,
"haikuGain": 4.8,
"solExact": 95.6,
"opusExact": 94.4,
"sol56Exact": 93.5,
"haikuCost": 0.0013,
"haiku45Cost": 0.0554,
"haikuAutoExact": 89.2,
"haikuAutoRank": 10,
"previousEngine": "2.15.17",
"engineVersion": "2.38.6",
"restored": 18,
"restoredRuled": 4,
"restoredFixes": "the IRA deduction's compensation limit and a dependent's contributions (policyengine-us #10032, #9801; three outputs), the IRA deduction's active-participant phase-out and California's itemized deduction conformity (policyengine-us #10032, #10034), New Jersey's worker unemployment and workforce contributions (policyengine-us #10031), Arizona's standard deduction indexing (policyengine-us #9928), California's itemized deduction conformity (policyengine-us #10034), Ohio's medical deduction for health insurance premiums (policyengine-us #10020), estate income in gross income (policyengine-us #10027, #9633; two outputs), Colorado's 2026 sales tax refund (policyengine-us #9946), the IRA deduction's active-participant phase-out (policyengine-us #10032; four outputs), New York's 2026 child and dependent care credit (policyengine-us #9948) and the IRA deduction's active-participant phase-out and estate income in gross income (policyengine-us #10032, #10027; two outputs)",
"adversaryOutputs": 8,
"louisianaOutputs": 2,
"indianaOutputs": 2,
"idahoBefore": "6,818.34",
"idahoAfter": "6,828.34",
"scoredOutputs": 1926,
"totalOutputs": 1984,
"excluded": 58,
"incumbents": 46,
"fallMin": 0.24,
"fallMax": 1.37,
"newlyScored": 14,
"newlyScoredHalfAtMost": 1,
"newlyScoredUnmatched": 4,
"riseWithoutMin": 0.39,
"riseWithoutMax": 0.71
},
"data": [
{
"label": "Dashboard data release",
"href": "https://github.com/PolicyEngine/policybench/releases/tag/dashboard-data-20261010"
},
{
"label": "Engine upgrade record",
"href": "https://github.com/PolicyEngine/policybench/blob/main/reference_audit/2026-10-09-engine-upgrade"
},
{
"label": "Reference sidecar with every change",
"href": "https://github.com/PolicyEngine/policybench/blob/main/paper/snapshot/20260501/runs/us_full_run_20260612_policyengine_4_16_1_populace/reference_outputs.csv.meta.json"
},
{
"label": "Exclusion record",
"href": "https://github.com/PolicyEngine/policybench/blob/main/paper/snapshot/20260501/runs/us_full_run_20260612_policyengine_4_16_1_populace/reference_exclusions.json"
},
{
"label": "Reference adversary's record",
"href": "https://github.com/PolicyEngine/policybench/blob/main/reference_audit/2026-10-05-reference-adversary/README.md"
},
{
"label": "Louisiana standard deduction audit",
"href": "https://github.com/PolicyEngine/policybench/blob/main/reference_audit/2026-10-05-louisiana/README.md"
},
{
"label": "Serving sensitivity note",
"href": "https://github.com/PolicyEngine/policybench/blob/main/sensitivity/claude-thinking-2026-08.md"
},
{
"label": "Claude Haiku 5.5 model page",
"href": "/model/claude-haiku-5.5"
},
{
"label": "Previous release note (October 6)",
"href": "/notes/2026-10-06-policybench-stops-scoring-eight-tax-outputs"
}
],
"boardSnapshot": "2026-10-10",
"release": "dashboard-data-20261010"
}
2 changes: 2 additions & 0 deletions app/src/notes/index.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import claudeHaiku55JoinsTheBoard from "./2026-10-10-claude-haiku-5-5-joins-the-board.json";
import claudeFable51Added from "./2026-09-01-claude-fable-5-1-added.json";
import claudeSonnet55DebutsFifth from "./2026-09-29-claude-sonnet-5-5-debuts-fifth.json";
import fiveSnapHouseholdsBbce from "./2026-10-05-five-snap-households-bbce.json";
Expand Down Expand Up @@ -29,6 +30,7 @@ export type PolicyBenchNote = {
};

export const notes = [
claudeHaiku55JoinsTheBoard,
stopsScoringEightTaxOutputs,
fiveSnapHouseholdsBbce,
claudeSonnet55DebutsFifth,
Expand Down
8 changes: 4 additions & 4 deletions app/src/paperSnapshot.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"pdfVersion": "2cffc69cffde",
"responseWindow": "June 12 and September 29, 2026",
"snapshotDate": "2026-09-30",
"webVersion": "c6dfba0c5718"
"pdfVersion": "1607c71abaf3",
"responseWindow": "June 12 and October 8, 2026",
"snapshotDate": "2026-10-10",
"webVersion": "31cd4141373a"
}
17 changes: 9 additions & 8 deletions app/tests/auditUniverse.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,17 @@ describe("audit universe", () => {
expect(AUDIT_SELECTION_RULE).toBe(
"rows whose legacy threshold score is below 1",
);
// Release 20261006: the counts tests/test_disclosures.py recomputes
// from the frozen annotations and payload (release 20260930's less the
// 368 scored rows on the eight outputs it excludes).
// Release 20261010: the counts tests/test_disclosures.py recomputes
// from the frozen annotations and payload (47 models; the ten outputs
// ruled on 2026-10-06 and the two Indiana county outputs leave scoring,
// the outputs the engine upgrade regenerates return to it).
expect(summarizeAuditUniverse(us)).toEqual({
annotatedRowCount: 7_527,
legacyThresholdRowCount: 7_527,
exactMissCount: 7_523,
annotatedExactMissCount: 7_523,
annotatedRowCount: 8_001,
legacyThresholdRowCount: 8_001,
exactMissCount: 7_997,
annotatedExactMissCount: 7_997,
annotatedExactHitCount: 4,
unannotatedBelowFullBoundedScoreCount: 2_072,
unannotatedBelowFullBoundedScoreCount: 2_138,
});
});
});
20 changes: 18 additions & 2 deletions app/tests/boardScope.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -131,10 +131,26 @@ describe("dataset switching", () => {
byEngine.set(version, (byEngine.get(version) ?? 0) + 1);
}
const engine = data.policyengineBundles?.us?.model_version as string;
const [older] = [...byEngine.keys()].filter((version) => version !== engine);
// Oldest engine first, as the sentence lists them.
const groups = [...byEngine.entries()]
.sort(([a], [b]) => {
const left = a.split(".").map(Number);
const right = b.split(".").map(Number);
for (let i = 0; i < Math.max(left.length, right.length); i += 1) {
const diff = (left[i] ?? 0) - (right[i] ?? 0);
if (diff !== 0) return diff;
}
return 0;
})
.map(([version, count], index) =>
index === 0
? `${count} computed with policyengine-us ${version}`
: `${count} with ${version}`,
);
expect(groups.length).toBeGreaterThanOrEqual(2);
const html = render("1.1").replaceAll("&#x27;", "'");
expect(html).toContain(
`The ${exclusions.length} excluded outputs keep the values they were decided on (${byEngine.get(older)} computed with policyengine-us ${older}, ${byEngine.get(engine)} with ${engine})`,
`The ${exclusions.length} excluded outputs keep the values they were decided on (${groups.join(", ")})`,
);
expect(html).toContain(`that move on ${engine}; all`);
expect(render("1.0")).not.toContain("excluded outputs keep the values");
Expand Down
3 changes: 2 additions & 1 deletion app/tests/dataVersions.test.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { describe, expect, test } from "bun:test";

import registryJson from "../src/data.versions.json";
import paperSnapshot from "../src/paperSnapshot.json";
import {
isLivePointerRef,
parseDataVersionRegistry,
Expand Down Expand Up @@ -93,7 +94,7 @@ describe("parseDataVersionRegistry", () => {
expect(
registry.versions.find((version) => version.id === registry.default)
?.snapshotLabel,
).toBe("Snapshot 2026-09-30");
).toBe(`Snapshot ${paperSnapshot.snapshotDate}`);
});
});

Expand Down
Loading
Loading