Skip to content

v0.37.0

Choose a tag to compare

@github-actions github-actions released this 07 Aug 12:55
ad5e36d

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 --enabled is 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 apply with nested content (#404) — apply -f on a document whose body contains its own content key (reachable via the get -o json → edit → apply round-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 in create document.
  • unshare --all left shares behind (#405) — ListDirectShares issued 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_TOKEN was not stripped when dispatching to exec plugins. pluginEnv already stripped DTCTL_TOKEN and DT_API_TOKEN; this was a missed update after DTCTL_ACCOUNT_TOKEN landed in a later PR. Plugins continue to promise "never tokens" as documented.

Full Changelog: v0.36.0...v0.37.0