Repository navigation
v0.37.0
This release rounds out the Live Debugger command surface with log-message support and a dedicated snapshots command, introduces a translate verb for OpenPipeline expression work, and closes several data-correctness bugs.
✨ Highlights
Live Debugger: log messages (#396)
Breakpoint log messages — the line emitted each time a breakpoint is hit — are now fully first-class.
update breakpoint --log-message— set or change the log message template ({variable}placeholders supported). Omitting the flag leaves the current message untouched; at least one of--condition,--log-message, or--enabledis required.get breakpoints— new LOG MESSAGE column in the default table.describe breakpoint— shows the message in both text and structured output.
Display strips the qualified-store prefixes the backend adds (store.rookout.frame.line → {frame.line}, store.rookout.variables.x → {x}), so what you type is what you see.
Live Debugger: surface rule ID + get snapshots (#386)
Two long-standing friction points in the breakpoint → snapshot workflow, fixed together.
create breakpoint now prints the stable rule ID on success:
Created breakpoint at OrderController.java:306 (id: dtctl-rule-5bfb45a29fce7a46)
dtctl get snapshots <breakpoint> is a new command that fetches snapshots for a given breakpoint without needing to know (or look up) the backend-assigned immutableId. Accepts a breakpoint by filename:line or stable rule ID, resolves the immutableId internally, and runs the DQL query for you. Supports --decode-snapshots, -o json/yaml, timeframe flags, and --max-result-records.
translate verb (#378)
A new translate verb groups OpenPipeline translation commands under a consistent noun.
dtctl translate lql-to-dql 'log.source="x"' # translate an LQL matcher to DQL
dtctl translate classic-pipelines logs # export a classic pipeline as JSON
translate lql-to-dql accepts a positional expression or -f file; default output is the raw DQL string (pipeable), -o json/-o yaml/-o table give structured output.
Note: dtctl get classic-pipelines-translation is removed — use dtctl translate classic-pipelines instead. Also fixes the OAuth scope for the classic-pipelines endpoint (settings:objects:read, not openpipeline:configurations:read).
🐛 Fixes
- Panic on
applywith nested content (#404) —apply -fon a document whose body contains its owncontentkey (reachable via theget -o json→ edit →applyround-trip) triggered a bare type-assertion panic before the safety check ran, producing a raw Go stack trace instead of an error. Now matches the guarded path already present increate document. unshare --allleft shares behind (#405) —ListDirectSharesissued a single unpaginated GET, so on a document with more than one page of direct shares the command deleted page one, reported success, and left the rest in place. Every subsequent page is now fetched before the delete pass.- Account token leaked into plugin environment (#403) —
DTCTL_ACCOUNT_TOKENwas not stripped when dispatching to exec plugins.pluginEnvalready strippedDTCTL_TOKENandDT_API_TOKEN; this was a missed update afterDTCTL_ACCOUNT_TOKENlanded in a later PR. Plugins continue to promise "never tokens" as documented.
Full Changelog: v0.36.0...v0.37.0