The runs page and a run’s log were browser-only. vole change show could say a
check failed, but the only run commands were cancel and rerun, and both need the
26-character id that only the page showed. There was no way to ask what a job did or
read the output from a terminal.
This adds the read half of the run page over the same key-authenticated SSH channel the CLI already uses for history and secrets:
vole run list [--state] [--branch] [--commit <sha>] [--limit] [--format]lists the repository’s runs, newest first. The commit filter is an exact id or a prefix;--formatsupports the same%(field)spelling asissue list.vole run show <id>prints the status, commit, trigger, pinned workflow and job, steps with exit codes and durations, each attempt’s log size, artifacts, the runner that reported it, and whether the result counts as a check by the same rule the landing gate uses.vole run logs <id> [--attempt N] [--step N]streams the attempt’s log to stdout with nothing added. The default is the attempt the run is on, or the newest logged attempt once it has finished. Refusals go to stderr, so a redirect gets a log or an empty file, never an error at the top.
Reading is the repository’s read capability, the same rule the runs page uses; a
run id from another repository is a miss, not a cross-repository read.
vole change show now also prints the runs for the head, and for the combined
result when the landing needs one. That is the missing step in the diagnosis
workflow: a red combined: line now carries the id to pass to run show and
run logs without opening the browser.
The queue gets one Search method for status, branch and SHA-prefix filtering; it
is the runs page’s query without the pager. Tests cover the filter, a reader listing
and opening a finished run, the exact log bytes, a step range, a cross-repository id,
and a missing log writing nothing to stdout.
Checked with vole workflow check, go vet ./..., and vole workflow run verify
(all steps, including the race suite). Closes #244.