v0.33.0 Migration Guide

The first Darwin CPU sample is unmeasuredSection anchor link

The Darwin sampler needs two cumulative process-CPU readings to calculate utilization over an interval. Its first sample now reports cpu_measured: false instead of treating the process-lifetime average as current load.

Consumers that make admission decisions from capacity samples must ignore CPU load while cpu_measured is false and wait for a later measured sample. No change is required for consumers that already treat an unmeasured dimension as unavailable.

pipeline list is an indexSection anchor link

v0.32.0 made every list verb NDJSON, which fixed the shape. This fixes what each line carries.

sparkwing pipeline list -o json now emits four fields per pipeline:

FieldMeaning
namethe pipeline, e.g. release
shortits one-line summary; the first line of help when no short is declared
entrypointthe Go method that runs it
triggerswhat auto-runs it, empty for manual-only

help, args, examples, env_vars, risks, and risks_by_step are gone from the listing. They are exactly what sparkwing pipeline describe --name <name> prints, from the same registry, so the listing was spending a caller's context on a second copy of a detail view it already had. A five-pipeline catalog was 2,734 bytes and is now 1,727, and the ratio grows with the length of the help text.

sparkwing pipeline discover --query <q> -o json streams the same index plus its score.

BeforeSection anchor link

sparkwing pipeline list -o json | jq -r '.help'

AfterSection anchor link

sparkwing pipeline list -o json | jq -r '.short'          # choose
sparkwing pipeline describe --name release -o json | jq -r '.help'   # then read

A pipeline that declared no short used to show its full help in the help field and nothing in short; it now summarizes as the first line of that help, so no line in the listing is blank.

pipeline sparks list is a streamSection anchor link

It was a pretty-printed object wrapping an array:

{
  "libraries": [],
  "sparkwing_dir": "/path/to/.sparkwing"
}

head -1 returned {, which parses as nothing. It is NDJSON now, led by the one fact that is not a library's:

{"kind":"summary","library_count":2,"sparkwing_dir":"/path/to/.sparkwing"}
{"kind":"library","name":"sparks-core","source":"github.com/...","declared":"latest","resolved":"v0.4.1"}

Read the kind field rather than counting lines. Single-object verbs (pipeline describe, sparks vendor, runs status, version, info) are unchanged, as in v0.32.0.

BeforeSection anchor link

sparkwing pipeline sparks list -o json | jq -r '.libraries[].name'

AfterSection anchor link

sparkwing pipeline sparks list -o json | jq -r 'select(.kind=="library") | .name'

configure profiles list has a machine-readable modeSection anchor link

It printed a table and nothing else — no -o flag at all — so a script or an agent had to parse columns. It now takes -o pretty|json|plain like every other list verb. JSON is one profile per line:

{"name":"prod","controller":"https://api.example.dev","logs":"controller://prod","token":"swu_...********"}

The token is redacted in every mode, including JSON. A machine-readable listing is the shape most likely to end up in a log, and a secret that leaves the process once has left it; configure profiles show --show-token remains the one way to print the raw value.

This is additive: the default output is the same table it always printed.