@@ -7,69 +7,61 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77
88## [ Unreleased]
99
10- ## [ 0.1.0] - 2026-02-05
11-
1210### Added
1311
14- - Initial open-source release under Apache-2.0 license
15- - ** Core SDK**
16- - ` enable() ` / ` disable() ` bootstrap functions for SDK initialization
17- - ` @botanu_workflow ` decorator with UUIDv7 run_id generation
18- - ` @botanu_outcome ` decorator for sub-function outcome tracking
19- - ` emit_outcome() ` helper for recording business outcomes
20- - ` set_business_context() ` for cost attribution dimensions
21- - ` RunContextEnricher ` span processor for automatic run_id propagation
22-
23- - ** LLM Tracking** (aligned with OTel GenAI semantic conventions)
24- - ` track_llm_call() ` context manager for LLM/model operations
25- - ` track_tool_call() ` context manager for tool/function calls
26- - Token usage tracking (input, output, cached)
27- - Provider normalization for 15+ LLM providers
28- - Support for all GenAI operations (chat, embeddings, etc.)
29-
30- - ** Data Tracking**
31- - ` track_db_operation() ` for database operations
32- - ` track_storage_operation() ` for object storage (S3, GCS, Azure Blob)
33- - ` track_messaging_operation() ` for message queues (SQS, Kafka, Pub/Sub)
34- - System normalization for 30+ database/storage systems
35-
36- - ** Context Propagation**
37- - W3C Baggage propagation for cross-service run_id correlation
38- - Lean mode (default) and full mode propagation options
39- - ` RunContext ` model with retry tracking and deadline support
40-
41- - ** Resource Detection**
42- - Kubernetes (pod, namespace, container)
43- - AWS (EC2, ECS, Lambda, Fargate)
44- - GCP (GCE, Cloud Run, Cloud Functions)
45- - Azure (VM, Container Apps, Functions)
46-
47- - ** Auto-Instrumentation Support**
48- - HTTP clients: requests, httpx, urllib3, aiohttp
49- - Web frameworks: FastAPI, Flask, Django, Starlette
50- - Databases: SQLAlchemy, psycopg2, asyncpg, pymongo, Redis
51- - Messaging: Celery, Kafka
52- - GenAI: OpenAI, Anthropic, Vertex AI, Google GenAI, LangChain
53-
54- - ** Optional Extras**
55- - ` [sdk] ` - OTel SDK + OTLP exporter
56- - ` [instruments] ` - Common library instrumentation
57- - ` [genai] ` - GenAI provider instrumentation
58- - ` [carriers] ` - Cross-service propagation helpers
59- - ` [all] ` - Everything included
60- - ` [dev] ` - Development and testing tools
61-
62- - ** Documentation**
63- - Comprehensive docs in ` /docs ` following LF format
64- - Getting started guides
65- - API reference
66- - Best practices and anti-patterns
67-
68- ### Dependencies
69-
70- - Core: ` opentelemetry-api >= 1.20.0 `
71- - SDK extra: ` opentelemetry-sdk ` , ` opentelemetry-exporter-otlp-proto-http `
72- - Python: ` >= 3.9 `
73-
74- [ Unreleased ] : https://github.com/botanu-ai/botanu-sdk-python/compare/v0.1.0...HEAD
75- [ 0.1.0 ] : https://github.com/botanu-ai/botanu-sdk-python/releases/tag/v0.1.0
12+ - ** Security**
13+ - OTLP bearer token is attached only when the endpoint host is botanu-owned
14+ (` *.botanu.ai ` ) or a local dev host, preventing tenant API-key leakage
15+ via a customer-supplied ` OTEL_EXPORTER_OTLP_ENDPOINT ` .
16+ - Authorization / ` x-api-key ` / ` botanu-api-key ` headers and ` user:pass@ `
17+ URL credentials are redacted in logs.
18+ - ** Brownfield OTel coexistence**
19+ - ` SampledSpanProcessor ` preserves the host app's existing TracerProvider
20+ sampling ratio when botanu is bootstrapped into a project that already
21+ has OTel wired up.
22+ - ` register.py ` entry point for explicit opt-in without decorator-side
23+ provider mutation.
24+ - Bootstrap detects a pre-configured provider and hands off instead of
25+ overriding it.
26+ - ** Content capture for eval**
27+ - Workflow-level input/output capture gated by ` content_capture_rate `
28+ config and a shared ` content_sampler ` . Writes
29+ ` botanu.eval.input_content ` / ` botanu.eval.output_content ` .
30+ - ` set_input_content() ` / ` set_output_content() ` on ` LLMTracker ` with the
31+ same gate, plus matching helpers on data-tracking helpers.
32+ - ** Multi-step workflows**
33+ - ` @botanu_workflow(..., step=...) ` parameter (stored in ` RunContext ` ,
34+ not yet emitted to span attributes — kept backward compatible until the
35+ collector servicegraph work lands).
36+ - ** Resources**
37+ - ` ResourceEnricher ` span processor for deployment attributes.
38+ - ** Release tooling**
39+ - ` scripts/pre_publish_check.py ` red/green gate: builds sdist + wheel,
40+ runs ` twine check ` , installs into a fresh venv, validates the public
41+ API surface, runs an end-to-end decorator + ` emit_outcome ` smoke test.
42+
43+ ### Fixed
44+
45+ - ` SampledSpanProcessor.on_start ` now gates on the same ratio decision as
46+ ` on_end ` ; forwarding ` on_start ` unconditionally while gating ` on_end `
47+ leaked span bookkeeping inside wrapped exporters (QUAL-C1).
48+
49+ ### Initial release contents
50+
51+ Carried forward from the pre-tag scaffolding (never published):
52+
53+ - ` enable() ` / ` disable() ` bootstrap, ` @botanu_workflow ` ,
54+ ` @botanu_outcome ` , ` emit_outcome() ` , ` set_business_context() ` ,
55+ ` RunContextEnricher ` — with UUIDv7 run_ids.
56+ - LLM tracking aligned with OTel GenAI semconv: ` track_llm_call() ` ,
57+ ` track_tool_call() ` , token accounting, 15+ provider normalization.
58+ - Data tracking: ` track_db_operation() ` , ` track_storage_operation() ` ,
59+ ` track_messaging_operation() ` ; 30+ system normalizations.
60+ - W3C Baggage propagation with ` RunContext ` (retry tracking + deadline).
61+ - Cloud resource detectors via optional extras (` aws ` , ` gcp ` , ` azure ` ,
62+ ` container ` , ` cloud ` ).
63+ - Auto-instrumentation bundled in the base install — HTTP clients, web
64+ frameworks, databases, messaging, and GenAI providers; instrumentation
65+ packages no-op when their target library is not installed.
66+
67+ [ Unreleased ] : https://github.com/botanu-ai/botanu-sdk-python/commits/main
0 commit comments