Skip to content

Add a section on imputed in-kind benefits - #12

Draft
MaxGhenis wants to merge 16 commits into
masterfrom
max/ce-inkind-section-20261106
Draft

MaxGhenis wants to merge 16 commits into
masterfrom
max/ce-inkind-section-20261106

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Nov 6, 2026 •

Copy link
Copy Markdown
Contributor

WIP: please don't merge or deploy. These are public numbers, and they wait on Max's go.

Adds section 4, "Imputing in-kind benefits." BLS adds five in-kind benefits to out-of-pocket FCSUti before it estimates the thresholds: school lunch, WIC, LIHEAP, broadband subsidies and rental assistance. The section reruns the 2019–2025 replication with those benefits, using three spm-calculator receipts:

The tags point at that commit, so a default clone of spm-calculator holds it even if #56 and #57 squash-merge.

What changes

  • Section 4: imputation models, threshold levels, BLS's imputed amounts (rebuilt from its published component shares), 2022–2025 growth, and sampling and imputation uncertainty.
  • Tables: inkind_levels, inkind_amounts, inkind_series, inkind_growth and inkind_accounting, generated by scripts/build_inkind_tables.py from scripts/inkind_inputs.py. \Needspace guards keep the growth and accounting tables on one page of the PDF, as the paper already does for the composite and rolling validation tables.
  • Data: data/inkind/ holds the three receipts, their provenance and SHA-256 sums.
  • Text elsewhere: sentences in the abstract, §3.1–3.2, §6.2 and the discussion point to the section. §3 replaces "we have not estimated the replication's sampling uncertainty" with the replication's standard errors relative to BLS's, and cites Garner (2010) and Garner and Gudrais (2018) for BLS's balanced repeated replication with the CE's 44 replicates. Appendix B, the README and the bibliography name all three receipts' commits.
  • Guard: scripts/check_paper.py validates the receipts before any generator runs and regenerates the tables. It ties every in-kind estimate in the prose to a value it recomputes from the receipts, and each tie reads only the section that states the figure. Each tie also quotes the words that give the figure its meaning: its tenure label, its comparison verb, the stage or series it belongs to, and whose estimate it is. The guard also checks each receipt's SHA-256 and calculator commit against RECEIPT_PINS in scripts/inkind_inputs.py, outside the resealable data/inkind bundle.
  • Method text: the WIC, school lunch, SNAP/EBT, donor-year and covariate sentences follow spm-calculator's code at 4778dfab and BLS's page, including the 2025 WIC universe (WIC_BROAD_UNIVERSE_FIRST_TARGET): for the 2025 thresholds, the WIC model also assigns participation to units that have a child under 5 but no woman aged 15 or older. The participant count follows Census's rule (every child under 5, plus the mother of a child aged 0 or 1) and states our one addition in its own sentence: we count that mother only when the unit has a woman aged 15 or older, so in the units the 2025 universe adds we count the children alone. The identities paragraph names the internet row BLS's shares balance with, the rule that picks it and the broadband subsidies we subtract from it.

Results

  • With the five benefits, replicated thresholds rise 1.1 to 3.8 percent, and the replication exceeds BLS's thresholds in every tenure and year, by 0.26 to 3.53 percent.
  • Under Garner and Munoz's (2021) shelter, utilities and food definitions, the out-of-pocket replication trails BLS by 1.98 to 4.20 percent. Adding the benefits brings it within −1.71 to +1.47 percent and cuts the mean absolute deviation from 3.14 to 0.72 percent. Those runs keep spending under two codes for other fuels in vacation homes, which the FMLI summaries of vacation-home utilities leave out.
  • BLS's imputed benefits rose from $855 to $1,257 per unit in its band between the 2022 and 2025 thresholds, and ours from $1,027 to $1,173. Rental assistance accounts for $169 of the gap between the rises and school lunch for $94.
  • The benefits change the replication's 2022–2025 growth by +0.06, +0.91 and −0.62 points by tenure, with standard errors of 0.74, 2.54 and 1.01 points (44 BRR replicates combined with the five implicates by Rubin's rules). Under either price index, every change lies within three-quarters of a standard error of zero, and the spread across implicates accounts for 17 to 46 percent of each change's variance. The standard errors leave out sampling variation in the rental model's fit, the CPS ASEC donor samples and the CE's five income imputations, and the FCSUti run holds BLS's price factors fixed. Switching to BLS's FCSUti deflator moves growth more, by 0.9 to 2.0 points.
  • The replication's standard errors run 0.66 to 1.95 times BLS's published ones, by tenure and year.
  • For renters in 2024–2025, BLS's imputed benefits supplied 0.62 of the 6.33 points of threshold growth, 0.57 of them from rental assistance. Ours move the replication's renter growth by −0.01 points.

