Belgium enters the Scorecard: JRC EUROMOD-BE country-report claims (third country) - #82
Merged
Conversation
Stage six pinned model claims, route six statistical facts to Ledger, disposition six derived ratios, and attach two demo Axiom values as concept mismatches. Register Belgium worlds, add the BE app dimension, and keep the derived build deterministic.
… 104 Reviewer upgrade of Lane E's honestly-labeled convention inference: Y15_CR_BE_final.pdf p. 104 states HDI is equivalised by the 'modified OECD' scale for the A3.7/A3.8 section. Note text, its test pin, and the regenerated Ledger routing artifact updated together.
MaxGhenis
force-pushed
the
be/jrc-country-report
branch
from
August 21, 2026 11:59
9c78f5c to
00066a9
Compare
Four blockers plus one MAJOR and one MINOR from the adversarial review of PR #82, each independently re-verified against Y15_CR_BE_final.pdf before fixing: - Model release: the report derives results with EUROMOD J1.0+ (front matter, p. 3) — 2025 is only the report vintage. SOURCE_MODEL, the closed canon, README, baselines, and test pins now say J1.0+. - Income-year identity: periods are policy-system/output years simulated from database BE_2022_c1 (EU-SILC 2022 collection, income reference year 2021 — Table 3.1, p. 97) with monetary uprating; the false 'matching income-reference year' assertions are gone and the input database is pinned as a claim condition. - Unemployment benefits: Table A3.6 marks bun Simulated=N (p. 127) and bun_be is off in the baseline (p. 24); its 'EUROMOD' column is the SILC income-year-2021 base 10,416 uprated to 11,706. Reclassified from a model claim to a Ledger-routed non-simulated survey input with that provenance pinned. Claims 6 -> 5; Ledger facts 6 -> 7. - Population frame: every model claim now carries population_frame=private_households (Table 3.1 coverage, p. 97) so the modeled SILC universe is never presented as an unqualified national scope. - Underlying issuers preserved on every Ledger fact (NBB / RVA / EU-SILC, read from the report's own source table pp. 120-126 and the p. 104 narrative); JRC stays the secondary publisher. - App: comparability suppression extracted to a tested pure helper (comparabilityFigure) used by both render sites. Claim ids recomputed (conditions are identity); populations feed and app copy regenerated through the exporter; full suite 259 passed; two-build determinism holds at the new content hash.
…d identity for the survey fact - Lane detail, both lane feeds, and the app overview now state 5 model claims / 7 Ledger facts (6 statistical + 1 non-simulated uprated EU-SILC survey input) / 6 dispositioned ratios; a new test pins the persisted lane detail so a semantically stale generator cannot ride the byte gate. - The survey fact carries one period identity: period_semantics = simulation_year_of_uprated_survey_input and conditions key the year as simulation_year (registered axis), not reference_year. - underlying_issuer normalized to exactly EU-SILC; the uprated-survey-input characterization stays in routing/provenance. - countryOf() gets its JSDoc back; comparabilityFigure keeps its own.
stage_all docstring 6/6/6 -> 5/7/6; README 'other four' -> 'other three'; the persisted-lane test now asserts the exact detail string (sol's mutation probe showed the partial pin let a 99-derived-ratios mutation pass).
…x:347, from the original lane commit)
This was referenced Aug 21, 2026
vahid-ahmadi
pushed a commit
that referenced
this pull request
Aug 22, 2026
data/lanes.json and its app/public mirror are DERIVED feeds and both sides appended a lane, so the textual conflict is not a real one — regenerated from a build rather than hand-merged. 33 lanes now, including the BE country-report lane from #82 alongside this branch's UK reform-validation lane. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016HuXJFVme8HRbnke2Ey3Me
vahid-ahmadi
pushed a commit
that referenced
this pull request
Aug 22, 2026
data/lanes.json and its app/public mirror are DERIVED feeds and both sides appended a lane, so the textual conflict is not a real one — regenerated from a build rather than hand-merged. 33 lanes now, including the BE country-report lane from #82 alongside this branch's HMT distributional lane. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016HuXJFVme8HRbnke2Ey3Me
vahid-ahmadi
pushed a commit
that referenced
this pull request
Aug 22, 2026
data/lanes.json and its app/public mirror are DERIVED feeds and both sides appended a lane, so the textual conflict is not a real one — regenerated from a build rather than hand-merged. 33 lanes now, including the BE country-report lane from #82 alongside this branch's divergence-decomposition lane. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016HuXJFVme8HRbnke2Ey3Me
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Belgium becomes the Scorecard's third country: the JRC's published EUROMOD-Belgium country-report validation values enter as external-model claims, with the doctrine applied end to end. Held for Max's merge (ahead of Monday's CAPE/BEAMM meeting in Brussels, where this is a talking point either way).
What
jrc-euromod-be-baseline-statistics-2025package with commit + sha provenance): A3.4 national income tax (€77.531B) and employee SICs (€28.861B) for CY2023; A3.6 child benefits (€7.454B) and unemployment benefits (€11.706B) for CY2023; A3.7 Gini (0.2228) and A3.8 AROP-60 (0.1123) for CY2022.benchmark_class=different_model,calibration_relationship=held_out, per-year EUROMOD baselines registered; EUR canonicalization; semantic pins on income concept, equivalisation, poverty line, scopes. Note: the pinned source holds 6 euromod-series rows (18 data rows = 6 euromod / 6 external / 6 ratio) — the lane brief's "8" was a miscount, corrected against the artifact rather than padded.externalstatistical cells route ONLY todata/ledger/be_admin_outturns.jsonlas administrative facts — none entersexternal_scores. The sixratiorows are dispositioned, and the adapter proves each equals the rounded euromod/external quotient (drift fails the build).concept_mismatch: national income tax vs our worker PIT €23.285B and employee SICs vs Article-38-before-reductions €20.874B, computed from the microcosm-be v0.2 demo-grade rebuild (rulespec-be @ 7c85808, results vendored with shas). Each carries the verbatim demo-grade banner and names all three gaps: period (CY2026 vs CY2023), population basis (US survey support reweighted to Belgian administrative targets vs SILC), scope (worker slice vs national). The app renders them asnot comparable— no divergence/ratio is shown. The SIC mapping uses before-reductions because J2.0+ definestscee_sbefore the separately-subtracted work-bonus reduction. Child benefits, unemployment, Gini, AROP stay claims-only — nothing available matches them honestly.modified_oecdfrom EUROMOD/Eurostat convention and labeled the inference honestly; the reviewer checked the report itself — p. 104 states HDI is equivalised by the "modified OECD" scale for the A3.7/A3.8 section — and upgraded the note + its test pin (second commit).Verification (lane + independent reviewer re-run)
uv run --with pytest,PYTHONPATH=.), no post-run git drift.Open question for Max
The six Ledger-routed external facts currently live as a Scorecard-side artifact (
data/ledger/be_admin_outturns.jsonl). Promote them into Chronicle proper as a follow-up, or keep Scorecard-side routing as the handoff boundary? (Chronicle already holds the source CSV; this is about the routed per-fact form.)Built by gpt-5.6-sol (detached lane, sandbox, no network); reviewed, re-run, evidence-upgraded, and pushed by fable. Merge is Max's.