ACS transfer: donor SE predictor is the base leaf only; pool lane lacks the SE identity gate
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 42/100
Research direction
Start with us_runtime/acs_transfer.py and its _person_optional_features logic, then trace how _DONOR_COMBINED_COMPONENTS is defined and checked. The issue also points to tools/build_us_multispine_pool.py and acs_self_employment_identity_gate; read those entry points to understand how the pool frame is graded before export. Done means the donor predictor includes all four SE leaves, the component requirement is checked and the spec is re-pinned, and the pool lane applies the identity gate before export.
Written by the indexing model from the issue text.
Description
Two follow-ups that #1384 left out on purpose.
1. The self-employment predictor means different things for donor and recipient
us_runtime/acs_transfer.py (_person_optional_features, at dce4aa99b) feeds __acs_transfer_self_employment_income from self_employment_income_before_lsr for both roles:
- Donor (PUF/ASEC): that column is the base leaf only. SSTB, farm operations and partnership SE sit in their own leaves.
- ACS recipient: it is all of SEMP × ADJINC / 1e6, which covers farm and partnership income too.
So an ACS SSTB owner (or farm or partnership owner) with SEMP > 0 is matched against donors whose base leaf is small or zero. The #1380 audit found most SSTB draws on ACS persons with zero SEMP; this mismatch is the likely cause.
Since #1384, components drawn on ACS rows are kept at zero, so the mismatch no longer puts SE income there. It still steers every other target in the chained batches that uses this predictor.
Fix: sum the donor's base, SSTB, farm-operations and partnership-SE leaves into this predictor (a _DONOR_COMBINED_COMPONENTS entry), so both sides carry total SE.
Check: does a complete-component requirement drop donors? Re-pin the spec.
2. The pool lane has no identity gate
acs_self_employment_identity_gate runs at ACS staging and in the ACS local-area release (materialize, calibrated export, package). The pool lane (tools/build_us_multispine_pool.py) gets #1384's transfer fix, but not the gate. The pool tool is spine-blind and has no ACS row mask of its own.
Option: compute the ACS mask in a tool-level wrapper that is allowed to read spine tags, then grade the pooled frame before export.
- Dominant language
- Python
- Stars
- 0
- Forks
- 6
- Avg merge
- 1d 17h
- Merged PRs (30d)
- 130
Getting set up
- No Dockerfile or Docker Compose file
- No pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from PolicyEngine/microcosm
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
PolicyEngine/microcosm#1220 ·
Maintainers usually reply within 1 day
-
Update two stale comments about the export-mass reviewed-exclusion registerPossibly taken A pull request linked to this issue is open or already merged. Open
Difficulty 1/5 Under an hour Newbie friendliness 88/100
PolicyEngine/microcosm#1108 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 85/100
PolicyEngine/microcosm#475 ·
Maintainers usually reply within 1 day
-
Difficulty 4/5 3-5 days Newbie friendliness 48/100
PolicyEngine/microcosm#1390 ·
Maintainers usually reply within 1 day
-
Difficulty 4/5 3-5 days Newbie friendliness 48/100
PolicyEngine/microcosm#1388 ·
Maintainers usually reply within 1 day
All issues in PolicyEngine/microcosm
Similar issues
-
The changelog workflow excludes otelbot but not dependabot, so every Dependabot pull request fails the changelog checkPossibly taken @ocelotl claimed this today. Open
Difficulty 1/5 Under an hour Newbie friendliness 82/100
open-telemetry/opentelemetry-python#5825 ·
Maintainers usually reply within 2 days
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
cuga-project/cuga-agent#1020 ·
Maintainers usually reply within 2 days
-
Difficulty 1/5 Under an hour Newbie friendliness 70/100
microsoft/playwright#43640 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
stac-utils/stac-fastapi-elasticsearch-opensearch#965 ·
Maintainers usually reply within 2 days
-
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
Maintainers usually reply within 1 day