A frame's index must actually be an index.
Until now you could hand a frame anything as its index — a different frame, or a bare object with an n_rows attribute — and it was accepted. The frame was built, it looked fine, and the published conformance suite said it was fine. That now raises TypeError.
If you pass a SpatioTemporalIndex, you will not notice this release. That is what the type hint has always required and what every example does. Change your constraint, re-lock, carry on:
- views-frames = ">=1.10.2,<2"
+ views-frames = ">=2.0.0,<3"This is the package's first MAJOR and the first move of CONFORMANCE_FLOOR since the v1.0.0 freeze (1.0.0 → 2.0.0). Decision, reasoning and full migration: ADR-028.
What actually breaks
| If your code… | Before | Now |
|---|---|---|
passes a SpatioTemporalIndex as index |
works | works, unchanged |
passes a frame or other object as index |
silently constructed | TypeError |
passes a non-index to reindex/reindex_fill |
AttributeError on _level |
TypeError, naming what was expected |
mutates frame.values in place |
silently corrupted buffer-sharing frames | ValueError: read-only |
calls map_estimate on inf/NaN draws |
bare IndexError |
ValueError naming the cause |
Only row 4 can plausibly break working code, and ADR-025 already documented that operation as unsupported.
Why it was worth a MAJOR
Every summarizer reads .values and never .index, so a frame built with a non-index returned numerically correct answers — and assert_summarizer_contract certified it. That checker is published under ADR-016 and consumers run it in their own CI, and docs/CICs/Conformance.md names "a checker that cannot detect a violation" as the failure mode it must never have. A false pass is worse than no checker, because it is evidence you are entitled to rely on.
Found by a falsification audit run against the claim that this package was finished.
Also in this release
frame.valuesis write-protected (register C-66) — as a read-only view, so zero-copy andmmapsurvive and your own array stays writeable.map_estimaterejects non-finite draws (C-57), matchingexceedanceandexpected_shortfall.CONFORMANCE_FLOOR→2.0.0. Your CI will assert a new contract version. First move in the package's history.
Adoption issues are open in views-faoapi, views-postprocessing and views-crafdapi.
Full detail in CHANGELOG.md.