Three additions from pre-merge review:
1. .pkgnew config merge — pkgbase drops updated configs as /etc/*.pkgnew.
Find and merge them before rebooting so the 15.1 system boots with its
own configs, not 15.0-era ones.
2. Service health check — post-reboot verification now includes explicit
checks: colibri_daemon, postgresql, tailscaled, bastille jails, pfctl.
Version numbers matching is not enough — services must be running.
3. pkg autoremove — clean up orphaned packages the upgrade leaves behind.
Dry-run first, then remove.
Fleet nodes (USB/disk, built from release memstick) use freebsd-update —
one command, zero flags. OSA uses pkgbase, carrying the repo-editing +
IGNORE_OSVERSION complexity. Make the distinction visible before anyone
starts reading steps meant for the other path.
The node OS version changed after the upgrade, but the mother hive_nodes
row still shows the old freebsd_version. Re-running the probe + node_register
makes the upgrade visible to the scheduler.
Renumbered: 8→9 (vulnerability audit).
Four corrections from Codex review:
1. One-time caveat: OSVERSION/IGNORE_OSVERSION is for the boundary only.
Remove it after reboot — persisting would spoof the wrong version on
the next upgrade and silently pull mismatched packages.
2. IGNORE_OSVERSION=yes as the canonical idiom (does not require knowing
the exact __FreeBSD_version number).
3. ABI="FreeBSD:15:amd64" marked as redundant (it is already the default
on 15.x; OSVERSION is the actual lever).
4. Date format: DD.mon.YY → DD.mon.YYYY (matches eu-date-format convention).
Live BE renamed to 15.1-upgrade-25.jun.2026.
Two improvements from the live OSA upgrade run:
1. Boot environment rollback: step 2 (before any base changes) now creates
a BE with naming convention MAJOR.MINOR-upgrade-DD.mon.YY. pkgbase does
NOT auto-snapshot ZFS — this must be done manually. If the upgrade
misbehaves after reboot, bectl activate + reboot = instant rollback.
2. Cross-release override: pkgbase refuses to fetch 15.1 packages while
running 15.0 userland. Document the env OSVERSION=1501000 override
needed to cross the boundary.
Renumbered subsequent steps 2→3, 3→4, ..., 7→8.