From 949bb98a79637d4a014566601744561eb69a5d69 Mon Sep 17 00:00:00 2001 From: NovusEdge Date: Sun, 13 Sep 2026 01:15:24 +0300 Subject: [PATCH 1/2] chore(release): prepare v0.6.1 Fixes from a sweep of the MCP tools against a live VM, plus the pidfd wait in stop. Signed-off-by: NovusEdge --- CHANGELOG.md | 26 ++++++++++++++++++++++++++ flake.nix | 2 +- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0a93533..38a85a1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,31 @@ # Changelog +## v0.6.1 + +Fixes found by driving the MCP tools against a live VM. The JSON contract +version stays **3**, and nothing changes about how you use stoat. + +### Fixes + +- `job_status` reported `unknown` for a job that had just started, which the + tools define as a job whose guest side is gone. An agent polling right after + `exec_bg` read a healthy job as lost. A job that has not recorded its pid yet + now reports `starting`. +- An Alpine VM's console log stayed empty, so `stoat logs` had no record of a + boot that failed. The kernel now writes to the serial console as well as the + qemu window. +- A relative guest path, a host path outside a VM's shared directory, and a + project tool with no `stoat.toml` all answered with the error code + `internal`, which reads as a fault in stoat. They answer `usage` now. The + project message also names the directory the server is serving, since a + client started elsewhere has no other way to see it. +- `stoat mcp`'s `wait` tool described `healthy` as an extra condition on + `until`, while both the tool and the CLI treat it as its own state. +- A `restore` on a live VM said "no disk to snapshot", and a failed VM start + printed "qemu failed to start" twice. +- `stoat down` waits on the process itself on Linux instead of polling, so it + returns as soon as QEMU exits. + ## v0.6.0 Stoat can hold limits on what an agent starts, keep an MCP server running in diff --git a/flake.nix b/flake.nix index 8debc81..99c8f9d 100644 --- a/flake.nix +++ b/flake.nix @@ -28,7 +28,7 @@ # `git describe` isn't available in the nix build sandbox, so pin a # version string here; bump on release the same way release.yml's # ${GITHUB_REF_NAME} does for the tarball builds. - version = "0.6.0"; + version = "0.6.1"; in { default = pkgs.buildGoModule { From a0e5f0a55d2c38e58757cb670921b681ae95ce27 Mon Sep 17 00:00:00 2001 From: NovusEdge Date: Sun, 13 Sep 2026 01:16:25 +0300 Subject: [PATCH 2/2] chore: untrack stoat.toml It arrived in #137 through a git add -A, not a decision. A maintainer's own dev VM is theirs to shape, so the file is ignored. A project that wants its VMs to travel with the repository commits this file instead; the ignore line says so. Signed-off-by: NovusEdge --- .gitignore | 6 ++++++ stoat.toml | 27 --------------------------- 2 files changed, 6 insertions(+), 27 deletions(-) delete mode 100644 stoat.toml diff --git a/.gitignore b/.gitignore index f3f828c..85fc162 100644 --- a/.gitignore +++ b/.gitignore @@ -46,4 +46,10 @@ graphify-out/ # local context database, rebuilt by the tool that writes it .veil/ + +# stoat's own secrets and recipe cache .stoat/ + +# a maintainer's own dev VM, which is theirs to shape. A project that wants +# its VMs to travel with the repository commits this file instead. +stoat.toml diff --git a/stoat.toml b/stoat.toml deleted file mode 100644 index a2b5995..0000000 --- a/stoat.toml +++ /dev/null @@ -1,27 +0,0 @@ -# VMs for this repo. Commit this file. Then run: stoat up -schema = 1 - -[project] -# VM name prefix. "dev" below becomes "stoat-dev". -name = "stoat" - -# Recipes to download. Then run: stoat recipe lock -[recipes] - -[vms.dev] -# Required. An id from "stoat images", or a path to your own image. -image = "ubuntu-24.04" -# Delete a line below to get the default. -cpus = 4 -ram = 4096 -disk = "20G" -# Recipe names. Applied on every "stoat up". -recipes = [] -# Dirs to share with the VM, under /work. "." is this repo. -shares = ["."] -# What an agent can do: none, observe, manage, exec. -agent_access = "manage" - -# Recipe settings. Put secrets in .stoat/secrets.toml, and do not commit it. -# [vms.dev.params.docker] -# user = "dev"