diff --git a/CHANGELOG.md b/CHANGELOG.md index 7dfc809..ea73d8e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,52 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [1.10.0] - 2025-12-22 + +### Added + +#### Lightweight Request Tracing +- **JSON-based tracing system** for local development debugging + - Captures full request flow through multi-agent architecture + - `Trace` and `Span` dataclasses with automatic timing and nesting + - ContextVar-based propagation for async-safe tracing + - `trace_span` async context manager for clean instrumentation + - Traces written to `logs/traces/{trace_id}.json` + - Enabled via `DEBUG=true` environment variable +- **Trace Viewer UI** (`logs/traces/viewer.html`) + - Standalone HTML viewer with timeline visualization + - Filter by status, search by request text + - Expandable span details with prompts and responses +- **Tracing REST API** (`/traces`) + - `GET /traces` - Serve trace viewer UI + - `GET /traces/list` - List available traces with filtering + - `GET /traces/{trace_id}` - Retrieve specific trace JSON + - Only available when `DEBUG=true` +- **Full pipeline instrumentation** + - Router-level trace start/end with context management + - Steward analysis spans in preprocessing + - Tatlock orchestrate/synthesize spans + - Expert delegation spans (librarian/biographer/housekeeper) + - Tool-level spans extracted from PydanticAI messages + +### Changed + +- **Replaced Redis benchmarks with file-based tracing** - Simpler, more useful for debugging +- **Context management moved to service layer** - Router simplified, context set in response service +- **Server binds to all interfaces** - `wakeup.sh` now uses `0.0.0.0` for network access + +### Removed + +- **Redis benchmark system** (`src/core/benchmarks.py`) + - `ENABLE_BENCHMARKS` config setting + - `REDIS_BENCHMARK_DB` config setting + - `redis_url` property (kept `redis_memory_url`) + - Benchmark recording in Steward service and tool tracking + +### Fixed + +- **Librarian fabrication prevention** - Added explicit instructions to never invent data when tools fail or sources are unavailable + ## [1.9.0] - 2025-12-18 ### Changed @@ -779,7 +825,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - CORS middleware - Exception handlers (OpenAI-compatible error format) -[Unreleased]: https://git.schweitz.net/jpmschweitzer/tatlock/compare/v1.6.0...main +[Unreleased]: https://git.schweitz.net/jpmschweitzer/tatlock/compare/v1.10.0...main +[1.10.0]: https://git.schweitz.net/jpmschweitzer/tatlock/compare/v1.9.0...v1.10.0 +[1.9.0]: https://git.schweitz.net/jpmschweitzer/tatlock/compare/v1.8.6...v1.9.0 +[1.8.6]: https://git.schweitz.net/jpmschweitzer/tatlock/compare/v1.8.5...v1.8.6 +[1.8.5]: https://git.schweitz.net/jpmschweitzer/tatlock/compare/v1.8.4...v1.8.5 +[1.8.4]: https://git.schweitz.net/jpmschweitzer/tatlock/compare/v1.8.3...v1.8.4 +[1.8.3]: https://git.schweitz.net/jpmschweitzer/tatlock/compare/v1.8.2...v1.8.3 +[1.8.2]: https://git.schweitz.net/jpmschweitzer/tatlock/compare/v1.8.1...v1.8.2 +[1.8.1]: https://git.schweitz.net/jpmschweitzer/tatlock/compare/v1.8.0...v1.8.1 +[1.8.0]: https://git.schweitz.net/jpmschweitzer/tatlock/compare/v1.7.0...v1.8.0 +[1.7.0]: https://git.schweitz.net/jpmschweitzer/tatlock/compare/v1.6.0...v1.7.0 [1.6.0]: https://git.schweitz.net/jpmschweitzer/tatlock/compare/v1.5.0...v1.6.0 [1.5.0]: https://git.schweitz.net/jpmschweitzer/tatlock/compare/v1.4.0...v1.5.0 [1.4.0]: https://git.schweitz.net/jpmschweitzer/tatlock/compare/v1.3.3...v1.4.0 diff --git a/pyproject.toml b/pyproject.toml index 0406ef8..0be4f40 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "tatlock" -version = "1.9.0" +version = "1.10.0" description = "OpenAI-compatible API with Ollama backend" requires-python = ">=3.12" dependencies = []