| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| README.md | 2026-10-15 | 10.1 kB | |
| v1.3.0 - Native Jev decision spans source code.tar.gz | 2026-10-15 | 14.0 MB | |
| v1.3.0 - Native Jev decision spans source code.zip | 2026-10-15 | 15.2 MB | |
| Totals: 3 Items | 29.2 MB | 0 | |
This release adds native support for TypeSafe's Jev: calls to the decision model arrive as DECISION spans, and model, tokens and cost flow through for them the same way they do for LLM spans. Detectors now screen traces on gpt-6-luna by default, every page sends a Content-Security-Policy, and API responses carry HSTS, nosniff and no-store headers. Dashboards and the trace list stop counting offline-evaluation traces as production traffic, and the main list pages keep their page, search and scroll state when you open a row and come back. The docs gain a Signals section, a TypeSafe AI integration page and refreshed screenshots.
New Features
- DECISION spans with model and cost. Ingest recognizes
openinference.span.kind=DECISIONand reads the model and token counts from thedecision.*attributes, so decision-model calls get model, tokens and cost like LLM calls instead of landing as plain spans (#2538). Detector judge calls record as DECISION too, so the same model shows under one kind (#2542), and the Default dashboard's by-model widgets count both kinds through a newinfilter operator (#2552). - Detectors screen on gpt-6-luna by default. Detectors that don't pin a model now use gpt-6-luna instead of claude-haiku-4-5. When no OpenAI key resolves, unpinned detectors fall back to claude-haiku-5-5; digest summaries stay on claude-haiku-4-5 (#2556).
- Content-Security-Policy on every page. Each request gets a fresh nonce, so the browser runs only scripts the app served. Violations are logged to the server, and a
Permissions-Policyturns off camera, microphone and location.CSP_MODE=report-onlyreports without blocking, for trying a change out (#2528). error_typein the SQL gateway. Thespans_public_v1view and the curated schema exposeerror_type, so the SQL vocabulary matches the trace-list filter and the widget builder (#2539).
Bug Fixes
- Dashboards counted evaluation traces. KPI tiles, charts, metric alerts and the public widgets query API included offline-evaluation traces, so a window holding only eval runs showed non-zero cost next to "No traces in this time range". Every widget scan now applies the evaluation exclusion (#2498). The trace list, sessions, users and detector counts read flagged spans as well as flagged traces, so an evaluation trace whose trace row was merged away or never written stays hidden (#2499).
- Edited or resumed alert rules left a page open in Slack. Resetting a rule discarded its open page without posting a close, so a continuing breach was announced again as a new incident. The reset now leaves a marker, and the next worker tick posts the "[OK]" close ahead of any new "[ALERT]" (#2532).
- API responses missing security headers.
/api/v1responses from the REST service did not carryStrict-Transport-SecurityorX-Content-Type-Options, and/apiroutes had noCache-Control. A REST middleware sets HSTS and nosniff on every response (#2535), and every/apiroute sendsprivate, no-cache, no-store, max-age=0, must-revalidate(#2536). - Lists lost their place. Opening a run, dataset, detector or alert and going back dropped you on page 1 of the default window. Page and date range now live in the URL, and the breadcrumb links back to the exact list view (#2510, [#2511], [#2512], [#2513]). Search text is kept in the URL too, so the restored page applies to your results rather than the whole list (#2517). Changing page scrolls the list back to the top (#2563), and every main list uses the same pager, page-size control and "Showing X–Y of N" readout (#2565).
- Migration 015 failed on EFS.
CREATE OR REPLACE VIEWneedsrenameat2(), which EFS does not support, so the ClickHouse migrate hook failed on staging. The view is now redefined withDROP VIEWfollowed byCREATE VIEW, and a test forbids in-place replace for any later view migration (#2558).
Improvements
- Docs. New Signals section (#2584); the Detectors section folded into one corrected page (#2585); the built-in agent is called the TraceRoot Agent throughout and the sidebar is reordered (#2586); refreshed screenshots across Tracing, TraceRoot Agent and Evaluations (#2583); a TypeSafe AI integration page (#2587); a complete Python SDK reference (#2442); AI agent write tools and approvals (#2464); the tracing quickstart exports env vars since the SDKs don't load
.env(#2328). - Examples. Python examples require traceroot>=0.2.0 (#2397), the Pydantic AI example is validated against 2.54.0 (#2483), and the autogen example pins ag2<1.0 (#2566).
- CI. Every external GitHub Action is pinned to a commit SHA (#2533).
Upgrade notes
- Two migrations run on upgrade. ClickHouse 015 redefines
spans_public_v1to adderror_type(#2539, [#2558]). The Postgres migration adds a nullablepending_closecolumn onalerts; it rewrites no rows (#2532). - Detector model default. Unpinned detectors need an OpenAI key (
OPENAI_API_KEYor a workspace key) to run on gpt-6-luna; without one they screen on claude-haiku-5-5. Detectors pinned to an OpenAI model still need the key. Signal grouping continues to run onOPENAI_API_KEY(#2556). - CSP. The policy is enforced by default. If a self-hosted deployment loads scripts or connects to hosts the app doesn't know about, set
CSP_MODE=report-onlyand read the reports at/api/csp-reportbefore switching back (#2528).
What's Changed
- feat(tracing): ingest OpenInference DECISION spans with model and cost by @lqiu03 in https://github.com/traceroot-ai/traceroot/pull/2538
- fix(examples): require traceroot>=0.2.0 in 12 Python examples by @uATrisk in https://github.com/traceroot-ai/traceroot/pull/2397
- feat(api): expose error_type through the SQL gateway spans_public_v1 view by @Prasad8830 in https://github.com/traceroot-ai/traceroot/pull/2539
- fix(detectors): record detector Jev calls as DECISION spans by @lqiu03 in https://github.com/traceroot-ai/traceroot/pull/2542
- fix(clickhouse): replace spans_public_v1 by DROP + CREATE in 015 (EFS) by @lqiu03 in https://github.com/traceroot-ai/traceroot/pull/2558
- fix(alerts): close the open page in Slack when a rule is edited or resumed by @Prasad8830 in https://github.com/traceroot-ai/traceroot/pull/2532
- feat(detectors): screen traces on gpt-6-luna by default by @GabrielDrapor in https://github.com/traceroot-ai/traceroot/pull/2556
- feat(ui): add a nonce-based Content-Security-Policy to every page by @GabrielDrapor in https://github.com/traceroot-ai/traceroot/pull/2528
- fix(rest): send HSTS and nosniff on every API response by @GabrielDrapor in https://github.com/traceroot-ai/traceroot/pull/2535
- fix(ui): tell browsers and proxies not to store API responses by @GabrielDrapor in https://github.com/traceroot-ai/traceroot/pull/2536
- docs(tracing): export env vars in the quickstart; SDKs don't load .env by @Saisharathchandranandnetha in https://github.com/traceroot-ai/traceroot/pull/2328
- docs: complete python sdk reference(#2312) by @Gaurav-meena95 in https://github.com/traceroot-ai/traceroot/pull/2442
- docs: document AI agent write tools, approvals, and Home page (#2301) by @Gaurav-meena95 in https://github.com/traceroot-ai/traceroot/pull/2464
- fix(examples): validate Pydantic AI against 2.54.0 and raise example floor by @uATrisk in https://github.com/traceroot-ai/traceroot/pull/2483
- fix(dashboards): count DECISION spans in the default by-model widgets by @poojagosika in https://github.com/traceroot-ai/traceroot/pull/2552
- fix(examples): pin ag2<1.0 for autogen module compatibility (#2564) by @Gaurav-meena95 in https://github.com/traceroot-ai/traceroot/pull/2566
- ci: pin GitHub Actions to commit SHAs by @harshitsharmaaaa in https://github.com/traceroot-ai/traceroot/pull/2533
- fix(dashboards): exclude evaluation traces from widget queries and metric alerts by @dark-sorceror in https://github.com/traceroot-ai/traceroot/pull/2498
- fix(traces): read flagged spans in the trace-list evaluation exclusion by @dark-sorceror in https://github.com/traceroot-ai/traceroot/pull/2499
- fix(evaluations): keep the runs list page and date range when returning from a run by @dark-sorceror in https://github.com/traceroot-ai/traceroot/pull/2510
- fix(datasets): return to the same list page from a dataset by @dark-sorceror in https://github.com/traceroot-ai/traceroot/pull/2511
- fix(detectors): return to the same list page from a detector by @dark-sorceror in https://github.com/traceroot-ai/traceroot/pull/2512
- fix(alerts): return to the same list page from an alert by @dark-sorceror in https://github.com/traceroot-ai/traceroot/pull/2513
- fix(ui): keep list search text in the URL by @dark-sorceror in https://github.com/traceroot-ai/traceroot/pull/2517
- fix(ui): start each list page at the top by @dark-sorceror in https://github.com/traceroot-ai/traceroot/pull/2563
- fix(ui): standardize pagination across the main lists by @dark-sorceror in https://github.com/traceroot-ai/traceroot/pull/2565
- docs(integrations): add a TypeSafe AI integration page by @lqiu03 in https://github.com/traceroot-ai/traceroot/pull/2587
- docs: refresh screenshots across tracing, AI agent and evals pages by @lqiu03 in https://github.com/traceroot-ai/traceroot/pull/2583
- docs(signals): add a Signals section by @lqiu03 in https://github.com/traceroot-ai/traceroot/pull/2584
- docs(detectors): fold the section into one page by @lqiu03 in https://github.com/traceroot-ai/traceroot/pull/2585
- docs: call the built-in agent the TraceRoot Agent and tidy the sidebar by @lqiu03 in https://github.com/traceroot-ai/traceroot/pull/2586
New Contributors
- @uATrisk made their first contribution in https://github.com/traceroot-ai/traceroot/pull/2397
- @poojagosika made their first contribution in https://github.com/traceroot-ai/traceroot/pull/2552
- @harshitsharmaaaa made their first contribution in https://github.com/traceroot-ai/traceroot/pull/2533
Full Changelog: https://github.com/traceroot-ai/traceroot/compare/v1.2.2...v1.3.0