Security: Plugin Installation Policy Could Be Bypassed by RetryingUnder a restricted Allowed Plugins policy, upgrading an already-installed plugin was rejected on the first attempt and succeeded on the second. The scope check ran only after the package had been fetched, so the first attempt populated a cache that the second attempt then used to skip validation entirely. Every install and upgrade path now validates the installation scope before the package is fetched.
Security: CVE Remediation Across Enterprise ImagesDependency updates and a Go toolchain bump across the enterprise images clear the advisories that could be remediated at build time, including Go standard library, go-git, gRPC and golang.org/x/text issues. A small number remain where no upstream fix has yet been published. The Security & CVE section below is generated from the release scan and lists the current per-image results.
Knowledge Base: Inconsistent Default Access When Created With a DocumentWith RBAC enabled, a knowledge base created together with its first document defaulted to private, while one created empty defaulted to "All members" — so the same action produced different access depending on how it was started. Both paths now default to "All members". Existing knowledge bases are unaffected.
Knowledge Base: External Knowledge Base Creation FailsConnecting an external knowledge base failed with "Missing dataset_id or pipeline_id in request path". The enterprise permission check required a knowledge base ID that cannot exist while one is being created. Creation now succeeds.
Agent: Attachments Dropped on Models Without Vision SupportFiles attached in the Agent preview were silently discarded before the request reached the agent whenever the selected model had no vision support. The upload appeared to succeed but the agent never received the file. Affected all file types, including spreadsheets, PDFs, and documents.
RBAC: Owner Role Displayed an Incomplete Permission ListThe workspace Owner rendered as holding 6 of 16 application permissions in the console. The Owner has always had full access — only the displayed permission set was wrong. All 16 are now listed.
Workspace: Ownership Transfer Could Leave Two OwnersTransferring workspace ownership appended the owner role to the recipient rather than replacing their existing roles, leaving them with a mix of roles. Transfers made through the admin API did not update RBAC at all, which could leave the previous owner still holding the owner role and block every later transfer. Both paths now leave exactly one owner.
Plugin Credentials: Fields Cleared When Switching Plugin VersionChanging the version of a configured credential plugin cleared every field in the form. Required fields had to be re-entered, and optional ones such as endpoint URL were lost on save without warning. Saved values are now preserved across a version switch.
Helm: Redis Connection String Exposed in ConfigMapsThe composed Redis connection string, which contains the password, was rendered as plaintext into the gateway Caddyfile ConfigMap and the enterprise collector ConfigMap. Both now read it from a Secret, keeping the credential out of anything that can read ConfigMaps and out of GitOps diffs.
Helm: Redis Usernames Containing URL Delimiters Failed to AuthenticateThe Celery broker URL encoded the password but not the username, so a username containing a character such as a colon, slash, hash, or question mark was misparsed — silently authenticating as a different user or as none at all. Usernames are now encoded correctly.
License: Expiry Badge Wording and Remaining DaysThe admin dashboard license badge now shows the days remaining directly instead of only on hover. In Japanese, an expiring license and an already-expired one both displayed as 期限切れ, making them indistinguishable; they now read differently and the remaining-days string renders as a proper sentence.
Observability: Continuous OpenTelemetry Context Detach ErrorsWith ENABLE_OTEL turned on, the API logged "Failed to detach context" continuously under concurrent load, caused by a known defect in the OpenTelemetry Flask instrumentation detaching the same context token twice. Requests were never affected; trace context is now recorded correctly and the log noise is gone.