From 1718947c9287d434ccc8b8903388054f3bf95fd6 Mon Sep 17 00:00:00 2001 From: Anatolii Date: Mon, 29 Jun 2026 18:01:12 +0400 Subject: [PATCH] =?UTF-8?q?release:=200.9.0=20=E2=80=94=20coverage=20count?= =?UTF-8?q?ers=20removed,=20nullrun.shutdown()=20added?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Version bump after PR #44: server-derived coverage replaces the in-process counter dicts (every llm_call span now carries metadata.tracked / metadata.streaming_skipped flags), and nullrun.shutdown() is the new public API for graceful WS close on script exit. CHANGELOG entry added above 0.8.3. The breaking-change list (coverage_report() removed, daemon thread gone, helper functions removed, two coverage tests deleted) is fully documented. --- CHANGELOG.md | 43 +++++++++++++++++++++++++++++++++++++++++++ pyproject.toml | 2 +- 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cdcb9b4..c71692c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,49 @@ Versioning: [Semantic Versioning](https://semver.org/spec/v2.0.0.html) --- +## [0.9.0] - 2026-06-29 + +Server-derived coverage replaces the in-process counter dicts. +Counter-bump helpers are gone; every `llm_call` span now carries +`metadata.tracked` and `metadata.streaming_skipped` flags so the +backend's `coverage_pct` query can compute coverage from span +metadata alone. Adds `nullrun.shutdown()` for clean WS close on +script exit. + +### Breaking changes + +- `NullRunRuntime.coverage_report()` removed. +- `NullRunRuntime._coverage_seen` / `_coverage_tracked` / + `_coverage_streaming_skipped` instance attributes removed. +- `NullRunRuntime.start_coverage_reporter()` daemon thread removed + (no longer called from `init()`). +- `_safe_bump_coverage` / `_bump_streaming_skipped` helpers removed + from `nullrun.instrumentation.auto`. +- `llm_call` wire shape: `metadata.tracked: bool` and + `metadata.streaming_skipped: bool` are now authoritative; the + separate `coverage_report` event is dropped. + +### Added + +- `nullrun.shutdown(timeout=2.0)`: sends a clean WebSocket close + frame and drains in-flight events. Long-running scripts that + exit via `sys.exit()` previously let the kernel RST the TCP + socket, which the backend logged as WARN "Connection reset + without closing handshake". Registering `nullrun.shutdown` in an + `atexit` handler eliminates the noisy log. No-op if `init()` + was never called. + +### Tests + +- `tests/test_llm_call_metadata_flags.py` pins the new contract: + every `llm_call` span carries `metadata.tracked` or + `metadata.streaming_skipped`. Coverage is now an out-of-process + concern. +- `tests/test_coverage_report.py` and `tests/test_coverage_seen_httpx.py` + removed — coverage is no longer an SDK-side concept. + +--- + ## [0.8.3] - 2026-06-29 Additive patch on top of 0.8.2. Closes the same silent zero-billing diff --git a/pyproject.toml b/pyproject.toml index 6a09971..c6da484 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "nullrun" -version = "0.8.3" +version = "0.9.0" # Long form used by PyPI page meta-description and search snippets. # Kept under the 200-char preview threshold so the full line is visible # without an "expand" click. Keywords are matched against likely search