v1.8.1
[1.8.1] — 2026-07-02
Falsification-audit hardening (four-axis audit 2026-07-02; register C-67/C-68/C-69/C-70).
Bug fixes with an identical contract — the code now honors what the docs already promised.
No public-surface change; CONFORMANCE_FLOOR stays 1.0.0.
Fixed
reconcile_proportionalconserves exactly for any nonzero draw sum (C-68, the audit's one
hard finding). The torch-port's+ 1e-8denominator epsilon — a float32 no-op for draw sums
≳ 0.1 but a silent deflator for tiny nonzero sums (a draw sum of 1e-8 reconciled a country
total of 100 to 50, with no error signal, violating the Reconcile.md §3 sum-to-country
guarantee) — is replaced by an explicit all-zero-draw guard: exact division for any nonzero
sum; all-zero draws stay zero exactly as before. Bit-identical on all realistic data
(torch-oracle parity unchanged and green).- Negative country totals now fail loud (C-68/F8):
reconcile_proportionalraises
ValueErrorinstead of silently clamping the output to zero (sum 0 ≠ the requested total). - The published conformance suites refuse to run under
python -O(C-67): all three
(views_frames.conformance, summarize, reconcile) now guard their entry points with
_require_assertions()— under optimized bytecode (which strips the suites'assert
statements) they raiseRuntimeErrorinstead of silently reporting green. - Empty-index
searchsortedreturns all-1(C-69) — the documented not-found value —
instead of crashing with an obscureIndexError(thenp.clip(pos, 0, -1)corner).
Notes
- Regression pins for all four fixes:
tests/test_falsification_safety_audit_2026_07.py. Reconcile.md§6 documents the two reconcile behaviors;proportional.py's module docstring
records the deliberate (bit-parity-preserving) deviation from the torch original.- Register: C-67/C-68/C-69 registered-and-resolved; C-70 (the audit's docs/tests polish
bundle) opened and cleared in the same release (below).
Tests
- C-70 test adds (#195): the share-proportionality law (the method's defining
forecast-proportion property, previously pinned only by the frozen-oracle fixtures); an mmap
read-only pin (writeable is False, in-place write raises); the reconcile
missing-(time, priogrid_gid)-mapping-entry raise.
Documentation
- C-70 docs refresh (#196):
CLAUDE.mdrewritten for the released three-package reality;
README banner → v1.8.0 + chronicle; ADR-013 as-built amendment (feature_names); CIC accuracy
fixes (§5 artifact names →values.npy, PredictionFrame §6 real dtype behavior, index §6
NaN-via-dtype, Reconcile §10 pinning files); CICs/ADRs README framing refreshed; and a
recurrence guard —validate_docs.shnow checks the README banner's MAJOR.MINOR against
pyproject.toml.