Skip to content

research: type SEC. 256 figures by the account their text names - #869

Merged
willhea merged 5 commits into
developfrom
research/sec256-text-accounts
Oct 30, 2026
Merged

willhea merged 5 commits into
developfrom
research/sec256-text-accounts

Conversation

@willhea

@willhea willhea commented Oct 30, 2026 •

Copy link
Copy Markdown
Collaborator

Why

H.R. 4366 Senate amendment v4, SEC. 256, rescinds $1,000,000,000 from Medical Services and $976,005,000 from Medical Community Care. Both figures sit in one parsed node whose heading path ends Administrative provisions › Sec. 256. The experiment's record called that path account_path, so either figure would have been filed under an account that does not exist. That is a zero-tolerance wrong-account error under ADR 0025.

What changes

docs/research/financial-semantics/figure_example.py, the bounded experiment from #862:

  • account_path becomes heading_path. The tree, the heading path and ADR 0018 are untouched.
  • New fields text_account and text_account_span hold the account name the text gives. They are filled only inside a "hereby rescinded from the following accounts in the amounts specified:" list whose items are each exactly one name and one figure. A malformed item makes the whole list abstain, with no account and no effect.
  • fiscal_year stays None for both figures. "Prior appropriations Acts" names no year and does not exclude the FY2024 advance, which the 2023 Act appropriated. CRS's FY2024 subtotal nets SEC. 256 without saying why, so it is not used either.
  • The emergency-designation proviso produces no figure.
  • Heading-path occurrence, source span, hash, parser revision and ordinal are kept.

The financial-semantics README gains a SEC. 256 section with the three facts kept apart, the corroboration table and the open questions. The roadmap records the slice and the next step.

Corroboration (manual only)

S.Rept. 118-43's Administrative Provisions rows ("Committee recommendation" column) give −1,000,000 for Medical Services and −976,005 for Medical Community Care, both "(Sec 238 (Req)/Sec 256)". They corroborate the account by name, the amount and the sign for each figure. They do not corroborate the funding years. The report accompanies S. 2127 as reported, whose SEC. 255/256 have the same numbers, element ids and whitespace-insensitive text as v4.

These are a hand-read acceptance case, not independent evidence. No implemented check reads the report, so independent_evidence stays not_checked on every record.

