Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

ACS transfer: donor SE predictor is the base leaf only; pool lane lacks the SE identity gate

Open
#1,389 0 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
42/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Active
Tech stack
python
Domain
data

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

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from PolicyEngine/microcosm

All issues in PolicyEngine/microcosm

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.