feat: add the work command family - #225
Merged
Merged
Conversation
…fleet-orchestrator specs
outofcoffee
marked this pull request as ready for review
September 14, 2026 21:36
This was referenced Sep 14, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The work items file — the backlog the orchestrator works — is worked from the shell: add an item, list the backlog's state, abort a running item, remove an item.
Summary
spinloop work addappends an item to the items file: the item's fields from flags (--id,--instructions,--dir,--tag,--priority), the file's validation applied, a duplicate id or an ended record refused, a missing file created with the one itemspinloop work list(aliasls) reports every item with its record from the state beside the file, in file order: state, node, started and ended — a dash where a value is absent, the state colour only on a terminalspinloop work abort <id>stops a running item and puts it back in the backlog, through the abort marker the run's pass takes up; only a running item is abortable, and with no orchestrator running the command says sospinloop work remove <id>takes an item out of the items file, its state, and its log; a running item is refused, naming the abort that goes firstdocs/commands/work.md, pointers fromdocs/README.mdanddocs/work-items.mdImplementation details
The commands work the files directly and never take the run's lock: the file beside the items file is the whole hand-off, and a running orchestrator picks each change up on its next pass.
<file>.aborts/<id>):work abortleaves one, and the run's pass takes it up — the agent stopped the way a clean interrupt stops it (the polite signal, the grace, then the hard end), the record removed, the marker gone, and the item not re-admitted on that pass.work abortandwork removewait on a live run for the change to converge, bounded, and report the outcome — the bound running out, or the run dying mid-wait, are both named.Builds on #205 (the orchestrator) and #204 (the work list API). The GitHub action that works the items file from issue events is tracked in #223.
Closes #206, #207, #208, #209.