Revision for the r4 review (c7398da, 99c567b, f28157c, ac6b591, a07bcba)

Applies every blocking and major finding of the r4 review (~/reviews/spm-creamer-email-2026-11-05/paper-inkind-review-r4-fable/REVISION-SPEC.md, changes A–R); the minor and nit findings it leaves are listed with reasons in that folder's DEFERRED.md.

  • BLS's methods: §2.1 names the July 2026 correction and the 0.82 share; §4 describes BLS's imputation from its methods page and Garner and Gudrais (2018, BLS WP 510), and says where our covariates, pooling and rent model differ. The calculator page (spm-calculator 708ea21) no longer says BLS hasn't published covariates or its standard-error method.
  • Census's school lunch values: P-EBT in 2020 and 2021; from reference year 2023, Census's fall 2022 method; BLS's traditional method before and after the COVID-19 period; F_MV_SL, the 2014–2017 research values and the 2018 CPS ASEC Bridge File's 2017 values named and not read.
  • Growth accounting (new Table 8): BLS's 2022–2025 growth beyond CPI-U splits into its FCSUti index on the out-of-pocket terms (33 to 39 percent), its imputed benefits (5 to 13 percent) and out-of-pocket spending beyond the index (54 to 60 percent), with re-ranking reported separately (−0.01, +0.82, −0.34 points). With the index's lead on the benefits' terms too, the benefits supply 4.3, 6.8 and 11.7 percent.
  • Year table (new Table 6): BLS's and our in-band amounts and rental assistance per renter for 2019–2025, with standard errors; from the 2019 to the 2022 thresholds BLS's rental assistance per renter rose 17 percent and ours 20 percent, and ours exceeds BLS's by 71 to 80 percent for the 2019–2023 thresholds.
  • Standard errors: for the 2022–2025 rises in band amounts ($191, $444, $50) and for the benefits' lifts (0.31 to 0.61 points for owners with mortgages and renters; 1.04 to 2.00 for owners without).
  • CPI vintage: §4.4 and §6.3 state BLS's interpolated October 2025 CPI-U (138.289 against the official 138.198).
  • Abstract and discussion: carry the accounting's shares and qualify the growth result to the CE's spending summaries; with the written definitions and the composite CPI, the benefits change growth by +0.09, −1.51 and −0.05 points.
  • Independent check (Opus 5.5, in session) of 99c567b: f28157c, ac6b591 and a07bcba replace "differ more in level than in growth" (false for 2022–2025) with the 2019–2022 growth figures, name the deflator on the lift standard errors, describe BLS's band as each year's band in §6.2, add the alternative split, relabel Table 8's index row and widen its label column, and fix four read-twice sentences and the CPI vintage citation's placement.
  • Rendering: report numbers move into each bibliography entry's type field so citeproc prints "Working Paper 2021-17", not "Nos."; a \Needspace keeps Table 8 on one page.
  • Known follow-up: the replication receipt's limitations strings predate this revision (they say BLS has not published its imputation code or covariates and date P-EBT to 2020–2023). The receipts are byte-pinned, so correcting them needs a regenerated receipt in spm-calculator and a repin; the paper's text and the calculator page carry the corrected statements.

New invariants, checked before every render:

  1. For each tenure, the three parts (prices (φ−π)(B22−I22)/B22, benefits (I25−πI22)/B22, out-of-pocket ((B25−I25)−φ(B22−I22))/B22) sum to (B25−πB22)/B22, BLS's growth beyond CPI-U, and each share the prose states recomputes from BLS's receipt. With the index's lead on the benefits' terms too (prices φ−π, benefits (I25−φI22)/B22), the parts still sum to it, the out-of-pocket part is unchanged, and exactly (φ−π)I22/B22 moves from benefits to prices.
  2. The re-ranking, home internet share, year table, rise and lift standard errors, and CPI vintage the prose states recompute from the receipts; rises pair replicate r of 2022 with replicate r of 2025.

