Skip to content

Barn 1.2.0 release readiness and acceptance

Release gates, upgrade compatibility, packaging, and physical-host acceptance for Barn 1.2.0.

Status, 2026-11-12: Barn 1.2.0 is published as stable/latest. Its final acceptance is recorded below; the candidate sections preserve the earlier review and its original scope.

Final release

Tag v1.2.0 points to 90f615804b823b4eb491101e642073dcd37a9700. Source/Mac CI and complete packaging CI passed that exact commit before tagging. All 437 reviewed build inputs match the candidate manifest. The signed catalog gate passed again before formal packaging.

The release used the documented local signing path because GitHub signing secrets remain unconfigured. Apple accepted notarization 165b486b-5055-4eca-a595-54bed6bdd6c1. make release-local passed archive, DEB/RPM, SPDX, helper-pairing, timestamp, and package/archive checks. Downloaded CLI/helper/app bytes passed Developer ID, staple, and Gatekeeper checks. All 20 draft attachments and all 20 anonymous public downloads match the verified sizes and SHA-256 digests.

The final downloaded archives passed 18 Linux/KVM operations and all 15 native Mac lifecycle phases. Additional native UI checks confirmed desktop login, two-way plain-text clipboard transfer, a closed window leaving the VM and SSH running, and normal shutdown. Isolated 1.1.0 → 1.2.0 upgrade and repeat installation passed. Both darwin/arm64 and linux/amd64 passed public latest and pinned installation. The Homebrew update covers four platforms; real 1.1.0 → 1.2.0 upgrade, brew test, style, and strict online audit passed.

The final Mac run retained an initial Apple HTTPS TLS timeout. The identical request subsequently returned HTTP 200; the harness resumed after rechecking both guest identities, disk sentinels, and the base digest, then completed the remaining phases. The test VM was stopped after GUI acceptance. GitHub direct-download timeouts were resolved using the hosts’ existing proxies; the public downloads used no authentication. Failure logs were retained.

The homepage keeps its explicitly dated 1.1.0 recording and explains the 1.2.0 default/output changes. A fresh four-node first-run recording needs free .10–.13 addresses; existing host VMs occupied them during this release. Release identity and public-channel evidence are also listed in Validation History.

The 1.2.0 site update at b9e6498 passed site CI and became the active Cloudflare production deployment. The production build checked 303 HTML pages; 19 public checks covered bilingual release, installation and command pages, canonical URLs, sitemaps, search indexes, robots, and a real 404. The final browser connection timed out, so visual evidence retains the earlier local spot-check scope.

Candidate identity

This table records the state at the start of preparation, before the final release commits.

Item Reviewed state
Source repository Local main at 6ab0cd5, three commits ahead of fetched origin/main at b2cc8da; additional hosts changes remain uncommitted
Documentation repository Local main at bc7968a, three commits ahead of fetched origin/main at d392cd5; the command reference and corrections remain uncommitted
Snapshot .goreleaser-preflight-1.2.0-20261112, version 1.1.1-next, binary commit uncommitted
Source inputs SHA-256 9a4d4dd378d4b5762a4d06bd8e19830a09e0919e808f5fffc4c154fbdf55e01a for the manifest of 437 source, test, native, and packaging files
Catalog Revision 2026110502, default u24:stable on the native architecture

The snapshot version follows the existing incpatch rule from the last tag, v1.1.0. Formal 1.2.0 assets were subsequently rebuilt from the final v1.2.0 commit. Snapshot binaries deliberately identify the modified tree as uncommitted.

Issues resolved during preparation

  • The default shell selected GoReleaser 2.18.3 while the source requires 2.20.1. The validation run used the already downloaded pinned tools, and packaging/check-toolchain.sh all confirmed every version before packaging.
  • The changelog and release-note drafts omitted the Linux default change from 2 vCPUs / 4 GiB to 1 vCPU / 2 GiB. They now explain how to preserve the earlier defaults with explicit vm_cpu: 2 and vm_mem: 4GiB. Both binaries were checked against implicit and explicit inventories.
  • The release drafts now include all.vars.vm_hosts and hosts install -f. Their implementation and tests subsequently entered commit ad74cc9. The candidate’s inventory-only preview was exercised before VM creation.
  • Root-level .idea/ and the local barn.yml are now ignored and were retained on disk. Existing source edits and historical-document deletions were preserved.

Completed gates

Gate Evidence
Source make check passed: unit/race tests, static analysis, four-target builds, installer and image-pipeline boundaries, and licenses
Native components make mac-native-test passed bridge, image, menu, and exit-prompt tests
Catalog Both official mirrors passed signature verification, activation in new data roots, embedded-byte comparison, and size/availability checks for 17 stable artifacts each
Packaging make release-snapshot passed with BARN_MAC_REQUIRE_PAYLOAD=1 and the freshly built native payload; archives, Linux DEB/RPM, SPDX, checksums, helper pairing, timestamps, and package/archive parity were verified
Linux runtime 18 operations passed on Ubuntu 26.04.1 / x86_64 with KVM, using the extracted snapshot archive
Mac runtime All 15 automated lifecycle phases passed on macOS 27.0.1 / arm64 with Xcode 27.2, using the extracted snapshot archive
Upgrade A VM created by the published 1.1.0 archive retained its process and identity when adopted by the candidate; root growth and teardown passed
Documentation Production make check and a separate build including drafts passed internal-link and asset checks for 301 and 303 HTML pages; browser spot checks covered the Chinese command index, English lifecycle reference, and Chinese readiness record

