Repository navigation
Conversation
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>
5 of 8 tasks
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>
4 of 6 tasks
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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:
paper-inkind-components-708ea21andpaper-inkind-se-708ea21). That commit holds the same receipt bytes as 8f632e31 (#56) and a581c113 (#57); its page text corrects what it said about BLS's published covariates and standard errors and matches the paper's rental comparison and school lunch ladder.The tags point at that commit, so a default clone of spm-calculator holds it even if #56 and #57 squash-merge.
What changes
inkind_levels,inkind_amounts,inkind_series,inkind_growthandinkind_accounting, generated byscripts/build_inkind_tables.pyfromscripts/inkind_inputs.py.\Needspaceguards 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/inkind/holds the three receipts, their provenance and SHA-256 sums.scripts/check_paper.pyvalidates 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 againstRECEIPT_PINSinscripts/inkind_inputs.py, outside the resealabledata/inkindbundle.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
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'sDEFERRED.md.F_MV_SL, the 2014–2017 research values and the 2018 CPS ASEC Bridge File's 2017 values named and not read.\Needspacekeeps Table 8 on one page.limitationsstrings 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:
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) andReceiptTieProperties(re-ranking, internet share, rise pairing under rotation, positive standard errors, CPI vintage) intests/test_inkind_inputs.py; 110 prose mutations intests/test_paper_guard.py, including a new price-validation region.Invariants (checked before every render)
data/current's replication artifact: the archived hash matches, and the thresholds are identical in every year and tenure.spm_calculator/ce_inkind.pyat the SHA-256 the replication receipt records (c23e6f26…). The 47th–53rd percentile band comes fromspm_calculator/ce_threshold.pyat 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 fromspm_calculator/ce_bls_shares.pyat the SHA-256 the component receipt records (c6ef2d75…).RECEIPT_PINS, whose digests equalgit 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.docs/ce-inkind-imputation.mdat the components commit; the standard-error note and link carry the standard-error commit.Tests
tests/test_inkind_inputs.py: seeded property tests, 2,000 draws each, standard library only._closerejecting non-finite values.load_inkindanduncertainty_figuresand failscheck_receipt_pins. The committed receipts match their pins.tests/test_paper_guard.py: each of these fails without repairing anything:data/inkind;data/current);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
inkind-section-2026-11on the final commit (Appendix B links to it)axiom: n/a: paper text, tables and receipts; no policy rule changes
🤖 Generated with Claude Code