Releases: kidoz/trace-weft
Release list
TraceWeft v0.3.5
TraceWeft 0.3.5 is a documentation release. There are no code or behavior
changes — it exists to publish the corrected README to crates.io so the registry
pages match reality.
Documentation
- The README now documents crates.io installation (
trace-weft = "0.3") in place of the old git-dependency instructions, and installs the (unpublished) CLI from the repository withcargo install --git. Publishing this release makes the corrected README render on the crates.io pages DEVELOPMENT.mdpoints at the OpenAPI contract's relocated in-crate path (crates/trace-weft-server/openapi/trace-weft.openapi.json)
Known limitations
- The CLI ships
devonly;import/export/replayare planned - Blob reads are authenticated but not yet project-scoped
Full Changelog: v0.3.4...v0.3.5
TraceWeft v0.3.4
TraceWeft 0.3.4 is a security-maintenance release. There are no API or
behavior changes — it pins a patched transitive dependency so the supply-chain
gate stays green.
Security
- Updated
anyhowto 1.0.103 to clear RUSTSEC-2026-0190, an unsoundness inError::downcast_mut()(a use-after-context borrow violation, undefined behavior) present in 1.0.102. Thecargo-denysupply-chain gate denies the advisory, so the workspace now builds on the patched release
Known limitations
- The CLI ships
devonly;import/export/replayare planned - Blob reads are authenticated but not yet project-scoped
Full Changelog: v0.3.3...v0.3.4
TraceWeft v0.3.3
TraceWeft 0.3.3 is a packaging release. It does not change any runtime
behavior — it fixes how the crates are published to crates.io so the registry
pages are complete and every published crate builds from its own tarball.
Fixed
- Published crates now render a README on crates.io. Every published crate declares
readme = "../../README.md", so the project overview shows on each crate's registry page instead of "no README" trace-weft-servernow packages cleanly. The embedded OpenAPI contract moved from the repo-rootschemas/api/into the crate atopenapi/trace-weft.openapi.json, soinclude_str!resolves inside the published tarball rather than reaching outside the package. The web API-type generator reads the contract from its new location
Known limitations
- The CLI ships
devonly;import/export/replayare planned - Blob reads are authenticated but not yet project-scoped
Full Changelog: v0.3.2...v0.3.3
TraceWeft v0.3.2
TraceWeft 0.3.2 is a maintenance release that tightens the build and
supply-chain tooling on top of 0.3.0/0.3.1. There are no API or behavior
changes — the libraries, server, CLI, and apps are functionally identical to
0.3.1.
Changed
- Trimmed unused dependencies flagged by
cargo-macheteacross the desktop app and the CLI, core, ingest, MCP, OpenInference, OTel, and recorder crates - Hardened the supply-chain gate:
cargo-denynow ignores advisories with no available fix and recognizes the workspace's private crates
Fixed
- The Rust CI job now installs the Tauri system dependencies so the desktop crate builds on a clean runner
Known limitations
- The CLI ships
devonly;import/export/replayare planned - Blob reads are authenticated but not yet project-scoped
Full Changelog: v0.3.1...v0.3.2
TraceWeft v0.3.1
TraceWeft 0.3.1 is a small follow-up to 0.3.0 that closes two of its known
limitations: OTLP ingestion is now actually served by the dev server, and the
web workbench can authenticate against a project-scoped server.
Features
- OTLP/HTTP JSON ingestion is now served at
POST /v1/traces— payloads are decoded bytrace-weft-ingest(original trace/span/parent IDs preserved,400for malformed bodies) and, like/api/v1/batch, the authenticated project is stamped onto every span before it is persisted. Resolves the 0.3.0 "OTLP is library-only" limitation - The web UI accepts an API key — a header field stores an
Authorization: Bearertoken (leave it empty to keep the local dev bypass) that is sent on every request, so the workbench can talk to an authenticated, project-scoped server. Resolves the 0.3.0 "web UI has no API-key entry" limitation
Known limitations
- The CLI ships
devonly;import/export/replayare planned - Blob reads are authenticated but not yet project-scoped
Full Changelog: v0.3.0...v0.3.1
TraceWeft v0.3.0
TraceWeft 0.3.0 brings a full Graphite-styled web workbench on a typed API
contract, replay/diff tooling, and a Postgres backend that now actually works.
TraceWeft remains local-first by default.
Features
- Reworked web workbench — the Graphite design system, a structured span-metadata inspector, a waterfall time axis, a trace graph, transcript and content/blob views, and trace-list search with root-span/model/error summaries, all driven by a typed API client backed by React Query
- First-class API contract — an OpenAPI document (
schemas/api/trace-weft.openapi.json) and generated TypeScript types consumed by the web client - New query/server endpoints — replay-plan, trace-diff, replay-config, and the OpenAPI document, alongside full span detail, trace events, and blob content
- Builder input/output capture by label under the active capture policy
- Richer redaction — error-message redaction with real error type names, redacted previews for full-content policies, a fallback redactor, and secret-assignment, phone, and credit-card patterns
Security
- Desktop hardening — the Tauri webview now ships a content security policy and an explicit window capability instead of an open CSP
Fixes
- Postgres backend now functions — the schema DDL runs unprepared and is created via the server's own pool, and
retry_countis stored/decoded asBIGINT; the backend previously failed on connect and was effectively unusable - HITL approvals persist their resolved state — a span recorded twice with the same
span_id(PendingApproval, then Ok) now upserts instead of failing the primary key or being discarded, so resolved breakpoints no longer stay stuck pending - Trace-graph layout is rebuilt per trace, fixing cross-trace position drift
- The evaluations and trace-diff screens surface fetch errors instead of showing misleading empty states
- README CLI and OTLP descriptions corrected to match what the server actually serves
Other
- CI workflow — fmt, clippy
-D warnings, nextest, doc tests, cargo-deny, cargo-machete, plus web lint/test/build and Playwright - Workspace lints, Vitest + Playwright harnesses, a docker compose Postgres, and a
just test-pgrecipe - A
DEVELOPMENT.mddevelopment guide - MSRV raised to 1.96, dependencies updated, and all manifests aligned to 0.3.0
Known limitations
- OTLP
/v1/tracesis library-only (trace-weft-ingest); the dev server ingests viaPOST /api/v1/batch - The CLI ships
devonly;import/export/replayare planned - The web UI targets the local dev bypass — an authenticated server has no API-key entry yet
- Blob reads are authenticated but not yet project-scoped
Full Changelog: v0.2.0...v0.3.0
TraceWeft v0.2.0
Features
- OpenTelemetry export preserves original trace and span IDs - a custom
IdGeneratormaps TraceWeft UUIDs onto OTel 128/64-bit IDs and rebuilds parent context, so exported spans keep their place in the trace tree - Postgres query endpoints - list traces, get trace by id, and list evals now serve Postgres as well as SQLite through shared dialect-agnostic mappers
- API-key authentication with per-project multi-tenancy - SHA-256 hashed keys, constant-time comparison, project-scoped queries, and server-side project stamping so tenants only see their own traces
- Robust OTLP ingest on
opentelemetry-prototypes - original trace/span/parent IDs are preserved instead of regenerated - Desktop app lifecycle - the Tauri shell embeds the server, exposes
server_info/server_start/server_stopIPC commands, and drains the server gracefully on exit
Security
- The local API is no longer readable from arbitrary browser origins - permissive CORS is replaced by an origin allowlist (loopback + Tauri webview), blocking cross-origin reads and preflighted CSRF
- HITL approval endpoints now require authentication
start_serverdefaults to secure auth (reject unless keys or dev mode are configured);trace-weft devand the desktop opt into local-first- Vite updated to 8.0.16 and the Babel advisory patched -
npm auditis clean at high severity
Fixes
- MCP
traceparentspan-id reduction aligned with the OTel exporter (low 8 bytes), so a span maps to the same 64-bit id on every wire - OTLP ingest returns
400for malformed payloads instead of silently minting new UUIDs - Query handlers surface corrupt JSON as
500instead of masking it as{} - MSRV metadata corrected - every crate inherits
rust-version = 1.94.1
Other
- 100+ unit and integration tests across propagation, MCP, SQLite/Postgres parity, tenant isolation, ingest, and graceful shutdown
- All publishable crates carry crates.io metadata (description, license, repository) with versioned path dependencies;
cargo package --workspacepasses - Web API base centralized via
VITE_API_BASEso the dev proxy and the desktop bundle both work - README screenshots and badges; all manifests aligned to 0.2.0
Full Changelog: https://github.com/kidoz/trace-weft/commits/v0.2.0