Negative controls, each observed red

  • Account taken from the full heading path, or from its leaf.
  • The two accounts swapped.
  • The two figures collapsed into one.
  • Funding year FY2024 (CRS's subtotal), or FY2023 (from "prior appropriations Acts").
  • A malformed list that does not abstain.
  • An item name allowed to contain a figure.
  • An unnamed item.
  • The proviso's year read as a figure.

SEC. 255 names its account in a different shape and stays unresolved. It adds no control that SEC. 256 cannot provide, so it is documented as a gap, not tested. SEC. 251 (four accounts, one figure) correctly abstains.

ADR 0025 (decided in #875)

ADR 0025 now calls these referential figures. A referential figure counts as attributed only when its named account resolves to an account in the bill's structure. text_account is the recorded name, not that resolution, so the SEC. 256 figures are not yet attributed. The README and roadmap say so.

Out of scope

Classifier generalization, a cross-node account resolver, product displays, exports, totals, roll-ups and cross-version pairing. #736's contribution credit is preserved. #734, #736 and #739 are not touched.

Gates (run locally on this branch, after rebasing onto #866)

  • lint (ruff check): passed
  • format (ruff format --check): passed
  • fast (pytest -m "not slow and not browser"): passed
  • browser (pytest -m browser): passed
  • slow (pytest -m slow --deselect tests/test_govinfo_corpus_parity.py, covering external-validation, corpus-gates, packaging-gate and remaining-slow): passed

Next

Resolve each text-named account to an account node in the same bill. The resolver abstains unless exactly one account matches, and never falls back to the heading path. Then commit S.Rept. 118-43 as a frozen input and implement ADR 0025's rescission-row check (each row matched to a figure typed as a rescission, by account and amount), starting with the VA Administrative Provisions block. That check is what can move independent_evidence off not_checked.

🤖 Generated with Claude Code

willhea and others added 3 commits October 29, 2026 23:25
SEC. 256 rescinds from Medical Services and Medical Community Care in one
parsed node whose heading path ends "Administrative provisions › Sec. 256".
Calling that path the account files both figures under neither account.

Rename account_path to heading_path and add text_account with its span,
filled only from a "rescinded from the following accounts in the amounts
specified:" list whose items each name one account and one figure. Any
malformed item abstains for the whole list. The funding year of the
rescinded balances stays None: "prior appropriations Acts" names no year.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
S.Rept. 118-43's Administrative Provisions rows corroborate each SEC. 256
figure's account by name, amount and sign, by manual inspection only; they
do not corroborate the funding years, which stay unresolved. S. 2127 as
reported carries SEC. 255/256 with identical text and element ids, so the
report applies to v4.

Raises the open question for a maintainer: ADR 0025 defines an account by
structural position, and SEC. 256's accounts are named only in its text.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@willhea

willhea commented Oct 30, 2026

Copy link
Copy Markdown
Collaborator Author

How often accounts are named only in prose

A one-off probe across the committed corpus (31 bills, several versions each) looked for provisions that name their accounts in a list ("…from the following accounts…"). Nothing is committed; this is evidence for the ADR 0025 decision, not a gate.

Measure Count
Bills with at least one such list 19 of 31
Distinct list provisions (each bill/section counted once across versions) 69
Dollar figures inside those lists ~590
Provisions where this PR's rule fills text_account 10, all VA Administrative Provisions

Naming the account in prose is how general-provision rescissions are routinely drafted, across agencies and years, not a VA quirk. Everywhere else, the rule here correctly abstains, but it extracts nothing.

Shapes the rule misses

  • Numbered items with a dash lead (Commerce, HUD, DOJ): "in the specified amounts—(1) Economic Development Administration, Economic Development Assistance Programs, $15,000,000; and (2) …". The rule expects "in the amounts specified:" and unnumbered items.
  • A list ending in a period. H.R. 4366's House-reported SEC. 256 is the same sentence as v4's, but it ends with "." rather than ":", so the rule abstains. It is too strict about its end marker, and this is the cheapest gap to close.
  • Defense rescissions with periods of availability: "Cooperative Threat Reduction Account, 2022/2024, $75,000,000; …", often with a proviso between the lead and the list. These are the first place in the corpus where the text itself states the years of the rescinded money, which bears directly on the fiscal_year question SEC. 256 cannot answer.
  • Amount first, account second (Federal Highway Administration): "(1) $33,437,074.13 from funds available in the Surface Transportation Priorities account (69 X 0538)…".

Wider shape, not measured

A figure in a general provision whose text says "under the heading X", as SEC. 255 does. Section nodes with figures contain that phrase in ~830 node occurrences, before removing repeats across versions. That is a ceiling, not a count: many such sentences reference a heading without assigning a figure to it (transfers, limitations). They are not classified.

Caveats

  • The corpus is a sample.
  • Shapes were identified by reading examples, not by a classifier.

Bearing on the decision

This strengthens the case for amending ADR 0025 so that an explicitly text-named account satisfies the account property, with abstention rather than a fallback to the heading path when the text is ambiguous. It also suggests broadening list-shape coverage before building the report-matching check. The defense year-range lists are a natural candidate, because they exercise the funding-year field too.

@willhea

willhea commented Oct 30, 2026

Copy link
Copy Markdown
Collaborator Author

The ADR 0025 question this PR raises is now a separate decision PR: #875. It proposes that a referential figure counts as attributed only when its named account resolves to an account in the bill's structure, so this PR's text_account is a recorded name, not yet an attributed account.

willhea and others added 2 commits October 30, 2026 00:06
ADR 0025 (#875) now attributes a referential figure only once its named
account resolves to an account in the bill's structure. Replace the open
question with that rule: text_account is a recorded name, not yet an
attributed account. Point the roadmap's next step at the resolver.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Under ADR 0025 (#875) an account is attributed only once the named account resolves to the bill's structure, so the test checks a recorded name, not an attributed account.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@willhea
willhea added this pull request to the merge queue Oct 30, 2026
Merged via the queue into develop with commit 73c4a68 Oct 30, 2026
11 checks passed
@willhea
willhea deleted the research/sec256-text-accounts branch October 30, 2026 04:17
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