v1.8.0
[1.8.0] — 2026-06-28
Native point-country broadcast in views_frames_reconcile (ADR-023 amendment, #143 / Epic #142),
the three showcase notebooks (Epic #166), and a governance/test hardening pass (Epic #179). All
additive — the frozen leaf and summarize public surface are unchanged, and the hardening work makes
no src/ behaviour change; CONFORMANCE_FLOOR stays 1.0.0.
Added
ReconciliationModule.reconcileaccepts a point country (cm.sample_count == 1) against a draws
grid (pgm.sample_count == S): the point is broadcast across theSdraws inside the orchestrator
(np.tile), so callers no longer tile it themselves (the DRY home of pipeline-core's WET
align_country_to_grid, #143). The aligned-draws path (cm.sample_count == S) is byte-for-byte
unchanged; any other count still fails loud.ReconciliationModule.reconcile_result(cm, pgm) -> ReconciliationResult(#144) — reconciles and
reports the mode (POINT_BROADCAST|ALIGNED_DRAWS) + method (proportional) on a returned
ReconciliationResult. The mode is returned, never stamped on the leaf's genericFrameMetadata
(ADR-020 / register C-47 — the numpy leaf carries no reconciliation vocabulary).reconcileis
unchanged (it returnsreconcile_result(...).frame). New public names:ReconciliationResult,
POINT_BROADCAST,ALIGNED_DRAWS,METHOD_PROPORTIONAL.
Notes
- The broadcast lives entirely in
views_frames_reconcile/module.py; the leafproportionaland the
parity-frozengroupinghot loop are untouched, so the torch-oracle parity is exact (0.000e+00). - The aligned-draws mode remains the documented per-draw approximation. ADR-024 (#145) records the
design direction + deferral for the principled joint upgrade (and correctsproportional.py's
ambiguous "C-37" reference; register C-62). Design-only — no code.
Documentation
- Three showcase notebooks (
notebooks/01_frames,02_summaries,03_reconciliation; Epic #166):
public-frozen-API-only, synthetic-data teaching notebooks for the frames contract, the posterior
summaries (with a calibration/coverage + PIT panel), and reconciliation — including a
bit-identity-≠-method-quality panel and a toy-lattice spatial view (register C-59/C-60/C-61). docs/CICs/Reconcile.md(Epic #179) — the package-level Class Intent Contract for
views_frames_reconcile(§1–§11): the sum-to-country / zero-preservation / non-negativity /
de-mutation guarantees, the point/aligned mode contract, the five fail-loud validation guards- the per-draw-approximation caveat, and the green/beige/red test alignment. The reconcile package
was the last non-trivial surface without a CIC (ADR-006); register C-64 resolved.
- the per-draw-approximation caveat, and the green/beige/red test alignment. The reconcile package
- ADR-025 — value-buffer immutability is by convention; only the index is enforced (Epic #179).
Corrects the "immutable value objects" contract (the three frame CICs §9/§3 + README design
principle 2) to match the code: the index (time/unit) issetflags(write=False)-enforced; the
value buffer is immutable by convention (left writeable to preserve zero-copy /mmap— mutating
.valuesin place is unsupported). Thesetflags-enforce on.valueswould be a MAJOR
("tightening an invariant" on a frozen-surface member, GOVERNANCE/ADR-018), so it is recorded as a
deferred MAJOR-rider, not done now; register C-63 resolved (contract corrected).
Tests
- Adversarial (red) test hardening (Epic #179), no
src/change, 100% line+branch coverage held:- the non-finite (NaN / ±inf) fail-loud guard in
exceedance/expected_shortfallis now pinned on
the blocked (multi-block) path — the bad draw placed in a non-first block via theblock_rows
kwarg with block 0 all-finite (register C-65 resolved); - conformance-suite negatives —
assert_reconcile_contractandassert_summarizer_contractare
shown to reject a deliberately non-conforming implementation (the leaf's C-51 envelope-negative
pattern, extended to the sibling packages); - reconcile mode-corners —
reconcile_result.modefor both-points and pre-tiled-cm inputs (both
ALIGNED_DRAWS); andReconciliationResultfrozen-ness (FrozenInstanceError).
- the non-finite (NaN / ±inf) fail-loud guard in