Skip to content

Cite d1981 in the NZ non-wage money ageing disclosures - #1425

Merged
MaxGhenis merged 4 commits into
mainfrom
nzhub/d1981-disclosures
Oct 30, 2026
Merged

MaxGhenis merged 4 commits into
mainfrom
nzhub/d1981-disclosures

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

Lands after #1398, because both change the NZ golden (tests/golden/nz_country_spec.json). #1398 landed at 19:00:55Z on 2026-10-29, and 3142d49 merges main (3088868) with the golden regenerated.

What changes

Max ruled d1981 on 2026-10-26 (option A). The listed non-wage donor money columns age from calendar 2024 to tax year 2026-27 by d1599's AWE convention, factor 1.079073 (1.077090 low, 1.081052 high), disclosed as interim. A hold-fixed run (factor 1) sits beside it as a pre-declared sensitivity.

  • The disclosures. The four index-family disclosures in nz/money_normalization.json (mixed_income, capital_income, pensions, owner_housing_costs) said "provisional pending Max's ruling on non-wage ageing (H3)". Each now says "Max's ruling d1981 (2026-10-26) adopts this as an interim convention and pre-declares a hold-fixed sensitivity (factor 1), which no profile here carries yet (G8-w3)." The wording also moves to active voice ("ages by").
  • The test. test_nz_money_normalization.py pins the ruling's sentence, including the clause that no profile carries the sensitivity yet, and refuses "provisional".
  • The changelog. The unreleased fragment changelog.d/nz-money-normalization.added.md called non-wage ageing provisional. It now says ruling d1981 adopts AWE growth as the interim index and pre-declares the hold-fixed sensitivity, which no profile carries yet.
  • The golden. It moves only money_normalization.json's hash and the spec fingerprint.
  • No factor, column or rate changes. reference_aging.json's donor_cy2024_to_ty2027_{low,central,high} already carry operational factors 1077090, 1079073 and 1081052 over 10**6, the ruling's values.

Why the hold-fixed run isn't wired here

money_normalization.validate_money_normalization accepts an identity per index family, with no profiles, or a factor id per declared profile. It refuses an identity for one profile. transport/money_kernels.py reads an identity's reason from the family entry. So this resource can't carry a hold-fixed profile beside the AWE profiles as it stands. The independent review found two routes that touch neither module:

  • A sibling declaration whose four families are all identities, run by its own money.normalize@1 node. The validator accepts it. It needs graph wiring, which G8-w3 does anyway.
  • A fourth aging_index profile mapped to a unit factor. It needs a generator change, gives a receipt that labels a calendar-2024 schedule as target 2027, and overloads the shared aging_index dimension: reference_profiles would refuse the new profile until the IRD wage-band ageing gains one too.

Either way, the wiring belongs to G8-w3, which first runs NZ transport. The resource's status already says no NZ transport graph reads it yet. The disclosures say the sensitivity isn't carried yet, so they don't imply it is.

Verification

  • With CI's import path (every packages/*/src plus the repo root), the NZ hub ran 12 engine-free files: test_nz_money_normalization, test_money_normalization, test_country_spec, test_nz_spec_package, test_spec_only_country_packages, test_spec_source_citations, test_transport_money_kernels, test_reference_profiles, test_calibration_columns, test_spec_engine_country_bundles, test_nz_reference_aging and test_reference_factors. 1,995 passed, 16 skipped, 0 failed.
  • Mutant. With main's disclosures restored under the new test, test_every_family_uses_the_donor_factor_for_its_profile_with_a_disclosure fails. With this PR's disclosures, all 17 tests in the file pass.
  • ruff check . and tools/ci_test_plan.py verify pass.
  • No other file pins the old string, the old resource hash or the old fingerprint (git grep).

Review

  • Independent review of e9c18d4 (Opus 5.5 in session, since every Codex lane was held; jobs/review-microcosm-1425): APPROVE_WITH_NITS. All five claims held.
    • It regenerated the golden on its own and got the same bytes. With main's resource, the test failed. git grep found no stale pins. Six files passed, 473 tests in all.
    • It checked each family's columns against its text and against the ruling's list, and it confirmed a hold_fixed selection raises an unknown-profile error.
    • Its nits were the "provisional" changelog fragment, the unpinned clause, ruff format and the overstated "needs a schema change". cb0619c fixes all four.
  • Delta review of cb0619c (same reviewer): APPROVE_WITH_NITS. All ten in-memory mutants of the disclosures fail the test. Its two changelog nits (an over-long line; the missing "no profile carries it yet") are fixed in c031775.
  • Merge with main after Reconcile regional Census family-type counts under d1932 #1398. Only the golden conflicted: Reconcile regional Census family-type counts under d1932 #1398 and this PR both move the NZ fingerprint. The hub regenerated it from the merged spec. Against main, it moves only the fingerprint and money_normalization.json's hash, 5e817f0b…, the same hash as before the merge.
  • CI at 3142d49: all ten checks pass in Tests run 40939280609 (engine-free, engine-uk and engine-us on 3.13 and 3.14, integration-uk, lint, select-countries, wheels).

