Gitmoot v0.8.7
Gitmoot gains a first-class Pipeline primitive for fixed, repeatable multi-step flows, and a reliability batch makes long-running work harder to strand: reviews re-sync to a moving PR head, GitHub calls stay under a shared budget, and blocked jobs become resumable through explicit gates. Everything additive; defaults unchanged.
What's new since v0.8.6
Pipelines — a declared DAG of shell stages the daemon runs for you (#681, #694, #700, #699)
- A pipeline is a fixed, repeatable multi-step flow:
gitmoot pipeline add <spec.yaml>registers a declared DAG of stages, and the daemon runs it on demand (gitmoot pipeline run <name>) or on an interval schedule. Each stage is an ordinary shell-runtime job whosegitmoot_resultdecision drives advancement; ablockedstage parks the run so you can resume it withgitmoot pipeline resume <run-id> [--from <stage>]. Inspect withgitmoot pipeline list/show, and gate registration withenable/disable. Pipelines are off by default — unlike an orchestra (a model-driven decomposition), a pipeline is an author-declared flow with explicit dependencies. The advancer cadence is decoupled from repo-poll backoff so stages fold forward promptly (#700), and a read-only top-level run now carries a committed-tip note so isolated stages know their worktree is the committed tip (#699). See the Pipelines Workflow doc and the CLI reference.
Reliability: reviews, rate limits, and resumable blockers (#684, #691, #683, #692, #682, #693, #695)
- Review head-SHA re-sync (#691): when a PR branch advances mid-review, gitmoot no longer fails the review on a head-SHA mismatch — while the PR is still open it re-syncs the review to the newer head instead of dropping the work.
- GitHub rate-limit-aware scheduling (#692): GitHub API calls now draw from a shared, process-wide call budget with adaptive backoff on secondary rate limits, so a busy daemon degrades gracefully instead of tripping GitHub's limiter.
- Resumable blocked/needs gates (#693): a job that returns
blockedwith aneedslist now records each need as a gate.gitmoot job gates <id>lists the open gates andgitmoot job gates clear <id> --need "<text>"|--allsatisfies them; clearing the last open gate auto-resumes the job through the same machinery asgitmoot job retry— no polling. A tree paused awaiting a human (escalate_human/ ask-gate) is never auto-resumed by clearing a resource gate; that still needs the human'sgitmoot resumedecision. - Full-chain E2Es cover the review re-sync, rate-limit, and gate paths end to end (#695).
SkillOpt: PACE anytime-valid commit gate (#687, #690)
- SkillOpt candidate promotion gains an optional PACE anytime-valid commit gate: an additional, off-by-default statistical guard (
pace_enabled) that only lets a candidate promote once the accumulated evidence crosses the commit threshold, so peeking at interim results can't promote a candidate early. Additive and default-off — existing promotion behavior is unchanged unless you opt in.
Polish (#688, #689)
- The README is restructured as a product-style overview (#688), and the web dashboard picks up the gitmoot.io moose logo and favicon (#689).