New tests: GrowthAccountingProperties (the identity on random inputs, the alternative split's conservation, invariance to the dollar unit, a misstated share and a negative part rejected, and a differential check against the receipts) and ReceiptTieProperties (re-ranking, internet share, rise pairing under rotation, positive standard errors, CPI vintage) in tests/test_inkind_inputs.py; 110 prose mutations in tests/test_paper_guard.py, including a new price-validation region.

Invariants (checked before every render)

  1. The out-of-pocket run reproduces data/current's replication artifact: the archived hash matches, and the thresholds are identical in every year and tenure.
  2. BLS's published shares, thresholds and tenure shares satisfy T_h = 0.82 (C + SU_h + 0.2 F), with F = C + Σ_h P_h SU_h, within $0.00001 in every year from 2019 to 2025.
  3. The paper's rebuild of BLS's imputed terms (nslp, wic and broadband in C; liheap and rental assistance in SU_h) equals the receipt's recorded terms in 2022 and 2025 for every tenure.
  4. Each year's implicates average to the reported threshold with benefits. Lifts, gaps and growth rates recompute from the thresholds, and the per-benefit rises sum to the total rise.
  5. The component receipt names the replication receipt's hash, and its package run reproduces the replication receipt's thresholds.
  6. The uncertainty receipt names both other receipts' hashes and reads the replication receipt's CE bundles, CPS ASEC files, CPI file and imputation seed. Its full-sample thresholds (replicate 0) equal the replication receipt's (package run) and the component receipt's (FCSUti run) in every year, tenure and implicate, and its BLS standard errors equal the paper's own records of BLS's published ones.
  7. Every source file that two receipts both fingerprint carries the same SHA-256 in each.
  8. Every standard error recomputes from the stored replicate thresholds: standard BRR, V = Σ_r (θ_r − θ)² / 44; Rubin's rules across implicates; Barnard–Rubin degrees of freedom on 43. Growth replicates pair replicate r of one window with replicate r of the other.
  9. The regenerated tables match the committed tables byte for byte.
  10. The share formula the section prints, evaluated against BLS's receipt, reproduces BLS's imputed shares of growth beyond CPI-U for every tenure.
  11. The method constants the section quotes from the calculator (179 school days, the 150 percent cutoff for free lunch and for the cells, the WIC participant count, the woman test on the mother of a child aged 0 or 1 and the units where it binds, the 2025 WIC universe, twelve months of WIC, the midpoint of the reference period, twelve times the rent difference, the mean of the five income imputations) come from spm_calculator/ce_inkind.py at the SHA-256 the replication receipt records (c23e6f26…). The 47th–53rd percentile band comes from spm_calculator/ce_threshold.py at the SHA-256 the same receipt records (4efbe2b0…). Garner and Munoz's utilities rule, the vacation-home mortgage principal the written-definition runs remove, the rule that picks BLS's internet row and the broadband subtraction come from spm_calculator/ce_bls_shares.py at the SHA-256 the component receipt records (c6ef2d75…).
  12. Each receipt's SHA-256 and provenance commit equal RECEIPT_PINS, whose digests equal git show <commit>:spm_calculator/data/current/<receipt> in spm-calculator. A resealed receipt can keep every other invariant: mirroring a year's replicates around the full sample keeps every squared deviation. Only this pin rejects it, and the guard checks it last, so a resealed edit that an earlier invariant catches fails with that invariant's label.
  13. Section 4.5's growth period, the half-sample quarter pairs and the thresholds they affect come from the receipts and the replication's 20-quarter windows; Appendix B and the README count the receipts from their provenance and name each commit, and the README names both tags.
  14. The written-definition runs remove vacation-home utilities and the vacation-home mortgage principal in every year from 2019 to 2025, with no negative amount removed and no unit's utilities below zero afterwards. The number of vacation-home fuel codes §4.5 says they keep equals the number the component receipt's stated limitation names, and that limitation gives the same reason the paper does (the FMLI summaries leave them out).
  15. The bibliography's two spm-calculator entries match the provenance commits field for field: the in-kind note names the imputation commit, then the components commit, and its link opens PolicyEngine's docs/ce-inkind-imputation.md at the components commit; the standard-error note and link carry the standard-error commit.
  16. The first reference year with Census school lunch values and the survey whose files carry them, the internet row BLS's shares use in each threshold year, the programs the participation models cover (by name and count), the number of benefits and the amounts caption's implicate count all come from the receipts.
  17. The uncertainty receipt's method record lists the CPI series and BLS's FCSUti index among the inputs its replicates hold fixed, as §4.5 says.

Tests

  • tests/test_inkind_inputs.py: seeded property tests, 2,000 draws each, standard library only.
    • The tests declare the benefit classification themselves (school lunch, WIC and broadband shared; LIHEAP and rental assistance in shelter and utilities) and check the module against it.
    • The imputed-term rebuild equals the threshold change from adding the benefits under a direct evaluation of the identity (a differential test).
    • It adds over disjoint benefit sets.
    • Shared benefits add the same dollars to every tenure, and so does broadband alone.
    • Mix-weighted terms equal 0.82 × 1.2 × the pooled benefits.
    • A tenure's own rental assistance moves its term by 0.82 (1 + 0.2 P_h).
    • Plus growth round trips, and _close rejecting non-finite values.
    • Replicate variance: nonnegative, unchanged by shifting every estimate or permuting the replicates, zero when every replicate equals the full sample, and refuses fewer than 44 replicates.
    • Mirroring every replicate around its full-sample value keeps each replicate variance and every Rubin quantity, so no variance check can see it; a mirrored, resealed receipt passes load_inkind and uncertainty_figures and fails check_receipt_pins. The committed receipts match their pins.
    • Rubin's rules match a direct evaluation of their definitions (a differential test, 2,000 draws). Total variance bounds both components, the missing-information fraction lies in [0, 1] and the degrees of freedom in [0, 43], and identical implicates leave only sampling variance.
    • The committed uncertainty receipt recomputes; one moved replicate fails; rotating the 2025 replicates against 2022's fails the stage-change check.
    • A deliberately broken rebuild (no 0.2 F term) fails 4 of the 7 identity tests.
  • tests/test_paper_guard.py: each of these fails without repairing anything:
    • a corrupt receipt, before any generator runs;
    • an extra file under data/inkind;
    • a resealed receipt with its hashes updated (first on the cross-receipt hash link, then on data/current);
    • an internally consistent edit to one threshold, against the component receipt;
    • table drift and a missing include;
    • nine prose drifts across the section, abstract, §6.2 and Appendix B, plus twelve more in the standard-error sentences of §3, §4.4, §4.5 and Appendix B (among them the growth period, the half-sample thresholds and Appendix B's receipt count), and the §4.4 stage-change sentence moved into §4.5;
    • a README that miscounts the receipts, shortens a commit or names a stale tag;
    • fourteen edits that keep every figure and change its meaning: swapped tenure labels on the growth changes and on the shares, BLS's and our shares swapped, four flipped comparison verbs in the section and one in the discussion, a changed operator or year in the share formula, 180 school days, and a WIC mother aged 18 or older;
    • a resealed uncertainty receipt whose replicates no longer match its stored standard errors, one that names the wrong receipts, one whose full-sample thresholds drift from the replication, one with altered BLS standard errors, receipts whose shared code fingerprints differ, one with a zeroed CE bundle hash, and one with a changed imputation seed;
    • a resealed uncertainty receipt with its 2019 replicates mirrored, which fails only on the pinned digest, and a provenance record naming another calculator commit;
    • two figures restated in another section;
    • two drifts in the written-definition sentences of §4.2 and §4.5: the vacation-home utilities the runs remove, and the number of fuel codes they keep;
    • five resealed component receipts, repinned so they reach the drift checks: one whose runs keep 2022's vacation-home utilities, one whose runs keep its vacation-home mortgage principal, one that leaves 57 units' 2022 utilities below zero, one that reads 2024's internet row from the total row, and one whose stated limitation names a third kept fuel code. An unchanged reseal passes the whole guard as their control;
    • a resealed, repinned uncertainty receipt whose held-fixed inputs no longer list the price indexes;
    • twenty-seven more edits that keep every figure and change its meaning or a method fact: the lift's direction in the section, abstract and discussion; swapped stages in the 2024–2025 renter growth and the written-definition ranges; swapped benefits in the difference by benefit; swapped owners of the imputed totals and of the 2024–2025 rental assistance per renter; swapped price series; the deflator the share formula names; the implicate rise's price index; the growth window in the caption; the renters' half of the utilities rule and the reason the runs keep two fuel codes; the 2025 WIC universe's year and rule, the infant age and the pregnant-woman count; the five income imputations; the percentile band; the first Census school lunch year; the internet row years; and the program, benefit and caption implicate counts;
    • nine more of the same kind: a mother counted in the units the 2025 universe adds, the years of the imputed totals, the tenure of BLS's 2024–2025 split, the survey whose files carry Census's lunch values, a program in the participation list, the vacation-home principal kept, the internet-row rule, broadband added instead of subtracted, and FCSUti price factors that vary;
    • a bibliography citing either stale commit, a stale components link alone, the two entries' commits swapped, the commits swapped inside the in-kind note, or a link to a fork.
  • Mutation audit (at d2e94a0): a script perturbed each of the 127 numbers in the in-kind passages and reran the guard, which caught 69. The 58 it missed were years; method constants (ages 5, 18 and 65, 150 percent of poverty, 179 school days, the 0.2 in the identity, the 80 percent food allocation); and the abstract's 1.17, 2.58 and 0.75, which the gap below covers. The guard now pins the constants listed in invariant 11.

Known gap, older than this PR

The abstract's evaluation figures (1.17, 2.58 and 0.75 percent) still pass the guard when changed alone, because their ties read the whole document and the body states the same figures. #13, stacked on this PR, scopes those ties to the abstract, and #14 does the same for every section. Both rebase onto this PR once its review settles the guard.

Plan

axiom: n/a: paper text, tables and receipts; no policy rule changes

🤖 Generated with Claude Code

MaxGhenis and others added 3 commits November 6, 2026 15:19
Section 4 reruns the 2019-2025 replication with the five in-kind
benefits BLS adds to out-of-pocket FCSUti: school lunch, WIC, LIHEAP,
broadband subsidies and rental assistance. The figures come from two
spm-calculator receipts in data/inkind: the imputation at 4778dfab
(PolicyEngine/spm-calculator#55) and the comparison with BLS's published
components at 8b6766cb (PolicyEngine/spm-calculator#56).

- scripts/inkind_inputs.py checks the receipts against each other and
  against data/current, and recomputes every in-kind figure;
  scripts/build_inkind_tables.py writes the three tables.
- scripts/check_paper.py runs those checks before any generator,
  regenerates the tables, and ties each in-kind figure in the prose to
  its recomputed value within the section that states it.
- tests/test_inkind_inputs.py states the imputed-term identities as
  seeded property tests; tests/test_paper_guard.py adds corruption,
  reseal, drift and borrowed-figure cases.
- The abstract, sections 3 and 6.2, the discussion, Appendix B and the
  README point to the new section.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
BLS's SPM page describes its rule (free lunch below 150 percent of the
official poverty line, otherwise free or reduced-price with equal
probability) as its own and "similar to" Census's, and says it uses the
school lunch values it receives from Census staff. The section now
credits each to its source.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Drop "or covariates" and "BLS has not published its rental model":
  Garner and Munoz (2021) say BLS imputes market rents with the
  Garner and Gudrais (2018) model, so neither claim holds.
- Rename the imputed-terms symbol in the share formula from C to I,
  since C already sums the shared components in the BLS identity.
- Give "we" the verbs for cell formation, the income split and WIC
  values; state the WIC pregnant-woman rule as the code applies it
  (a unit with no child under 5).
- "We estimate" leads the threshold-lift result in the abstract and
  the section; "under either price index" replaces "across both
  deflators", a term the section had not introduced.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A third spm-calculator receipt, from PolicyEngine/spm-calculator#57 at
7d8e3c83, reruns the 2019-2025 threshold estimator under each of the
CE's 44 replicate weights, with and without the imputed benefits, and
combines the replicate variance with the variance across implicates by
Rubin's rules.

- Section 3 replaces "we have not estimated the replication's sampling
  uncertainty" with the replication's standard errors relative to BLS's.
- Section 4.5 gives the standard errors of the benefits' change to
  2022-2025 growth, the implicate share of their variance, and the
  2015Q2 and 2017Q1 changes in which replicate weights BLS leaves blank.
- scripts/inkind_inputs.py checks the new receipt against the other two
  (input hashes, full-sample thresholds, shared code fingerprints, BLS's
  published standard errors) and recomputes every standard error from
  the stored replicates; scripts/check_paper.py ties each new figure to
  the section that states it.
- tests/test_inkind_inputs.py adds property and differential tests for
  the replicate variance and Rubin's rules; tests/test_paper_guard.py
  adds reseal, replicate-pairing and prose-drift cases.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 12 commits November 7, 2026 11:05
Addresses findings 1-9 of the GPT-6.1 Sol review of 0a03075.

Method text, checked against spm-calculator at 4778dfa and BLS's page:
- WIC: we count participants in units we assign to WIC, add a mother
  only when the unit includes a woman aged 15 or older, test WIC EBT
  against the midpoint of the three-month reference period, and draw
  that status for suppressed states from known-state units in the same
  region and quarter.
- School lunch: Census's public values from reference year 2018, kept
  apart from our donor transfer; earlier years value each CPS ASEC
  donor's reported lunches by USDA's rates and carry them through the
  same cells.
- SNAP: BLS states its EBT assumption for SNAP, so the text does too.
  Donors come from the following year's CPS ASEC, with no claim about
  the reference year of its questions.
- The identities paragraph names the internet row BLS's published
  shares balance with, and the CE summaries, not BLS, include rent and
  meals received as pay.
- Our figures take "we estimate"; captions and the shares sentence pair
  each figure with its tenure.

Guard (scripts/check_paper.py):
- Each in-kind figure's tie quotes its tenure label and comparison verb.
- The share formula as printed, evaluated against BLS's receipt, must
  reproduce BLS's shares.
- Method constants quoted from ce_inkind.py must match the code
  fingerprint the replication receipt records.
- Fourteen new prose mutations (swapped labels, flipped verbs, a changed
  formula operator or year, 179 school days, the WIC age) each fail it.

Tests: the property tests declare the benefit classification apart
from the module, and a broadband-only fixture adds equal dollars to
every tenure.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Address the GPT-6.1 Sol review of the replicate-weight standard errors
at 46f18f5:

- Section 4.5 says what the standard errors leave out: the FCSUti run's
  fixed price factors, sampling variation in the rental model's fit and
  in the CPS ASEC donor samples, and the spread across BLS's five CE
  income imputations.
- Section 3 says BLS's threshold workbooks do not describe its
  standard-error method, and that shared CE interviews keep either set
  of standard errors from measuring the sampling error in the gap.
- Section 4.5 gives the variance share and the covariance choice to us.
- The uncertainty receipt must read the replication receipt's CE
  bundles, CPS ASEC files, CPI file and imputation seed.
- RECEIPT_PINS records each receipt's SHA-256 and calculator commit
  outside data/inkind, and the guard checks them last in its input
  stage. Mirroring a year's replicates keeps every squared deviation,
  so only the pin catches a receipt resealed that way.
- New ties: the growth period in the standard-error sentence, a
  section 4.4 slice for the within-one-standard-error sentence, the
  half-sample pairs and thresholds derived from the receipt and the
  replication's windows, and the receipt counts in Appendix B and the
  README, with negative tests for each.

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

PolicyEngine/spm-calculator#56 at 8f632e3 and #57 at a581c11 now remove
vacation-home utilities in the written-definition runs, following Garner
and Munoz (2021): owners' utilities for the primary residence only, and
renters' utilities for any property but a rented vacation home. With
those runs, the out-of-pocket replication trails BLS by 1.98 to 4.20
percent, and with the imputed benefits our thresholds run from 1.71
percent below to 1.47 percent above BLS's.

- data/inkind: the new receipts, provenance records and SHA-256 sums
- scripts/inkind_inputs.py: RECEIPT_PINS on the new digests and commits
- paper: the levels paragraph, both table captions and the limitation
  describe the utilities rule, and Appendix B names the new commits;
  the levels and growth tables regenerate from the receipts
- guard: one tie requires the runs to remove vacation-home utilities in
  every year with no negative amounts, and another counts the fuel codes
  the calculator's stated limitation keeps
- tests: two prose drifts, two resealed and repinned component receipts,
  and a reseal control; the lower-bound drift now starts from 1.71

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The bibliography now cites the components and standard-error commits
(8f632e3 and a581c11) that the receipts, Appendix B and the README
already name, and a new guard tie checks each entry's note and link
against provenance.json.

The WIC paragraph now states that, as BLS does, the 2025 thresholds let
the WIC model assign participation to units that have a child under 5
but no woman aged 15 or older (WIC_BROAD_UNIVERSE_FIRST_TARGET in
ce_inkind.py). No figure changes.

The in-kind ties now quote the verb or label beside each figure: the
lift's direction in all three places, the owner of each dollar range,
the stage of each written-definition range, the benefit behind each
dollar of the difference, the price series and the deflator in the
share formula. New ties read the written-definition utilities rule from
ce_bls_shares.py and the percentile band from ce_threshold.py at their
fingerprints. They also check the first Census school lunch year, the
internet row in each year, the program and implicate counts, and that
no unit's utilities fall below zero after the vacation-home removal.
Each new tie has a mutation or resealed-receipt test.

Four sentences split or gain a referent, and the README names the two
spm-calculator tags that keep 8f632e3 and a581c11 in every clone.

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

Paper:
- The WIC participant sentence put our woman test under "Following
  Census", but Census's technical documentation counts the mother of any
  child aged 0 or 1. A new sentence states the test and where it binds:
  every narrow-universe unit has a woman aged 15 or older, so only the
  units the 2025 WIC universe adds lose the mother, and for them we count
  the children alone (_wic_participants at 4778dfa).
- The implicate rise range says it spans both price indexes. The
  composite CPI gives $52 to $284 and BLS's FCSUti index $87 to $287.

README: the tags sentence says what the tags point at and that a default
clone holds both commits. Single-branch, shallow and --no-tags clones
hold neither.

Guard:
- The bibliography tie compares whole note and url fields, so commits
  swapped inside the in-kind note and a link to a fork both fail.
- The totals, BLS 2024-2025 renter split, Census lunch and program ties
  quote the years, tenure, survey and program names around their figures.
- Fingerprinted ce_bls_shares.py constants now cover the vacation-home
  principal the written-definition runs remove, the internet-row rule and
  the broadband subtraction. The removal tie requires principal removals
  in every year.
- A new tie reads the uncertainty receipt's held-fixed inputs for the
  FCSUti sentence, and the README tie names both tags.

Tests: nine new prose mutations, two retargeted WIC patterns, the
implicate pattern, a README tag case, two bibliography cases, and resealed
receipts that keep the principal or replicate the price indexes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The WIC sentences d296dcf added pushed Table 6 (threshold growth,
2022-2025) across pages 8 and 9 of the PDF and stranded its last row,
the written-definition FCSUti run with imputed benefits, under a
repeated header. A \Needspace guard before the table, the pattern the
paper already uses for the composite and rolling validation tables,
starts it on a new page when fewer than 22 lines remain.

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

Applies the r4 review's blocking and major findings (revision spec
sections 3 and 4, changes A to R).

Paper:
- Section 2.1 and 3.2 name BLS's July 2026 correction, the 0.82 share and
  the published standard-error method (Garner 2010; Garner and Gudrais
  2018), and the price-year and tenure-code wording follows the sources.
- Section 4 describes BLS's imputation from its methods page and Garner
  and Gudrais (2018), lists where our covariates, pooling and rent model
  differ, and states the school lunch, WIC and broadband rules we use and
  where they depart from BLS's and Census's (P-EBT 2020-2021, Census's
  fall 2022 method from reference year 2023, broadband from 2021).
- New three-part accounting of BLS's 2022-2025 growth beyond CPI-U
  (prices, imputed benefits, out-of-pocket), with the re-ranking term,
  a year-by-year table of BLS's and our in-band amounts with standard
  errors, and standard errors for the rises in band amounts and for the
  benefits' lifts.
- The abstract and discussion carry the accounting's shares (5 to 13
  percent), qualify the growth result to the CE spending summaries, and
  report the written-definition changes with the composite CPI.
- Section 6.3 states BLS's interpolated October 2025 CPI-U (138.289
  against the official 138.198) and checks the vintage.
