Skip to content

Ignore a dependent's separation when inferring the tax unit spouse (26 U.S.C. 7703) - #9932

Open
MaxGhenis wants to merge 2 commits into
mainfrom
spouse-ignores-dependent-separation
Open

MaxGhenis wants to merge 2 commits into
mainfrom
spouse-ignores-dependent-separation

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

Summary

is_tax_unit_spouse dropped the spouse whenever any member of the tax unit had is_separated set, so a separated adult dependent (or any other separated member) turned a married couple's return into head of household or single. Separation under 26 U.S.C. 7703 concerns the filer's own marriage ("an individual legally separated from his spouse ... shall not be considered as married"; (b) "such individual's spouse is not a member of such household"). filing_status and head_of_household_eligible already limit separation to the head and spouse (#9630 excluded dependent candidates from the spouse role but left this check).

The spouse is now the would-be spouse (the oldest candidate other than the head, as before) unless the head or that person is separated.

Fixes #9620. Found again by the 2026-10-06 invariants audit and confirmed on main 6440b3e604 by its independent verifier: ages [40, 38, 18], dependent flags [F, F, T]; setting only the 18-year-old's is_separated turned spouse [F, T, F] into [F, F, F].

Invariants

  • At most one spouse per tax unit, never the head, never a child (unchanged: rank 0 among candidates excluding the head).
  • A separated member who is neither the head nor the would-be spouse never changes is_tax_unit_spouse.
  • If the head or the would-be spouse is separated, the unit has no spouse (unchanged).
  • The new formula differs from the old only when every separated member is neither the head nor the would-be spouse.

Tests (fail before, pass after)

  • YAML, is_tax_unit_spouse.yaml (fail on main, plus two status-quo guards that pass on both): a separated adult dependent; a separated dependent older than the couple; a separated younger non-dependent adult; a separated head; a separated would-be spouse with a younger adult (no promotion); a younger separated adult with an older non-separated one; an input head with a separated dependent; the all-dependent fallback with a separated third adult; two tax units in one household.
  • YAML, filing_status.yaml: a couple with $50,000 and $30,000 of wages plus a separated 18-year-old dependent, 2024: JOINT, standard deduction $29,200, taxable income $50,800, tax before credits $5,632, income tax $5,132 after the $500 credit for other dependents. The spouse's wages exercise the income that main dropped.
  • Property test, tests/core/test_tax_unit_spouse_separation_invariants.py (Hypothesis plus a seeded population): units of one to five people with tied ages, children, separated members, and in turn no role inputs, input dependents or an input head. Checks: at most one spouse, never the head or a child; head and spouse equal a pure-Python statement of the rule; flipping the separation of everyone but the head and would-be spouse never changes the spouse.

Run locally under the shared test lock, the new test files against each code version (policyengine-core test <file> -c policyengine_us per YAML file; pytest for the property test):

File main 6b80a8e447 this branch
is_tax_unit_spouse.yaml 7 failed, 8 passed 15 passed
filing_status.yaml 1 failed (HEAD_OF_HOUSEHOLD vs JOINT), 14 passed 15 passed
test_tax_unit_spouse_separation_invariants.py queued behind the shared test lock queued behind the shared test lock

The 8 cases that pass on main are the pre-existing ones plus two status-quo guards (a separated head; a separated would-be spouse with a younger adult), which pass on both by design.

Impact (real microsimulation)

Default dataset (populace_us_2024.h5@populace-us-2024-spm-20260909), main 6b80a8e447 vs this branch, run through the shared lock with run.py / compare.py. Weighted totals; "records" are sample tax units or people.

2025

Variable Change Records changed (up / down)
is_tax_unit_spouse (people) +198,606 48 (48 / 0)
tax_unit_married +198,606 48 (48 / 0)
income_tax +$1,188.9M 38 (31 / 7)
state_income_tax +$181.0M 27 (17 / 10)
eitc −$32.9M 8 (0 / 8)
refundable_ctc −$31.5M 16 (3 / 13)
non_refundable_ctc −$22.6M 47 (17 / 30)
premium_tax_credit −$20.1M 3 (0 / 3)
household_benefits −$82.5M 2 (0 / 2)
household_net_income −$1,449.8M 43 (8 / 35)
is_tax_unit_head, is_separated 0 0

2026: run queued behind the shared lock; this section is updated when it finishes.

Of the 48 units that gain a spouse, 45 match the dataset's own head-and-spouse pair (tax_unit_role_input, which main ignores). The other 3 (about 12.5k weighted) have no source spouse: the age rule pairs a never-married parent with an adult child (for example ages 42, 21, 18 separated, 13, 7, where the 21-year-old becomes the spouse). Main left those 3 unpaired only because of the separated member; it already pairs the same households that way when nobody is separated, and #9617 fixes the age rule itself.

Why tax rises: on main, the partner who lost the spouse role became a dependent (is_tax_unit_dependent is ~head & ~spouse when not input), and irs_gross_income counts nothing for dependents (not_dependent * ...), so the partner's income left the return. Restoring the spouse files the couple jointly with both incomes. The dataset has 81 sample tax units with a separated person whose source role is DEPENDENT, 45 of them with a source SPOUSE (#9617 counts the same 45).

Interaction with #9617

#9617 (dataset-supplied tax-unit roles, parked on a decision) edits the same formula and keeps the all-member separation check in its age fallback. A trial merge gives one conflict, the whole formula body; resolve it by computing this PR's gated spouse as next_oldest_adult, then where(supplied, supplied_spouse, next_oldest_adult). Three #9617 files, and #9617's PR description, describe the old rule and will not conflict, so they need updating by hand at that merge:

  • tests/core/test_tax_unit_role_input_properties.py: _age_rule and docstring invariant 3 (its comment already says to update the reference when this is fixed);
  • variables/household/demographic/tax_unit/tax_unit_role_input.py documentation ("unless any member of the unit is separated");
  • docs/usage/microsimulation.md, the same sentence.

Once #9617 lands, the default dataset supplies every role (79,729 heads, 35,592 spouses, 51,000 dependents), so this change no longer moves the default microsim. It still applies to household calculations and to datasets without roles.

Methodology choice the law leaves open (not blocking)

26 U.S.C. 7703 says when an individual counts as married, not which co-resident adult is the filer's spouse; that is PolicyEngine's age-order inference. When the would-be spouse (second-oldest candidate) is separated, this PR keeps main's behaviour of inferring no spouse. #9620 proposed instead excluding separated people from eligible, which would promote the next-oldest adult.

  • Data: on the default dataset, promotion would change 4 units (about 33.6k weighted), and in all 4 the promoted person is not the source spouse (for example an 80-year-old head paired with a 19-year-old). Keeping no-promotion matches the source in every case.
  • Consequence of the chosen rule: head 40 with a separated 38-year-old and a 30-year-old gives no spouse, but with the separated adult aged 25 the 30-year-old is the spouse (a YAML case now pins both). With equal ages, member order decides which of two adults is the would-be spouse (get_rank breaks ties by position), and so can decide whether the unit has a spouse at all: head 50 with two 38-year-olds, one separated, has a spouse only if the non-separated one is listed first. Main gave no spouse in either order.
  • Merging does not change this case either way, since it keeps main's behaviour. Adopting A separated dependent unpairs the couple under age-ordered tax-unit roles #9620's promotion instead would be a small follow-up (drop the would-be spouse's own separation from the gate and exclude separated people from the ranking).

Related

ky_filing_status.py aggregates is_separated over every member the same way (a single filer with a separated dependent files Kentucky SEPARATE); #9924 fixes that.

axiom: us:statutes/26/7703#taxpayer_married_under_general_rule encoded-correct. rulespec-us takes legal separation as the taxpayer's own tax-unit input (input.legally_separated_under_decree_of_divorce_or_separate_maintenance), so no other member's status can enter. Companion test legal_separation_prevents_married_status in us/statutes/26/7703.test.yaml.

Independent review: in progress (in-session Opus reviewers; Subfleet lanes are unavailable today).

🤖 Generated with Claude Code

MaxGhenis and others added 2 commits October 6, 2026 13:38
is_tax_unit_spouse dropped the spouse whenever any member of the tax
unit had is_separated set, so a separated adult dependent (or any other
separated member) turned a married couple's return into head of
household or single. Separation under 26 U.S.C. 7703 concerns the
filer's own marriage, and filing_status and head_of_household_eligible
already limit it to the head and spouse. The spouse is now dropped only
when the head or the would-be spouse is separated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A Hypothesis test (plus a seeded population) draws tax units of one to
five people with tied ages, children and separated members, with no role
inputs, input dependents or an input head. It checks that there is at
most one spouse, never the head or a child; that head and spouse match a
pure-Python statement of the rule; and that flipping the separation of
anyone but the head and the would-be spouse never changes the spouse.

New YAML cases cover an input head with a separated dependent, the
all-dependent fallback with a separated third adult, and a younger
separated adult beside an older non-separated one. The filing-status case
now gives the spouse wages, so it exercises the income main dropped.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@DTrim99

DTrim99 commented Oct 13, 2026

Copy link
Copy Markdown
Collaborator

PR Review: Ignore a dependent's separation when inferring the tax unit spouse (26 U.S.C. 7703)

PR #9932 (author: MaxGhenis, head 5f4778243d). 5 files, +417/-3. Fixes #9620.

Summary

When roles are not supplied, is_tax_unit_spouse infers the spouse by age order. On main that fallback still drops the spouse whenever any member of the tax unit has is_separated set (tax_unit.any(person("is_separated", period))). So a separated adult dependent turns a married couple into head of household or single, and the partner's income leaves the return. The PR keeps the would-be spouse (the oldest head-or-spouse candidate other than the head, as before) unless the head or that person is separated. This matches 26 U.S.C. 7703 and Treas. Reg. 1.7703-1. Both tie marital status to the individual's own marriage ("an individual legally separated from his spouse"). It also matches how filing_status, head_of_household_eligible and cdcc_treated_as_unmarried already limit separation to the head and spouse.

Is it still needed? Yes. After #9617 (merged 2026-10-08), is_tax_unit_spouse defers to dataset-supplied roles, but its age-order fallback still has the unit-wide gate (is_tax_unit_spouse.py:20-23 on main). That fallback serves every household calculation and any dataset without roles. #9620 is still open, and no merged or open PR fixes it. The draft #10000 edits the same formula but keeps the gate.

Does it conflict? Yes, in two ways. GitHub reports the PR as CONFLICTING: one textual conflict with #9617 in is_tax_unit_spouse.py. I resolved it the way the PR body prescribes and tested the merged tree with policyengine-core 3.33.3. The PR's own tests pass there, along with 134 tax-unit YAML cases and 280 cases from every YAML file that sets is_separated: true. But two of the four Hypothesis tests that #9617 added fail, because their reference rule still encodes the unit-wide gate. The PR body expected this. Until the rebase updates that reference, the PR cannot land green. This is the one critical finding. Two documentation strings from #9617 would also describe the old rule after the merge (one should-address finding).

The logic itself is correct and well tested:

  • 7 of the 9 new is_tax_unit_spouse.yaml cases and the new filing_status.yaml case fail on main's formula. The other two are status-quo guards that pass on both, as the PR says.
  • The new property test fails 4/4 on main's formula and passes 4/4 on the PR's.
  • Every arithmetic expectation checks by hand.
  • The axiom module exists and encodes the provision.
  • CI is 35/35 green on the branch as it stands.

Source documents

  • 26 U.S.C. 7703(a) (https://www.law.cornell.edu/uscode/text/26/7703#a): "(1) the determination of whether an individual is married shall be made as of the close of his taxable year; except that if his spouse dies during his taxable year such determination shall be made as of the time of such death; and (2) an individual legally separated from his spouse under a decree of divorce or of separate maintenance shall not be considered as married."
  • 26 U.S.C. 7703(b) (https://www.law.cornell.edu/uscode/text/26/7703#b): "if— (1) an individual who is married (within the meaning of subsection (a)) and who files a separate return maintains as his home a household which constitutes for more than one-half of the taxable year the principal place of abode of a child ... (2) such individual furnishes over one-half of the cost of maintaining such household during the taxable year, and (3) during the last 6 months of the taxable year, such individual's spouse is not a member of such household, such individual shall not be considered as married."
  • Treas. Reg. 1.7703-1(a) (https://www.law.cornell.edu/cfr/text/26/1.7703-1): "an individual shall be considered as married even though living apart from his spouse unless legally separated under a decree of divorce or separate maintenance."
  • 26 U.S.C. 152(b)(2) (https://www.law.cornell.edu/uscode/text/26/152#b_2): "An individual shall not be treated as a dependent of a taxpayer under subsection (a) if such individual has made a joint return with the individual's spouse under section 6013 ..." A married or separated dependent stays a dependent unless they file jointly. Their marital status is their own and does not reach the taxpayer's.
  • Rev. Proc. 2023-34 (https://www.irs.gov/pub/irs-drop/rp-23-34.pdf):
    • PDF p. 5 (#page=5), Table 1 (married filing jointly): "Not over $23,200 — 10% of the taxable income; Over $23,200 but not over $94,300 — $2,320 plus 12% of the excess over $23,200".
    • PDF p. 12 (#page=12), section 3.15(1): "Married Individuals Filing Joint Returns and Surviving Spouses (§ 1(j)(2)(A)) $29,200".
  • 26 U.S.C. 24(h)(4)(A) (https://www.law.cornell.edu/uscode/text/26/24#h_4_A): "increased by $500 for each dependent of the taxpayer (as defined in section 152) other than a qualifying child described in subsection (c)". Section 24(c)(1) limits a qualifying child to one "who has not attained age 17".

Critical (must fix)

1. After the rebase onto main (#9617), two of main's property tests fail unless their reference rule is updated.

  • Where:

    • policyengine_us/variables/household/demographic/tax_unit/is_tax_unit_spouse.py:13-25. This is the textual conflict with Honor dataset-supplied tax-unit roles #9617.
    • policyengine_us/tests/core/test_tax_unit_role_input_properties.py:121-134 (_age_rule) and :9-13 (docstring invariant 3), as they stand on main. These lines do not conflict textually.
  • What is wrong:

    • git merge-tree --write-tree PolicyEngine/main 5f4778243d reports CONFLICT (content) in is_tax_unit_spouse.py, and GitHub shows the PR as CONFLICTING / DIRTY.
    • I resolved the conflict as the PR body prescribes (this PR's gated spouse as next_oldest_adult, then where(supplied, supplied_spouse, next_oldest_adult)). In that merged tree, main's _age_rule still says candidates = [] if any(separated) else ... (line 132). Its own comment asks for this update: "that unit-wide gate is a known defect (A separated dependent unpairs the couple under age-ordered tax-unit roles #9620), so update this reference when it is fixed."
    • Result: test_roles_follow_supplied_values_and_otherwise_age_ordering and test_supplied_roles_compose_with_input_dependents both fail. The falsifying unit is ages [0, 18, 18, 0] with only the last child separated and no supplied roles. The PR's rule gives the second 18-year-old as spouse, but _age_rule expects none.
    • The branch's 35/35 CI ran before Honor dataset-supplied tax-unit roles #9617 landed, so it does not cover this.
  • Fix: rebase onto main and resolve the conflict:

    def formula(person, period, parameters):
        tax_unit = person.tax_unit
        # A dataset's tax-unit constructor can supply every member's role.
        role = person("tax_unit_role_input", period)
        supplied = tax_unit("tax_unit_roles_supplied", period)
        # Otherwise only non-head adults can be spouses, skipping input
        # dependents.
        candidate = head_or_spouse_candidates(person, period)
        head = person("is_tax_unit_head", period)
        age = person("age", period)
        would_be = person.get_rank(tax_unit, -age, candidate & ~head) == 0
        # Separation under 26 U.S.C. 7703 concerns the filer's own marriage, so
        # only the head's or this spouse's separation means there is no spouse.
        separated = person("is_separated", period)
        head_or_spouse_separated = tax_unit.any((head | would_be) & separated)
        next_oldest_adult = would_be & ~head_or_spouse_separated
        # An explicit is_tax_unit_head input still wins over a supplied role,
        # so keep the head out of the spouse role either way.
        supplied_spouse = (role == role.possible_values.SPOUSE) & ~head
        return where(supplied, supplied_spouse, next_oldest_adult)

    Then update _age_rule in test_tax_unit_role_input_properties.py:

    candidates = [i for i in adults if i != head]
    spouse = min(candidates, key=lambda i: (-ages[i], i)) if candidates else None
    if spouse is not None and (separated[head] or separated[spouse]):
        spouse = None
    return head, spouse

    Also reword its comment (lines 122-125) and docstring invariant 3 (lines 9-13): "the next such adult is the spouse unless the head or that adult is separated." With both changes, all 4 of main's role property tests pass in the merged tree. So do the PR's 4 property tests and the tax-unit YAML cases described above.

Should address

1. Two main documentation strings would describe the old rule after the merge.

  • Where (on main):
    • policyengine_us/variables/household/demographic/tax_unit/tax_unit_role_input.py:18 (documentation): "and the next-oldest such adult is the spouse unless any member of the unit is separated."
    • docs/usage/microsimulation.md:155-157: "The next-oldest such adult is the spouse, unless any member of the unit is separated."
  • Why: after this PR, separation of a dependent or other member no longer blocks the spouse. Both strings came in with Honor dataset-supplied tax-unit roles #9617 and do not conflict textually, so the rebase alone leaves them stale. The PR body lists them as manual follow-ups, but they are not in the diff yet.
  • Fix: in both places, change "unless any member of the unit is separated" to "unless the head or that adult is separated".

Suggestions

1. Pin or remove the member-order dependence the PR introduces for tied ages.

  • Where: is_tax_unit_spouse.py:19 (get_rank breaks ties by member position).
  • What: I reproduced the PR body's disclosure on the merged tree. In TX 2024, take a head aged 50 and two 38-year-olds, one separated:
    • Non-separated one listed first: spouse [F, T, F], JOINT.
    • Separated one listed first: spouse [F, F, F], HEAD_OF_HOUSEHOLD.
    • main gives no spouse in either order.
  • Context: the property test's reference rule covers ties, but no readable YAML case shows this, and the formula comment does not mention it. With Honor dataset-supplied tax-unit roles #9617 merged, the dataset argument for "no promotion" (4 Populace units) no longer applies, because the default dataset supplies roles. The choice now affects household calculations only.
  • Fix (either one):

2. Use one reference implementation for the two Hypothesis files after the rebase.

  • test_tax_unit_role_input_properties.py::_age_rule and the new test_tax_unit_spouse_separation_invariants.py::_reference state the same fallback rule independently.
  • This exact drift causes the critical finding above.
  • Fix: have one file import the other's reference, or fold the separation invariants into the existing role-property module.

3. Give the variable a reference.

  • is_tax_unit_spouse cites 7703 only in a comment (lines 20-22).
  • Fix: add reference = "https://www.law.cornell.edu/uscode/text/26/7703#a_2" to match is_separated and dependent_lives_with_spouse.

4. Refresh the PR body after the rebase.

Verified correct

  • Law.
    • 7703(a)(2) and Treas. Reg. 1.7703-1(a) make marital status a function of "an individual" and "his spouse". Section 152(b)(2) keeps a married dependent a dependent unless they file jointly.
    • No provision lets a third member's separation change whether the head and the would-be spouse are married. The PR's gate (tax_unit.any((head | spouse) & separated)) reads only those two people.
    • A separated head means no spouse. That is consistent with (a)(2): a legally separated individual is not considered married, so a co-resident adult is not that person's spouse.
  • Consistency with main. These already limit separation to the head and spouse, or to the person's own status:
  • Scope of the change. The new result equals the old in all of these cases:
    • no member is separated
    • the head is separated
    • the would-be spouse is separated
      It differs only when every separated member is neither of those two. Ordinary joint couples are therefore unchanged. The property test's twin check (flip everyone else's separation, so the spouse cannot change) confirms this.
  • Edge cases, each pinned by a YAML case:
    • a separated adult dependent (line 107)
    • a separated dependent older than the couple (129)
    • a separated non-dependent third adult (147)
    • a separated head (164)
    • a separated would-be spouse, with no promotion (184)
    • two tax units in one household (202)
    • a younger separated adult with an older non-separated one (232)
    • an input head (249)
    • the all-dependents fallback (268)
      A dependent married to someone outside the unit is covered by the separated-dependent cases. Their marriage never enters the gate.
  • Tests are functional.
    • On main's formula: is_tax_unit_spouse.yaml fails 7 and passes 8, and filing_status.yaml fails 1 (HEAD_OF_HOUSEHOLD vs JOINT) and passes 14. This matches the PR body.
    • test_tax_unit_spouse_separation_invariants.py fails 4/4 on main's formula and passes 4/4 on the PR's, in about 50 seconds.
  • Hand checks (filing_status.yaml:255-293, 2024):
    • standard deduction $29,200 (Rev. Proc. 2023-34, p. 12)
    • taxable income $50,000 + $30,000 − $29,200 = $50,800
    • tax before credits 10% × $23,200 + 12% × $27,600 = $2,320 + $3,312 = $5,632 (p. 5)
    • income tax $5,632 − $500 ODC = $5,132. The 18-year-old is not a 24(c) qualifying child, so 24(h)(4) gives $500, and joint AGI of $80,000 is above the one-child EITC range.
    • spouse outputs [F, F, T] (line 232) and tax_unit_married: [true, false] (line 202) follow the rule.
  • Vectorization. The formula uses only get_rank and tax_unit.any. The property test runs batches of up to 80 units of 1-5 people in one simulation, with tied ages and three role-input modes, plus a seeded population of 300 units per mode.
  • Merged tree (PR plus main, conflict resolved as above, core 3.33.3):
    • All 134 cases in tests/policy/baseline/household/demographic/tax_unit/ pass.
    • All 280 cases from the 29 YAML files on main that set is_separated: true pass. These include the federal and state CDCC files, ky_filing_status.yaml, tax_unit_role_input.yaml ("A separated dependent does not unpair a supplied couple") and the partners/analytics_coverage/.../cdcc/federal.yaml contract file, which is unchanged.
  • Changelog. changelog.d/spouse-ignores-dependent-separation.fixed.md is top-level and matches the branch name. fixed (patch) is the right type.
  • Test periods are plain (2024, YEAR = 2024). No partner test files are touched.

Out of scope (not counted)

Axiom line assessment

axiom: us:statutes/26/7703#taxpayer_married_under_general_rule encoded-correct is valid.

  • The module us/statutes/26/7703.yaml exists in rulespec-us. taxpayer_married_under_general_rule is a TaxUnit judgment, quoting 7703(a)(1) as its condition and (a)(2) as its exception, ending and not legally_separated_under_decree_of_divorce_or_separate_maintenance. That input belongs to the taxpayer, so no other member's separation can enter. This matches the PR.
  • The companion test legal_separation_prevents_married_status exists in us/statutes/26/7703.test.yaml and gives not_holds.
  • Two non-blocking notes:
    • The rulespec versions start effective_from: '2026-01-01', while the PR's tests run in 2024. Section 7703 is unchanged since Pub. L. 99-514 (1986), so this is a rulespec dating gap, not a mismatch.
    • Which co-resident adult PolicyEngine infers as the spouse is household construction with no statutory analogue, so it is correctly outside the axiom line.

CI status

All 35 checks pass on 5f4778243d (gh pr checks 9932). These include:

  • Lint
  • the changelog check
  • Household API Partners
  • Microsimulation
  • every Baseline and Contrib shard
  • Full Suite - Rest (Python + variables), which runs the new tests/core file

These runs predate #9617. GitHub now reports the PR as CONFLICTING (mergeStateStatus: DIRTY), so CI must run again after the rebase.

Branch status

  • The branch is 2 commits ahead of main and 215 behind (merge-base 6b80a8e447; main at 5c4d46e9fb).
  • git merge-tree --write-tree PolicyEngine/main 5f4778243d exits 1 with one conflict: CONFLICT (content) in policyengine_us/variables/household/demographic/tax_unit/is_tax_unit_spouse.py, against Honor dataset-supplied tax-unit roles #9617 (7cac939071).
  • Resolve it as in Critical 1, and update the three Honor dataset-supplied tax-unit roles #9617 files (Critical 1 and Should 1) in the same rebase.

Verdict: REQUEST_CHANGES

@DTrim99 DTrim99 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The fix is still needed: main's age-order fallback keeps the unit-wide is_separated gate for households without supplied roles. The law supports gating only on the head and the would-be spouse (7703(a)(2), Reg. 1.7703-1(a), and 152(b)(2)), and the new tests are functional. One critical (details in the comment above): the branch conflicts with #9617, and with the conflict resolved as the PR body prescribes, 2 of main's 4 role property tests fail, because _age_rule still encodes the any-member gate. Rebase, then update _age_rule and docstring invariant 3; all 4 then pass. One should item: reword tax_unit_role_input.py:18 and docs/usage/microsimulation.md:155-157, which still describe the old rule.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

A separated dependent unpairs the couple under age-ordered tax-unit roles

2 participants