Farrow 0.3.0: explicit catalogs and actionable readiness
Farrow 0.3.0 was the public pre-1.0 release superseded by 0.4.0. It removes implicit Catalog refreshes, turns guest bootstrap failures into actionable per-node results, and simplifies the CLI without changing the Pigsty Inventory or fixed-IP deployment model.
What changed
up,plan, and ordinaryimagecommands use one active local Catalog snapshot and never fetch Catalog metadata implicitly.farrow updateexplicitly fetches the configured repository;image syncactivates an exact URL or file.- Guest bootstrap writes an atomic failure stage. Partial operations report
every failed node, stage, and error, and readiness failures point directly to
farrow logs <node>. - Already-running guests can be rechecked without restarting QEMU. A partial lifecycle still rebuilds the SSH client configuration from every committed node.
- Netplan matches deterministic MAC addresses without renaming interfaces.
vm_disks[].fs: autoprefers XFS and falls back to ext4 when necessary. - The redundant
sscommand and ambiguous root/flag shorthands are removed.image resetreplacesreset-manifest, which remains an alias.
Verification boundary
Source commit da6d02426da93c677c94c67fec4eb4fcecf4766a passed the complete local
source gate and a full GoReleaser snapshot: unit and race tests, vet,
Staticcheck, govulncheck, four target builds, image-pipeline and installer
boundaries, archive/package parity, dependency licenses, SBOMs, and native
Linux package verification. The tag workflow repeated those checks before the
Release was made public.
This release does not claim a new native VM replay. The dated macOS arm64/HVF and Ubuntu amd64/KVM evidence remains listed on the Status page; source, package, release, and native-host evidence remain separate gates.
Install or upgrade
Download the installer and assets from the Farrow 0.3.0 GitHub Release:
Homebrew formula and amd64/arm64 DEB/RPM packages are attached to the same pre-release. Existing 0.1/0.2 deployment and Catalog state remains readable; Catalog refresh is now always explicit.