Skip to content

Tail assignments deliver the donor's joint vector verbatim (fixes the recipient-value overwrite) - #570

Merged
MaxGhenis merged 1 commit into
mainfrom
cg-tail-concentration-register
Jul 29, 2026
Merged

Tail assignments deliver the donor's joint vector verbatim (fixes the recipient-value overwrite)#570
MaxGhenis merged 1 commit into
mainfrom
cg-tail-concentration-register

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

Round 2 — the PR pivoted per review

Round 1 proposed a reviewed concentration-exclusion register. The review refuted it by finding the real defect underneath the measurements: the recipient-candidate merge (row.update(candidate.to_dict())) let the recipient's existing tax-unit values replace the selected donor's joint vector for columns held at tax-unit grain. Production replay: 4,923 of 15,228 assignments disagreed with their donors; 99.7% of intended unrecaptured-1250 donor mass was lost ($11.53B → $33.72M) — and reconciliation self-confirmed because it derives expectations from the same overwritten assignments. The register would have waived a concentration produced by a broken transfer (its unrecap 'improvement' was recipient-value record splitting; collectibles is 67.2% inherited from base rows).

The fix

  • The selected donor's joint vector wins after the merge — every _JOINT_VECTOR_COLUMNS field re-overlaid from the donor row.
  • Construction-level assertion: assignments re-derived per column from the donor frame keyed by donor_source_id; a leak fails at the source, independent of downstream reconciliation.
  • Donor-keyed fidelity test binding donor → assignment → manifest → materialized frame per column — mutation-checked: fails against the pre-fix code, passes with the fix.
  • The register mechanism is withdrawn; both fail-closed concentration checks stand unchanged. Post-fix concentration is re-adjudicated on the rebuilt frame with real donor vectors arriving.

🤖 Generated with Claude Code

The review of the register proposal (populace#570 round 1) found the
real defect underneath the concentration measurements: the recipient-
candidate merge (row.update(candidate.to_dict())) let the recipient's
EXISTING tax-unit values replace the selected donor's joint vector for
columns held at tax-unit grain — production replay showed 4,923 of
15,228 assignments disagreeing with their donors and 99.7% of intended
unrecaptured-1250 donor mass lost ($11.53B -> $33.72M), while
reconciliation self-confirmed because it derives expectations from the
same overwritten assignments.

The selected donor's joint vector now wins after the merge, and a
construction-level assertion re-derives every assignment column from
the donor frame keyed by donor_source_id — a leak fails at the source,
independent of downstream reconciliation. The donor-keyed fidelity test
binds donor -> assignment -> manifest -> materialized frame per column,
and fails against the pre-fix code (mutation-checked).

The register mechanism from round 1 is withdrawn per review: the
unrecaptured-1250 'improvement' it rationalized was recipient-value
record splitting, and collectibles concentration is 67.2% inherited
from pre-existing base rows — a whole-field waiver would have masked
both. Concentration is re-adjudicated on the rebuilt frame with real
donor vectors arriving, through the unchanged fail-closed checks.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis force-pushed the cg-tail-concentration-register branch from 09e34dc to 94a026e Compare July 29, 2026 02:05
@MaxGhenis MaxGhenis changed the title CG tail stage: reviewed concentration-exclusion register for the materialized-frame check Tail assignments deliver the donor's joint vector verbatim (fixes the recipient-value overwrite) Jul 29, 2026
@MaxGhenis
MaxGhenis merged commit 0b66582 into main Jul 29, 2026
4 checks passed
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.

1 participant