Releases
Wat er in elke STACKIT-deployment van Basenet is veranderd, nieuwste eerst.
English version: /releases/page/75
Elke versie is YY.C.N: het jaar, de Linear-cycle en de commit binnen die cycle. De beschrijvingen van de wijzigingen staan in het Engels, zoals ze in de commits zijn geschreven. Tijdens de build gegenereerd door scripts/release-changelog.mjs.
26.5.201
Wijzigingen sinds 26.5.200.
-
Opgelost web
Push dashboard actor/state predicates into SQL instead of JS
loadMyMatters, loadMyTasks, and loadBilling each fetched every active matter, every task, or every permitted invoice tenant-wide, then filtered to "mine" or "concept" in JS. Work grew with unrelated tenant records instead of the actor's own slice.
26.5.200
Wijzigingen sinds 26.5.199.
-
Opgelost workers
Give periodic jobs stable jobIds so replicas don't double-enqueue
apps/workers/src/main.ts kept cron state in a process-local Map and ticked on its own setInterval. Every enqueue() call passed only (queue, name, payload), no stable jobId, so BullMQ-level dedup never applied.
26.5.199
Wijzigingen sinds 26.5.194.
-
Opgelost application
Retry-then-log indexing failures on matter/relation create
createMatterCommand and createRelationCommand committed the durable row in a transaction, then awaited indexMatter/indexRelation outside it with no error handling.
-
Opgelost integrations
Enforce deadlineAt as a real timeout on both model-gateway adapters
Both adapters validated that deadlineAt was present but never derived an actual timeout or AbortSignal from it. post() only ever forwarded the caller's own abortSignal; nothing was wired from deadlineAt.
-
Opgelost ci
Restore-verify actually restores into a scratch database
CI's "Restore-verify" step provisioned demo-kantoor, then immediately ran restore-verify.mjs against that same live tenant database. No backup, no restore, no scratch database, it just re-counted tables and roles in the database it had just created and called that "verified".
-
Opgelost ci
Raise LiteLLM's memory limit again, GitHub runner OOM-killed it at 1G
The model-gateway-conformance job (BLI-1392) hit the same exit-137 OOM-kill this container's memory limit was already tuned once for, this time on the GitHub-hosted CI runner rather than local Docker Desktop: litellm died ~8s after starting, before its healthcheck ever got a…
-
Opgelost db
Populate invoiceById before reading it in the WIP hour scan
buildWipRealizationReport ran scanActiveMatterHours before scanActiveMatterInvoices.
26.5.194
Wijzigingen sinds 26.5.181.
-
Opgelost chart,integrations
Bridge Helm's *_HOST vars to the *_URL vars factories read
The chart set VALKEY_HOST/OPENSEARCH_HOST; the factory functions read REDIS_URL/OPENSEARCH_URL and silently fell back to in-memory adapters when those were absent, in every environment including production, no error, no signal.
-
Opgelost residency
Cover MODEL_GATEWAY_PROXY_URL in the EU-residency gate
The runtime reads MODEL_GATEWAY_PROXY_URL, but the residency gate only mapped MODEL_GATEWAY_URL, so the proxy key fell through to the generic "uncovered" warning and a non-EU value never failed validate-residency.
-
Opgelost portal
Fail closed in production on dev login previews and mock SMTP
shouldExposeDevMagicLink returned a usable token whenever the relay was mock or PORTAL_SHOW_DEV_MAGIC_LINK was set, with no check of the runtime profile. requestLoginLink put that token straight into the response returned to the browser, and defaulted PORTAL_BASE_URL to…
-
Opgelost application
Derive MCP create_matter flavor enum from MATTER_FLAVORS
The MCP create_matter proposal schema hardcoded a 4-value flavor enum ('legal', 'debt_collection', 'insolvency', 'roll'), missing tax_law and general that MATTER_FLAVORS already has and that api-contract's HTTP schema already accepts (and drift-guards).
-
Opgelost tenant-runtime
Invalidate in-flight acquisitions on evict, await disposal at shutdown
evict(key) only ever touched #live.
-
Opgelost admin
Revalidate tenant status at each mutating action, not just on pool miss
getTenantHandleForSlug only checked route.status !== 'active' inside the resource pool's cache-miss create callback.
-
Opgelost ai
Count distinct identifiers newly anonymized per gateway invocation
anonymize() mutates and returns the same mapping reference it was given, and mapping.size is cumulative across the whole mapping, not a per-call delta. anonymizedCount += result.mapping.size - opts.mapping.size was therefore always x-x=0 when a caller supplied a mapping…
-
Opgelost integrations
Reject transport redirects on the model-gateway adapters
Both the LiteLLM and direct (Anthropic) adapters approved a configured base URL, then relied on fetch's default redirect-following behavior on the shared post() call.
-
Opgelost integrations
Detect content-filter refusals on LiteLLM's non-streaming path
The streaming path already treats finish_reason: 'content_filter' as a refusal.
-
Opgelost matters
Tolerate a withdrawn custom-select option on unchanged resave
MatterOverviewEditor always resends the full customValues map, including fields the user didn't touch. updateMatterCommand rejected any select value no longer in the field's current options — including a value that was valid when saved and is simply being resent unchanged —…
-
Opgelost api
Add billing:write scope so billing integrations can write invoices
apps/web/src/lib/api/scopes.ts declared billing:read but no billing:write, so every billing-family write had to borrow a scope from another module. matter.legal-aid.save (PUT /api/v1/matters/{id}/legal-aid) declared matters:write even though it gates on can(update, invoice) — a…