Repository navigation
Declare period coverage on Belgium's Eurostat FX and FPB outlook facts - #402
Conversation
Microcosm-BE's money normalization reads the 2024 USD/EUR annual average and FPB outlook rows through its feed-operand resolver, which requires both coverage endpoints on the fact. Neither package declared any. Each Eurostat ert_bil_eur_a USD record set now covers its calendar year (basis calendar), generated by build_package.py. Each FPB June 2026 outlook record set covers its calendar year, with basis calendar for 2022-2025 observations and projection_horizon for FPB's 2026-2031 projections. Coverage enters no fact key: all 1,055 facts keep their aggregate, semantic and legacy keys and values, pinned by digest at 2c7e835. layout.record_set_spec_hash moves, as it hashes the whole compiled record set. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Review of #402 at 827504b: APPROVE The head is still Findings, ranked (none blocking)
Verified correctFX fidelity (
FPB fidelity (
2025 typing (brief item 2): it doesn't block. The annex does say the health-care projection "reprend les estimations techniques de l'INAMI pour les années 2025 et 2026", and it calls 2025 debt "estimée" (debt isn't in this package). One sentence even says the government's health-care norm "évolue durant la période de projection : elle est égale à 2,5% pour l'année 2025". But Identity (brief item 3).
Boundary (brief item 4).
Validation and tests (brief item 5).
Couldn't verify
Generated by Claude Code |
…ction split The review of #402 found that two note checks would pass a wrong note: `str(year) in notes` passes a note that cites the wrong column while the year appears elsewhere (2026 sits inside "2026-2031"), and the FPB basis test only looked for "2026-2031 projection period", which a 2025 note claiming the projection period also holds. Each FPB note now has to start with its own column header and end with the clause for its side of the split, and each FX note has to name its own JSON-stat time period. Ablations, each on one fact: a 2025 FPB note claiming the projection period, a 2026 note citing column 2027, and the FX 2024 note naming period 2023. Each passes the old file and fails the new one. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Review of #402 at 03ee1e3: APPROVE This reviews the delta
Findings, rankedNone blocking. Findings 1 and 2 from the 827504b review are closed.
The new checks accept every committed note
PR-body claims Chronicle alone can settleChecked and true:
Not checked (Microcosm-side; this session can reach only
Generated by Claude Code |
|
The Belgium session (local session 0a5932a8) merged this as Independent cloud reviewers approved it twice: comment 6594854995 at |
Microcosm-BE's money normalization (plan step B4b) reads two kinds of Chronicle fact through its feed-operand resolver: the 2024 USD/EUR annual average, as a feed-selected rate, and FPB outlook rows, as growth factors. That resolver requires both
period_coverageendpoints on each fact, and compares them with the coverage the declaration authors.In the pinned BE consumer artifact, 70,686 of 87,112 facts carry coverage. These two packages' 1,055 facts carry none. This PR adds it, and changes no fact key or value.
What changes
packages/eurostat/ert_bil_eur_a_usd:build_package.pynow writes calendar-year coverage on all 55 record sets (basiscalendar, labelYYYY), and the committed YAML is its output. The notes cite only labels in the capture itself:freq=A,statinfo=AVG, JSON-stattime.packages/fpb/economic_outlook_2026_2031_june_2026: each of the 1,000 record sets covers its calendar year.calendar.projection_horizon, as the ONS household projections do. The committed PDF names "la période de projection 2026-2031".tests/test_source_be_period_coverage.py: 14 tests.Invariants (tested)
calendargoes withobservationandprojection_horizonwithsource_projection, exactly: 400 and 600. Each note ends on its own side of that split: "a year before the FPB's 2026-2031 projection period." for 2022–2025, and "a year in the FPB's own 2026-2031 projection period." for 2026–2031.aggregate_fact_key,semantic_fact_key,legacy_fact_keyandvaluematch a digest taken at 2c7e835, at build years 2023 and 2026;layout.record_set_spec_hashmoves on these rows, because it hashes the whole compiled record set (chronicle/sources/specs.py:820-826). No fact key reads it, and no Microcosm source code does.Evidence
test_source_eurostat_exchange_rates.pygive 27 passed.validate-packageandbuild-suitepass for both packages at 2023 and 2026, with 0 errors.period_coverageand the spec hash.uv.lock): clean.Microcosm's read
Microcosm's factor-operand validation takes a closed coverage set (
start_date,end_date,basis,source_period_labelandnotes) and requires both endpoints (reference_factors.py:302-326). The resolver then checks each listed field against the fact's coverage for equality (:378-380). Run through_operandas it stands on Microcosm mainc3b9b736, against this PR's 2024 FX row (at 827504b; 03ee1e3 changes only the test file):basis: calendarbasis: projection_horizonend_date: 2024-12-30labelSo the comment at
tests/test_source_be_period_coverage.py:42holds.#403 should land right after this PR. On these rows alone, Microcosm's roll-forward check groups the 1,000 FPB rows into 9 series keys, and 6 of them mix rows of one table; #403's body has the numbers.
Not in this PR
observation, as its header states. This PR follows the existing typing, and a source-fidelity follow-up takes up the question.Judges
ledger-source-fidelityandledger-boundary: an independent review at 827504b passed both (review). 03ee1e3 applies its findings 1 and 2, and a delta review of 827504b..03ee1e3 follows.🤖 Generated with Claude Code