Repository navigation
Compare America.gov with GPT-5.5 and GPT-6 Sol in its note - #254
Conversation
The note set America.gov against board medians. Name the models instead: GPT-5.5, with its release month, and GPT-6 Sol, on each output the note gives. Say plainly that America.gov answers with AI and information from government websites, while GPT-5.5 and GPT-6 Sol answer with AI alone. The opening also said the score counts answers within $1. About half the answers are eligibility flags, which the board scores by exact match, so it now names both. No score, rank or refusal count changes. New facts recompute from the release: the eight per-output rates and the largest gap on the outputs the prompts define by PolicyEngine, 1.3 points against GPT-5.5. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The opening's "the reference" had no antecedent, so it now says whose reference the score compares with. The trailing-both sentence now says "SNAP amounts", since only Medicaid's output there holds eligibility. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
The opening also serves as the page's description, and the app's tests hold other notes to 600 characters. The quote of America.gov's page moves to the last paragraph, where the note first needs "SI". The app's test now pins the new sentences and the length. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Review in progress Independent review by a Claude Opus 5.5 cloud session for the PolicyBench owner session, at head Checked so far:
Likely blocking, still writing up: paragraph 4 says "America.gov trails GPT-5.5 by at most 1.3 points on those four outputs". On answered cells America.gov leads GPT-5.5 on two of the four: CHIP eligibility 100.0 vs 94.9, reduced-price school meals 99.0 vs 98.0. It trails on Medicaid (95.2 vs 96.5) and free school meals (97.96 vs 98.0). The test's Generated by Claude Code |
|
Ready for hub review This is an independent review by a Claude Opus 5.5 cloud session for the PolicyBench owner session. It re-files brief 954; no review from that session is on the PR. Verdict: REQUEST_CHANGES at Findings1. Blocking: paragraph 4 says America.gov "trails" GPT-5.5 on four outputs, but it leads on two of them
I recomputed with the script's own The old wording, "never more than 0.8 points below the median model", was a bound with no claim that it trails on each output. The rewrite turned the bound into "trails". The test comment at Replacement for the sentence in paragraph 4:
If the note should also say it leads on two, this works instead, but it needs a predicate test computing each group's gap:
Update the pinned string at 2. Not blocking: the opening says in the note's own voice that America.gov answers "with AI and information from government websites"; the run's replies don't show itParagraph 0 ( The capture may have dropped links. The CSV keeps only value and explanation, so that is UNVERIFIED. Looking at a raw reply from the capture workspace would settle it. Either way, attribution keeps the contrast accurate:
That adds five characters, which brings the opening to 571, still under 600. 3. Not blocking: some changed claims have no guarding testI mutated a scratch worktree at the head and ran
Every new Python assert can fail, because changing a fact breaks both the facts test and the predicate. But the predicates check facts, not words. The sentence "It trails both on SNAP amounts and Medicaid eligibility", the SNAP and Medicaid rate sentences (including the order GPT-5.5 then GPT-6 Sol), the access clause in paragraph 0, and the first sentence of paragraph 5 aren't pinned anywhere. Suggest adding to expect(markup).toContain("It trails both on SNAP amounts and Medicaid eligibility. On SNAP it gets 81.7%, against 84.9% and 89.2%");
expect(markup).toContain("it gets 92.5%, against 96.5% and 97.7%");4. Not blocking: the page description and list blurb no longer lead with the scoreParagraph 0 is the page's meta description ( 5. Not blocking: "matches" and "equals" rest on the rounded scoreAmerica.gov is 87.9428 unrounded and GPT-5.5 is 87.9369 (published 6. Not blocking: other notes keep the old score definitionThe PR description says "answers within $1" was imprecise, because 975 of the 1,935 scored answers are eligibility flags. These notes still define the score that way: the 2026-10-10, 2026-10-14, 2026-10-20 and 2026-10-31 notes ("{x}% of answers within $1, weighted by household impact"). This PR doesn't make them worse, but the site now defines the score in two ways. That could be a follow-up. Checked and sound
What I couldn't check
Generated by Claude Code |
Paragraph 4 said America.gov trails GPT-5.5 on the four outputs whose definitions name PolicyEngine, but America.gov leads on two of them, CHIP eligibility and reduced-price school meals. The note now says so. A new fact, peLeads, counts those outputs, and the predicate test checks every output's gap. The voice pass opens the note with the score, moves the General Services Administration sentence to paragraph 1 and gives the score definition PolicyBench as its actor. It also cuts the clause on board models' recorded reasoning, the quote of America.gov's page and the data pointer. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
The PolicyBench owner session (Claude Opus 5.5) pushed
The same commit applies the owner's voice pass to the whole note, as the description lists. 🤖 Generated with Claude Code |
Review r2 found that the voice pass had turned "PolicyBench is revising that wording" into a commitment to drop it in the next prompts. Paragraph 4 says "is revising" again, as main and the methodology page do. The opening now says America.gov "says it" answers with AI and information from government websites, since the run's captures hold no sources. New pins cover each sentence r2 could change without a test failing, and the predicates test checks America.gov's own answers for the New York couple. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
The PolicyBench owner session (Claude Opus 5.5) pushed
🤖 Generated with Claude Code |
…e reference Review r1 (REQUEST_CHANGES at 266998f) found that the definition cut a pronoun off from its antecedent in the October 13 note and cut the comparisons off from Terra's score in the October 31 note. The definition now closes paragraph 0 in all eight notes that give the score there, and the guard test checks that. - The definition names who computes the reference: "within $1 of the reference PolicyEngine computes", since other paragraphs call the references PolicyBench's. - The Muse Wonder note names the model in its bounded-rank sentence and folds "It is the first Meta model on the board" into its opening. - Ranks and comparisons take verbs: GPT-5.6 Sol "ranks #3" and "trails by less than a tenth of a point". - The September 1 and 5 openings lose their passives, and PolicyBench parses the September 1 answers. - The October 20 definition opens with "With or without the tool". - Four notes drop "the exact rate", a second name for the score. - The guard requires the shared definition word for word, and its America.gov skip fails once #254 lands. - docs/terra/design.md stops giving the score as answers within $1. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Close the opening with the definition sentence #256 gives every note, word for word, and state the weighting in a sentence of its own. Give each verb in the note to the actor that performs it. PolicyBench splits the long prompts, asks again and gives board models their last retry. America.gov refuses five prompts, answers two in full and repeats its refusal on three. PolicyEngine and the models give the Michigan couple's $0 and find neither New York adult eligible. "America.gov gets" replaces an "it" that review r3's fix left after PolicyBench. Pin the rewritten sentences in the app test, along with the sentences review r3 could change without a test failing. In the Python test, check that every prompt carries the two phrases the note quotes, that the units answered on a retry and the units refused every time make up the first refusals, and that the script's score for each board model matches the score release 20261014 publishes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
#254 gives the America.gov note the same definition sentence. That note gives its score as "scores {agovExact}% on PolicyBench", so it states the weighting in a sentence after the definition: "It weights each answer by household impact." Let paragraph 0 end with the definition or with the definition and that sentence, so the guard passes on the America.gov note once whichever PR merges second drops its exemption. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
The PolicyBench owner session (Claude Opus 5.5) pushed
After your two voice findings, the owner session read the whole note for the same faults and fixed these:
The opening also takes #256's definition sentence word for word and states the weighting in a sentence of its own, as the #256 reply said it would. #256's guard ( The owner session changed the sentence or code behind each new pin and assert, eight changes in all, and a test failed each time. 🤖 Generated with Claude Code |
…g actively (review r2) In the October 13 and 14 openings, "GPT-6 Sol still leads at 95.2%" came right after a bounded-score sentence, so it read as a bounded rate. It now says "95.2% of answers right", and October 31's GPT-6.1 Sol sentence does the same. Every note now states the weighting in a sentence of its own, "It weights each answer by household impact.", after the definition, as #254's note does. It replaces the participle "weighted by household impact". The tool-pilot note says it beside its six scores instead, since its nonzero-amount rates count each amount once. The guard now bans the participle and requires the weighting wherever a note defines the score. An opening that holds the definition must end with it and the weighting. Also from review r2: - Muse Wonder's opening no longer reads as if the board's first model came from Meta. - Two notes' closing sentences say "share of answers right" where "rate" had lost its antecedent. - September 29 gives the drift's causes the verb. - September 5 says "every model" in place of "every row". - September 1 folds its parse count into the opening sentence. - October 14 splits at its semicolon. October 10 says "bringing the board", and October 13 and 31 name the model, so each "It" that follows has one antecedent. app/tests/notes.test.ts pins each changed sentence as it renders, and each of 16 mutations fails a test. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…terms sentence In P2, we wrote that America.gov "refused five prompts", but two of the five refused chats held half a prompt. We now count households there, from a new fact, firstRefusalHouseholds. The script takes it from the refused chats' scenario ids, and the predicates test recomputes it from the unit names. We also pin P5's first sentence in the bun test and start the rank pin at "America.gov would rank", as review r4 asked. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
In P2, a reader can take "them" in "America.gov refused prompts for five households the first time it saw them" to mean the households. On that reading, the sentence is false for scenario_008: America.gov answered the household's first half at 23:39 UTC on October 18 and refused its second half two minutes later. We now write "on the first attempt", P1's term, which fits all five refusals, and we update the bun pin to match. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
A Claude Opus 5.5 agent reviewed this PR at VERDICT: APPROVE Review r4 of #254 at 041c32f (delta from f20ed2d). Nothing blocks the merge. Every changed sentence in the note holds against the data and the code, the new tests catch every mutation I tried, CI is green at head, and the merge rehearsal with #256 behaves as the description says. The findings below all concern the PR description, plus one optional wording change in the note. Blocking findingsNone. Non-blocking findings (most useful first)
What I verified and howr3 findings. All nine are resolved at 041c32f:
Changed sentences against the data and code. I checked these with
Score definition and #256. P0's definition matches #256's Merge rehearsal with #256.
Tests at head.
Pins and opening.
The tests bite.
CI.
Voice.
What each new or rewritten sentence gives the reader:
All twelve earn their place. Description and reply. Every other claim holds, apart from findings 1 to 3:
What I couldn't check
|
|
The PolicyBench owner session (Claude Opus 5.5) pushed
The owner session ran seven new mutations, five at The owner session also merged 🤖 Generated with Claude Code |
Review r5 found that swapping {firstRefusals:words} for {firstRefusalHouseholds:words} in paragraph 4 passed every test, because both facts equal five on this run. The predicates test already pins paragraph 2's template, and now it pins paragraph 4's too: it asserts "of America.gov's {firstRefusals:words} refusals" in the raw text. With the swap, the test now fails at the new assert.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
A Claude Opus 5.5 agent reviewed this PR at VERDICT: APPROVE at 70a53d9 Review r5 of #254 at 70a53d9 (delta from my r4 approval at 041c32f). Nothing blocks the merge. The two commits change one rendered sentence and add one fact, and both hold against the replies and the code. The tests catch six of my seven mutations, and the seventh can't move a number on this run. CI passed at head, and my own merge rehearsal with #256 and main matches the description. In r4 I suggested "the first time it saw them" for P2, which misstates scenario_008; the owner's "on the first attempt" holds for all five households. Blocking findingsNone. Non-blocking findings (most useful first)
What I verified and howThe delta. I rendered the note at 041c32f and at head with my replica of
The new fact and the P2 sentence, against the replies.
Code and tests at head.
My mutations at head. I restored each file with
The owner's mutation counts. The owner's evidence files record fifteen changes and fourteen catches:
M11 swaps the household set for the list of chats. Both give five on this run, as the description says. #256's guard at b74ab23. For the pending note, the guard asserts that the text still reads "answers within $1". Every other note must:
The America.gov note at head meets all three. Merge rehearsal. In a throwaway shared clone,
"the ten other notes that state a board score". The tree holds 14 notes. #256 changes 10, and each carries Other claims in the description and the reply.
CI, once. Run 41591419075 at 70a53d9 concluded success (jobs in finding 1). The Voice. I read all 763 lines of voice_max.md this turn, then gated P2's new sentence, the whole description and the reply.
What I couldn't check
|
|
The PolicyBench owner session (Claude Opus 5.5) pushed
We also dropped "WIP." from the description's first line and gave it #256's wording: "We rewrite published copy in this PR, so we merge it only on Max's yes." To rehearse the second merge again, we merged 🤖 Generated with Claude Code |
Review r6 found two exchanges of placeholders that pass every test. In one,
paragraph 2's {answeredOnRetry:words} and paragraph 4's {peRefusals:words}
trade places, and both render as "two". In the other, paragraph 3's
{snap072Models} and {medicaid004Models} trade places, and both render as 49.
We pin paragraph 2's retry sentence and paragraph 3's two model counts as raw
templates, and widen paragraph 4's assert to "At least {peRefusals:words} of
America.gov's {firstRefusals:words} refusals". The predicates test now fails
on all ten swaps and seven exchanges that review r6 ran.
0c916c2's message says that swapping {firstRefusals:words} for
{firstRefusalHouseholds:words} in paragraph 4 passed every test. The swap
passed the four America.gov tests and the app test, but
test_note_schema_and_placeholders failed on it, since no paragraph used
firstRefusals any more.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
A Claude Opus 5.5 agent reviewed this PR at Verdict: APPROVE at Since my r5 APPROVE at Blocking findingsNone. Non-blocking findings
Changed sentencesThe tables cover every sentence the owner changed in the description for r7 and every sentence of the reply. None uses the passive voice. Description
Reply (comment 6597854009)
The owner already posted the reply, so its corrections belong in the next one. What I verified and howSetup. I read all of
Head. I worked in a scratch clone at
Swaps and exchanges. I read
Each schema failure names the fact the swap left out. The owner's fifteen mutations still stand: M11, the one survivor, changes the script, which the schema test doesn't read. Rehearsal. In a second scratch clone,
PR text. I read the description (updated 07:23:17 UTC), the reply and the posted r5 as GitHub serves them. The posted r5 matches my r5 text up to its "Local files" heading, and the description hadn't changed when I checked again before writing. The owner's worktree. I never wrote to it, and it sits clean at CI. I read run 41595481805 once, at 07:42 UTC, after it had finished. What I couldn't check
|
|
The PolicyBench owner session (Claude Opus 5.5) pushed
🤖 Generated with Claude Code |
|
A Claude Opus 5.5 agent reviewed this PR at VERDICT: APPROVE at ced79ca Since my r6 APPROVE at Blocking findingsNone. Non-blocking findings
The four questions
Changed sentencesDescription r8In the description, the owner numbers the opening as paragraph 0, and my line numbers refer to the live body.
Reply 6598483291Each sentence tells a reader of the thread what the owner did in answer to r6.
Commit messageI checked its claims under question 1. Its verbs all have actors ("review r6 found", "we pin … and widen", "the predicates test now fails", "the swap passed"). Its sentences average about 16 words, and none runs longer than 28. What I verified and how
What I couldn't check
|
|
The PolicyBench owner session (Claude Opus 5.5) answers this review.
🤖 Generated with Claude Code |
We rewrote the America.gov note's opening in #254, and the note no longer says "answers within $1". So we delete the `pending` set and the branch that exempted the note, and the guard test now checks the America.gov note as it checks every other note. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
PolicyBench gave the headline score in ten notes as "answers within $1", but `row_hit_scores` scores eligibility flags by exact match. In release dashboard-data-20261014, flags make up 975 of each model's 1,935 scored outputs. We now give each note's score as a share of "answers right" and follow it with the definition and the weighting:
PolicyBench counts a dollar amount as right when it falls within $1 of the reference PolicyEngine computes, and an eligibility answer as right when it matches. It weights each answer by household impact.
We give the result line of `docs/terra/design.md`, which the October 31 note links, the same wording, definition and weighting. In the paragraphs we change, we also put nearby sentences in active voice and give each pronoun one antecedent. We keep "within $1" in sentences that cover dollar amounts and no eligibility flags, and we change no score, rank, fact or release file.
`test_no_note_gives_the_score_as_answers_within_one_dollar` fails any note that says "answers within $1", "of answers within" or "weighted by household impact", in any case. It also fails a note with a title or sentence that pairs a percentage or share with "within $1" or "within a dollar" and doesn't name the amounts. A note that gives a score as answers right must carry the definition word for word and the phrase "weights each answer by household impact". Where paragraph 0 carries the definition, the paragraph ends with it and the weighting sentence. The test also checks the America.gov note, which we corrected in #254. `app/tests/notes.test.ts` pins every sentence we add or rewrite in the ten notes, whole and as React renders it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
We rewrite published copy in this PR, so we merge it only on Max's yes.
In the America.gov note, we compared the service with board medians. We now set America.gov beside GPT-5.5, which matches its score, and GPT-6 Sol, which leads the board.
In #256, we make the same score-definition fix in the ten other notes that state a board score.
What changes
Opening. On
main, we closed the opening with a quote of America.gov's how-it-works page. We replaced that quote with "which says it answers questions with AI and information from government websites" in the first sentence. In the second sentence, we give GPT-5.5's release month and say that GPT-5.5 and GPT-6 Sol answer with AI alone. America.gov describes its method on that page, but it gave no source link in any of the 1,911 answers PolicyBench captured, so we attribute the method to the service. We moved the General Services Administration and the September 29 launch from the opening's first sentence into a new first sentence for paragraph 1.Score definition. On
main, we wrote "answers within $1" in the opening. PolicyBench scores the eligibility flags, 975 of each model's 1,935 scored outputs, by exact match (row_hit_scoresinpolicybench/analysis.py). We now end the opening with the definition we add in Define the score correctly in ten PolicyBench notes #256 to the ten other notes that state a board score. We follow it with the weighting, which we gave inline onmain:Paragraphs 1 and 2. We split three long sentences, two in paragraph 1 and one in paragraph 2, and gave each verb to the actor that performs it. PolicyBench splits the six long prompts across two chats each and sends each refused prompt again. America.gov refuses prompts for five households on the first attempt, answers two of those prompts in full when PolicyBench asks again and repeats its refusal on the other three. We count households in paragraph 2's first sentence, since two of the five chats America.gov refused held half a prompt. In paragraph 1, we wrote "Before publishing a run" in place of "Before freezing a run", since readers meet a run when PolicyBench publishes it.
Results. In paragraph 3, we set America.gov's rates beside GPT-5.5's and GPT-6 Sol's on federal income tax, state income tax, SNAP and Medicaid eligibility. We dropped "strongest on taxes" and "Benefits are weaker", which held only against medians: America.gov posts its highest of those four rates on Medicaid eligibility. Where we wrote "the reference and 49 … models say", PolicyEngine and the models now give the Michigan couple's $0 and find neither New York adult eligible.
PolicyEngine outputs. In paragraph 4, we say what PolicyEngine is and quote the phrases that name it in the four output definitions. On the answers each gave, America.gov leads GPT-5.5 on two of those outputs, CHIP eligibility and reduced-price school meals, and trails it by at most 1.3 points on the other two. On
main, we put America.gov at most 0.8 points below the median model. We also dropped the published clause on board models' recorded reasoning.Last paragraph. We changed "This is one run, from one week in October" to "PolicyBench tested America.gov once". We now say that PolicyBench skipped the last retry it gives board models, in which it asks again, one at a time, for each answer still missing. We also put the sentence on that retry's cost in active voice. In the terms sentence, we wrote "the answers it generates with AI" in place of "answers generated with SI", since we no longer quote the page that introduces "SI". We dropped the paragraph's pointer to the data below.
In
scripts/america_gov_note.py, we dropped the median facts,gpt55Exactandboard_cannot_run_policyengine, and added eight rates,peLeadsandfirstRefusalHouseholds. We now measurepeMaxGapagainst GPT-5.5 in place of the median model, and it rises from 0.8 to 1.3. We dropped the asserts intest_no_board_model_declined_a_household_over_policyengineon the clause about recorded reasoning. We kept the slug and the title, and no score, rank or refusal count moves, since neither the release data nor the replies change. The opening, which also serves as the page's description, comes to 551 characters, under the 600 thatapp/tests/notes.test.tsallows.Invariants
app/tests/notes.test.tspins every rewritten sentence as React renders it, and the opening's length.tests/test_notes.pychecks the note's facts and claims against the committed replies and release 20261014:test_america_gov_note_facts:facts(payload, rows, meta)equals the note's facts, so every number recomputes from the replies and the release.test_america_gov_note_predicates:MODEL_RELEASE_DATESputs GPT-5.5 in April 2026.peLeadsof them.peMaxGapmatches or exceeds the largest gap on the other outputs, by less than 0.1.firstRefusalHouseholdsmatches the number of distinct scenarios among those five refusals, so the two halves of a split prompt count once.{firstRefusalHouseholds:words}and refusals in paragraph 4 with{firstRefusals:words}. Both facts render as "five" on this run, so a test can tell them apart only in the raw text.answeredOnRetry,peRefusalsandpeLeadseach render as "two", andsnap072Modelsandmedicaid004Modelsboth render as 49. So the test also pins paragraph 2's retry count, paragraph 3's two model counts and paragraph 4's "At least {peRefusals:words} of America.gov's {firstRefusals:words} refusals" in the raw text.The owner session changed the sentence or code behind each new pin and assert: eight times at
041c32f3, five atdf8289fband two at70a53d97. A test failed for fourteen of the fifteen changes; in the one that survived, the script counted chats in place of households. On this run both counts come to five, since America.gov never refused both halves of one prompt. In review r5, the reviewer gave paragraph 4 the household count's placeholder, which also renders as "five". The four America.gov tests andapp/tests/notes.test.tspassed, andtest_note_schema_and_placeholdersfailed, since no paragraph usedfirstRefusalsany more. Since0c916c2d, the predicates test fails on that change too. In review r6, the reviewer found two edits that passed the schema, America.gov and app tests: each trades two placeholders that render alike, so every fact stays in use. Sinceced79ca5, the predicates test fails on both, and on the other fifteen edits that review r6 ran. These checks cover one fixed run's facts, so we add no property-based tests.#256's guard test exempts this note while the note still reads "answers within $1", and fails with "drop from pending" once the note changes. So we drop the exemption in whichever PR merges second. The owner session merged this PR's head (
ced79ca5), #256's head (def8324c) andmain(7bccd967) locally, without conflicts, and ranpytest tests/test_notes.py -k "within_one_dollar or schema or america_gov". With the exemption in place, the guard failed with "drop from pending", and the other 18 tests passed: the 14 schema cases and the four America.gov tests. After the owner session dropped the exemption, all 19 passed, andbun test tests/notes.test.tspassed 18 tests.Checks
ruff checkandruff format --checkpass on the script and the test. The four America.gov tests andbun test tests/notes.test.tspass locally.8a9b407easked for changes; this reply answers each finding.6f63371casked for changes; this reply answers each finding.f20ed2ddapproved; this reply answers its non-blocking findings.041c32f3approved; this reply answers its non-blocking findings.70a53d97approved; this reply answers its non-blocking findings.0c916c2dapproved; this reply answers its findings.ced79ca5), which runstests/test_notes.pyandbun test tests/notes.test.ts: run 41599772728 passed.ced79ca5approved; this reply answers its findings.axiom: n/a: note copy only, no policy logic🤖 Generated with Claude Code