Release notes

v0.25.2 — Book 1 Companion v0.2.1 identity correction

PyStatsV1 v0.25.2 packages Book 1 Companion v0.2.1 and corrects the Chapter 8 synthetic participant identifiers without changing the teaching analysis.

Highlights

  • Replaces condition-repeated Chapter 8 participant IDs with globally unique ch08_001 through ch08_048 identifiers in stable row order.

  • Preserves strategy, feedback, test_score, cell membership, cell counts, cell means, all Python/R reported fields, the APA sentence, and the Chapter 8 figure.

  • Adds BOOK1_MAINTENANCE_RECEIPT.json with old/new CSV hashes, the ID-only change contract, statistical parity evidence, figure evidence, and parent lineage.

  • Updates pystatsv1 book1 init to create psych_stats_with_python_companion_v0_2_1 by default.

  • Preserves the historical Companion v0.2 source snapshot, packaged ZIP, portal-handoff receipt, and pystatsv1[book1]==0.25.0 proof route.

  • Keeps the bundle synthetic-only and retains the launcher’s non-overwrite, safe-path, source-hash, and generated-output boundaries.

v0.25.1 — Chapter 20 power stability and release guard

PyStatsV1 v0.25.1 corrects a numerical stability defect in the Chapter 20 independent-samples t-test power helper and adds a release safety check.

Highlights

  • Calculates two-sided noncentral-t power from stable survival-function tails, avoiding NaN results for a numerically tiny opposite tail at large sample sizes.

  • Makes required_n_ttest() fail clearly when the requested target cannot be reached within n_max rather than returning an unsupported boundary value.

  • Adds dependency-matrix CI coverage for the Chapter 20 power regression, including the supported floor and the current SciPy resolver path.

  • Requires the manual PyPI workflow to fetch and verify the requested annotated v<version> tag against pyproject.toml exactly before it builds or publishes.

  • Retains the public Book 1 Companion v0.2 asset and its canonical pystatsv1[book1]==0.25.0 proof binding unchanged.

v0.25.0 — Book 1 Companion v0.2

PyStatsV1 v0.25.0 packages the public synthetic-only Book 1 Companion v0.2.

Highlights

  • Updates pystatsv1 book1 init to create psych_stats_with_python_companion_v0_2.

  • Preserves the transparent Python/R teaching analyses while packaging six source-faithful, high-contrast grayscale figures for the five visual teaching placements.

  • Separates the Chapter 10 correlation and Chapter 11 regression figures so each is tied to its own CSV, analysis script, Python result, and APA source identifier where applicable.

  • Carries an internal portal handoff receipt that records the portal tag and immutable data/script hashes used for the packaged snapshot.

  • Keeps the bundle synthetic-only; it does not change the launcher interface into a real-data analysis service.

v0.24.1 — Cross-platform Book 1 asset manifest

PyStatsV1 v0.24.1 corrects the packaged Book 1 companion release candidate without changing the launcher interface or synthetic teaching analyses.

Highlights

  • Records stable logical archive modes in the Book 1 bundle manifest: scripts are 755 and all other provisioned files are 644.

  • Makes source-snapshot asset rebuilding consistent across Linux, macOS, and Windows checkouts.

  • Preserves the synthetic-only bundle, source hashes, and launcher commands.

v0.24.0 — Book 1 companion launcher

PyStatsV1 v0.24.0 packages the synthetic-only executable companion for Psych Stats with Python and adds a conservative local launcher.

Highlights

  • Adds pystatsv1 book1 info, pystatsv1 book1 init, and pystatsv1 book1 verify.

  • Packages a deterministic companion ZIP containing synthetic CSVs, transparent Python and base-R scripts, Matplotlib figure specifications, and a source-file integrity manifest.

  • Refuses to overwrite an existing destination and checks archive paths before extraction.

  • Adds wheel-smoke coverage for the packaged Book 1 asset on Linux, macOS, and Windows.

  • Does not publish to PyPI, change the Book 1 KDP proof, or automate real-data analysis. A PyPI publication remains a separate reviewed release action.

v0.23.0 — APA Lab support helpers

PyStatsV1 v0.23.0 prepares the public package for the APA Article Lab and other proof-first psychology workflows.

Highlights

  • Adds the public pystatsv1.psych helper layer.

  • Documents the helper APIs used by the APA Lab companion project.

  • Keeps PyStatsV1’s role deliberately narrow and honest: PyStatsV1 provides bridge helpers and receipts, while SciPy, statsmodels, Pingouin, and R remain the appropriate tools for many statistical procedures.

  • Updates the release process so CI runs on release tags and PyPI publication is a manual trusted-publisher step after the tag is green.

Public psychology helper APIs

package_identity()

Returns a JSON-serializable package identity receipt, including package name, module name, version, import path, distribution location, source-kind label, Python executable, and public top-level exports.

describe_by_group()

Produces JSON-stable descriptive summaries by group for one or more numeric variables. It records n, mean, sd, min, and max for each group/variable pair.

write_json_receipt()

Writes sorted, indented JSON receipts with a final newline and creates parent directories as needed.

compare_numeric_results()

Compares numeric outputs from two analysis engines with a stated tolerance and records pass, fail, missing, and non-numeric comparison cases.

Release checklist

Before tagging v0.23.0:

git status
git rev-parse HEAD
python -m pip install -e '.[dev,docs]'
make lint
make test
make docs-workbook-strict
python -m build

After the local checks are green:

git tag -a v0.23.0 -m "PyStatsV1 v0.23.0 with APA Lab psych support helpers"
git push origin v0.23.0
gh run list --limit 10
gh run watch --exit-status

After the tag CI is green and the PyPI trusted publisher is configured:

gh workflow run pypi-publish.yml --ref v0.23.0
gh run watch --exit-status

Then verify the public install in a clean environment:

python -m pip install --upgrade pystatsv1==0.23.0
python - <<'PY'
from pystatsv1.psych import package_identity
print(package_identity()["version"])
PY