- Bibliography: Garner and Gudrais (2018), Garner (2010), the CE Gemini
  redesign page; corrected entries for Garner and Munoz (2021), the
  Census technical documentation, Rubin (1987) and the BLS pages.

Calculator pins: the components and standard-error receipts now cite
spm-calculator b542f3f (tags paper-inkind-components-b542f3f and
paper-inkind-se-b542f3f), which holds the same receipt bytes as 8f632e3
and a581c11 and corrects the in-kind page's text about BLS's published
covariates and standard errors. Appendix B and the README name the one
commit once.

Guard and tests:
- inkind_inputs.py computes every new figure from the receipts:
  accounting, re-ranking, internet share and levels, year table, amount
  and lift standard errors, CPI vintage. Each ties to receipt fields
  with consistency checks.
- check_paper.py pins each new sentence to those figures; the mutation
  list covers each pin, including a new price-validation region.
- test_inkind_inputs.py adds property tests for the accounting identity
  (three parts sum to the growth beyond CPI-U, unit invariance, rejected
  misstated shares and negative parts), a differential check against the
  receipts, and ties for the re-ranking, internet share, rise pairing,
  standard errors and CPI vintage.
- The bibliography test edits one entry at a time now that both receipts
  share a commit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Citeproc read the hyphen in report numbers such as 2021-17 and P60-287