Checklist

🤖 Generated with Claude Code

MaxGhenis and others added 3 commits October 29, 2026 13:50
Max ruled d1981 on 2026-10-26 (option A). The listed non-wage donor
money columns age from calendar 2024 to tax year 2026-27 by d1599's AWE
convention, factor 1.079073 (1.077090 low, 1.081052 high), disclosed as
interim. A hold-fixed run (factor 1) sits beside it as a pre-declared
sensitivity.

The four index-family disclosures in nz/money_normalization.json said
"provisional pending Max's ruling on non-wage ageing (H3)". They now
cite the ruling and the sensitivity it pre-declares. They also say that
no profile here carries the hold-fixed run yet: the schema allows an
identity per family, not per profile, and the money kernel reads an
identity's reason from the family entry. Wiring it falls to G8-w3,
which first runs NZ transport. The wording also moves to active voice
("ages by").

The donor factors already match the ruling:
reference_aging.json's donor_cy2024_to_ty2027_{low,central,high} carry
operational factors 1077090, 1079073 and 1081052 over 10**6. No factor,
column or rate changes.

test_nz_money_normalization.py now pins the ruling's phrase and the
sensitivity, and refuses "provisional". The NZ golden moves only
money_normalization.json's hash and the spec fingerprint.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Act on the independent review of e9c18d4 (APPROVE_WITH_NITS):

- Each disclosure now ends on a full sentence: "Max's ruling d1981
  (2026-10-26) adopts this as an interim convention and pre-declares a
  hold-fixed sensitivity (factor 1), which no profile here carries yet
  (G8-w3)."
- The test pins that whole clause too. Dropping "which no profile here
  carries yet (G8-w3)" from one family now fails it.
- ruff format keeps the test file clean.
- The unreleased changelog fragment nz-money-normalization.added.md
  still called non-wage ageing provisional. It now says ruling d1981
  adopts AWE growth as the interim index and pre-declares the hold-fixed
  sensitivity.

The NZ golden again moves only money_normalization.json's hash and the
fingerprint.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Act on the delta review of cb0619c: the fragment now says, as the
disclosures do, that no profile carries the hold-fixed sensitivity yet,
and the paragraph wraps at 80 columns again. Apart from that clause, the
words don't change.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis force-pushed the nzhub/d1981-disclosures branch from 1e226b2 to a46343b Compare October 29, 2026 19:20
Only tests/golden/nz_country_spec.json conflicted: #1398 and this PR
both move the NZ spec fingerprint. The NZ hub regenerated the golden
from the merged spec with the golden test's own _loaded_spec_summary
and canonical_json_bytes. Against main it moves only the fingerprint and
money_normalization.json's hash (5e817f0b…).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis force-pushed the nzhub/d1981-disclosures branch from a46343b to 3142d49 Compare October 29, 2026 19:20
@MaxGhenis
MaxGhenis marked this pull request as ready for review October 30, 2026 02:10
@MaxGhenis
MaxGhenis merged commit 7d78596 into main Oct 30, 2026
10 checks passed
@MaxGhenis

Copy link
Copy Markdown
Contributor Author

Merged by the NZ hub (session local_e407a527) at 3142d49 with --merge. Gates: gh pr checks exit 0; MERGEABLE; not draft; no CHANGES_REQUESTED review. Reviewed head: 3142d49. Independent review: in-session Opus 5.5 (Codex lanes held), APPROVE at e9c18d4 with deltas at cb0619c and 1e226b2, the last approving the main merge (tree 3ad28e01). The final head 3142d49 amends only the merge commit's message (same tree). Ruling d1981 (Max, 2026-10-26) supplies the disclosed convention.

@MaxGhenis
MaxGhenis deleted the nzhub/d1981-disclosures branch October 30, 2026 02:11
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