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
{{ message }}
Repository navigation
Formula-owned export must supersede eCPS parity matching (drop formula-owned vars even when eCPS stores them) #25
When the no-formula rule (formula_owned_export) and the eCPS-parity rule (parity) conflict, no-formula wins. A variable that PolicyEngine computes via formula must never be persisted as an input — even if enhanced CPS persists it.
Why
eCPS itself stores formula-derived values it shouldn't. Example: traditional_ira_contributions (and the other contribution variables) should follow from the *_desired inputs plus the statutory caps, computed by the engine — not be frozen as a stored column. eCPS storing the computed contribution is an eCPS bug. If populace matches eCPS (the parity gate requires populace to populate every layer eCPS populates), it inherits that bug and masks the engine's cap logic.
So the gates must be ordered: a formula-owned variable is dropped regardless of eCPS, and parity must exempt formula-owned variables from its "populate what eCPS populates" requirement (the engine computes them, so a "gap" there is correct, not a regression).
Scope / changes
parity_gate (or its runner) must treat formula-owned variables as exempt — not a parity gap when populace omits a formula-owned layer eCPS happens to store.
(person_id is a structural ID — keep via the structural_columns allow-list, not dropped)
The canonical "formula-owned" set is the oracle for both gates: has an engine formula ⇒ not persisted (minus a documented structural allow-list).
Follow-ups (separate, lower priority)
File the eCPS-side bug upstream in policyengine-us-data (eCPS shouldn't persist traditional_ira_contributions etc. either) — but populace should not wait on that; the precedence rule makes populace correct independently.
Fixed by #37. Live Populace now treats formula ownership as the export oracle; formula-owned variables are rejected at the writer instead of being retained to match an incumbent comparison surface.
Activity
MaxGhenis commentedon Jun 14, 2026
Fixed by #37. Live Populace now treats formula ownership as the export oracle; formula-owned variables are rejected at the writer instead of being retained to match an incumbent comparison surface.
Accept only allowlisted issue references in sign-off free text (#1301)