Release candidate verification
This historical record covers 0.4.0rc1 and supersedes the earlier repair verification. It separates software correctness, simulation evidence and installation checks. No commit, push, publication or deployment forms part of this preparation.
The first-candidate simulation files are retained under *-rc1 names.
Completed software checks
Full suite in the existing Python 3.12.11 development environment: 169 passed, seven warnings. This includes all three CLI analysers and the new independent numerical and simulation-generator references.
Full suite against the installed wheel outside the checkout on Python 3.11.15: 169 passed, 21 warnings. Runtime dependencies were pinned to their declared lower bounds for this check.
Full suite against the installed wheel outside the checkout on Python 3.12.11: 169 passed, seven warnings. Dependencies were resolved within the candidate’s bounds, including SciPy 1.18.1. This is software verification, not a second statistical calibration study on those dependency versions.
uv pip checkpassed in both clean environments. Installed versions are retained in Python 3.11 and Python 3.12 records.Ruff and Black checks passed on the fifteen changed core, reference-test, runner, example and simulation files listed below. Whole-tree lint and typing cleanliness are not claimed.
The retained-allocation example ran from the installed package. It reloaded the allocation, reconciled the expected grid, analysed twice and checked that estimates and intervals reproduced. It saved five evidence files and a manifest.
Warnings include constant-data diagnostic warnings and third-party deprecations. Their counts are retained above; no general warning suppression was added to the library. No claim of warning-free execution is made.
An initial unrestricted NumPy 2.5.3 / pandas 2.3.3 installation passed the software suite but emitted widespread timedelta deprecation warnings. The candidate now constrains NumPy to the verified 2.3 series. Both clean suites were rerun under the final bounds. Other interpreter versions and every possible permitted dependency combination have not been verified.
Documentation and archive checks
Sphinx built the documentation with
-W --keep-goingafter removing broken-link warning suppression. A separate scan found zero missing local linked files in the rendered HTML. The build was not deployed.Isolated builds produced both the source archive and the wheel, with the wheel built from the source archive.
twine checkpassed both metadata descriptions.Archive inspection verified the proprietary licence, exact package-source parity, retained protocol and simulation evidence, and exclusion of stale HTML, run outputs and environment files.
A third clean Python 3.12 environment installed from the source archive outside the checkout. Its full suite passed 169 tests with seven warnings, and the retained-allocation example ran successfully. Dependency consistency passed.
Final distribution files are prepared in
dist/0.4.0rc1/, with a separate SHA256 manifest. Rebuilding after documentation-only edits does not change the tested package source; source parity is checked against the tested installs.
Build commands:
PYTHONPATH=src python -m sphinx -b html -W --keep-going documentation /tmp/geostep-rc-docs
python -m build --outdir dist/0.4.0rc1
python -m twine check dist/0.4.0rc1/*.whl dist/0.4.0rc1/*.tar.gz
The archive checks do not establish publication rights or statistical validity. The licence terms were preserved, not independently reviewed as legal advice.
Statistical evidence
The frozen protocol controls the release study. It uses 3,000 generated panels and 12,000 public analysis calls, with zero failures. The results restrict BCa and stratified DiD to experimental status. CRT and staircase calibration were not run. Missingness, interference and non-adherence are not validated by the study.
After adding experimental-status warnings to results, the study was rerun with the same frozen seed and settings against the final source. Numerical replicate records matched the first run byte for byte. This repeat is a reproducibility check, not an additional independent 12,000-call evidence sample. The retained JSON records the final source and protocol hashes.
Reproduction commands
From the checkout, use its existing development environment:
PYTHONPATH=src OPENBLAS_NUM_THREADS=1 OMP_NUM_THREADS=1 python -m pytest -q
PYTHONPATH=src OPENBLAS_NUM_THREADS=1 OMP_NUM_THREADS=1 python scripts/validate_release.py
The installed-wheel suites run from a temporary copy of tests, examples, scripts
and run_pipeline.py, with no src/ directory and no PYTHONPATH override.
They therefore exercise installed imports rather than the checkout.
The Ruff and Black scope is:
src/geostep/analyzer.py
src/geostep/inference.py
src/geostep/designer.py
src/geostep/diagnostics.py
src/geostep/power.py
src/geostep/reports.py
scripts/validate_parallel_inference.py
scripts/validate_release.py
tests/test_methodological_contract.py
tests/test_release_references.py
tests/test_power.py
tests/test_crt_analyzer.py
run_pipeline.py
examples/run_example_analysis.py
examples/retained_parallel_workflow.py
Release boundary
The existing proprietary licence is preserved and included in distributions. Package metadata identifies the actual repository and documentation URL without the former placeholder values or false OSI-approved licence classifier. Generated package metadata and stale HTML are removed from tracked source. The existing README documentation URL and deletion of the two legacy docs-build scripts remain intact. No automated release or CI service has been added.
The experimental-method restrictions still apply.