V0.10 Scope Freeze#
Summary#
v0.10 is the supportability and v1.0 readiness release for pdelie.
Its purpose is:
harden the existing Heat/Burgers/weak-report/KdV engine into a more supportable public surface before adding more numerical scope.
Stable release definition:
existing stable Heat/Burgers/weak-report/KdV surfaces -> compact supportability reports -> consistent examples/release gates/docs -> v1.0 readiness
v0.10 is not a new numerics release.
It does not add another PDE, weak KdV, broad adapters, multidimensional grids, or operator-facing work.
Stable Scope#
Stable v0.10 scope is limited to supportability work around the surfaces already stable through v0.9:
canonical Heat/Burgers strong paths
window-indexed weak Heat/Burgers report APIs
structured
from_numpy(...)andfrom_xarray(...)ingestionnormalized periodic short-horizon KdV strong path
polynomial translation fitting and held-out verification
existing examples and release gates
package, publishing, and release-readiness documentation
Committed supportability directions:
compact runtime reporting helpers over existing residual, fit, verification, and vertical-slice outputs
consistent example summaries where useful
API stability audit and accidental-public-surface guards
CI release-gate cleanup
package/readiness documentation cleanup for eventual
v1.0publishing decisions
Public API Policy#
M1 freezes a new runtime-level public helper surface for M2:
pdelie.reporting
This is a public runtime submodule.
It is not a canonical object system.
It has no root pdelie exports.
Frozen M2 public APIs:
summarize_residual_batch(residual: ResidualBatch) -> dict[str, Any]
summarize_weak_residual_report(report: Mapping[str, Any]) -> dict[str, Any]
summarize_generator_family(generator: GeneratorFamily) -> dict[str, Any]
summarize_verification_report(report: VerificationReport) -> dict[str, Any]
summarize_vertical_slice(
*,
derivatives: DerivativeBatch,
residual: ResidualBatch,
generator: GeneratorFamily,
verification: VerificationReport,
extra_metrics: Mapping[str, Any] | None = None,
) -> dict[str, Any]
Frozen common reporting rules:
runtime-level, not a canonical object
deterministic for identical inputs
JSON-compatible plain Python dict outputs
NumPy arrays become lists
NumPy scalar values become Python scalar values
input object types and required report keys are validated
validation failures use existing typed validation errors
scoped to existing stable surfaces
no helper mutates its inputs
no helper creates or changes canonical objects
no manuscript-specific table, figure, threshold, or label logic
no root
pdelieexportsAPI_STABILITY.mdis updated in M2 when these APIs land
Reporting Helper Schemas#
Every reporting helper returns a dict containing:
summary_schema_version = "0.1"summary_type
ResidualBatch Summary#
summarize_residual_batch(...) freezes these keys:
summary_schema_versionsummary_type = "residual_batch"residual_shapedefinition_typenormalizationmax_abs_residualrms_residualdiagnostics
max_abs_residual and rms_residual are computed from residual.residual.
The original diagnostics are preserved after JSON-safe conversion.
Weak Residual Report Summary#
summarize_weak_residual_report(...) freezes these keys:
summary_schema_versionsummary_type = "weak_residual_report"equationequation_formmethod_familynormalizationwindow_residual_shapemax_abs_residuall2_residualdiagnostics
The helper supports the frozen v0.8 weak report shape only.
It validates that the input mapping contains the frozen weak report keys before summarizing.
GeneratorFamily Summary#
summarize_generator_family(...) freezes these keys:
summary_schema_versionsummary_type = "generator_family"parameterizationnormalizationcoefficient_shapecoefficientsgenerator_namestranslation_span_distancefit_modereference_fallback_usedfallback_reasondiagnostics
translation_span_distance is populated only for polynomial_translation_affine.
For other parameterizations, it is None.
Fit and fallback fields are read from diagnostics when present and otherwise reported as None.
VerificationReport Summary#
summarize_verification_report(...) freezes these keys:
summary_schema_versionsummary_type = "verification_report"normclassificationepsilon_valueserror_curvefirst_epsilonfirst_errormax_errordiagnostics
first_epsilon and first_error are the first entries of the verification sweep.
max_error is computed from error_curve.
Vertical Slice Summary#
summarize_vertical_slice(...) freezes these keys:
summary_schema_versionsummary_type = "vertical_slice"derivative_backendderivative_keysderivative_configderivative_diagnosticsresidualgeneratorverificationextra_metrics
The nested residual, generator, and verification values are produced by the corresponding summary helpers.
extra_metrics is optional and JSON-safe converted when provided.
It must not be used to smuggle manuscript-specific reporting logic into the runtime API.
Reporting helpers must not:
redefine canonical object meaning
make example outputs canonical artifacts
encode manuscript-specific tables or figures
hide backend-specific caveats
broaden numerical scope
Example Consistency#
Heat and KdV examples should be made more consistent where that improves supportability.
Example outputs remain runtime smoke summaries. They are not stable canonical artifact schemas.
Expected properties:
JSON-serializable plain Python values
deterministic for frozen example inputs
compact enough for command-line smoke checks
explicit about backend and verification classification
API Stability Audit#
M0 audits docs/specs/API_STABILITY.md only.
M1 freezes future public reporting APIs in planning docs only.
Audit result for M0:
all public APIs through
v0.9remain documentedno
v0.10public API has landed yetAPI_STABILITY.mdshould remain unchanged until reporting helpers or other public APIs actually land
M1 audit result:
pdelie.reportingAPIs are frozen for M2 but not implemented yetAPI_STABILITY.mdremains unchanged in M1M2 must update
API_STABILITY.mdwhenpdelie.reportinglands
Future v0.10 milestones must update API_STABILITY.md in the same milestone where any public API is added or changed.
CI Cleanup Direction#
v0.10 should reduce release-gate CI sprawl without deleting useful historical tests.
Target direction:
keep historical release-gate test modules runnable locally
keep the current release gate visible in CI
avoid redundant historical release-gate CI jobs unless intentionally retained
keep full editable tests and package smoke as required release checks
do not change test semantics just to make CI faster
Exact workflow edits are deferred until the CI cleanup milestone.
Package and Publishing Readiness#
v0.10 should prepare the project for the v1.0 publishing decision.
Required decision record:
whether package-index publishing resumes at
v1.0whether
v0.10remains Git-tag-onlywhat local build and wheel-smoke checks are required before any future publishable release
what CI jobs are required before tagging
No PyPI or TestPyPI publication is added by this scope freeze.
Scope Limits#
Stable v0.10 scope is limited to:
supportability helpers around existing stable runtime surfaces
existing canonical objects
existing scalar 1D uniform rectilinear / periodic regimes
existing Heat, Burgers, weak Heat/Burgers report, and KdV strong-path surfaces
documentation and CI release-process cleanup
Explicit Non-goals#
Out of stable v0.10 scope:
no new PDE
no weak KdV API
no new weak derivative API
no KdV weak residual report
no broad benchmark adapters
no PDEBench or The Well adapter work
no multidimensional grids
no multivariable systems
no nonuniform-grid expansion
no operator-method expansion
no neural generators
no manuscript-specific reporting logic
no new canonical object unless M1 proves a repeated supportability problem cannot be solved with runtime helpers
Milestones#
Planned v0.10 sequence:
Milestone 0 - supportability scope reset
Milestone 1 - reporting semantics freeze
Milestone 2 - reporting helper implementation
Milestone 3 - example consistency
Milestone 4 - API stability audit and public-surface guards
Milestone 5 - CI cleanup and release-gate consolidation
Milestone 6 - release readiness and documentation alignment
API_STABILITY.md is updated only when public APIs land:
M0 audits it but leaves it unchanged
M1 freezes public reporting contracts in planning docs only
M2 updates it when public reporting helpers land
later milestones update it only if they add or change public APIs