as a range and printed "Nos."; the numbers now sit in each entry's type
field. A Needspace before the growth-accounting table keeps it from
splitting across pages 10 and 11.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Independent check of the r4 revision (Opus 5.5, in session):

- The rental series sentence said the two series "differ more in level
  than in growth", which fails for 2022-2025 (BLS +68%, ours +9%). It now
  gives both series' 2019-2022 growth (17 and 20 percent), tied to the
  receipts in the guard with a mutation case.
- The discussion's growth claim now says "with the CE's spending
  summaries", as the abstract does; under the written definitions and
  the composite CPI, owners without mortgages move 1.51 points. The guard
  ties the qualifier, with a mutation case that drops it.
- The lift standard errors name their deflator (composite CPI).
- Section 4.2 adds that the 2018 CPS ASEC Bridge File also carries SPM
  variables, for reference year 2017 (Census SPM technical documentation),
  and the guard ties both years.
- Section 6.2 describes BLS's band as each year's band, not the same units.

The calculator page at 708ea21 drops the old "rises 68%, against 9%"
framing and states the full school lunch ladder; text only, and both
receipts are byte-identical to b542f3f's. Provenance, RECEIPT_PINS, the
bibliography, Appendix B, the README and the guard tests move to
708ea21, with tags paper-inkind-components-708ea21 and
paper-inkind-se-708ea21.

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

