command: ["node", "--test", "/home/jwoltje/.t3/worktrees/mosaic-stack/magica-row329/packages/cli/tests/stack-instances.test.mjs"]
TMPDIR: /mnt/storage/scratch/tmp/Zw2ika
begin: {"utc": "2026-10-24T20:21:43.000+00:00", "load1": "5.60"}
launch nice: 19
▶ T-I1 bootstrap --instance creates each instance's config, root and marker once, and refuses what it must not claim
  ✔ alpha and beta get a 0700 config dir, a config naming ~/.mosaic-NAME, a 0700 root and a 0644 marker (58.914242ms)
  ✔ under umask 077 the config and marker are 0600: the source honors the operator's umask (29.751457ms)
  ✔ a second bootstrap of each changes no byte, mode or mtime (120.537575ms)
  ✔ a non-empty root without its own marker refuses before anything is written, worktrees included (117.243255ms)
  ✔ an empty existing root is claimed, and an existing config whose root lost its marker refuses, not repairs (60.506715ms)
  ✔ a dangling symlink at the config path is never written through, named or default (57.971572ms)
  ✔ bad names and stray arguments exit 4 and write nothing (392.18401ms)
  ✔ --instance dev writes exactly what no flag writes (60.320072ms)
✔ T-I1 bootstrap --instance creates each instance's config, root and marker once, and refuses what it must not claim (899.168598ms)
▶ T-I2 selection: the four rows of D1 through the instance op and through an entry point
  ✔ row 1: no flag and no MOSAIC_CONFIG is the default; a missing default config leaves the data root empty (52.040264ms)
  ✔ row 2: MOSAIC_CONFIG alone is that config with the default names (26.456849ms)
  ✔ row 3: --instance NAME alone is NAME's config, root and suffix (56.107458ms)
  ✔ row 4: both must name one file; a symlink to it agrees, any other file exits 4 (367.780671ms)
  ✔ a named instance with no config exits 3 with its own bootstrap hint (28.167442ms)
  ✔ an entry point takes --instance in any position, once, and refuses a mismatch before it prints (166.991334ms)
  ✔ copy takes no --instance in either script: every instance shares the copies (17.130619ms)
✔ T-I2 selection: the four rows of D1 through the instance op and through an entry point (774.246547ms)
▶ T-I7 claims: the instance op refuses a root another instance claims, and a named root with no marker
  ✔ alpha's config pointing at beta's root refuses instance-root-mismatch in every op (136.711645ms)
  ✔ MOSAIC_CONFIG naming alpha's config with no flag refuses: the root is alpha's (28.057204ms)
  ✔ a default config whose root carries alpha's marker refuses; one naming dev, or none, passes (81.047659ms)
  ✔ a named root whose marker is missing, a symlink, unparsable or the wrong shape refuses instance-root-unclaimed (210.210825ms)
✔ T-I7 claims: the instance op refuses a root another instance claims, and a named root with no marker (517.523858ms)
✔ T-I5 two real bus hosts, one per instance, run at once and each answers from its own socket under its own root (1355.226552ms)
✔ T-I10 the guard protects every instance's config dir and data roots, even under a corrupt config (83.478734ms)
ℹ tests 24
ℹ suites 0
ℹ pass 24
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 3731.860778
