Skip to content

Document the work-program participation inputs as unsourced assumptions#362

Merged
MaxGhenis merged 1 commit into
mainfrom
work-program-absent-inputs
Jul 9, 2026
Merged

Document the work-program participation inputs as unsourced assumptions#362
MaxGhenis merged 1 commit into
mainfrom
work-program-absent-inputs

Conversation

@daphnehanse11

Copy link
Copy Markdown
Collaborator

Closes #249; advances #248. Stacked on #352 (draft until it merges, then rebases to main — the diff vs #352 is one register extension plus contract tests).

Summary

The CPS ASEC has no item measuring SNAP E&T, qualifying work-program, or workfare participation — confirmed against both the raw ASEC column inventory and the retired enhanced-CPS pipeline, which never carried these inputs either. Per #249's scope ("if no source exists, add an explicit release diagnostic/documented assumption rather than relying on an invisible default"), this adds the three work-program inputs to the documented_absent_inputs register introduced in #352:

  • is_snap_work_program_participant — general work-registration compliance via program participation never fires; USDA reports E&T reaches a small minority of participants, so the always-False default understates compliance only modestly.
  • weekly_snap_work_program_hours — combined work-plus-program hours toward the 20-hour ABAWD test omit program hours.
  • is_snap_workfare_participant — workfare under 7 CFR 273.7(m) satisfies the ABAWD requirement regardless of hours; defaults False.

Contract tests

New test_us_documented_absent_inputs.py pins the register: exact coverage of the six known unsourced inputs, every entry citing a tracking issue, disjointness from the degenerate-exclusions register (persisted-stuck vs never-persisted classes must not overlap), and no seeded input (pregnancy, disability, discretionary exemptions) listed as absent.

Why documentation rather than seeding

Unlike pregnancy (#352) or discretionary exemptions (#353), there is no statutory rate or stable administrative share to seed against at the person level — E&T participation is state-program-specific and small. If a citable assignment basis emerges (e.g., state E&T participation counts), the register entry converts to a seeded stage the same way; until then the honest treatment is a visible always-False assumption.

🤖 Generated with Claude Code

@daphnehanse11 daphnehanse11 requested a review from MaxGhenis July 8, 2026 16:27
Add the three work-program inputs (is_snap_work_program_participant,
weekly_snap_work_program_hours, is_snap_workfare_participant) to the
documented-absent-inputs register: no ASEC item measures SNAP E&T,
qualifying work-program, or workfare participation, so the always-False
defaults are now visible in every release manifest with the compliance
channels they suppress. USDA reports E&T reaches a small minority of
participants, so the default understates compliance only modestly.
Add contract tests pinning the register's coverage, issue citations,
disjointness from the degenerate exclusions, and non-overlap with
seeded inputs.

Closes #249; advances #248. Stacked on #352.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@daphnehanse11 daphnehanse11 marked this pull request as ready for review July 8, 2026 18:00
@daphnehanse11 daphnehanse11 force-pushed the work-program-absent-inputs branch from fe1f9a7 to 1fd7b8d Compare July 8, 2026 18:00
@daphnehanse11

Copy link
Copy Markdown
Collaborator Author

#352 merged, so this is rebased onto main and out of draft — the diff is now exactly the register extension (three work-program entries) plus the contract tests.

@MaxGhenis MaxGhenis left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approve

Verified each new register entry against the underlying policyengine-us variables (installed build pin, gov/usda/snap/eligibility/work_requirements/). All three are real, unseeded, and the reasons are accurate — two of them match the variable's own documentation on the load-bearing citations.

  • weekly_snap_work_program_hours (float, defaults 0): variable doc states these hours "count toward the 20-hour weekly ABAWD work-activity threshold, alone or combined with hours of employment ... Survey data does not capture this input, so it defaults to zero; see #249." The register reason ("combined work-plus-program hours toward the 20-hour ABAWD test omit program hours") is exactly this. Feeds meets_snap_abawd_work_requirements.
  • is_snap_workfare_participant (bool, defaults False): variable doc cites "7 CFR 273.7(m)" and "satisfies the SNAP ABAWD work requirement regardless of the number of hours." The register reason reproduces both facts verbatim. Feeds meets_snap_abawd_work_requirements.
  • is_snap_work_program_participant (bool, defaults False): per its doc, this drives general work-requirement compliance (7 CFR 273.7(a)(1)) and explicitly "does not satisfy the ABAWD work requirement," so it flows to meets_snap_general_work_requirements. The "always-False default understates compliance only modestly" framing is directionally correct (defaulting False marks would-be E&T compliers as non-compliant) and appropriately hedged for an assumptions register; #249 tracks the sourcing.

Confirmed absent, not degenerate: none of the three columns is seeded or persisted anywhere in packages/ or tools/, so the disjointness with US_DEGENERATE_INPUT_REVIEWED_EXCLUSIONS is real, not just asserted. The comment edit generalizing "exemption channels" to "compliance/exemption channels" is correct — the #351 inputs drive exemption, the new #249 family drives compliance.

Pattern matches #352/#351: entries added to US_DOCUMENTED_ABSENT_INPUTS with issue-citing reasons, plus a contract test that pins the register to exactly the six known unsourced inputs, requires every reason to cite a tracking issue, and enforces disjointness from both the seeded stages and the degenerate-exclusions register. CI green (test + wheels, 3.13/3.14), MERGEABLE/CLEAN.

Not merging (review-only per request).

@MaxGhenis MaxGhenis merged commit c51905b into main Jul 9, 2026
4 checks passed
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.

Carry SNAP work-program participation inputs or assumptions through Populace US outputs

2 participants