The catalog bytes retain SHA-256 d41e46d20bc57cb1b071e3919a27a8f7f703df2addca879970a528e7ab004065, so no embedded catalog update was needed. The catalog gate did not stream every artifact to recompute payload digests; the Linux acceptance image downloads did verify their selected payloads. govulncheck found no reachable vulnerabilities; its unused-module report remains documented in the candidate release notes. Native offline image mutation was skipped by the ordinary source suite; the image pipeline was unchanged in this release candidate.

Linux acceptance

Two isolated guests used Debian 13 20261103.2651.1 and Rocky Linux 9 9.8.20260525.2, with 1 vCPU / 1 GiB, 12 GiB roots, and persistent 1 GiB XFS data disks. The host’s prepared Barn network was reused.

  • A running ext4 root grew to 14 GiB and stayed running. Repeating the target preserved its QEMU PID; a 13 GiB shrink was rejected before mutation.
  • A stopped XFS root grew to 14 GiB through temporary boots and returned to stopped. Repeating the target preserved its root-image modification time.
  • A deliberately failing resize2fs left a recoverable guest journal for a 16 GiB target. Restoring the tool and retrying completed filesystem growth.
  • Killing the CLI after qemu-img enlarged the image left the image journal at an 18 GiB target. Retry completed growth and restored running state.
  • VM UUID, generation, disk serial, partition identity, filesystem UUID, SSH host key, and root/data-disk sentinels survived growth and recovery. Serial stop (-p 1) and unrestricted start (-p 0) passed.
  • Test nodes and their explicitly selected persistent disks were destroyed. The host’s SSH configuration and /etc/hosts matched their original bytes afterward.

The initial harness attempt created a group-writable image-cache directory, which Barn rejected before creating any guest. The fixture was corrected to use private permissions, and its failed evidence was retained. This was a harness setup error.

A separate upgrade run created a guest with the published 1.1.0 archive (SHA-256 09fa37b35ac15763320898bdf81fe0051e83f6b8f3a4898fb01149e6c2611926). The candidate read its applied 2 vCPU / 4 GiB state. Adding explicit CPU/memory values to the inventory let up preserve its running PID and VM UUID; resize -D 14GiB then grew the old 12 GiB root while retaining machine ID, host key, generation, and a data sentinel. Teardown restored the host SSH configuration. An initial harness command assumed that Linux ssh quoted a sh -c argument; the documented raw-SSH contract requires shell quoting. The resumed test used an explicit quoted SSH command and retained the first failure log.

Implementation evidence is in internal/private/root_resize.go, internal/private/root_resize_guest.py, internal/private/root_resize_test.go, internal/private/concurrency_test.go, and cmd/barn/lifecycle_parallel_test.go. The earlier arm64 ext4/XFS acceptance retains its own date and measurements. MBR layouts and native Linux/arm64 hosts still have no new physical-host replay in this round.

Mac acceptance

The test root used an APFS clone of the prepared macOS 27.0 base (26A428). Its configuration disabled automatic host SSH integration. The 15-phase harness covered two independent VMs, guest account policy, private networks, DNS/HTTPS, remote argument and exit-code preservation, shared-folder writes, stop/start, CPU/memory reconfiguration, the two-VM host limit, recreate identity rotation, base-image immutability, repeated up, and destruction of one VM while preserving its peer. The survivor was stopped after the automated run.

The packaged app also opened the survivor’s desktop, and visual inspection confirmed automatic login to the macOS Finder desktop. The VM was then shut down normally. This check did not establish the close-window behavior or clipboard transfer. The snapshot used ad-hoc signing; the final Developer ID/notarized release subsequently passed Gatekeeper, installation, window-close, and clipboard checks as recorded above.

Release execution

  1. Source changes were committed in ad74cc9 and 90f6158; the command reference and documentation review were separately committed in 24ff1e2. Both repositories were pushed and their CI passed.
  2. Source and packaging CI passed 90f6158, then v1.2.0 was tagged and pushed.
  3. The catalog gate passed, and the local Mac release procedure produced matching signed/notarized assets. make release-local verified the complete release.
  4. Final archive acceptance and all 20 draft re-downloads passed before stable/latest publication. All 20 public downloads and both platform installers passed afterward.
  5. Homebrew and the bilingual guides were updated to 1.2.0, including default resources, command options, upgrade notes, and release evidence.

This release used an existing local Developer ID identity and stored notary profile. No keys were exported or signing credentials changed.

Table reader