pub const USAGE: &str = "usage: sva-cli render '<expression>' --representation <r>[=<path>][,...] \
[--until '<condition>'] [--bits <n>] [--rate <hz>] [--flop-budget <n>] [--cache <path|none>] \
[--confirm]\n \
sva-cli analyze <file.wav> --representation <r>[=<path>][,...] [--confirm]\n \
sva-cli lint ['<expression>'] [--format <json|text>]\n \
sva-cli trace <node|expression>\n \
sva-cli builtins\n \
sva-cli outline <expression>\n \
sva-cli new <name> [--idempotency-key <key>]\n\
a render's target is one expression; `@path` reads a node in the current directory, \
`@/abs/path` one anywhere, and its own ref may read an interval: `@piano([0, 2b], f0=C4)`\n\
representations: lines atoms spectrum(peaks, frame) envelope(frame) derivative samples \
ledger(depth, brief, skim) pitch(peaks, frame) formants(peaks, frame) stereo(frame) bands \
crest loudness onsets alias(oversample) bindings(node) arguments flops\n\
destinations: a `.wav` path takes `samples` as audio; any other path takes JSON; none \
puts the reading under `data.representations`\n\
verb aliases: `validate`=lint, `list`=builtins, `create`=new, `show`=trace. `render` \
and `analyze` take a reading, which the standard's verb list has no word for, so they \
keep their own names.";