Skip to content

Releases: ScriptedAlchemy/cargo-hauler

v0.8.2

Choose a tag to compare

@github-actions github-actions released this 11 Sep 22:02
e8541fc

Patch Changes

  • 7490839: Internal: the implementation behind the Agent Bundle entrypoints now lives
    under src/internal/<owner>/ (contracts, cargo, daemon/{runtime,broker,
    scheduling,reporting}, storage, client, operations, host-hooks,
    integrations/kache, platform, shim, ui/{documents,dashboard,shared}, util)
    instead of daemon/, lib/, hooks/, and friends; tests/ is grouped by
    what a test executes (unit, integration, packaging, acceptance). A move-only
    change: no route, executable, protocol, or scheduling behaviour changed.
    docs/architecture.md is the ownership map and walkthrough.

v0.8.1

Choose a tag to compare

@github-actions github-actions released this 11 Sep 05:21
18bdf74

Patch Changes

  • ef7d00e: Dashboard: the Contention panel's CPU stat is labelled 1-min load average
    instead of loadavg (1m), which read as a stuck "loading" timer. Same value:
    the machine's Unix 1-minute load average over its cores.

v0.8.0

Choose a tag to compare

@github-actions github-actions released this 11 Sep 02:31
f88e565

Minor Changes

  • 970dbde: New hauler_dashboard MCP tool carries the dashboard App
    (ui://cargo-hauler/dashboard.html): hosts that render MCP Apps open the
    dashboard beside its result, populated from the same status payload the App
    then polls through hauler_status. Its text result is one summary line plus
    where the App and the text form are, so opening the dashboard never pastes the
    status document into the model's context. hauler_status no longer advertises
    the App and returns the queue, lanes, and tickets as text for the model, as
    before. hauler web opens the App through hauler_dashboard. The
    hauler-dashboard skill and the status document's dashboard line name the new
    tool.

v0.7.4

Choose a tag to compare

@github-actions github-actions released this 10 Sep 03:38
e3216de

Patch Changes

  • 4267d0c: Keep read-only commands and MCP tools on a protocol-compatible running daemon, and defer automatic replacement for submissions until the older daemon is idle (#209).

    Initialize the dashboard on every MCP Apps host — Codex, Claude, ChatGPT, VS Code/Cursor, and Goose — without host-specific origin exceptions (#212).

v0.7.3

Choose a tag to compare

@github-actions github-actions released this 09 Sep 23:51
40e012d

Patch Changes

  • 5d14c4f: Initialize the dashboard in Codex Desktop when MCP Apps use a
    codex-sandbox:// origin (#206).
  • 4ac68a9: Make hauler daemon stop and cargo-hauler daemon stop preserve typed shutdown outcomes and fail when the daemon refuses, times out, returns a protocol error, disconnects before acknowledgement, or remains alive (#200).
  • bc2ed53: Make daemon state and relocated control sockets owner-private on Linux and
    macOS. The state directory, tickets/, and the socket's runtime directory
    are created 0700 and sensitive files — complete ticket output, the ledger
    and its WAL sidecars, the daemon log, the passthrough spool, hook-state.json,
    hook-events.jsonl, the pid lock, and the jobserver FIFO — 0600,
    independent of the invoking shell's umask, instead of inheriting 0755/0644.
    An existing state directory the running user owns is tightened in place; a
    parent named by CARGO_HAULER_STATE_DIR is never chmod'ed, and a state path
    that is a symlink, the wrong kind of entry, or owned by another user is
    refused by name rather than followed, chmod'ed, or deleted. A state directory
    too deep for sun_path now puts its socket in a cargo-hauler-<uid>
    directory under XDG_RUNTIME_DIR/TMPDIR/the system temporary directory
    instead of directly in a possibly shared temporary root, and the socket
    digest no longer lowercases Unix paths, so case-distinct state directories no
    longer share one control endpoint. A daemon left listening at the previous
    relocated path is retired by the next client under the existing one-version
    rule and stopped by hauler daemon stop, so the moved endpoint needs no
    manual cleanup on upgrade. Windows keeps its named pipe and gains no POSIX
    modes or uids. (#203)

v0.7.2

Choose a tag to compare

@github-actions github-actions released this 09 Sep 04:54
52c6e2a

Patch Changes

  • 0ca43dd: Compare prerelease versions by SemVer identifiers when deciding whether a client may replace a daemon. Numeric counters such as rc.10 now sort after rc.9, preventing an older prerelease client from being mistaken for a newer install.
  • bb0901a: Install PATH shims without following existing symlinks or overwriting other hard links to Cargo executables. Refuse dangling destination links unless --force is supplied, publish complete executable files atomically, and prevent an existing destination symlink from being embedded as the shim's own real Cargo path.

v0.7.1

Choose a tag to compare

@github-actions github-actions released this 08 Sep 23:57
d464756

Patch Changes

  • 9a50169: Fail closed with exit 69 when a reattached hauler exec cannot restore the complete Cargo output stream, and serialize overlapping reattach claims so a stale connection cannot replace the latest ticket owner (#187).

v0.7.0

Choose a tag to compare

@github-actions github-actions released this 08 Sep 22:30
e188e4b

Minor Changes

  • 80939ab: A hauler exec whose daemon connection drops after the ticket was accepted now
    reattaches instead of giving up. The client prints connection to daemon lost; reattaching to ticket cc-N…, reconnects (starting the daemon again if it is
    gone, a few attempts one second apart), and sends the new reattach message;
    the daemon rebinds the ticket, replays the output the client had not yet
    received, and streams the rest, so the caller's exit code is cargo's as if the
    connection had held. Output the replay buffer no longer holds is announced as
    N bytes of output missed while reconnecting; full log: <path>, never
    invented. A ticket that finished in the meantime yields its exit code and log
    path.

    The daemon no longer kills a queued ticket the moment its submitter
    disconnects: it keeps its queue position (and may start) for
    CARGO_HAULER_REATTACH_GRACE_MS (default 30000; 0 restores the immediate
    kill) and is killed as killed while queued: submitter disconnected and did not reattach within 30s only if nobody reattaches. A running ticket continues
    as before, marked orphaned; a reattach clears the flag.

    When the ticket cannot be reattached — it never ran cargo and was killed at
    the daemon's shutdown or orphaned by daemon restart, the daemon does not
    know it, the daemon predates this release and answers the message with
    bad-message, or no daemon answered within the budget — the client fails
    closed with brokered run aborted: daemon connection lost; ticket cc-N <reason> and the new exit code 69 (EX_UNAVAILABLE), distinct from cargo's
    1 and from 2/75/130/143. It no longer prints ticket cc-N continues — hauler result cc-N and exits 1 while the daemon records killed while queued. --bg and auto-backgrounded tickets are detached, not owned, and
    are unchanged. (#187)

  • 3758d82: Refuse a target directory shared across workspace roots (#185). When a request's target dir lies outside its own workspace and another lane with a different workspace root already uses that dir, the daemon refuses it as a bad intent (client exit 2) with a message naming both roots, the dir, and the mechanism: cargo's -C metadata hash is relative to the workspace root, so same-layout worktrees write identical artifact filenames into a shared target dir and whichever compiled last runs as "fresh" in the others — a stale-binary collision, not a kache miss. hauler exec --allow-shared-target or CARGO_HAULER_ALLOW_SHARED_TARGET=1 (per request, or in the daemon's environment for all requests) admits the request with one warning line on stderr that cargo's --quiet cannot hide. hauler status and the dashboard flag every lane on a shared dir with sharedTargetWith (optional; older daemons omit it). Refused intents — this one and the existing bad-intent rejections — are now ledgered as denied rows instead of failed runs under lane invalid, so hauler log no longer shows a command that never ran as a failed run.

Patch Changes

  • f84e901: hauler exec --allow-shared-target (and CARGO_HAULER_ALLOW_SHARED_TARGET=1
    in the caller's environment) now reaches the daemon: the server dropped the
    request field, so only the daemon-side setting could admit a shared target dir.
    The shared-target warning has one wording everywhere — the daemon's refusal
    and ack line, the lane board, and the dashboard's lane cell (other roots, full
    text on hover) — and hauler request shows the daemon's warning in its summary
    when the daemon admitted a shared target. The hauler status summary string
    no longer carries extra warning lines the document never rendered; the lane
    board is where the warning shows.
    Detection no longer re-resolves already-canonical lane paths on every submit
    and status poll.

v0.6.18

Choose a tag to compare

@github-actions github-actions released this 08 Sep 20:52
83ac240

Patch Changes

  • d344246: The cargo-hauler skill no longer tells agents how to set CARGO_TARGET_DIR. The one bullet that did ("do not hand-roll CARGO_TARGET_DIR isolation … the daemon already serializes per (workspace, target dir)") read as if sharing one target dir across checkouts were safe because runs are serialized; it is not — cargo's -C metadata hash is relative to the workspace root, so worktrees of one repo with the same layout collide on artifact names and stale binaries run silently (#185). Target-dir policy belongs to the operator and, where hauler can detect the footgun, to the daemon, not to the prompt. (#186)

v0.6.17

Choose a tag to compare

@github-actions github-actions released this 08 Sep 01:01
d46256c

Patch Changes

  • 9da56e4: Preserve shell-hook denials and governed rewrites when telemetry fails, times out,
    or is cancelled. Bound recording waits and emit command-free diagnostics. Keep
    probe errors explicitly host-decided rather than reporting confirmed daemon absence.
  • fcedc8c: Bind shell rewrites to the semantic request's observed plugin code root. Delegate
    standalone root validation to the public framework resolver with explicit fallback
    policies, and remove the product's native host environment precedence chain. (#181)
  • 6595017: Report prerequisite-blocked tickets as never run in result/await headlines and
    guidance. Explain how to rerun the prerequisite and resubmit instead of claiming
    there are diagnostics to fix or that a retry must attach to the blocked ticket. (#177)
  • 217c4c4: Report all observed test-binary summaries from shared test logs in result,
    await, and last, with explicit composite-output and widened-filter labels
    instead of another package's final output tail. (#180)