Skip to content

v0.41.0

Choose a tag to compare

@github-actions github-actions released this 01 Oct 11:59
· 61 commits to main since this release
3e845a5

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-access works with OAuth login (#618, fixes #375) — readwrite-all now requests document:documents:admin.
  • --check-scopes accepts any-of scopes (#617, fixes #571) — a token with only platform-management:environments:read no longer fails with exit 5.
  • Cancelled queries stop on Grail (#621, fixes #502) — in dtctl serve and the embedded engine, cancelling a request now cancels its DQL query.
  • apply --dry-run for settings matches apply (#616, fixes #521) — a missing object dry-runs as created.
  • 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 schemas are read, acceptedKeys and matchedKeys are added, and an undeclared type is "" 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.
  • CurrentContextObj writes persist (#614, fixes #543), and commands lists scopes for read-only resources under mutating verbs (#648).

📚 Documentation

  • Agent-mode output changes don't need a feat!: title (#640); exec api stays stable (#615).
  • Setup for Claude Code on the web in docs/CONFIGURATION.md (#624).

Full Changelog: v0.40.0...v0.41.0