Skip to content

1.7.1 — 2026-10-05

Choose a tag to compare

@github-actions github-actions released this 05 Oct 13:52

Release Notes

The documentation describes Layover as it is, and the code nothing used is gone. Layovers never
backed off or expired, although the book said they did: it now says what waiting does, and when to
stop is up to the waiting agent's prompt.

Compatibility. The configuration format, the HTTP API, the MCP tools and the on-disk layout
are unchanged; a layover is still written with checks and max_checks, so a factory can go back
to 1.7.0. Two things are different in an existing factory:

  • A resumed run's brief says when the work was set down, and no longer "this is check 1".
  • layover doctor no longer has an "expired layovers" finding. It could never appear.

Anyone using the crates as a library loses the items listed under Removed. That API is outside
the semantic-versioning promise.

Removed

  • Library code nothing used, for anyone depending on the crates. None of it changes what a
    factory does: the configuration, the HTTP API, the MCP tools and the on-disk layout are untouched,
    which is what the semantic-versioning promise covers.
    • layover_core::slots (Slots, Admission). It predated the dispatcher, which since 1.4.0 has
      counted the runs it holds alive instead, and nothing ever used it.
    • layover_tower::Factory::run_flight, the one-flight-at-a-time path from before 1.4.0. Nothing
      but its own tests took it; they now run their flight through drain, as serve does.
      Dispatched gains Clone.
    • The itinerary's count of runs that reported no cost (Itinerary::note_unreported_cost,
      has_cost_reporting_gap, unreported_runs, metered_share). Nothing read it; that a run
      measured nothing is carried by its record's cost source, which is what the dashboard, the
      costs API and layover doctor read.
    • HelpRequest::is_same_ask_as, never wired to anything; Ledger::for_itinerary and
      Summary::is_fully_measured (use confidence().is_measured()); diagram::Live::is_idle;
      Factory::env_for.
    • Layover back-off and expiry: Layover::set_down_again, cancel, minutes_until_due, the
      Expired and Cancelled standings, and book's max_checks argument. Nothing outside their
      tests ever called them, so no layover was ever expired or cancelled; layover doctor loses the
      "expired layovers" finding that could therefore never appear. A layover's checks and
      max_checks are still written, as 0, because releases up to 1.7.0 need them to read it back.

Fixed

  • Documentation that described Layover as it was before 1.0. SECURITY.md said the project
    was pre-1.0 and that nothing spawned a process; the README said both "Status: 1.0" and "Pre-1.0:
    expect breaking changes on a minor bump"; AGENTS.md, the book's front page and the reference
    factory's walkthrough said the Tower, its MCP endpoint or the 48-hour soak did not exist yet; the
    install page pinned v0.8.0 and said releases carried no build provenance; and
    docs/architecture.md described a disk layout, Flight envelope, tool list and crate tree from
    the original design. All now describe 1.7.0, and say plainly what is still not built: worktree
    isolation for access and workspace, resident agents, and Codex MCP wiring.
  • layover run --help said there was no MCP server, so agents could not hand work on. There
    is, and work they hand on runs in the same drain.
  • [layover] state_dir was documented as where Hangars live. It is parsed and not honoured —
    everything is kept in .layover/ beside layover.toml — and now says so. planner.toml and the
    reference factory no longer set it or http_addr, neither of which does anything.
  • SECURITY.md advised bounding agents with access, which is declared and not enforced. It
    now says not to rely on it.
  • Layovers were documented to back off and expire, and never did. The book said each fruitless
    check pushed the next one further out, from fifteen minutes to six hours, and gave up after
    twelve. In every release a resumed run that finds nothing books a new layover, for whatever
    wait it asks for, and nothing stops it asking again. The book and docs/decisions.md now say
    that, and that when to stop waiting belongs in the waiting agent's prompt; the reference
    factory's follower now checks hourly, then daily, and stops after a week. A resumed run's brief
    no longer says "this is check 1", which it said every time.

Install layover-cli 1.7.1

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/KotkaZ/layover-project/releases/download/v1.7.1/layover-cli-installer.sh | sh

Install prebuilt binaries via powershell script

powershell -ExecutionPolicy Bypass -c "irm https://github.com/KotkaZ/layover-project/releases/download/v1.7.1/layover-cli-installer.ps1 | iex"

Install prebuilt binaries via Homebrew

brew install KotkaZ/tap/layover

Install prebuilt binaries into your npm project

npm install @layover/layover-cli@1.7.1

Download layover-cli 1.7.1

File Platform Checksum
layover-cli-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum
layover-cli-x86_64-apple-darwin.tar.xz Intel macOS checksum
layover-cli-x86_64-pc-windows-msvc.zip x64 Windows checksum
layover-cli-aarch64-unknown-linux-gnu.tar.xz ARM64 Linux checksum
layover-cli-x86_64-unknown-linux-gnu.tar.xz x64 Linux checksum

Verifying GitHub Artifact Attestations

The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:

gh attestation verify <file-path of downloaded artifact> --repo KotkaZ/layover-project

You can also download the attestation from GitHub and verify against that directly:

gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>