0006 — v0.8 is a cleanup-only compatibility-removal release
- Status: Accepted
- Date: 2026-07-22
- Refines: ADR 0003 — Compatibility-first API evolution, ADR 0004 — Canonical inverse namespace
- Related plan: v0.8 cleanup plan
Context
v0.7 deliberately retains one bounded transition layer while establishing the canonical forward and separator APIs. The project has very few users, the pre-1.0 API has always been described as unstable, and known downstream use is limited mainly to the direct forward Voronoi functionality.
Carrying transitional imports and selectors farther would preserve historical shapes at the expense of a clearer package. The same release boundary is also a good opportunity for internal organization work that would be unnecessarily noisy during the v0.7 contract-finalization issue.
Prescribed cell measures and mixed separator-plus-measure fitting are important future features, but combining either feature with compatibility removal and source-tree reorganization would make the release difficult to review and qualify.
Decision
v0.8 will be a cleanup-only release. It will not add a new inverse observation family or other user-facing numerical feature.
Its planned work is:
- remove the v0.7 compatibility-only inverse package, top-level inverse re-exports, historical core aliases, planar result alias, and deprecated planar return selector;
- audit every remaining compatibility path and retain only routes that are useful as current API rather than merely historical behavior;
- reorganize the flat test suite into responsibility-based subdirectories without changing numerical behavior;
- move private Python helpers from the root
src/pyvoro2/_*.pycollection into a privatepyvoro2._internalpackage, while leaving compiled extension names such as_coreand_core2dunchanged; - resolve non-critical consistency and maintenance findings deferred from the v0.7 final audit;
- preserve the stable v0.7 forward and high-level separator contracts unless a separately approved correctness fix requires change.
The v0.7 compatibility horizon is therefore final: removal in v0.8 does not require evidence of user breakage or a usage-based extension decision. The cleanup should be judged by current architecture, usability, and maintenance cost.
The feature sequence becomes:
- v0.8: cleanup and compatibility removal;
- v0.9: prescribed cell areas/volumes;
- v0.10: mixed separator and cell-measure inverse problems.
Compatibility surfaces scheduled for removal
The v0.8 audit starts from these known v0.7-only surfaces:
pyvoro2.powerfitand all of its historical direct submodules;- broad separator-specific exports from top-level
pyvoro2; - historical separator names exported from
pyvoro2.inverse.separator, including the five core identity aliases; - the lazy top-level
pyvoro2.powerfitattribute; pyvoro2.planar.PlanarComputeResultandpyvoro2.planar.result.PlanarComputeResult;- planar
return_result=; - compatibility tests and reference pages whose only purpose is to preserve those routes.
output='cells' is not scheduled for automatic removal. It is an explicit,
useful raw-data output mode in the current forward API, not merely a hidden
legacy switch. The v0.8 audit may simplify its documentation, but removal would
require a separate API decision.
Consequences
- v0.7 remains the only release carrying the inverse migration shim.
- v0.8 can simplify package imports,
__all__, distribution checks, tests, and reference navigation before new inverse families are introduced. - Test and private-module moves are reviewable as mechanical refactors because they are not mixed with prescribed-measure solver work.
- Prescribed-measure design can start from the cleaned canonical architecture in v0.9.
- Mixed-observation protocol design remains evidence-driven and waits until both real observation families exist in v0.10.
Alternatives considered
Add prescribed measures in v0.8 while removing compatibility
Rejected. A new nonlinear inverse family and a broad cleanup release have independent risks and should not share one qualification boundary.
Keep compatibility until 1.0
Rejected. The project is pre-1.0, has negligible dependence on the historical inverse API, and would gain little from maintaining a second public vocabulary.
Remove the raw cell output together with all historical behavior
Rejected as a blanket rule. Raw cells remain useful for low-level geometry and
are already exposed through the explicit current selector output='cells'.