Releases: tamasmrtn/duckhaven
Releases · tamasmrtn/duckhaven
Release list
v0.8.0
[0.8.0] - 2026-09-14
Bug Fixes
- Make the judged eval measure the assistant, not the harness (#269)
- Make every fixture statement answer in its own terms (#270)
- Repair the install path and pull MinIO from quay.io (#280)
- Reuse object-store connections so concurrent reads stop exhausting ports (#292)
Documentation
- Split the codebase map out of the architecture page (#267)
- Verify and dedupe concepts, reposition DuckHaven as a lakehouse (#279)
Features
- Add self-service token endpoints and CLI documentation (#254)
- Make the assistant aware of the product (phase 1) (#256)
- Give the assistant a documentation index and a read tool (phase 2) (#257)
- Add documentation search and the eval harness (phase 3) (#258)
- Add the judged eval tier, with both-orders pairwise judging (phase 4) (#259)
- Cite the documentation pages behind an answer (phase 5) (#260)
- Mine the assistant's audit trail for bad answers (phase 6) (#261)
- Add a governed MCP server at /mcp (#277)
- Wait for a statement to finish before answering the submit call (#293)
- Add pass^k sampling to the judged eval (#296)
Maintenance
- Upgrade Postgres/Polaris and track Docker images with Dependabot (#250)
- (deps) Bump haproxy from 2.9-alpine to 3.4-alpine in /deploy (#252)
- (deps) Bump etcd-development/etcd (#251)
- (deps) Update pydantic-ai-slim[anthropic,mistral,openai] requirement (#248)
- (deps) Bump the python-minor-patch group across 1 directory with 2 updates (#247)
- (deps) Bump github/codeql-action (#246)
- (deps) Bump the npm-minor-patch group across 1 directory with 12 updates (#253)
- (deps) Bump the npm-minor-patch group in /web with 6 updates (#262)
- (deps) Bump the python-minor-patch group across 1 directory with 3 updates (#268)
- (deps) Bump @tanstack/react-table from 8.21.3 to 9.2.4 in /web (#263)
- (deps) Bump node from 24-alpine to 26-alpine in /api (#272)
- (deps) Bump the npm-minor-patch group in /web with 5 updates (#273)
- (deps) Update pydantic-ai-slim[anthropic,mistral,openai] requirement (#276)
- (deps-dev) Bump vitest from 4.1.11 to 5.0.0 in /web (#274)
- Replace the bundled MinIO object store with RustFS (#281)
- (deps) Bump chainguard/python from
de66934tob0bc807in /api (#282) - (deps) Bump chainguard/python in /agent (#283)
- (deps) Bump github/codeql-action in the actions group (#285)
- (deps) Bump boto3 in the python-minor-patch group (#286)
- (deps) Update pydantic-ai-slim[anthropic,mistral,openai] requirement (#287)
- (deps) Bump the npm-minor-patch group across 1 directory with 8 updates (#288)
Performance
- Serve a statement's first page inline and cut a round trip from auth (#294)
- Fix the concurrency tail in admission control (#295)
Refactoring
- Switch api and agent images to Chainguard (#271)
v0.7.0
[0.7.0] - 2026-08-23
Semantic layer
DuckHaven can now record what your business terms mean and how they are
calculated — datasets, dimensions, metrics, and relationships — and the AI
assistant grounds its SQL in those definitions instead of guessing from column
names.
- Give business definitions somewhere to live (datasets, dimensions, metrics, relationships)
- Expose the semantic layer over the API and accept definitions from outside DuckHaven
- Compile metric queries instead of describing them, so a metric is machine-actionable
- Author definitions in the UI, with a readable metric SQL preview showing what a definition compiles to
- Let people save a worksheet expression as a metric
- Import semantic definitions from a dbt manifest; imported models' metrics become usable immediately
- Let the assistant answer from agreed definitions, and record a bypassed metric definition on the audit row
- Let a definition be removed without deleting its model
- Say a definition is broken instead of saying it is missing
- Refuse malformed authoring input with a refusal, not a 500; refuse a time query whose axis no longer exists
Data lineage
- Ship lineage: a Lineage tab on any catalog table showing where its data came from and what breaks if it changes
- Derive lineage from the SQL DuckHaven executes — no configuration, no instrumentation
- Import lineage from external producers, dbt first
- Add column-level lineage: name the columns a node holds, and work out which source columns a target column came from
- Persist a relationship's column mappings, carry a table's lineage across a rename
- Show incompleteness and staleness on the lineage tab; say which producer went quiet and which direction is empty
- Keep a node's column count when opening it, and let a table on the graph open to show its columns
- Serve a table's lineage graph over the API; prove column lineage against a live agent and catalog
Query history
- Add server-side paging, filters, and sorting — keyset cursor paging, so history pages stay stable under load
- Filter by agent, user, status, statement type, session, statement text, and time; sort by start time or duration
- Allow non-admins to filter query history by agent; cross-principal filters stay admin-only
- Classify statement types (select / insert / update / delete / merge / copy / create / alter / drop / describe)
- Rebuild the History page on the server-side filters and paging, with agent/user filter pickers and a refresh button
- Add an expandable SQL panel to history and profile pages; keep the History table's SQL cell single-line
Query profiles
- Surface blocked time, admission wait, and operator identity in profiles
- Judge a scan blow-up by the scan's own output, not the query's; show rows a scan actually read, not DuckDB's per-thread sum
- Center the operator graph and add zoom controls and click-drag panning
- Expand the profile page's SQL panel in place instead of in a dialog
- Fix a snapshot-age crash when
timestamp_msis a realTIMESTAMP
Worksheet and SQL editing
- Drag a table from the catalog tree into the worksheet to insert its qualified name
- Add cross-catalog, table-function, and snippet completions; fix cross-catalog completion for 3-part
FROMreferences - Surface a free row-count estimate from the current snapshot in table completions and the tree
- Render AI-proposed edits as a real inline diff with pure line-diff hunk computation
- Add a hover-preview card for catalog tree tables
- Add column type badges and client-side sorting to the results grid; surface the column type schema on query row pages
- Sort results before copying or exporting to CSV
- Stop catalog table clicks from overwriting the worksheet; stop dragged names from being inserted twice
Memory and admission control
- Size statements by CPU and cache need, not one memory bucket; size session statements from their own
EXPLAINestimate, with a fallback bucket for unestimable ones - Read the estimated row width off the relation instead of a second
DESCRIBE - Cache
EXPLAINestimates agent-wide, keyed on the SQL and the catalog set, with a TTL - Survive a DuckDB planner that spins and ignores interrupts; bound the estimate on the session statement path too
- Let a live admission reservation be resized; give elastic agents the same elastic cache grant as sessions
- Let a caller bound its own admission queue wait; report how long a statement waited for memory
- Surface parked statements as a Prometheus gauge
- Stop starved statements deadlocking on each other; fix fairness bugs in the growth-waiter queue
- Report peak memory and spill per statement, not per connection; fix
peak_memory_bytes/spill_bytesalways reading asNone - Release admission slots for opens closed mid-flight; drop a session the agent opened after the API gave up
- Give static ladder slots the full core count too; fix the elastic tier's three regressions
Command palette and search
- Add a cross-catalog search endpoint for the command palette — grant-redacted, matching schemas, tables, and saved queries
- Rebuild the command palette as real cross-catalog search; harden it against a bad catalog and
ILIKEwildcards
Catalog and navigation
- Show recently-viewed objects on the Catalog landing page
- Make worksheet tabs URL-addressable and close worksheet-to-object-detail discoverability dead ends
- Add catalog deep links to assistant SQL responses
- Match the Catalog tree width to the worksheet sidebar; harden object-detail navigation against bad params and stale types
- Rename Sessions to Connections in user-facing copy
Settings and workspaces
- Add a Settings destination for workspace and account preferences
- Add workspace rename, description, and delete endpoints;
PATCHcan now clear the description
Assistant
- Add "Fix with Assistant" to the failed-query error banner, with the failed SQL included in the seed message
- Persist assistant tool calls; ground answers in semantic definitions and the lineage graph
Maintenance scanner
- Couple scan cadence to the preset; improve the maintenance scanner and the agent health probe
- Fix maintenance scoring correctness
Elastic compute
- Let elastic agents receive a raised query timeout
UI foundations
- Promote EmptyState to the shared
ui/primitives and use it on every empty page; extract a sharedPageHeader - Add on-brand scrollbar tokens and style the Radix scrollbar thumb; match the Catalog tree width to the sidebar
- Add a segmented control, a hover card, and a shared top-bar nav registry; start a theme context
Documentation
- Add the semantic layer concept and define-metrics guide; import dbt semantics and lineage guides
- Document lineage, the maintenance scanner's new behavior, and the elastic agent's raised timeout
- Expand query-execution, run-queries, query-profiles, and the REST API reference (150+ lines)
Bug Fixes
- Fix
peak_memory_bytes/spill_bytesalways reading asNone - Fix a snapshot age crash when
timestamp_msis a realTIMESTAMP - Stop a bad statement taking a lineage backfill batch down with it
- Fix the search auth integration test's shared-client contamination
- Fix a nested-button accessibility bug in worksheet tabs
Maintenance
- (deps-dev) Bump postcss in /web in the npm-minor-patch group (#194)
- (deps-dev) Bump @testing-library/jest-dom in /web
- (deps) Bump the actions group with 2 updates
- (deps) Bump the python-minor-patch group with 2 updates
- (deps) Update pydantic-ai-slim[anthropic,mistral,openai] requirement
- (deps) Bump the npm-minor-patch group in /web with 11 updates
- (deps) Bump the python-minor-patch group with 3 updates (#208)
- (deps) Update uvicorn[standard] requirement
- (deps) Bump github/codeql-action in the actions group
- (deps-dev) Bump jsdom from 29.1.1 to 30.0.1 in /web
- (deps) Update pydantic-ai-slim[anthropic,mistral,openai] requirement
- (deps) Bump websockets from 16.1.1 to 17.0.1
- (deps) Update pydantic-ai-slim[anthropic,mistral,openai] requirement
- (deps) Update sqlalchemy[asyncio] requirement
- (deps) Bump diff from 8.0.4 to 9.0.0 in /web
- (deps) Bump the npm-minor-patch group across 1 directory with 11 updates (#218)
- (deps) Bump the python-minor-patch group across 1 directory with 4 updates (#221)
- (deps) Update pydantic-ai-slim[anthropic,mistral,openai] requirement
- (deps) Bump the npm-minor-patch group in /web with 5 updates (#230)
- (deps) Update uvicorn[standard] requirement (#233)
- (deps) Bump github/codeql-action in the actions group (#231)
- (deps) Bump the python-minor-patch group across 1 directory with 3 updates (#232)
v0.6.0
[0.6.0] - 2026-08-01
Bug Fixes
- Pass DuckDB memory limits in GiB, not GB
- Point the admin-agents E2E suite at /compute
- Only post coverage comments on pull requests
Cold-start admission
- Add columns for parking work while compute starts
- Bind parked sessions and targeted runs when an agent registers
- Start compute when a SQL session finds none
- Queue a run for a terminated agent instead of failing it
- Show pending sessions in the session audit UI
- Document cold-start admission for sessions and runs
- Cover the elastic compute flow end to end
- Bind a session whose agent has not reported capabilities yet
Documentation
- Correct SQL session client attribution contract (#183)
- Document per-agent monitoring and elastic metrics
- Explain per-agent access control
Features
- Elastic agents on Azure Container Instances, with Terraform (#184)
- Record when a query starts running
- Persist agent lifecycle and utilization telemetry
- Instrument elastic compute and share failure reasons
- Add per-agent detail and monitoring endpoints
- Add a monitoring page for each agent
- Add per-agent access grant data model
- Add per-agent access tier evaluation
- Enforce per-agent tiers on the agent endpoints
- Enforce agent access on dispatch and schedules
- Add agent access types and client to the web app
- Gate agent UI on the caller's per-agent tier
- Choose an agent's access mode when creating compute
- Move Compute out of Admin into the main nav
- Choose a catalog's access mode when creating it
- Start a terminated elastic agent for a scheduled run
Maintenance
- (deps) Bump the npm-minor-patch group across 1 directory with 32 updates (#185)
- (deps) Bump the actions group across 1 directory with 2 updates (#182)
- (deps) Update pydantic-ai-slim[anthropic,mistral,openai] requirement (#167)
- (deps) Bump the python-minor-patch group across 1 directory with 3 updates (#166)
Refactoring
- Drop the legacy /admin/agents redirects
v0.5.0
[0.5.0] - 2026-07-22
Bug Fixes
- Reclaim leaked SQL session admission slots under churn (#153)
- Close SQL session admission slot leak under churn (#155)
- Bound and resolve lost SQL-session EXEC_STATEMENT frames (#157)
- Stop session close from blocking the agent event loop (#159)
- Materialize DESCRIBE and every SELECT-shaped meta statement (#171)
- Scope enumeration denial message and correct its docs (#180)
Features
- Assistant chat UX — catalog context, scoped edits, history, recovery, personality (#141)
- Add OpenTelemetry distributed tracing (#142)
- SQL session layer, statement policy, sandbox, and credential seam (#150)
- Allow DESCRIBE in the SQL session statement policy (#151)
- SQL session staging via presigned URLs (#161)
- Presign staging PUT for a client-facing endpoint (#169)
- Allow TRUNCATE TABLE in the SQL session statement policy (#172)
- Make relation introspection reliable for attached Iceberg catalogs (#173)
- Return typed result columns from the query API (#175)
- Surface SQL sessions and statement attribution in the UI (#176)
- Add GET /api/version endpoint (#181)
Maintenance
- (deps) Bump the python-minor-patch group across 1 directory with 2 updates (#133)
- (deps) Update sqlalchemy[asyncio] requirement (#134)
- (deps) Bump the npm-minor-patch group across 1 directory with 29 updates (#137)
- (deps) Bump the npm-minor-patch group in /web with 5 updates (#143)
- (deps) Bump the python-minor-patch group across 1 directory with 2 updates (#145)
- (deps) Update uvicorn[standard] requirement (#147)
- Four UI polish fixes in web (#149)
- Finish agent sandbox hardening and make egress real (#170)
v0.4.0
[0.4.0] - 2026-07-01
Bug Fixes
- Statement-aware worksheet Run with Ctrl+Enter (#93)
- (api) Scope the storage health probe under a unique prefix
- (agent) Give the azure/httpfs extensions a CA bundle for cloud TLS
- (api) Tolerate a blank OIDC_GROUP_ROLE_MAP env value
- (web) Resolve the index route instead of always bouncing to login
- (api) Make agent bootstrap-token seeding race-safe
- (api) Record agent result host from X-Forwarded-For behind a proxy
Documentation
- Add MkDocs Material documentation site (#100)
- Document identity, RBAC, and SSO/LDAP
- Document admin-managed workspace membership
- Document external S3/ADLS storage setup and maintenance
- ADLS vending needs a Polaris service principal
- Document the highly-available control plane
- Note the opt-in HA control plane in the README
Features
- Page query results by row window instead of whole file (#92)
- Iceberg snapshot history browsing and query-at-snapshot (#95)
- Cgroup-aware agent memory + query queueing (#96)
- ESTIMATE-based query cost estimation and post-execution profile UI (#99)
- Autonomous lakehouse maintenance advisor (#101)
- (api) First-class RBAC and admin user management
- (api) Add OIDC SSO and LDAP federated login
- (web) Add SSO sign-in and user management UI
- (api) Admin endpoints to manage workspace membership
- (web) Manage workspace access from the Users admin page
- (api) Store external backend credential config
- (api) Build Polaris storageConfigInfo for external S3/ADLS
- (api) Validate external storage access with a health check
- (web) Register external backend config and test storage access
- (deploy) Enable Azure storage type and document external backends
- (deploy) Pass Azure service-principal creds to Polaris for ADLS
- (api) Expose storage backend name and root URI on CatalogOut
- (web) Show storage backend on the catalog tree + info panel
- (deploy) Pass OIDC settings to the API and document Entra
- (api) Support multiple OIDC providers + fix identity claim
- (web) Render a login button per configured SSO provider
- (deploy) OIDC_PROVIDERS passthrough + multi-provider docs
- (deploy) Allow a custom STS endpoint for external S3 backends
- (api) Cross-replica agent dispatch, presence, and readiness
- (api) Coordinate maintenance scanner and migrations for HA
- (deploy) Add opt-in HA Compose topology
Maintenance
- (deps) Bump the actions group with 4 updates
- (deps) Bump the npm-minor-patch group across 1 directory with 23 updates (#108)
- (deps) Bump the python-minor-patch group across 1 directory with 6 updates (#107)
- (deps) Bump actions/cache from 5 to 6 in the actions group
- Lock boto3 and azure-storage-blob for storage health check
- (deps) Bump the python-minor-patch group across 1 directory with 4 updates (#120)
- (deps) Update sqlalchemy[asyncio] requirement (#119)
Refactoring
- Scope agent WebSocket DB sessions per frame (#94)
v0.3.0
[0.3.0] - 2026-06-09
Bug Fixes
- Idempotent Polaris grants and descriptive PolarisError responses (#66)
- Resolve QA round 2 defects (admin users, worksheet, a11y, UX) (#68)
Documentation
- Add release guide and markdownlint hook (#90)
Features
- Advertise agent CPU and add live utilization page (#73)
- Readable utilization x-axis and agent display names (#83)
Maintenance
- Simplify the deploy stack to six services (#69)
- (deps) Bump @radix-ui/react-tooltip from 1.2.8 to 1.2.9 in /web (#82)
- (deps-dev) Bump @typescript-eslint/eslint-plugin in /web (#80)
- (deps-dev) Bump vitest from 4.1.7 to 4.1.8 in /web (#78)
- (deps) Bump docker/setup-qemu-action from 3 to 4 (#76)
- (deps) Bump @radix-ui/react-tabs from 1.1.13 to 1.1.14 in /web (#81)
- (deps-dev) Update ruff requirement from >=0.15.15 to >=0.15.16 (#77)
- (deps) Bump the npm-minor-patch group in /web with 19 updates (#89)
- (deps) Bump the python-minor-patch group with 5 updates (#86)
- (deps) Bump the actions group with 2 updates (#85)
- (deps) Update sqlalchemy[asyncio] requirement (#87)
v0.2.0
[0.2.0] - 2026-05-31
Features
- Serve the web UI from the API in the deploy stack (#45)
- Publish duckhaven images to GHCR; compose pulls instead of builds (#55)
- Auto-generate persistent secrets on first boot (#56)
- In-entrypoint migrations + browser-driven first-admin onboarding (#57)
- Add-agent compose snippet, /healthz endpoint, task-organised docs (#58)
Maintenance
- (deps) Bump @tanstack/react-router in /web
- (deps) Bump dependabot/fetch-metadata from 2 to 3
- (deps) Bump astral-sh/setup-uv from 6 to 7
- (deps-dev) Update ruff requirement from >=0.15.14 to >=0.15.15 (#48)
- (deps-dev) Update pytest-asyncio requirement (#50)
- (deps) Bump lucide-react from 1.16.0 to 1.17.0 in /web (#54)
- (deps-dev) Bump eslint from 10.4.0 to 10.4.1 in /web (#51)
- (deps-dev) Bump @typescript-eslint/parser in /web (#53)
- (deps-dev) Bump @typescript-eslint/eslint-plugin in /web (#52)
v0.1.0
[0.1.0] - 2026-05-26
Documentation
- Update architecture to v0.3 and migrate Tailwind v4 PostCSS (#20)
- Product-first README, real screenshots, working quickstart (#43)
Features
- Add M1 frontend milestone and wire brand assets (#18)
- Wire M2 backend — models, API, agent, and unit tests (#19)
- Authenticate agent result reads with the session token (#35)
- Interrupt DuckDB on timeout and clamp resource ceilings (#36)
- Enforce backend compatibility and re-advertise on heartbeat (#38)
- Drop tables via UC from the catalog UI (#41)
Maintenance
- Fix pre-existing ruff lint violations
- Add pre-commit hooks and commitlint config
- Add git-cliff changelog config
- (deps-dev) Update pytest-asyncio requirement (#3)
- (deps-dev) Bump @vitejs/plugin-react from 4.7.0 to 6.0.2 in /web (#4)
- (deps-dev) Update pytest requirement from >=8.0 to >=9.0.3 (#5)
- (deps-dev) Update ruff requirement from >=0.7 to >=0.15.13 (#6)
- (deps-dev) Update httpx requirement from >=0.27 to >=0.28.1 (#7)
- (deps-dev) Update mypy requirement from >=1.13 to >=2.1.0 (#8)
- (deps-dev) Bump typescript from 5.9.3 to 6.0.3 in /web (#9)
- (deps-dev) Bump eslint from 9.39.4 to 10.4.0 in /web (#10)
- (deps) Bump docker/build-push-action from 6 to 7 (#15)
- (deps) Bump docker/login-action from 3 to 4 (#17)
- (deps) Bump github/codeql-action from 3 to 4 (#14)
- (deps) Bump softprops/action-gh-release from 2 to 3 (#13)
- (deps-dev) Bump tailwindcss from 3.4.19 to 4.3.0 in /web (#11)
- (deps) Bump react-router-dom from 6.30.3 to 7.15.1 in /web (#12)
- (deps) Bump actions/checkout from 4 to 6 (#16)
- (deps) Bump react-hook-form from 7.76.0 to 7.76.1 in /web (#32)
- (deps) Bump @tanstack/react-query in /web (#31)
- (deps) Bump actions/upload-artifact from 4 to 7 (#24)
- (deps-dev) Update pytest-cov requirement from >=6.0 to >=7.1.0 (#22)
- (deps) Bump @tanstack/react-router from 1.170.4 to 1.170.8 in /web (#30)
- (deps-dev) Update aiosqlite requirement from >=0.20 to >=0.22.1 (#28)
- (deps) Bump aquasecurity/trivy-action from 0.31.0 to 0.36.0 (#25)
- (deps) Bump actions/setup-node from 4 to 6 (#23)
- Pin api image, schedule backups, add DR banner and runbook (#42)
- (deps) Bump docker/metadata-action from 5 to 6 (#21)
- (deps) Bump docker/setup-buildx-action from 3 to 4 (#26)
- (deps-dev) Update ruff requirement from >=0.15.13 to >=0.15.14 (#27)
- (deps-dev) Bump vite from 8.0.13 to 8.0.14 in /web (#29)
- Simplify deploy stack, restyle README, optimize Dockerfiles (#44)