✔ isRunId accepts the run id shape and nothing else (1.895901ms)
✔ a missing data root or runs directory lists nothing (19.117981ms)
✔ runs as a regular file lists nothing, as before (1.156194ms)
✔ listRunIds keeps r- names only, sorted oldest first (2.786988ms)
✔ listRunRecords returns each result, or null for an incomplete or unreadable one (6.490428ms)
✔ readRunRecord returns documents and artifacts in directory order (3.065151ms)
✔ readRunRecord is null for a missing run, a dangling link or a file (1.740552ms)
✔ readRunRecord and readRunDocument refuse an invalid run id before touching the disk (2.297296ms)
✔ readRunDocument reads only the three run documents (1.292545ms)
✔ a link inside the data root is followed (2.752987ms)
✔ a data root that is itself a link is trusted as configured (1.709382ms)
✔ a run directory linked out of the data root is never read (7.227673ms)
✔ a document linked out of the data root reads as null (2.243894ms)
✔ a runs directory linked out of the data root refuses (1.063142ms)
✔ a relative link that climbs out of the data root refuses (0.744008ms)
✔ a sibling whose name starts with the data root's name is outside it (0.882094ms)
✔ a link loop refuses instead of reading as missing (1.142281ms)
✔ an unreadable runs directory refuses instead of listing nothing (3.150174ms)
✔ an unreadable run directory refuses instead of reading as missing (0.853351ms)
✔ a link to the data root's parent is outside it (0.651315ms)
✔ listRunIds sorts whatever order the directory returns (1.091854ms)
✔ listRunRecords lists an r- name that isn't a valid run id, as before (0.60074ms)
✔ the readers write nothing (3.036123ms)
✔ no pointer is null (14.514676ms)
✔ the pointer release.sh writes reads back (3.228549ms)
✔ a pointer that isn't the version 1 shape refuses with exit 2 (72.542192ms)
✔ a pointer that is a directory refuses with exit 4 (1.930314ms)
✔ a state file linked out of the data root refuses (1.407715ms)
✔ a state directory linked out of the data root refuses (0.738704ms)
✔ a state directory linked out to nothing reads as no release and an empty log (0.801635ms)
✔ a missing log is empty (0.664066ms)
✔ the log reads oldest first and counts malformed lines (2.17924ms)
✖ last must be a positive integer (1.668759ms)
✔ the state readers write nothing (2.415105ms)
✔ list prints each run in the established format (147.726988ms)
✔ show prints the run in the established format (108.731864ms)
✔ show of a missing run and an invalid id exit 4 as before (172.540569ms)
✔ list and show refuse a runs directory linked out of the data root (269.573796ms)
✔ show refuses a run linked out of the data root; list reports it unknown (185.736528ms)
✔ list shows an r- name that isn't a valid run id, as before (100.838017ms)
✔ show refuses an invalid id before reading the config (64.187937ms)
ℹ tests 41
ℹ suites 0
ℹ pass 40
ℹ fail 1
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 1135.081876

✖ failing tests:

test at packages/runs/tests/state.test.mjs:115:1
✖ last must be a positive integer (1.668759ms)
  AssertionError [ERR_ASSERTION]: Missing expected exception: 0
      at TestContext.<anonymous> (file:///home/jwoltje/darkwing-scratch/r56b/mutwt/packages/runs/tests/state.test.mjs:118:12)
      at Test.runInAsyncScope (node:async_hooks:226:14)
      at Test.run (node:internal/test_runner/test:1402:25)
      at Test.processPendingSubtests (node:internal/test_runner/test:974:18)
      at Test.postRun (node:internal/test_runner/test:1542:19)
      at Test.run (node:internal/test_runner/test:1467:12)
      at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
    generatedMessage: false,
    code: 'ERR_ASSERTION',
    actual: undefined,
    expected: /last must be a positive integer/,
    operator: 'throws',
    diff: 'simple'
  }
