Release Notes
Added
- The read surface is now one verb. Bare
slooporsloop showprints a
dashboard: daemon status, scheduler state, and recent activity.
sloop show <REF>resolves ticket IDs, ticket names, run IDs and aliases,
unique run-id prefixes, and project IDs; an exact reference always wins.
Anything else becomes a case-insensitive ticket pattern over IDs and
names — a substring by default, an unanchored regular expression when the
text contains regex metacharacters — rendered as a ticket list.
-n/--limit Nor the shorthand-Ncaps list rows.--followstreams
the shown scope's events; ticket and run followers exit when the subject
settles, and--follow --quietreturns only the outcome for scripting.
Exit codes are stable:0for success or a merged subject,1for
another terminal outcome or a daemon error,2for usage errors.
sloop show --helpdocuments the whole resolution ladder. Pattern
resolution happens in the daemon: theshowverb accepts patterns, the
eventsverb gained an optionalscope, and thelistverb gained an
optionallimit, all additive within protocol version 1. sloop template <kind>prints fully commented canonical templates for
the config, flow, project, and ticket files, so a working example is
always one command away.sloop show <TICKET>now lists the ticket's runs, newest attempt first:
alias, outcome, wall-clock span, and a strip of the run's flow stages
markedok,FAIL,..(running), or-(not reached). A ticket that
has never run printsruns: none.sloop show <RUN>now shows the run's timeline, a per-stage table (state,
attempts includingon_failretries, duration, exit code, and verdict
source), and a derivedreasonfor any non-merged terminal run — for
examplestage `test` failed (exit 1) after agent completed with commits. The reason comes from the stored stage and evidence rows, never
from an agent's own claim about its work. Stage names come from the run's
admitted flow snapshot, so a run reports the stages it actually had even
after the flow file changes.- The
showresponse gainedvalue.runson tickets andvalue.stages,
value.attempt,value.agent_exit_code, and the timeline fields on runs,
all additive within protocol version 1. sloop logsgained--stage <NAME>,--tail <N>, and--follow.
--stageselects one flow stage by the name the flow gives it, including
the agent stage, and rejects a name the run's flow does not define instead
of returning an empty page.--tailkeeps the last N entries;--follow
streams new entries until the run settles. The three combine, so
sloop logs <RUN> --stage test --tail 50answers "why did the test stage
fail" in one command. Filtering happens in the daemon: thelogsverb
gainedstage,tail, andafterarguments and aterminalresponse
field, all additive within protocol version 1.
Changed
- The default flow's review stage is now a real gate. It previously
inheritedverdict: exitand passed whenever the reviewer process exited
zero, so every freshsloop initdeployment silently approved all work.
The shipped stage now usesverdict: reported, and the review prompt
requires the reviewer to callsloop verdict pass|fail --reasonexactly
once; the command, not the prose, decides the stage. - Compact
sloop --helpnow lists only the everyday operator commands
(init,template,daemon,post,show,logs). Everything else,
including the worker verbbrief, remains available and documented under
sloop --help --all. sloop show <RUN>labels the agent stage's exit asagent exit:rather
than a bareexit:, which could read as "the whole run passed" on a run
whose later stage failed. The JSONexit_codefield is unchanged.- Ticket lists — the dashboard, pattern results, and the deprecated
list
alias — order tickets by registration time, newest first, instead of
oldest first, so recently posted and currently running work leads the
output. State does not affect the order. Tickets registered in the same
millisecond fall back to their id's numeric ordinal, newest first. sloop postnow reports every problem with a ticket file in a single
invalid_argumentserror, one per line under the file path, instead of
stopping at the first one. A file whose frontmatter cannot be parsed at
all still fails fast with the parse error, and a file with exactly one
problem reads as it always has.
Deprecated
status,list,watch, andwaitremain accepted as hidden
deprecated aliases ofsloop show. They no longer appear in normal help,
and each invocation writes a note to stderr naming its replacement:
statusandlistpoint tosloop show,watchtosloop show --follow(its optional scope and tail still work), andwaitto
sloop show --follow --quiet(its run and timeout still work). The
aliases will be removed in a future release.
Fixed
sloop reindexnow recognizes patch-equivalent merges. A run branch
whose commits were squashed or rebased onto the default branch is
detected withgit cherryand indexed as merged; previously only true
ancestor merges counted, and reindex flipped squash-merged tickets to
needs_review.
Install sloop 0.3.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/hamish-mackie/sloop/releases/download/v0.3.0/sloop-installer.sh | shInstall prebuilt binaries via Homebrew
brew install sloopDownload sloop 0.3.0
| File | Platform | Checksum |
|---|---|---|
| sloop-aarch64-apple-darwin.tar.gz | Apple Silicon macOS | checksum |
| sloop-x86_64-apple-darwin.tar.gz | Intel macOS | checksum |
| sloop-aarch64-unknown-linux-musl.tar.gz | ARM64 MUSL Linux | checksum |
| sloop-x86_64-unknown-linux-musl.tar.gz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo hamish-mackie/sloopYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>