307beeca02
Prepare the first public 1.0.0 release and finish the remaining CI hardening work. Highlights: - align Python, Rust, WASM, Conda, API, MCP, and docs version metadata to 1.0.0 - promote package metadata to Production/Stable and update stability/versioning docs for the stable series - move the accumulated Unreleased notes into a dated 1.0.0 changelog section and keep a fresh top-level Unreleased block - strengthen the changelog checker so it validates a single top-level Unreleased section - fix the CI/package support mismatch by declaring Python >=3.10 consistently and gating pandas-ta extras to Python 3.12+ - restore Sphinx autodoc compatibility for documented ferro_ta.<module> imports by registering module aliases - make the TA-Lib benchmark guardrail less flaky by checking median and tail-percentile speedups instead of failing on a single mild outlier - switch PyPI publishing to OIDC-only trusted publishing and wire the changelog check into the required CI gate - apply the Ruff-driven cleanup across the Python and test tree and refresh uv/cargo lockfiles Validated locally: - python3 scripts/check_changelog.py - uv run --with ruff ruff check python tests - uv run --with ruff ruff format --check python tests - uv lock --check - sphinx-build -b html docs docs/_build -W --keep-going - build/install the ferro_ta 1.0.0 wheel successfully
4.0 KiB
4.0 KiB
Versioning & Release Policy
ferro-ta uses Semantic Versioning 2.0.0.
Version numbers: MAJOR.MINOR.PATCH
| Component | Increment when… |
|---|---|
| MAJOR | A breaking API change is introduced (indicator removed, parameter renamed, return-type changed). |
| MINOR | New indicators, features, or bindings are added in a backward-compatible way. |
| PATCH | Bug fixes, performance improvements, documentation-only changes, or dependency bumps that do not change the public API. |
Supported Python versions
We support the three most recent stable Python minor releases at the time of a MINOR or MAJOR release. Python versions that have reached end-of-life (EOL) per the Python release calendar are removed in the next MINOR release; this counts as a non-breaking change.
Currently supported: 3.10, 3.11, 3.12, 3.13 (see pyproject.toml).
Release playbook
- Bump the version in
Cargo.tomlandpyproject.tomlto the new version (e.g.1.0.1). - Update
CHANGELOG.md: move the[Unreleased]block to a new dated section[1.0.1] — YYYY-MM-DDand open a fresh[Unreleased]block. - Commit the version bump and changelog update with message
chore: release v1.0.1. - Create a tag:
git tag v1.0.1 && git push origin v1.0.1. - Create a GitHub Release for tag
v1.0.1— the CIbuild-wheelsandpublishjobs trigger automatically onrelease: published.
Breaking-change policy
- Removing an indicator or changing its signature is a MAJOR change.
- Changing a default parameter value is a MINOR change (with a deprecation notice in the changelog).
- Fixing a numeric output to match TA-Lib more closely is a PATCH change (but noted clearly in the changelog).
Changelog maintenance
Every PR that changes user-visible behaviour must add an entry to the
[Unreleased] section of CHANGELOG.md. CI enforces this for PRs that
touch src/, python/, or wasm/.
API Stability Guarantees
The following modules are considered stable API as of 1.0.0 and will not
have breaking changes in minor releases:
| Module | Stability |
|---|---|
ferro_ta (top-level) — all __all__ names |
Stable |
ferro_ta.overlap, ferro_ta.momentum, etc. |
Stable |
ferro_ta.batch |
Stable |
ferro_ta.streaming |
Stable |
ferro_ta.extended |
Stable |
ferro_ta.exceptions |
Stable |
ferro_ta.registry |
Stable |
ferro_ta.backtest |
Stable |
ferro_ta.pipeline |
Stable |
ferro_ta.config |
Stable |
ferro_ta.gpu (optional) |
Beta — API may evolve |
ferro_ta._utils (private) |
Not stable — do not import directly |
v1.0 readiness checklist
- All 155+ TA-Lib indicators implemented and tested
- Type stubs (
.pyi) for all public functions - Sphinx documentation for all modules
- Streaming bar-by-bar API (9 classes)
- Batch execution API
- Extended indicators (10 beyond TA-Lib)
- WASM bindings (9 indicators)
- Pandas integration (transparent)
- Polars integration (transparent)
- Backtesting harness
- Plugin registry
- Error model and input validation
- Release playbook (RELEASE.md)
- Changelog (CHANGELOG.md)
- Version consistency CI check
- Fuzzing (cargo-fuzz, SMA + RSI)
- Optional GPU backend (CuPy)
- Indicator pipeline API
- Configuration defaults API
- Jupyter notebook examples
Post-1.0 notes
With 1.0.0 released:
- The package now uses the
Development Status :: 5 - Production/Stableclassifier. CHANGELOG.mdnow contains the[1.0.0]release section.- This file now reflects the stable-series SemVer contract.
Compatibility matrix
| Python | Platform | Status |
|---|---|---|
| 3.10–3.13 | Linux x86_64 (manylinux) | ✅ Supported |
| 3.10–3.13 | macOS x86_64 | ✅ Supported |
| 3.10–3.13 | macOS aarch64 (Apple Silicon) | ✅ Supported |
| 3.10–3.13 | Windows x86_64 | ✅ Supported |