# V0.8 Release Readiness ## Release Target - package version: `0.8.0` - git tag: `v0.8.0` ## Done - the canonical stable object set from `v0.7` remains in place, including `InvariantMapSpec` - the stable derivative backend remains `spectral_fd` - analytic Heat and Burgers residual evaluators remain in place unchanged - the `v0.7` structured-ingestion runtime surface remains in place: - `pdelie.data.from_numpy(...)` - `pdelie.data.from_xarray(...)` - M0 is complete: - `v0.8` was frozen as the next committed release before runtime implementation - the weak residual report shape, weak-profile family, and benchmark matrix were documented explicitly - M1 is complete: - the quartic-bump weak profile, exact Heat/Burgers weak identities, and deterministic benchmark fixtures were frozen - M2 is complete: - `pdelie.residuals.evaluate_weak_heat_residual(...)` is implemented - `pdelie.residuals.evaluate_weak_burgers_residual(...)` is implemented - both APIs return deterministic window-indexed weak residual report dicts rather than canonical `ResidualBatch` - M3 is complete: - internal report-space fitting and verification feasibility landed under `tests/_helpers` - stable contract integration remains deferred - M4 is complete: - the frozen representative robustness benchmark landed - the compact `v0_8-release-gate` test module and CI visibility job are implemented - required `from_numpy` imported parity landed for the frozen subset - M5 is complete: - weak KdV stress was explicitly deferred because the frozen `v0.8` quartic-bump profile is not boundary-regular enough for an honest KdV weak form - M6 is complete: - release metadata and release-facing docs are aligned with the implemented `v0.8` surface - wheel smoke covers a tiny weak Heat report path in addition to the existing example smoke ## Observed M4 Release Signal The `v0.8` degraded release signal is intentionally narrow. It is a frozen representative release signal, not a general claim of weak superiority. Observed degraded winners on the current benchmark: - Heat: - passing degraded condition: `noisy` - `robustness_signal_source = "contract_stability_signal"` - weak `contract_mode = "canonical_fallback"` - weak `fallback_reason = "svd_translation_span_drift"` - weak ratio: `17.93x` - strong ratio: `18.65x` - Burgers: - passing degraded conditions: `noisy` and `coarse` - representative recorded case: `noisy` - `robustness_signal_source = "contract_stability_signal"` - weak `contract_mode = "canonical_fallback"` - weak `fallback_reason = "weak_report_contract_span_drift"` - weak ratio: `9.90x` - strong ratio: `60.39x` Interpretation: - degraded weak-path wins are fallback-backed contract-stability signals - they are not direct in-tolerance weak-fit recoveries - they are not separation-superiority claims over the strong path ## Explicitly Deferred - weak derivatives - weak `ResidualBatch` / `ResidualEvaluator` integration - stable KdV runtime promotion - multidimensional, multivariable, or nonuniform-grid weak paths - broader PDE, grid, or adapter expansion - paper-specific experiment logic ## Final Release View The current repository is ready for the final `0.8.0` release for the frozen `v0.8` weak residual report slice, subject to release-path checks passing on the release branch and CI passing on the release PR. There are no known scientific-scope blockers inside the frozen `v0.8` slice. The stable `v0.8` claim remains narrow: - stable weak residual report APIs landed under `pdelie.residuals` - degraded release wins are representative fallback-backed contract-stability signals - stable contract integration and weak derivatives remain deferred - no stable KdV public surface is added ## Packaging And Public API Notes - `pdelie.residuals.evaluate_weak_heat_residual` is a stable runtime public API in `v0.8` - `pdelie.residuals.evaluate_weak_burgers_residual` is a stable runtime public API in `v0.8` - both APIs are exposed under `pdelie.residuals`, not root `pdelie` - the report shape and diagnostic surface are frozen by `docs/planning/V0_8_SCOPE.md` - `pdelie.data.from_numpy` and `pdelie.data.from_xarray` remain stable runtime public APIs carried forward from `v0.7` - the runtime discovery, portability, invariant, and visualization layers remain in place unchanged in stable scope - KdV remains tests-first feasibility only and does not add a stable runtime API in `v0.8` - the `v0_4-release-gate`, `v0_5-release-gate`, `v0_6-release-gate`, `v0_7-release-gate`, and `v0_8-release-gate` CI jobs are explicit visibility checks; post-`v0.8` CI consolidation is a follow-up item and is not part of this release ## Final Tag Checklist Before tagging `v0.8.0`: - inspect consistency across: - `pyproject.toml` - `README.md` - `CHANGELOG.md` - `docs/releases/V0_8_RELEASE_READINESS.md` - `docs/specs/API_STABILITY.md` - run `python -m pytest` from the repo root - run `python -m build --sdist --wheel` - install the built wheel into a clean environment and verify: - stable root imports - weak residual runtime imports under `pdelie.residuals` - one tiny weak Heat report smoke - run `python -m pdelie.examples.heat_vertical_slice` - if TestPyPI trusted publishing is already available, run a packaging preflight on a temporary `v0.8.0rc1` tag via the existing publish workflow with: - `target=testpypi` - `git_ref=v0.8.0rc1` - then verify installation from TestPyPI - if TestPyPI is not available/configured, record that explicitly and continue - confirm GitHub Actions jobs `v0_4-release-gate`, `v0_5-release-gate`, `v0_6-release-gate`, `v0_7-release-gate`, `v0_8-release-gate`, `editable-tests`, and `package-smoke` pass on the release PR commit - merge the release PR into `main` - tag the merged `main` commit as `v0.8.0` - run the publish workflow manually with: - `target=pypi` - `git_ref=v0.8.0` - `confirm_pypi=publish-to-pypi` - verify installation from PyPI