Repository navigation
v0.41.0
This release stops large queries from exhausting memory, adds claim environment-share for opening a shared document from its link, and fixes cloud monitoring updates that silently dropped fields.
✨ Highlights
Large query results stream to disk (#631, #633, closes #466)
dtctl query held the raw response, a decoded copy and the row slice at once, so peak memory ran 10-14× the output size and sandboxes OOM-killed it on the spill path. -o jsonl, --spill-to <file>.jsonl and agent mode's automatic spill now decode each row straight to disk. Measured on a 500k-row / 164 MB result:
| peak RSS | |
|---|---|
| v0.40.0 | 1,806 MB |
| v0.41.0 | 41 MB |
Formats that need the whole result (table, csv, parquet, yaml, toon, --jq, --typed, live mode) keep the buffered path. Small results are byte-identical. In agent mode, a streamed result sets context.streamed: true and omits context.measured_bytes.
Claim a shared document from its link (#648, #649, closes #644)
dtctl claim environment-share <share-id | share-url>
Claims the share as the browser does when you open a #share= link, and prints the document ID and type. It fails early if the link belongs to another environment, supports --dry-run, and is experimental. It requests the new document:environment-shares:claim scope, granted from readwrite-mine up.
Cloud monitoring updates keep unmodelled fields (#620, fixes #608, #516)
enable, disable, update, edit and apply on AWS, Azure and GCP monitoring configs dropped every field dtctl doesn't model. On GCP that reset logsConfiguration and turned log ingestion off. Those fields now round-trip, so new schema fields survive without a dtctl release.
Approximate results say so (#636, #635)
A successful but approximate Grail result looked exact. metadata.approximations and metadata.notifications are now shown, and each approximation prints a Warning: Result is approximate: … on stderr or in context.warnings. --include-types also warns when the output format can't carry types.
🐛 Fixes
--admin-accessworks with OAuth login (#618, fixes #375) —readwrite-allnow requestsdocument:documents:admin.--check-scopesaccepts any-of scopes (#617, fixes #571) — a token with onlyplatform-management:environments:readno longer fails with exit 5.- Cancelled queries stop on Grail (#621, fixes #502) — in
dtctl serveand the embedded engine, cancelling a request now cancels its DQL query. apply --dry-runfor settings matchesapply(#616, fixes #521) — a missing object dry-runs ascreated.- Launchpads and custom document IDs (#634) — launchpads print their UI URL, and
delete|describe|edit|history|restore document <slug-id>resolve a non-UUID as an ID first. - Intent catalog (#637, refs #517) — plural
schemasare read,acceptedKeysandmatchedKeysare added, and an undeclaredtypeis""instead of"string". - Empty required flag values exit 2 (#638) — previously a runtime error with exit 1.
- Agent detection is deterministic (#622) — the name was random when two variables were set, and several agents were never detected.
- Server mode reuses upstream connections (#639) — one shared transport instead of a TLS handshake per request.
CurrentContextObjwrites persist (#614, fixes #543), andcommandslists scopes for read-only resources under mutating verbs (#648).
📚 Documentation
- Agent-mode output changes don't need a
feat!:title (#640);exec apistaysstable(#615). - Setup for Claude Code on the web in
docs/CONFIGURATION.md(#624).
Full Changelog: v0.40.0...v0.41.0