command: ["timeout", "-k", "10", "1800", "node", "--test", "/home/jwoltje/.t3/worktrees/mosaic-stack/magica-row329/packages/cli/tests/stack-upgrade.test.mjs"]
TMPDIR: /mnt/storage/scratch/tmp/oSQDBM
begin: {"utc": "2026-10-24T21:52:33.450+00:00", "load1": "4.54"}
launch nice: 19
✔ row 233: sequence 1: confirm fails healthz, the driver reverts, renders the old copy and confirm --rollback --cause A5 passes: exit 1 (7811.510942ms)
✔ row 233: sequence 2: activate --migrate fails at the wrapper, revert restores the store, confirm --rollback --cause A3: exit 1 (4413.348959ms)
✔ row 233: sequence 3: root's render of the new copy fails, the driver rolls back with --cause A4, and holds the lock to the end: exit 1 (4522.654897ms)
✔ row 233: sequence 4: a capture failure is exit 3 from the stage, and A2f restarts the old units and gates them: exit 1 (3125.959772ms)
✔ row 233: N1: a bus that outlives A2's timeout keeps its old start, so A2f's gate fails stale-start: exit 2, both units stopped (7749.240956ms)
✔ row 233: sequence 5: confirm of the wrong copy is refused, and the driver rolls back with --cause A5: exit 1 (4772.741981ms)
✔ row 233: sequence 6: a revert that fails stops both units at exit 2, and the next run refuses at its --plan with nothing stopped (4329.734607ms)
✔ row 233: sequence 7: two upgrades and a rollback --to the previous copy with --restore, the args file following each confirm (10157.432367ms)
✔ row 240: I3 N1: a failed args move after A5 exits 5 args-failed, the new copy live and confirmed and both args files kept (3915.146297ms)
✔ row 233: sequence 8: a migration that writes and fails: the driver reverts to the backup byte for byte, --cause A3: exit 1 (4067.913681ms)
✔ row 233: a second run while the lock is held refuses upgrade-running with one log line and no call (998.212114ms)
✔ row 233: A1 refuses open-activation on any AWAITING-UNITS file, through the stack's user's --plan, with nothing stopped (1723.068163ms)
✔ row 233: a target that migrates refuses migrate-required without --migrate, with nothing stopped (1528.851364ms)
✔ row 233: the rehearsal runs after the plan and before A2; a failed one refuses rehearsal-failed with nothing stopped (1547.732853ms)
✔ row 233: the rehearsal's BACKUP_STORE line goes to the step log after a match, a malformed one as none, the rest of its output never (3916.866427ms)
✔ row 233: a real rehearsal with no backup in the log refuses no-backup, and goes on only with --no-rehearsal, which logs the skip (4508.199597ms)
✔ row 233: a real rehearsal after an upgrade names the log's newest backup; --no-rehearsal with a backup refuses rehearsal-required (4628.902424ms)
✔ row 233: the args file must be the running user's, with no group or other write, one --copy, and the copy the units run (1071.07382ms)
✔ row 233: hostcheck (row 240): a nonzero --check or a missing file refuses profile-drift before the plan (1435.389773ms)
✔ row 233: the checkout must be at --sha (head-mismatch), and a commit the clone can't fast-forward to refuses fetch-failed (1372.807682ms)
✔ row 233: usage exits 4 before any log or lock (969.66597ms)
ℹ tests 21
ℹ suites 0
ℹ pass 21
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 79731.344827
