Skip to content

Releases: simonrowland/goal-flight

v1.0.5 — audit + consolidation polish

09 Jun 18:28

Choose a tag to compare

Post-1.0.4 polish from a package audit + a cross-slice consolidation review.

Fixed

  • Worker-liveness consolidation. done_code() and the dispatch ledger no longer classify
    watcher_stopped (a terminal-marker worker whose watcher exited) as terminal before a liveness check —
    they reconcile pid+start-time identity, so --wait/--done report a still-alive worker as live (needs
    reattach) rather than done; a marker + dead worker stays terminal. --wait evaluates each row's liveness
    once per poll.
  • Status reads are pure. goalflight_status.py no longer persists capacity pruning on a status read or
    --wait poll (capacity.json is shared across sibling projects).
  • claude-acp stopgap patch hardened. Named the Claude Code 2.1.169 TUI timing constants, restricted the
    assistant-line screen extraction, and added Rust unit tests (upstream PR moabualruz/claude-code-cli-acp#1;
    vendored patch re-generated).
  • Fleet cleanup-before-fetch coverage. Direct regression test that a nonzero git_prune_claude_refs
    aborts the dispatch before fetch with redacted output.

Docs

  • Narrowed the OpenCode dispatch-routing claim (OpenCode is not a goalflight_dispatch.py preset — it routes
    via host helpers / raw -- <cmd> passthrough). Added SKILL navigation + command-doc entries for --wait,
    the doctor write-probe + claude-acp stopgap probe + installer, capacity adaptive walk-back, and
    goalflight_cleanup_dispatch_refs.

v1.0.4 — dispatch reliability + worker-engine fixes

09 Jun 16:26

Choose a tag to compare

Dispatch-reliability + worker-engine release on top of the 1.0.3 dispatch-death fix.

