You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The launch contract for replacing the eCPS is parity_gate (gates.py): every layer the incumbent populates, the candidate must populate — share-based (an exported-but-all-zero column fails), with exemptions only by documented name (known_gaps), recorded in the gate details.
It is registered in the declarative gate registry (country_spec.py, "parity") but no US spec selects it and no release tool calls it — the only parity enforced today is input_mass_parity_gate, which audits mass on columns the build already persists. Absent layers never enter its universe. Concrete consequence: ~ten programs' take-up inputs (takes_up_*, see #312) are missing outright and no release has ever failed on them; the same blind spot covers the SCF wealth vars (#49) and SPM inputs (#32).
Plan
Pin the reference. Compute the incumbent eCPS artifact's per-variable nonzero shares ONCE from the pinned, sha-verified policyengine-us-data release file, and check the result in as a JSON reference (variable → nonzero share + the source artifact's sha256). Never recompute from a moving artifact.
Wire the gate. Select parity in the US release path (declarative spec selection where the gate consumes frame evidence, or direct call in the release tool alongside the other gates) with that reference; failure blocks the release like the geography-ladder and weights-audit gates (nonzero exit), and the result lands in the release manifest.
Manifest surface.exempted + gaps already serialize via GateResult details — ensure the release manifest carries them so every release states its remaining distance from full eCPS parity.
Acceptance
The pinned-reference JSON exists with the source artifact sha.
A US release run executes parity_gate and fails loudly on an unexempted missing layer (prove-it-can-find-something test: plant a reference layer the candidate zeroes).
The initial known_gaps register is checked in, every entry reason'd and issue-linked.
Release manifest reports populated layers, gaps, and exemptions.
Related: #312 (take-up inputs, the largest current exemption family), #49, #32, #204 (incumbent-replacement epic), #299 (Build E certification).
Problem
The launch contract for replacing the eCPS is
parity_gate(gates.py): every layer the incumbent populates, the candidate must populate — share-based (an exported-but-all-zero column fails), with exemptions only by documented name (known_gaps), recorded in the gate details.It is registered in the declarative gate registry (
country_spec.py,"parity") but no US spec selects it and no release tool calls it — the only parity enforced today isinput_mass_parity_gate, which audits mass on columns the build already persists. Absent layers never enter its universe. Concrete consequence: ~ten programs' take-up inputs (takes_up_*, see #312) are missing outright and no release has ever failed on them; the same blind spot covers the SCF wealth vars (#49) and SPM inputs (#32).Plan
parityin the US release path (declarative spec selection where the gate consumes frame evidence, or direct call in the release tool alongside the other gates) with that reference; failure blocks the release like the geography-ladder and weights-audit gates (nonzero exit), and the result lands in the release manifest.known_gapsentry must carry a reason and a tracking issue — take-up flags → Seed take-up inputs across programs (parity with policyengine-us-data's stochastic flags) #312 and children; SCF wealth vars → Verify US wealth, property, and asset imputation backlog #49; SPM inputs → Track SPM-specific input gaps: housing, WIC, school meals, child support, workers comp, and expense deductions #32; anything else the first run surfaces gets a new child. The register is the debt ledger; the launch condition is that it shrinks to entries that are deliberate scope decisions, not TODOs.exempted+gapsalready serialize via GateResult details — ensure the release manifest carries them so every release states its remaining distance from full eCPS parity.Acceptance
parity_gateand fails loudly on an unexempted missing layer (prove-it-can-find-something test: plant a reference layer the candidate zeroes).Related: #312 (take-up inputs, the largest current exemption family), #49, #32, #204 (incumbent-replacement epic), #299 (Build E certification).