Repository navigation
research: type SEC. 256 figures by the account their text names - #869
Conversation
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>
How often accounts are named only in proseA 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.
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
Wider shape, not measuredA 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
Bearing on the decisionThis 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. |
|
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 |
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>
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 pathaccount_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_pathbecomesheading_path. The tree, the heading path and ADR 0018 are untouched.text_accountandtext_account_spanhold 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_yearstays 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 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_evidencestaysnot_checkedon every record.Negative controls, each observed red
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_accountis 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)
ruff check): passedruff format --check): passedpytest -m "not slow and not browser"): passedpytest -m browser): passedpytest -m slow --deselect tests/test_govinfo_corpus_parity.py, covering external-validation, corpus-gates, packaging-gate and remaining-slow): passedNext
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_evidenceoffnot_checked.🤖 Generated with Claude Code