release: cut v1.0.0

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
This commit is contained in:
Pratik Bhadane
2026-03-23 23:57:30 +05:30
parent 7a5a220dfe
commit 307beeca02
47 changed files with 1822 additions and 573 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
Changelog
=========
0.1.0 (2024)
1.0.0 (2026)
------------
**Candlestick Pattern Parity (61/61)**
+1 -1
View File
@@ -18,7 +18,7 @@ project = "ferro-ta"
copyright = "2024, pratikbhadane24"
author = "pratikbhadane24"
# Version from env (e.g. set in CI from git tag) or default
release = os.environ.get("FERRO_TA_VERSION", "0.1.0")
release = os.environ.get("FERRO_TA_VERSION", "1.0.0")
version = release
# -- General configuration ----------------------------------------------------
+1 -1
View File
@@ -1,5 +1,5 @@
ferro-ta Documentation
=====================
======================
.. toctree::
:maxdepth: 2
+2 -2
View File
@@ -60,8 +60,8 @@ register("SMOOTH_RSI", SMOOTH_RSI)
```toml
[project]
name = "ferro-ta-myplugin"
version = "0.1.0"
dependencies = ["ferro_ta>=0.1.0"]
version = "1.0.0"
dependencies = ["ferro_ta>=1.0.0"]
[project.entry-points."ferro_ta.plugins"]
auto_register = "ferro_ta_myplugin:register_all"
+5 -6
View File
@@ -61,9 +61,8 @@ ferro-ta follows [Semantic Versioning 2.0.0]:
| New indicators, new sub-modules, new features (backward-compatible) | **MINOR** |
| Bug fixes, performance improvements, docs, dependency bumps | **PATCH** |
The current version (`0.1.x`) is pre-stable — **breaking changes are possible
in minor releases**. When the project reaches 1.0.0, the full SemVer
contract kicks in.
The current version (`1.x`) is stable. Breaking changes to stable APIs are
reserved for future **major** releases.
---
@@ -71,7 +70,7 @@ contract kicks in.
Before removing or renaming any **stable** API:
1. The deprecated name/function is kept for at least **one minor release** after
1. The deprecated name/function is kept until the next **major release** after
the deprecation notice.
2. A `DeprecationWarning` is raised when the deprecated API is used.
3. The deprecation and removal are documented in `CHANGELOG.md` under
@@ -79,8 +78,8 @@ Before removing or renaming any **stable** API:
Example timeline:
- `0.2.0``OLD_NAME` deprecated, `DeprecationWarning` added; `NEW_NAME` available.
- `0.3.0``OLD_NAME` removed.
- `1.1.0``OLD_NAME` deprecated, `DeprecationWarning` added; `NEW_NAME` available.
- `2.0.0``OLD_NAME` removed.
---