Toutes les nouveautés

langwatch: v3.21.0

Équipe

3.21.0 (2026-10-21)

Features

  • analytics: campaign conversion events for sign in, sign up and paid (#8445) (c502c44)

  • auth: setting to restrict self sign-up on self-hosted installs (#8425) (dd31854)

  • chart: offer Valkey as a Redis option via the redis-valkey overlay (#8881) (7472160)

  • ci: every code PR states it follows the architecture guide and flags what needs a human look (#8668) (d83a813)

  • ci: nightly health survives a red typecheck, tracks bundle size, keeps a dashboard issue (#8656) (4741037)

  • ci: publish langwatch-app frontend assets to the CDN bucket with the ECR image (#8678) (fdb0b7c)

  • clickhouse: id indexes, so a lookup by id reads only the partitions its rows live in (#8561) (dcb902b)

  • clickhouse: separate insert and read statement concurrency budgets (#8488) (d96113b)

  • dashboard: move dashboards v2 onto its own tables (#8707) (7f1f527)

  • dashboards,insight: dashboards and insights v1 (#8545) (7b5e13d)

  • governance: aggregate members read over their full history, except by department (#8552) (7125be3)

  • governance: aggregate project offers Sessions, read through the proof (#8710) (1b57fac)

  • governance: an aggregate project reads its member projects through shared grants (#8487) (e683dd9)

  • governance: event-only aggregate reconcile; coding-agent-cost skill narrows by TenantId (#8652) (ad90571)

  • group-queue: pipeline and job labels on blocked and oldest-age gauges, a non-retryable reason, tenant park logs (#8813) (8735d0a)

  • haven: run Valkey as the local Redis (#8882) (e79eb75)

  • instant-eval: release self-hosted installs by their licence alone (#8684) (2f68f76)

  • instant-evals: opt-in switch for self-serve organizations, clearer refusal popovers (#8348) (0a2baa6)

  • instant-evals: release self-hosted installs by license, and say why when not (#8416) (fa9139d)

  • langy: delete needs a confirmation click (#7563) (a6ca678)

  • members: developer seat, a member who owns a personal project and nothing shared (#8373) (30ff7ea)

  • members: join requests made from the terminal land as a Developer and the welcome screen honours pending invitations (#8462) (2687513)

  • navigation: rename the Admin console to Operations and point Settings to it (#8701) (1bb4f7c)

  • ops: licence list filters say what they hide (#8788) (044ff58)

  • ops: self-hosted installs summary, sort and filters; licence list filters (#8776) (f2d13c7)

  • ops: upgrade alert emails on the shared mail template, with a link per failed step (#8730) (31e5fa8)

  • otel: decode OTLP bodies by magic bytes (zstd, gzip under wrong Content-Encoding) (#8501) (9ad8f1e)

  • scenarios: setup and teardown hooks for connected agents (#8765) (b0949cd)

  • sdks: send traces as gzipped OTLP/protobuf by default in every SDK (#8592) (206c830)

  • server: npx downloads a prebuilt app; evaluations retry while the evaluator is down (#8845) (6e44487)

  • sign-up Slack notices as compact cards with links into ops, plus a SCIM push summary (#8700) (498b979)

  • sims: mcpsim, a simulator of MCP clients driving the hosted MCP endpoint (#8720) (858993d)

  • toolchain: run tsrs behind tsc (#8922) (551bdd8)

  • tooling: code-search skill (rg, sgrep, gopls) and a .ignore for generated files (#8687) (0ed5e71)

  • trace,eventing: origin checks can queue only ids (reader release) (#8871) (dc862c8)

  • upgrade: diagnostics for a failed upgrade step, sent over Connect (#8853) (ba39198)

Bug Fixes

  • agent testing drawer close and width, dataset upload opens, traces search stays in its project (#8755) (945bf9c)

  • agent: Edit config shows a stored agent's inputs, outputs and mappings again (#8697) (36b234d)

  • agent: Edit config shows a stored agent's inputs, outputs and mappings again, and a save keeps what the editor does not show (36b234d)

  • agent: the code and HTTP agent editors match the previous release again (#8703) (d528e8a)

  • aigateway: encrypted reasoning returns to OpenAI under the item id it was issued with (#8743) (c74da99)

  • aigateway: let private provider endpoints dispatch and trust a private CA (#8787) (566634d)

  • aigateway: merge parallel tool results on the Bedrock Converse lane and keep Bedrock refusal statuses (#8422) (0182e6b)

  • alerts: read a grouped graph's series ungrouped instead of adding groups together (#8436) (9f4024c)

  • analytics: keep dashboard panels under the ClickHouse memory limit and show a compact panel error (#8525) (d20264a)

  • analytics: keep lwql engine tables on a failed converge and reconverge them on a 5-minute check (#8727) (4a1a123)

  • analytics: read metadata key and value filters from every storage format (#8432) (10878ad)

  • annotations: serialize annotation commands per trace and 404 on unknown delete (#8400) (7606bf6)

  • api: admit the shared storage bucket in the page's connect-src (#8746) (67ef03f)

  • api: put the storage bucket in the page policy's connect-src (#8748) (1f4cd9a)

  • auth: answer a repeated refresh within 60s with the pair it minted (#8719) (cc70d34)

  • auth: leave brokered connections to the legacy guard instead of bouncing (#8471) (418a183)

  • auth: sign-in from pages whose address better-auth refuses (#8503) (#8504) (3d8d9ce)

  • auth: sign-in without Auth0 on cloud, and restrict platform-operator grants (#8715) (fbd3c4a)

  • automation: add-to-dataset automations map stored spans whose chat parts the strict span shape rejects (#8693) (7fe05da)

  • automation: add-to-dataset drops columns the dataset no longer has; a dataset refusal is not retried (#8814) (a18aa42)

  • automation: drain every overdue settlement match on one wake, and refuse redelivered process events before reading state (#8835) (a8cc843)

  • automation: read Trigger rows with JSON-string filters/actionParams (#8689) (5a454c9)

  • automation: settlement refusals the customer must fix warn once instead of paging (#8889) (5321ee1)

  • automations: evaluation-based automations never fired because the evaluation read returned no rows (#8465) (ab34223)

  • automation: wrap a long key inside its condition chip (#8909) (42ca2f1)

  • billing: currency-aware custom retention price on the Growth plan (#8502) (303a35e)

  • billing: over-seat upgrade prompt, cloud Free creation caps, Free card copy (#8505) (4ea3334)

  • chart: cap Redis memory at half its limit, production Redis at 3Gi (#8863) (dd2a86e)

  • ci: a pull request's changed paths are its own commits (#8899) (952568d)

  • ci: bring main's lint and format checks back to green (#8708) (6162fad)

  • ci: fewer wasted runner minutes on release PRs, branch smoke tests and chart kind tests (#8680) (0db4f53)

  • ci: hash the Dockerfile into scenario-process's test cache key (#8698) (3c711ab)

  • ci: leave the release-please Chart.yaml files to release-please (#8936) (15f97f2)

  • ci: make CI green again (#8604) (66eb01a)

  • ci: split package suites over the shards by measured time (#8661) (fb9e0dc)

  • clickhouse-serverless: bound memory on pods of 4 GiB or less (#8856) (495155c)

  • dashboards and insights v1 follow-ups (#8648) (127182a)

  • dataset: copied entries keep their source order on every collation (#8869) (101f596)

  • dataset: no error notice over a loaded datasets list; browser reads get a 45 s time limit (#8711) (6ff2741)

  • dataset: serve the previous release's single-file datasets in place (#8663) (560cad1)

  • deps: bump OpenTelemetry Go modules to clear govulncheck (#8417) (e477614)

  • design-system: one emoji picker that dialogs never clip; agent card menu above its neighbours (#8732) (c8d2a9c)

  • dev: make service loads an env file named without a slash under dash (#8522) (42a381a)

  • entitlement: stop orphan projects killing the usage-warning sweep (#8886) (778551e)

  • evaluator: run code evaluators on the project's engine (#8716) (c835601)

  • eventing,authz: a fold for a deleted project completes instead of retrying (#8733) (fb07bb5)

  • eventing: drain queue consumers before closing the producer (#8888) (f05e197)

  • eventing: re-send redelivered events to keyed folds that opt in (#8887) (c61b059)

  • eventing: record stored events and store duration for every pipeline (#8819) (45aaca9)

  • eventing: ship the process-manager sweep age indexes as a migration (#8712) (018593b)

  • eventing: stop the post-#7536 retry storms, keep parked work, and fix the incident's ops readouts (#8801) (827cc17)

  • eventing: workers claim disjoint batches of due process wakes (#8839) (5bc0448)

  • experiment: price cached prompt tokens at the cache rates (#8831) (052474d)

  • experiments: replicated experiment saves to itself, not the original (#8514) (26e6093)

  • featureparity: move provider-list.feature to the Go legacyPartial list, matching the Node tool (#8931) (0e5f50d)

  • follow-ups that missed the #7536 merge (eventing leases, group-queue dead workers, upgrade pacing, upgradelab) (#8580) (7aca052)

  • go: bump the toolchain to go1.27.3 for GO-2026-6809 (#8905) (5d58b64)

  • group-queue: queue scripts declare Redis 7 flags so none half-applies at the memory cap (#8873) (754d515)

  • group-queue: stop the listed consumer re-reading parked and blocked groups every 50ms (#8750) (919b8eb)

  • hosted-mcp: project viewers can connect an MCP client (#8731) (8521239)

  • hosted-mcp: retire the SSE transport and keep sessions across deploys (#8718) (b4cf76b)

  • identity: hold unproven and pinned users on the person, not the proof (#8907) (936a90e)

  • image-proxy: cap the size of relayed images (#8655) (94dbf2a)

  • image: build the scenario child into the image, and fail loudly without it (#8688) (c8454c5)

  • image: install the scenario child's build dependencies before building it (#8702) (5520bdf)

  • image: the new image keeps the previous release's contract, and ships at a third of the size (#8662) (63d2723)

  • ingest: accept OTLP/JSON spans whose links/events omit default-valued fields (#8478) (2b7c11b)

  • instant-eval: release regular customers by their own opt-in only on cloud (#8657) (bcd9d7c)

  • langy,onboarding: production findings on Langy, guided onboarding, gateway drawers and api restarts (#8793) (15ecff3)

  • langy: centre the mark in the closed launcher before the panel has loaded (#8717) (f59a74a)

  • langy: fail a spent provider balance on the first call (#8892) (2c516ce)

  • langy: route Bedrock OpenAI models through Converse, name provider refusals, apply provider changes to cached keys (#8388) (d75ae80)

  • langy: save a picked default model, name the rejected key, and show the queued question in provider setup (#8486) (681628e)

  • langy: say how old the newest data is when a time-bounded query returns nothing (#8741) (bc05fd1)

  • langy: stop guided onboarding from promising work after it stalls (#8714) (addfd4f)

  • main's CI back to green, with the last strict-layout follow-ups (#8598) (6791316)

  • model-provider: hold an evaluator's max tokens to the model's limit on Vertex AI (#8824) (e34afda)

  • model-provider: keep topic clustering off the Codex coding default (#8885) (0398c63)

  • model-provider: send the stored service account on Vertex AI calls again (#8784) (1e05199)

  • model-providers: save a first provider with its key and serve openai base urls on the responses lane (#8473) (ddb939c)

  • model-provider: stretch the providers table to the page width (#8916) (0fcf003)

  • monitors: refuse parameters that the linked evaluator's settings override (#8435) (b9bc5d1)

  • nlpgo: harden code-block isolation and internal endpoint auth (#8424) (ff9f1ed)

  • nurturing: key owner facts uniquely and batch nurturing's busy lanes (#8890) (9c4908a)

  • nx: a module change no longer marks most of the workspace affected (#8660) (95e0ad7)

  • observability: log a bounded cause summary on request errors so Loki stops dropping them (#8485) (72e699b)

  • observability: record every platform metric through the OTel facade so the OTLP push carries it (#8759) (9b089a7)

  • ops: redrive and discard more than 2,000 dead-letter groups at once (#8751) (41910b8)

  • ops: skip projects whose team is gone instead of crashing the migration pass (#8696) (a8a25f8)

  • organization: align governance picker with the create project form (#8913) (4dae0b8)

  • otel: log unparseable OTLP bodies as client warnings, not PostHog exceptions (#8489) (f73b082)

  • production error findings since the strict-layout deploy (#8817) (42f3364)

  • project: switching project on a consent page keeps its query (#8728) (5533f75)

  • prompt: normalise legacy prompting_technique values when reading stored versions (#8694) (ee389ac)

  • quiet API-key refusal floods and accept stored text time scales (#8816) (25c45be)

  • scenario: bound the scenario-run state read by start time (#8713) (6c43f2a)

  • scenarios: refuse fields PUT /api/scenarios/{id} does not have instead of dropping them (#8438) (891c048)

  • scenarios: run a project's turns on its own engine, and read that engine's status (#8429) (66c9815)

  • scenarios: send a relayed turn to the address the app hands out, not the public one (#8431) (4c193ed)

  • security: pin Node to 24.22.1 for the October 2026 security releases (#8933) (84b8925)

  • stored-object: map every purpose the previous release wrote to a delivery audience (#8695) (aca30a2)

  • suites: refuse fields POST /api/suites does not have instead of dropping them (#8437) (3afaf50)

  • the copy button clears its timer on unmount, and a docs tag stops breaking the docs build (#8669) (7d2912b)

  • the run dialog no longer crashes when an evaluator is added under On this run (#8673) (c54cf06)

  • trace input without a root span, and event detail dataset mappings (#8704) (e9d0f65)

  • trace: give both halves of the ADR-022 spool their object storage (#8690) (ad54b3c)

  • trace: read Claude SDK and API OpenTelemetry traces correctly (usage once, large attributes, tool output, cache pricing) (#8756) (d86cea4)

  • trace: render serialised LangChain messages as chat messages (#8747) (b5f64d7)

  • traces: cap trace list page size at 1000 (#8484) (5167dad)

  • traces: hidden input stops blanking other attributes (#8865) (1bb7e87)

  • traces: show costs below a tenth of a cent instead of $0.0000 (#8434) (2d2bf4d)

  • traces: tie an evaluator's verdict, score and label to that evaluator in trace filters (#8430) (bfc3931)

  • trace: traces.getById answers stored traces the strict trace shape refuses (#8692) (50a119d)

  • triggers: refuse a different customGraphId on PATCH instead of ignoring it (#8433) (0ad8ad2)

  • ui: restore the pre-refactor look across the shell, trace explorer, agent testing and settings (#8588) (ed79ac9)

  • upgrade rehearsal findings (sign-in load, email lookups, queue cost, config compatibility) (#8637) (0519a1c)

  • upgrade: finish the five failing background steps; plain-language alert for self-hosted (#8836) (828768c)

  • upgrade: the upgrade reaches done, and rehearsal fixes (#8676) (742886a)

  • workflow run answers keep the engine's trace, cost, timing and error; profiles use the reported service name (#8677) (6c601fb)

Miscellaneous

Documentation

  • add Claude Platform OpenTelemetry integration page (#8753) (58d66ca)

  • add OpenRouter Broadcast integration page (#8764) (5bcbb5e)

  • fix crewai and smolagents integration samples (#8794) (a100772)

  • members: document terminal sign-ups landing on the Developer seat (#8482) (c81ac27)

  • readme: cover headline says who LangWatch is for (#8452) (a848689)

  • self-hosting: correct security, env var and Helm values docs against the code (#8426) (92d3399)

  • self-hosting: throughput by size profile, Redis or Valkey (#8828) (bebeddb)

Code Refactoring

  • architecture: introduce domain driven separation across the entire monorepo (#7536) (47d3882)

  • eventing: layer framework packages like a process half, with lint and safety nets (ADR-181, wave 1) (#8822) (31a90f3)

  • sims: keep mcpsim's readSSE under the complexity limit (#8723) (5f46713)

  • stored-object: mint ids with the storedobject KSUID resource (#8745) (fc98456)

Source GitHub