From the independent check of the r4 revision:

- Section 4.4 adds the split's other convention: if the FCSUti index's
  lead also applies to the benefits' terms, out-of-pocket spending keeps
  its part and the benefits supply 4.3, 6.8, and 11.7 percent. The
  inputs module computes it beside the stated split; the guard ties the
  sentence and checks that the shares sum to 100, the out-of-pocket part
  stays put and the benefits' share falls; a property test checks that
  the alternative moves exactly (phi - pi) I22 / B22 from benefits to
  prices on 2,000 random draws; a mutation swaps two shares.
- Table 8 labels the index row "on out-of-pocket terms", which is where
  the 4.11 points apply (the text's 4.18 is the index's lead).
- Read-twice fixes: "Of the $256 difference between the two rises,
  rental assistance supplies $169 and school lunch $94"; the fall 2022
  method sentence; "which, on the threshold's out-of-pocket terms,
  supplies 4.11 points"; and the citation for BLS's CPI-U vintage now sits
  on the figure the page prints, not on our 10.08 percent.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Pandoc sizes a pipe table's PDF columns by the dashes under each header
once a row passes 72 characters; the accounting table now gives its
label column 40 percent of the width.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The guard test that mirrors 2019's replicates now reseals the recorded
in-kind lift, as test_inkind_inputs.py does: the lift is a ratio of
thresholds, so reflection moves its variance, and c7398da's lift
consistency check rejected the unresealed copy before the digest pin
could. The swapped-benefits mutation now matches f28157c's lowercase
"rental assistance supplies ... and school lunch" wording.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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