Changelog
A governance and organizational-hierarchy release ontransports/v1.5.10. The headline work is a full customer -> team -> business unit model with end-to-end usage and budget tracking, a rebuilt DAC + RBAC layer backed by a virtual-key mapping table, and a more robust access profile lifecycle.✨ Features
- Customer, team, and business unit hierarchy (enterprise) - Teams can be attached to customers, customers surface their teams and business units in the detail sheet, and user detail sheets show an aggregated customers section. Usage and budgets now propagate across the team -> customer -> business unit chain, including business unit usage tracking when a team virtual key is used.
- Multi-team and multi-BU logging and tracking (enterprise) - Logging and usage tracking support multiple teams and business units per request, with team and business unit budget usage updated as user usage accrues.
- Business units as a dedicated RBAC resource (enterprise) - Business units migrated to a first-class RBAC resource with their own
/api/governanceendpoints. - DAC + RBAC via virtual-key mapping table (enterprise) - Reworked data-access and role-based access control to use a persistent virtual-key to user mapping table with bulk load, CRUD helpers, and startup hydration, removing the dependency on
created_by_user_idfor virtual keys and tightening MCP DAC scope handling. - Access profile detail and lifecycle (enterprise) - New access profile detail sheet showing budget and rate-limit usage. AP assignment now mints a fresh virtual key (with optional reuse of existing standalone VKs) and rebases AP budgets using a delta formula instead of blindly preserving prior values.
- Filtered logs for governance entities (enterprise) - Added the ability to view filtered logs scoped to governance entities, plus a rate-limits column in the teams view.
- Harness support for GKE and AWS (enterprise) - Added GKE and AWS harness support, model-config-owned budgets, and bounded resource handling for deployment harnesses.
- Governance-aware fallbacks (enterprise) - Fallback provider selection can now be restricted based on governance rules.
- Cluster budget carry-over (enterprise) - Usage carry extended to include rate-limit token and request deltas, with fold-and-evict budget carry pairs broadcast across cluster nodes.
- Provider-level governance (OSS) - Budgets and limits are now scope-aware and can be applied at the virtual-key top level and per provider, wired from the model configs table, with UI filters for scope and providers.
- Customer budgets (OSS) - Customers support multiple budgets and
calendar_alignedbudget windows. - OpenAI conversation compaction (OSS) - Added OpenAI conversation compaction support across core, framework, logging, and the API surface.
- Request header capture (enterprise + OSS) - Added
request_headerscapture with wildcard pattern filtering (e.g.x-custom-*) across logging and the OTel and Maxim observability plugins. - OTel content controls and multiple collectors (OSS) - New
disable_content_loggingoption drops message and tool content from exported spans, plus support for multiple OTel collectors. - xAI x_search (OSS) - Added xAI
x_searchtool support. - Fetch URL validation (OSS) - Added fetch URL validation with private-network configuration and link-local blocking.
- File scheme pricing URLs (OSS) - Pricing source URLs now accept the
file://scheme for air-gapped and self-hosted deployments. - Paginated virtual keys (enterprise + OSS) - Virtual key fetching and user database queries are paginated to handle deployments with very large numbers of keys.
- Log navigation and UI (OSS) - Added a “View logs” menu item to customer, team, and virtual key tables, clickable links in log detail views, a customer detail sheet, a reusable budget display component, and a faster first paint via an inline loading shell.
🐞 Fixed
- 100k virtual key bootup (enterprise) - Resolved bootup issues affecting deployments with very large virtual key counts, including a stream accumulator refcount leak for providers that bypass key tracking.
- Access profile broadcasts and propagation (enterprise) - Fixed user access profile broadcasts, corrected the access profile assignment sequence, and reloaded virtual keys while removing empty access profiles to prevent silent business unit issues.
- Customer to business unit log context (enterprise) - Fixed customer to business unit edge mapping for log context, and fixed deletes of teams and business units not propagating.
- Cluster usage carry-over (enterprise) - Disabled usage carry-over where a clustering bug caused incorrect accounting, preserving in-memory state, and added a rollback path with tests to the governance migration.
- Vulnerability remediation (enterprise) - Bumped dependency versions flagged by vulnerability scanning.
- Passthrough governance (OSS) - Fixed passthrough budgets, gated passthrough models per virtual key, corrected model extraction for Azure passthrough, and restricted fallbacks and provider selection to the virtual key boundary.
- VK usage accounting (OSS) - Fixed double usage counting when creating a virtual key, replicated the VK hierarchy flow for ghost node reconciliation, and added a monotonic log cursor so node usage reconciliation does not skip late async log writes.
- Model config lifecycle (OSS) - Cascade deletes for model configs, removal of stale in-memory model configs, and preserved non-pricing model pool entries across pricing reloads.
- SSRF hardening (OSS) - Hardened fetch URL IP checks against SSRF.
- Stream handling (OSS) - Drain non-SSE stream readers, retry stale connections, strip empty thinking blocks, and remove usage from the
responses.createdevent in the OpenAI stream. - Provider compatibility (OSS) - Map upstream connection failures to 502 instead of 400, accept numeric schema integer constraints for Gemini, strip the Azure diagnostic property for Claude models, preserve chat
max_tokensduring param filtering, and broaden Mantle model matching to allgptvariants. - FTS and sync workers (OSS) - Reduced the FTS index cap to stay within the tsvector limit and shortened the sync worker ticker period to prevent threshold drift.
📀 Base OSS version
transports/v1.5.10
