Skip to content

Regenerated ledger feeds fail the period contract: year-filtered bundles drop the CBO aging pivot and prior-year SOI tables #410

Description

@daphnehanse11

Found during the first off-build-machine release run (Build K staging, 2026-07-13). Fail-closed catch #1 of 3.

What happened

A feed regenerated with ledger build-bundle --year 2024 compiled a registry whose 1,486 dollar targets all failed the period contract with aging_factor_unavailable: the cbo_growth_factor_aging model needs the CBO revenue-projections income-by-source series at the TY2023 pivot (the published detail's first year) and the build year, plus prior-year SOI tables for the chained observed-growth segment — but the year filter had cut every non-2024 vintage (CBO detail down to a single year; SOI tables 1_1/1_2/1_4/2_1/4_3 skipped entirely as "not available for requested year").

Why it matters

The v8 feed carries these implicitly, so any consumer who regenerates the feed from the ledger repo — the documented deterministic path — hits this. Nothing states which (package, year) tuples the populace consumer surface requires.

Repro / fix used

Supplemental per-year bundles merged into the feed: irs_soi tables for ty2020–2023 and cbo packages for ty2023, dedup on aggregate_fact_key. Registry then compiles clean (5,712 specs, version 6ac800691458 at main 556166a).

Proposal

Either a ledger build-bundle --consumer populace-us mode that owns the required package×year set, or a checked-in requirement manifest in populace that a feed preflight validates against (family × period coverage), so the gap fails at bundle time with names instead of at registry compile with 1,486 violations.

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions