Skip to content

Build J: full eCPS-exported-column coverage as a HARD release gate + asset-column restoration (SSI reforms score $0) #368

Description

@MaxGhenis

The failure (Max's directive: "DO NOT STOP UNTIL WE HAVE THIS! it must be an actual gate!!")

An SSI asset-limit reform ($10k/$20k) scores exactly $0.000B on the newly certified default (Build I) — probe-verified, not inferred — because ssi_countable_resources is 0 for every record: the asset input columns were dropped at the base pool and are absent from the export. This is the #361/#356/#340/#278 family: 94 input columns the sparse national-only release never persists, so the engine silently defaults them and every reform that binds through them scores $0. Build I restored 7 of 94 (IRA/SE-pension intents, hours family, immigration/ssn) — none of the assets. The incumbent July 1 default had the identical hole; certification never blocked on it because export-mass parity (35 weighted-mass columns) is not column coverage.

Deliverable 1 — the HARD GATE (ship first; it must fail today's builds by design)

Extend the #350 mechanism (US_RELEASE_REQUIRED_PERSON_SOURCE_COLUMNS + assert_required_us_release_source_columns, which hard-fails the export before write_dataset) from its current 5 SNAP columns to a declared full coverage contract:

Deliverable 2 — restore the asset columns (the data)

Assets are SCF-imputed in the retired pipeline; port that stage into populace (the #293/#350/#352 port pattern Daphne established), so ssi_countable_resources derives correctly. Then the remaining #340 families (tips/overtime/education/retirement-contributions/casualty/misc-itemized/childcare — childcare's raw CPS signal already sits unused in the file) and #278 leftovers. Base pool rebuild carries them; dense + sparse re-run under the gate.

Sequencing (Build J)

  1. Gate PR (fails current artifacts — that is the point; merge with the gate ON).
  2. Asset-stage port + base rebuild + probe passes (SSI reform scores plausibly vs the dense-native reference numbers).
  3. Remaining families in tranches; each tranche shrinks the reviewed-exclusion list.
  4. Re-certify dense + sparse under the full gate; default flip only when the SSI probe (and the rest of the smoke set) is green.

Refs: #340, #356, #361, #278, #350 (mechanism), #286 (cannot-rot semantics), #323, #359 (Build I verdict carrying the caveat), policyengine.py#463 (the flip this gate should have blocked).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions