command: ["node", "--test", "/home/jwoltje/.t3/worktrees/mosaic-stack/magica-row329/packages/cli/tests/stack-release.test.mjs"] TMPDIR: /mnt/storage/scratch/tmp/Aexva6 begin: {"utc": "2026-10-24T20:23:13.747+00:00", "load1": "4.19"} launch nice: 19 ✔ T1 adopt writes the pointer from the units once; a failing check refuses check-failed (1305.021213ms) ✔ T2 activate installs exactly the pointer's pm, claude and Console flags (1981.808658ms) ▶ T3 a hand-edited unit refuses unit-flags-drift, names the difference and changes nothing ✔ pm (854.421677ms) ✔ claude (890.193771ms) ✔ console (870.320612ms) ✔ T3 a hand-edited unit refuses unit-flags-drift, names the difference and changes nothing (2615.738628ms) ▶ T4 each item 3 refusal changes nothing and logs one line with its code ✔ copy-missing (778.796779ms) ✔ copy-unreachable (740.820486ms) ✔ copy-schema-unknown (775.054724ms) ✔ already-active (795.713594ms) ✔ instance-busy (another business active) (780.468505ms) ✔ instance-busy (this business activating) (794.917459ms) ✔ drop-in-override (802.030911ms) ✔ no-pointer (437.520049ms) ✔ T4 each item 3 refusal changes nothing and logs one line with its code (5906.898299ms) ✔ T5 an activate with no migration stops the Console then the bus, installs, starts the bus then the Console (1958.718319ms) ✔ T6 a migration without --migrate rolls back with migration-needs-flag (1849.476196ms) ✔ T7 --migrate takes the backup before the migration runs (1985.99728ms) ✔ T8 a failed migration restores the backup and keeps the store it replaced (2039.711576ms) ✔ T9 a store outside the target's chain rolls back with store-newer (1898.88745ms) ▶ T10 each gate check failing alone rolls back and puts every file back ✔ units-inactive (5390.43685ms) ✔ bus-status (4562.331686ms) ✔ healthz (5957.519781ms) ✔ copy-check (5107.152189ms) ✔ pm-launch-unconfirmed (5354.877067ms) ✔ T10 each gate check failing alone rolls back and puts every file back (26373.297821ms) ▶ T10b the PM check needs exactly one launched line for a live run of this start ✔ no launched line (5378.284032ms) ✔ two lines (5237.949352ms) ✔ a changed word (5269.514326ms) ✔ run not in launches list (5423.019434ms) ✔ run started before the start (5494.099173ms) ✔ a human launch with no journal line (5255.43664ms) ✔ run for another business (5416.838013ms) ✔ run not live (5405.106472ms) ✔ one well-formed line and a live run pass (2045.374444ms) ✔ T10b the PM check needs exactly one launched line for a live run of this start (44927.279527ms) ✔ T11 a rollback whose gate fails too: rollback-failed, exit 2, both units stopped, no retry (7174.932255ms) ✔ T12 rollback takes the previous copy from the log (3344.941536ms) ✔ T13 a rollback across a migration needs --restore, then restores and goes live (4171.524476ms) ✔ T14 events written after the backup need --events N with the right N (4997.910691ms) ✔ T14b a rollback --restore whose gate fails stops both units and skips item 6 (7462.334058ms) ✔ T14c a rollback without --restore whose gate fails runs item 6 (7754.043518ms) ✔ T15 --plan names the migration and the restore and changes nothing (2961.398117ms) ✔ T26 --plan lists the commits an activate adds, after the migration lines (1735.843322ms) ✔ T27 --plan names each migration step, or says the steps cannot be read (1253.891657ms) ✔ T25 --plan refuses copies-unrelated when neither copy is an ancestor of the other (584.553139ms) ▶ T23 --plan reads the store without changing a file, stopped or held ✔ stopped store (726.102069ms) ✔ held store (727.868655ms) ✔ T23 --plan reads the store without changing a file, stopped or held (1454.560786ms) ✔ T24 business-mismatch and capture-failed refuse with exit 3; a short id is a usage error (1738.504529ms) ✔ T16 status prints the pointer, the log, the check, bus status and drift, and writes nothing (1075.217625ms) ✔ T19 a started line with no final line: status shows it and every changing verb refuses (1553.244623ms) ✔ T20 a held run lock refuses run-locked without a log line; status and --plan still run (1630.528245ms) ✔ T21 a bus unit with no MOSAIC_CLAUDE_BIN: adopt and activate refuse no-claude-pin (1545.284232ms) ▶ T22 the stopped store read: a -wal or -shm refuses store-unclean and is left alone; a clean read adds no file ✔ bus.sqlite-wal (2301.025156ms) ✔ bus.sqlite-shm (2516.927228ms) ✔ clean (2246.38616ms) ✔ T22 the stopped store read: a -wal or -shm refuses store-unclean and is left alone; a clean read adds no file (7065.219491ms) ▶ T28 a unit path, drop-in directory or drop-in file that cannot be read, or a relative unit path, refuses drop-in-override before any stop ✔ unit path (993.326563ms) ✔ drop-in directory (911.862439ms) ✔ drop-in file (831.397494ms) ✔ relative unit path (875.836173ms) ✔ T28 a unit path, drop-in directory or drop-in file that cannot be read, or a relative unit path, refuses drop-in-override before any stop (3613.345732ms) ▶ T29 a bus that stops during the held-store read: --plan says so, rollback --restore refuses restore-mismatch ✔ --plan (932.524984ms) ✔ rollback --restore (2723.021617ms) ✔ T29 a bus that stops during the held-store read: --plan says so, rollback --restore refuses restore-mismatch (3656.08757ms) ✔ T30 a copy check that agrees on another copy fails the gate with copy-check and rolls back (5174.02346ms) ▶ T31 a quoted or escaped Environment= or ExecStart= is unreadable: refusals by name, nothing read from /a ✔ Environment double quotes (1868.945061ms) ✔ Environment single quotes (1821.057733ms) ✔ Environment backslash (1844.558547ms) ✔ ExecStart quotes (1926.910468ms) ✔ Console ExecStart quotes (1906.524227ms) ✔ T31 a quoted or escaped Environment= or ExecStart= is unreadable: refusals by name, nothing read from /a (9369.249876ms) ▶ T32 item 1: --pm-after-harness refuses a target without harness or a file that sets it, and passes without the PM ✔ usage: not with --pm, and only for activate (684.904116ms) ✔ pm-after-harness-target (1052.791079ms) ✔ pm-after-harness-set (1373.971788ms) ✔ a pointer without pm (936.815584ms) ✔ phase 1 installs without --pm, skips pm_launched and writes the pending pointer (2113.560096ms) ✔ T32 item 1: --pm-after-harness refuses a target without harness or a file that sets it, and passes without the PM (6163.167795ms) ▶ T33 item 2: read_pointer takes pmPending only as true beside pm false; a pending pointer refuses activate and shows in status ✔ read_pointer (1619.039574ms) ✔ pm-pending, already-adopted and the status line (3081.39432ms) ✔ T33 item 2: read_pointer takes pmPending only as true beside pm false; a pending pointer refuses activate and shows in status (4701.020145ms) ▶ T34 item 3: pm-on refuses before any stop, passes with the PM, or puts the phase-1 bus back ✔ not-pending (805.646925ms) ✔ harness-unset (2514.410425ms) ✔ a launched line passes: the bus alone restarts with --pm (3581.159615ms) ✔ a failed pm_launched puts the phase-1 unit back: exit 1, still pending (6302.747902ms) ✔ a failed phase-1 gate too: pm-on-down, exit 2, both units stopped (10635.596686ms) ✔ T34 item 3: pm-on refuses before any stop, passes with the PM, or puts the phase-1 bus back (23840.615086ms) ▶ T35 item 4: rollback from pending installs --pm; a plug-in kind the target lacks refuses by name ✔ rollback from pending gates pm_launched on the old copy (3503.508717ms) ✔ after the harness set, rollback refuses until harness is gone (4966.376554ms) ✔ activate names every kind the target lacks (1208.784444ms) ✔ T35 item 4: rollback from pending installs --pm; a plug-in kind the target lacks refuses by name (9679.356469ms) ✔ T36 --plan shows the pending state and lists the row 169 refusals it can see (3549.495638ms) ✔ T37 tester-port activate writes pointer and unit, replaces the port, and supported re-pin and rollback keep it (6826.052767ms) ✔ T38 tester-port rollback to unsupported target drops flag in plan, steps, unit and pointer (3719.213738ms) ✔ T39 tester-port explicit unsupported target reads target copy and refuses before stopping either unit (817.312677ms) ✔ T40 tester-port invalid values refuse exit 4 before stopping, including tunnel and main ports (831.111623ms) ✔ T41 tester-port inherited activate to unsupported target drops it and retains drift refusal and failed-run recovery (8865.445663ms) ✔ T42 tester-port pm-on preserves pointer Console flags (3334.968572ms) ▶ T43 row 180 item 1: runs in one second get distinct activation ids, rollback sets and post-attempt stores ✔ activate then pm-on on the same copy (3367.507602ms) ✔ two restores: an old-form id and a suffixed one, each with its own post-attempt store (6802.847259ms) ✔ adopt takes the next free id too (649.68948ms) ✔ all ten names taken: capture-failed before anything stops, and the log line names no activation (1061.657903ms) ✔ --restore takes an id with or without -1 to -9 and nothing else (1087.464578ms) ✔ T43 row 180 item 1: runs in one second get distinct activation ids, rollback sets and post-attempt stores (12970.303935ms) ▶ T44 row 180 item 2: --plan lists tester-port-invalid and tester-port-target with its other refusals ✔ a bad tester port (2290.548648ms) ✔ without --plan a bad port is usage before any pointer read (499.987574ms) ✔ a target Console without --tester-port (1345.394929ms) ✔ T44 row 180 item 2: --plan lists tester-port-invalid and tester-port-target with its other refusals (4136.807269ms) ▶ T45 row 181 items 2 and 3: the restore guard counts events and every COUNTED table ✔ both modes count events and each listed table, and a table the store lacks counts 0 (1158.071581ms) ✔ one instance_names row and no event refuses before any stop; --events 1 restores (4487.849569ms) ✔ one usage_records row and no event refuses before any stop; --events 1 restores (4470.748072ms) ✔ a listed table that cannot be read refuses restore-mismatch before any stop (2481.60943ms) ✔ the in-run recount counts the listed tables too (3399.541473ms) ✔ T45 row 181 items 2 and 3: the restore guard counts events and every COUNTED table (15998.907772ms) ✔ T46 row 181 item 4: every table in the bus schema is in exactly one of four lists (3.803683ms) ✔ T47 row 185 test 1: a same-schema activate leaves a whole backup and the log line names it (1979.307715ms) ✔ T48 row 185 test 2: a gate failure on a same-schema activate rolls back without a restore (6067.996704ms) ▶ T49 row 185 test 3: a same-schema rollback --restore restores, or refuses rows written after STAMP ✔ no rows after STAMP: restores and goes live (3563.480263ms) ✔ one instance_names row after STAMP refuses post-backup-events; --events 1 restores (3974.007957ms) ✔ T49 row 185 test 3: a same-schema rollback --restore restores, or refuses rows written after STAMP (7538.039216ms) ✔ T50 row 185 test 4: activate --plan prints the backup line and writes nothing (2591.325898ms) ✔ T51 row 185 test 5: an activate with no store file takes no backup (2079.9258ms) ▶ T52 row 186: the activate plan's backup line says what the run will do ✔ same schema (2233.750751ms) ✔ same schema with --migrate (2223.662415ms) ✔ in chain with --migrate (2283.678157ms) ✔ in chain without --migrate (2068.867898ms) ✔ outside the chain (2093.10305ms) ✔ outside the chain with --migrate (2139.786075ms) ✔ T52 row 186: the activate plan's backup line says what the run will do (13044.172778ms) ✔ T178 proxy proof header and path survive re-pin and rollback unchanged in the pointer and unit (3289.19052ms) ✔ T178 proxy proof pair survives a tester-port replacement as well (1989.581468ms) ▶ T53 row 187: activate sets, carries and drops the proof pair ✔ tests 1 and 9: the pair goes after the preview flags, before --send and the kept --tester-port, as the unit renders it; a new pair replaces it (5648.842468ms) ✔ tests 2 and 3: an activate of the live copy writes the pair; a later activate and a rollback carry it (5269.584389ms) ✔ test 2: only a pair change may name the live copy; the log keeps from and to, and rollback still goes to the earlier copy (6905.667602ms) ✔ test 2: a live-copy activate says only the Console flags change, and backs up the stopped store before it installs (4314.919571ms) ✔ test 3: pm-on keeps the pair (3276.07991ms) ✔ test 4: --no-proof drops the pair from the pointer and the unit and says so; with no pair it says so and passes (5904.204409ms) ✔ test 5: each refusal exits 3 before anything stops (3965.523422ms) ✔ tests 5 and 9: --plan lists every proof refusal with the others and writes nothing (897.401149ms) ✔ test 6: usage errors (821.587774ms) ✔ test 7: a rollback to a copy without proof support drops the pair and says so (3609.599316ms) ✔ test 7: an activate to a copy without proof support refuses proof-target without --no-proof and passes with it (4009.935558ms) ✔ T53 row 187: activate sets, carries and drops the proof pair (44625.694153ms) ▶ T54 row 188: a carried pair gets the proof file checks, and a proof file inside the repository refuses ✔ test 1: an activate that carries the pair refuses after chmod 644, in the plan and the run, before anything stops (2446.688111ms) ✔ test 1: an activate that carries the pair refuses after a symlink to a mode-600 file, in the plan and the run, before anything stops (2482.041409ms) ✔ test 1: an activate that carries the pair refuses after removal, in the plan and the run, before anything stops (2588.161885ms) ✔ test 2: a rollback that carries the pair refuses after chmod 644, in the plan and the run, before anything stops (2519.470907ms) ✔ test 3: a proof file inside the repository refuses, in the plan and the run, before anything stops (1072.16824ms) ✔ test 4: a path outside the repository through a directory symlink into it refuses on its realpath (1051.014097ms) ✔ T54 row 188: a carried pair gets the proof file checks, and a proof file inside the repository refuses (12160.807594ms) ▶ T55 row 189: activate --no-send drops --send, and rollback and pm-on carry it off ✔ test 1: a live-copy --no-send drops --send from the pointer and the unit, keeps the rest in order, logs the step and backs up the stopped store (2259.642635ms) ✔ test 2: a plain live-copy activate still refuses already-active, and so does --no-send once --send is gone (3343.91884ms) ✔ test 3: --plan prints one send: line in each case, with the live-copy note on a same-copy run (5041.937663ms) ✔ test 4: after --no-send, a rollback to the earlier copy leaves --send out of the pointer and the unit (3596.269633ms) ✔ test 4: pm-on after --no-send keeps --send off (3333.314366ms) ✔ test 5: --no-send on rollback, pm-on, status, adopt or rehearse is a usage error (720.67796ms) ✔ test 6: with both a pair and --send in the pointer, --no-send and --no-proof each drop what they name and keep the rest (10968.047556ms) ✔ T55 row 189: activate --no-send drops --send, and rollback and pm-on carry it off (29265.29686ms) ▶ T57 row 200: activate --sso, its refusals before any stop, and the rollback to a Console without --sso ✔ item 1: --sso drops the preview set and the pair, puts --sso before --send and the tester port, and the plan names what it drops and carries (4144.072077ms) ✔ item 1: --sso may re-pin the live copy once; later activates carry it; --no-send still drops --send (10107.453196ms) ✔ item 1: --sso with a pair or --no-proof, or on any verb but activate, is a usage error (752.444713ms) ✔ item 2: a target without --sso, a missing or bad console.sso, and each slot problem refuse before any stop (6160.441256ms) ✔ item 3: a config whose console key the target loader refuses stops an activate or a rollback before any stop, naming the first step (4686.242307ms) ✔ row 203: a config whose federation key the target loader refuses stops an activate or a rollback before any stop, naming the first step (4032.454805ms) ✔ item 3: a rollback from --sso to a Console without it takes the flags from the set of the activation onto the copy, past a same-copy re-pin (sage-1389) (12126.954522ms) ✔ item 3: a rollback set that is missing, fails its sums, holds no argv or already ran --sso refuses sso-rollback-flags (4641.43181ms) ✔ round 2 (webby-0028 N1): run through a symlinked repository path, a slot or a proof file inside the repository still refuses (2544.234973ms) ✔ round 2 (webby-0028 N2): a config.json that does not parse stops the run before anything is read or stopped (2240.146674ms) ✔ round 3 (sage-1556): a named instance turns --sso on with its own config, slot and Console unit, and rolls back from its own set (4757.215195ms) ✔ row 238 (#1744): on a named instance the sso-config first step names --instance NAME in both commands (1137.418467ms) ✔ T57 row 200: activate --sso, its refusals before any stop, and the rollback to a Console without --sso (57333.0898ms) ▶ T58 row 273: activate --send and --no-sso ✔ T1: --sso --send turns send on after --sso and before the tester port, and the plan says so (2922.685515ms) ✔ T1: --send beside a carried --sso re-pins the live copy once, and the plan names the carried --sso (4564.738795ms) ✔ T2: --send without --sso, given or carried, refuses before any stop, and --plan lists it (2214.063723ms) ✔ T2 (sage-2315 B1): a rollback from an --sso --send pointer to a Console without --sso ends with neither flag (4268.694092ms) ✔ T2 and T4: --send with --no-send, --no-sso with --sso, --send, a pair or --no-proof, and either flag on another verb, is a usage error (2330.138792ms) ✔ T3: --no-sso on the same copy returns the unit and the pointer to the flags from before --sso, without --send (5625.038909ms) ✔ T3: the set walk passes later re-pins that ran with --sso, and the tester follows the pointer (5560.847509ms) ✔ T3 (sage-2305 a): after --sso, two later re-pins that carry it, then --no-sso restores the flags from before --sso byte for byte (8419.548918ms) ✔ T4 (sage-2305 b): a log in which every set holds a Console with --sso refuses before any unit stops (3963.641971ms) ✔ T4: --no-sso refuses before any stop on a pointer without --sso, a tampered or missing set, a set that ran with --sso, an ok line with no activation, and a log with no set (6149.395328ms) ✔ T58 row 273: activate --send and --no-sso (46020.729753ms) ✔ R1 rehearse passes on the same schema; the scratch root holds its files and the live files stay byte-identical (3458.77861ms) ✔ R2 rehearse runs the migration checks when the schema differs; the live store stays at 3g (3576.149439ms) ✔ R3 a failing migration gives REHEARSAL_FAIL migrate and starts nothing (371.187328ms) ✔ R4 a host that does not start, does not answer status, reports another pid, launches anyway, makes a launches directory or keeps its lock each fails by name (25651.767956ms) ✔ R5 a host that ignores SIGTERM gets SIGKILL and FAIL host-stopped (4453.135149ms) ✔ R6 a Console that does not answer /healthz gives REHEARSAL_FAIL healthz (5661.823175ms) ✔ R7 a host on another copy fails copy-match (5675.461683ms) ✔ R8 a scratch port in use or reserved refuses, and the rehearsal takes no other port (536.106532ms) ✔ R9 mos-0963: a role reference left outside placeholders/, or left on an env variable, fails credential-ref-live before the host starts (800.91623ms) ✔ R10 mos-0962: a scratch business that still sets a tracker fails tracker-configured (389.294822ms) ✔ R11 mos-0961: a scratch config on the live data root or on any root but the scratch one, or a sessions.json naming a running pid, refuses by name (1522.742846ms) ✔ R12 mos-0962: a notifier config with a binding fails notify-off (373.64699ms) ✔ R13 the pre-checks: an old copy, a backup that fails its sums, a missing backup or pointer, and usage (516.24475ms) ✔ R14 a host that writes the live config, the live business file or the backup fails the end check by name (10350.073889ms) ✔ R15 a rehearsal stopped by TERM, INT or HUP fails signal and still stops the host and Console and runs the end checks (10040.389669ms) ✔ row 233: --backup last takes the newest backup the log records; a later line with backup null does not hide it, and the store line names it (3476.770208ms) ✔ row 233: --backup last with no backup in the log, or no log, exits 3 with no-backup and makes no rehearsal directory (209.278877ms) ✔ row 233: --backup last refuses a newest backup that is not an activation id, with exit 1 (121.511846ms) ▶ T56 row 190: named instances side by side on one unit directory, $BIN and set of stand-ins ✔ T-I3 each instance renders its own config, session env and Description, and nothing of another (1609.62252ms) ✔ T-I4 a Console port another installed Console takes refuses port-claimed, and a named instance keeps off the default ports (2122.081567ms) ✔ T-I6 alpha's activate and rollback reach nothing of beta's (4189.660782ms) ✔ T-I6 swapped: beta's reach nothing of alpha's (4136.059924ms) ✔ T-I7 MOSAIC_CONFIG naming alpha's config with no flag refuses instance-root-mismatch and changes nothing (729.953997ms) ✔ T-I9 another instance's bus active refuses nothing; one of this instance's does (6485.314259ms) ✔ T56 row 190: named instances side by side on one unit directory, $BIN and set of stand-ins (19274.139979ms) ✔ row196 explicit socket conversion refuses inherited TCP before stop and rollback disables socket (6254.426968ms) ✔ row196 SSO socket conversion pins pointer and unit argv order without send (2413.23298ms) ▶ row196 interpreter activation checks receipt, identity, plan and startup log ✔ plan and started log preserve the same interpreter JSON (2335.70251ms) ✔ interpreter-receipt-refuse fails at the gate and restores the pointer (3457.512358ms) ✔ interpreter-drift fails at the gate and restores the pointer (3449.980527ms) ✔ missing-verifier refuses before any start or stop (1103.147558ms) ✔ interpreter-unsafe refuses before any start or stop (1122.047271ms) ✔ row196 interpreter activation checks receipt, identity, plan and startup log (11470.083552ms) ▶ row196 rehearsal selects socket only for marked copies and uses scratch dataRoot ✔ socket copy (2438.460635ms) ✔ legacy copy (2454.586459ms) ✔ row196 rehearsal selects socket only for marked copies and uses scratch dataRoot (4893.818199ms) ✔ config-any-key: a non-console target refusal stops activate and rollback before any stop (2942.981853ms) ✔ config-any-key: a pre-270 target refuses each row 270 key on a full activate and rollback, naming the key (4827.444826ms) ✔ config-any-key: accepting loaders run validate with the selected config on activate and rollback (3331.697977ms) ✔ config-any-key: missing-loader copies accept only the four oldest keys (137.670506ms) ✔ config-any-key: missing config passes but malformed JSON refuses without calling the loader (45.7837ms) ℹ tests 224 ℹ suites 0 ℹ pass 224 ℹ fail 0 ℹ cancelled 0 ℹ skipped 0 ℹ todo 0 ℹ duration_ms 638805.10408