Skip to main content

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 whose gitmoot_result decision drives advancement; a blocked stage parks the run so you can resume it with gitmoot pipeline resume <run-id> [--from <stage>]. Inspect with gitmoot pipeline list/show, and gate registration with enable/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 blocked with a needs list now records each need as a gate. gitmoot job gates <id> lists the open gates and gitmoot job gates clear <id> --need "<text>"|--all satisfies them; clearing the last open gate auto-resumes the job through the same machinery as gitmoot 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's gitmoot resume decision.
  • 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).