Added

  • Multi-dispatch --wait. goalflight_status.py --wait <id1,id2,...> (comma or
    repeated) blocks until every named dispatch reaches a terminal state via the
    authoritative done_code() liveness, with --wait-timeout/--poll-s; the
    dispatcher prints the canonical wait hint after launch.
  • Doctor worker write-probe. goalflight_doctor.py --worker-write-probe verifies an
    engine can write a file end-to-end (catches engines that "finish" without persisting).
  • Adaptive capacity walk-back. Repeated provider "model at capacity" signals now feed
    a transient, label-scoped effective-cap reduction (min(static, recommend())) so
    new dispatches queue instead of failing and killing in-flight workers; surfaced in
    status and aged out by the rolling ledger window (no permanent cap mutation).
  • Dispatch-ref cleanup. goalflight_cleanup_dispatch_refs.py (+ allowlisted
    git_prune_claude_refs, run before fetch) prunes corrupt/stale refs/heads/claude/*
    that break fleet fetch; preserves checked-out worktree + remote-backed refs and fails
    closed if the protected set can't be determined.
  • cursor + claude-acp wired into the unified dispatcher happy path.
  • Opt-in claude-acp patch-compile installer (stopgap). scripts/install_claude_acp_patch.sh applies the
    vendored patches/claude-code-cli-acp-2.1.169-tui-submit.patch (the upstream TUI-submit fix — PR
    moabualruz/claude-code-cli-acp#1) to an installed claude-code-cli-acp@0.1.1: clones the pinned upstream
    base, builds with cargo, and swaps + ad-hoc-codesigns the platform binary (run-scoped backup + atomic
    restore on any failure; idempotent; skips once upstream ships a fixed release). A goalflight_doctor.py
    probe flags an unpatched adapter and points to the script. Not auto-run by install.sh; cargo required.

Fixed

  • grok workers execute tools + emit terminal markers. A grok-only prompt preamble
    forces tool execution and a final COMPLETE: marker, ending the
    worker_dead_no_terminal_marker failures; a conservative routing guard gates grok
    file-writing on a passing write-probe. grok-research default model corrected to
    grok-composer-2.5-fast.
  • claude-acp handshake. claude-code-cli-acp only enters ACP stdio mode with no argv;
    the default --model injection is removed and an explicit model is applied via the ACP
    session.
  • Dispatch ergonomics. Code-writer default idle window raised to 600s (read-only /
    research keep 180s); --done treats idle_timeout as live only after an identity-aware
    pid+start-time check, with a reattach hint; read-only review dispatches that expect a
    file write are refused (inline-return is allowed); reused non-terminal dispatch ids are
    refused (dup-id collision).
  • Terminal marker precedence. A dead worker that emitted a recognized terminal marker
    is classified terminal regardless of pid liveness (the idle real-pid check applies only
    when no marker is present).
  • Fleet. Live remote dispatch works end-to-end; an auth-probe tooling failure
    (exit 127 / no-JSON) is treated as inconclusive and re-probed instead of cached as an
    authoritative auth-red; --prompt/--prompt-b64 are redacted across every serialized
    ssh argv, preview, and failure-output path.
  • opencode smoke tests skip (rather than fail) when the OpenCode/LiteLLM backend is
    unhealthy.

Docs

  • cursor orchestrator wake-on-worker-completion (background shell + marker contract);
    fleet remote git lifecycle; gotchas index. SKILL kept within its byte/line budgets.

v1.0.3 — dispatch-death fix

04 Jun 23:18

Choose a tag to compare

Crash-safe dispatch fix. Bash-tail workers could die mid-verify and the decoupled watcher die with them, freezing status.json at running/worker_alive: true (false-alive).

This release: detaches workers into their own session (survives launcher/harness teardown, no zombies); the watcher flushes a terminal status on death (and the dispatcher repairs terminal state from the tail marker if the watcher dies first); never finalizes while the worker is still alive; idle-times-out a quiet post-COMPLETE worker to terminal while letting CPU-active verifies keep waiting; validates status identity (dispatch_id + worker_pid) so a reused dispatch id can't inherit a prior run's result; adds a macOS caffeinate power assertion scoped to the worker lifetime. goalflight_status.py is authoritative for liveness; raw status.json is a heartbeat/terminal surface.

Goal Flight 1.0.2

04 Jun 14:59

Choose a tag to compare

Vendored autoreview release.

Added

  • Vendored autoreview — the structured code-review closeout skill (Codex default; a second-model complement to gstack /review) is now bundled in-repo at autoreview/ instead of requiring an external helper checkout. scripts/autoreview.sh, the doctor probe, and the init / chunk-review docs default to the in-repo autoreview/scripts/autoreview; MIT-licensed, with attribution preserved in autoreview/NOTICE.

Full changelog: v1.0.1...v1.0.2

Goal Flight 1.0.1

03 Jun 22:22

Choose a tag to compare

Hardening + reliability release on the 1.0.0 fleet foundation: crash-safe unified dispatch, Windows/WSL Phase-1, the controller-behaviour Golden Master, a context-discipline layer, and an intent-based multi-engine worker mix.

Added

  • Crash-safe unified dispatch — detached worker + decoupled watcher, pid-identity verification, capacity + ledger registration, --stats accounting, shape-aware steer (message an in-flight worker), and an ACP library entrypoint with a SIGTERM bridge.
  • Windows / WSL Phase-1 — read-layer foundation, WSL=Linux dispatch baseline, refuse-gated native-Windows control plane, python launcher, encoding + autoupdate.
  • Golden Master of controller behaviours — schema + codified entries (R1–R26 + high-recurrence regressions), a Codex-first behaviour harness, the compaction-resume drill, and a multi-host runner.
  • Context-discipline layer — file-backed Agent returns, Read>5KB / foreground-duration / engagement-lint protocols, hooks + wrappers, and a goalflight_push_audit guard.
  • grok-code / grok-research split — intent-based worker labels (Composer 2.5 for code, grok-build for research); bare grok retired.
  • Install + ops — opt-in agent-traits installer, fleet worker install scripts, ~/.goal-flight canonical install path, terse status surface, controller→orchestrator rebrand.

Changed

  • READY registered as a last-line terminal marker; omitted --model defaults to the strongest model; per-worker --model passthrough on both transports.
  • context-mode posture: the controller may use it for its own context discipline; the worker-churn guards are preserved.

Fixed

  • Hardening-sweep P0s: worktree ACP dispatches scoped into status; capacity TTL-prune liveness-gated (no live-lease eviction); live bash-tail workers protected from cleanup SIGKILL; terminal-marker injection guard; empty GOALFLIGHT_STATE_DIR → default, not cwd.
  • Resume forces an end-to-end SKILL.md reload as unconditional STEP 0 (compaction-survival).

Security

  • Denied permissions downgrade to blocked (not silent success); title-allow regex layered after hard safety gates; sandbox base + executable-surface guard.

Full changelog: v1.0.0...v1.0.1