diff --git a/CHANGELOG.md b/CHANGELOG.md index 0e2c3ab5..5e16eaa3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] ### Changed +- **`wifi-densepose` promoted to `2.0.0` stable; `ruview` `2.0.0` first stable publish (ADR-184 P2).** Dropped the `a1` alpha suffix on both sibling packages (`python/pyproject.toml`, `python/ruview-meta/pyproject.toml`) and flipped their trove classifier `Development Status :: 3 - Alpha` → `5 - Production/Stable`; the `ruview` meta-package's `wifi-densepose==2.0.0a1` dependency pins (base + `[client]`) were repointed to `==2.0.0`. Pip-release now authenticates via Trusted Publishing (see the entry below). **Version-metadata prep only — nothing is published by this change**: the actual PyPI upload (ADR-184 P3) is still gated on the one-time manual Trusted Publisher registration on pypi.org that only the repo owner can perform. Justified as "stable": the default (no-extras) wheel builds at 279 KB (`maturin build --release --strip`) and the base non-SOTA suite is green — `pytest python/tests/` (excluding the `[aether]`/`[meridian]`/`[mat]` extra modules) = **185 passed, 0 failed** (smoke / keypoint / pose / vitals / bfld / security / WS+MQTT client). - **CI (ADR-184): `pip-release.yml` publish job migrated to PyPI OIDC Trusted Publishing** (commit `cc153e8b5`; refs #785, completes ADR-117). The release workflow now authenticates to PyPI via short-lived OIDC tokens (`id-token: write`) instead of a long-lived `PYPI_API_TOKEN` secret. **Not yet active**: publishing will fail until the matching Trusted Publisher is registered manually on pypi.org (a one-time, per-project step that cannot be automated from CI) — ADR-184 P1 tracks this as the remaining gate (status recorded in `dfc4c1abd`). - **`@ruvnet/rvagent` startup optimization — stdio time-to-first-response ~242 ms → ~189 ms (−22%; MEASURED, median of repeated `initialize` round-trips against `dist/index.js`, this container, reproduce with a piped-stdin timer).** Two changes: (1) `./http-transport.js` is now imported **lazily** inside the `RVAGENT_HTTP_PORT` branch — it chain-loads the MCP SDK's `streamableHttp` module (~48 ms MEASURED via per-module `import()` timing), which the default stdio path never uses; (2) the advertised JSON Schemas generated from the Zod sources are memoized per tool instead of re-walking the Zod tree on every `tools/list` (matters under the session-per-server HTTP model where each session lists tools). No behavior change: 99/99 jest tests, HTTP session flow re-smoke-tested through the lazy path. The `@ruvnet/ruview` harness CLI was profiled too and left alone — 50 ms vs the ~29 ms bare `node -e ''` floor on the same box (MEASURED), i.e. already near the interpreter floor with zero dependencies. diff --git a/python/pyproject.toml b/python/pyproject.toml index 786cf4a4..f7f9a832 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -10,7 +10,7 @@ build-backend = "maturin" [project] name = "wifi-densepose" -version = "2.0.0a1" +version = "2.0.0" description = "WiFi-based human pose estimation, vital sign extraction, and ambient intelligence from Channel State Information (CSI). PyO3 bindings for the Rust core." readme = "README.md" requires-python = ">=3.10" @@ -23,7 +23,7 @@ keywords = [ "biometric", "ambient-intelligence", "home-assistant", "matter", ] classifiers = [ - "Development Status :: 3 - Alpha", + "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Intended Audience :: Science/Research", "License :: OSI Approved :: MIT License", diff --git a/python/ruview-meta/pyproject.toml b/python/ruview-meta/pyproject.toml index 401805c2..9b971e3c 100644 --- a/python/ruview-meta/pyproject.toml +++ b/python/ruview-meta/pyproject.toml @@ -16,7 +16,7 @@ build-backend = "setuptools.build_meta" [project] name = "ruview" -version = "2.0.0a1" +version = "2.0.0" description = "RuView — ambient intelligence from WiFi CSI. Meta-package; installs `wifi-densepose` and re-exports it under the `ruview` namespace. See https://github.com/ruvnet/RuView." readme = "README.md" requires-python = ">=3.10" @@ -28,7 +28,7 @@ keywords = [ "ruview", ] classifiers = [ - "Development Status :: 3 - Alpha", + "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Intended Audience :: Science/Research", "License :: OSI Approved :: MIT License", @@ -43,13 +43,13 @@ classifiers = [ "Typing :: Typed", ] dependencies = [ - # Pin to the matching v2 release so an alpha-pin `pip install ruview` - # always gets a compatible wifi-densepose. - "wifi-densepose==2.0.0a1", + # Pin to the matching v2 release so `pip install ruview` always gets a + # compatible wifi-densepose. + "wifi-densepose==2.0.0", ] [project.optional-dependencies] -client = ["wifi-densepose[client]==2.0.0a1"] +client = ["wifi-densepose[client]==2.0.0"] [project.urls] Homepage = "https://github.com/ruvnet/RuView" diff --git a/python/wifi_densepose/__init__.py b/python/wifi_densepose/__init__.py index f468f2b1..874d44ca 100644 --- a/python/wifi_densepose/__init__.py +++ b/python/wifi_densepose/__init__.py @@ -28,7 +28,7 @@ from __future__ import annotations # Public Python version follows the wheel version, NOT the Rust core # version. The Rust core version is surfaced separately as # `__rust_version__` for diagnostics. -__version__ = "2.0.0a1" +__version__ = "2.0.0" # Re-export the compiled module's surface. The leading underscore on # `_native` is intentional — it marks the binding module as internal.