veritas-813fd031-4a5f

job failed

starting new job...


→ running command: dir='/etc/byggsteg/job-clone//veritas/trunk'
branch='trunk'
if ! command -v git >/dev/null 2>&1; then
  echo 'byggsteg: git is not on this deployment PATH, so the clone cannot be updated' >&2
  exit 1
fi
if ! cd "$dir"; then
  echo "byggsteg: cannot enter the clone $dir" >&2
  exit 1
fi
root=$(git rev-parse --show-toplevel 2>/dev/null)
if [ "$root" != "$(pwd -P)" ]; then
  echo "byggsteg: $dir is not a git checkout; remove it and the next run clones it again" >&2
  exit 1
fi
if ! origin=$(git remote get-url origin 2>/dev/null); then
  echo "byggsteg: $dir has no origin remote to fetch $branch from" >&2
  exit 1
fi
before=$(git rev-parse --short HEAD 2>/dev/null) || before=none
attempt=1
while :; do
  if GIT_TERMINAL_PROMPT=0 git fetch --quiet origin "+refs/heads/$branch:refs/remotes/origin/$branch"; then
    break
  fi
  if [ "$attempt" -ge 3 ]; then
    echo "byggsteg: could not fetch $branch from $origin after 3 attempts; is the branch still there, and is the remote reachable?" >&2
    exit 1
  fi
  echo "byggsteg: fetching $branch from $origin failed; retrying in $((attempt * 2))s" >&2
  sleep $((attempt * 2))
  attempt=$((attempt + 1))
done
if ! git checkout --quiet --force -B "$branch" FETCH_HEAD; then
  echo "byggsteg: fetched $branch from $origin but could not check it out" >&2
  exit 1
fi
after=$(git rev-parse --short HEAD)
if [ "$before" = "$after" ]; then
  echo "byggsteg: $branch was already at $after"
else
  echo "byggsteg: $branch moved from $before to $after"
fi


byggsteg: trunk moved from c3c283d to 1389b84

→ running command: cd /etc/byggsteg/job-clone/veritas/trunk && uname -a

Linux wolk-jjba 7.2.11-gnu #1 SMP PREEMPT_DYNAMIC 1 x86_64 GNU/Linux

→ running command: cd /etc/byggsteg/job-clone/veritas/trunk && git log --name-status HEAD^..HEAD

commit 1389b8492be39de3d90fc62c0f6395ff181df497
Author: Josep Bigorra <jjbigorra@gmail.com>
Date:   Wed Nov 4 23:10:29 2026 +0100

    docs: Update visual identity

M       README.org
A       logo.svg

→ running command: cd /etc/byggsteg/job-clone/veritas/trunk && maak test

removed 'reports/lcov/veritas.info'
removed 'reports/lcov/coverage-summary.json'
removed 'reports/lcov/cobertura.xml'
removed 'reports/lcov/jacoco.xml'
removed directory 'reports/lcov'


--------------------------------------------------------------

Maak 0.14.0: the infinitely extensible command runner

Loading tasks from Maak file: /etc/byggsteg/job-clone/veritas/trunk/maak.scm

Executing Maak tasks: test


--------------------------------------------------------------

=> Running Maak task: test

  Run the test suite with coverage of the sources.

Executing: rm -rfv reports/lcov
removed 'reports/html/index.html'
removed directory 'reports/html'

scanning directories for unit tests...
scanning present working directory for unit tests...

shuffled the files with seed 672163891 (replay with VERITAS_SEED=672163891)

found unit tests: (counts.scm generator/simple.scm introduction.scm coverage.scm lists.scm cli.scm jobs.scm simple.scm batteries.scm partition.scm references.scm generator/bounds.scm retries.scm determinism.scm snapshot.scm container.scm flexible-bodies.scm table.scm mock.scm matchers.scm numeric/a/num.scm shuffle.scm nesting.scm bdd.scm assertions.scm timeout.scm impact.scm traces.scm rerun.scm)


running unit tests from file: counts.scm, entrypoint: spec


ℹ️ info - Code coverage: 13.8% of 3070 lines (425 covered) in 11 files
ℹ️ info - Coverage reports written to reports/lcov/veritas.info, reports/html/index.html, reports/lcov/coverage-summary.json, reports/lcov/cobertura.xml, reports/lcov/jacoco.xml
+----------------------------------------------+
[📑 suite] Global counts
  [🧪 test] a test that passed on a retry is counted as flaky
    ✅ got: 1
    ✅ got: 0
    ✅ got: flaky
  [🧪 test] the summary reads as one line
    ✅ got: 1 file, 2 suites, 3 tests and 4 assertions
  [🧪 test] counts survive a trip through a file
    ✅ got: ((files . 1) (suites . 2) (tests . 3) (assertions . 4) (flaky . 0))
  [🧪 test] a benchmark and a task that raised are counted as nothing
    ✅ got: ((files . 0) (suites . 0) (tests . 0) (assertions . 0) (flaky . 0))
    ✅ got: ((files . 0) (suites . 0) (tests . 0) (assertions . 0) (flaky . 0))
  [🧪 test] the run of a single file counts that file
    ✅ got: 1
  [🧪 test] counts add up
    ✅ got: ((files . 0) (suites . 4) (tests . 6) (assertions . 8) (flaky . 0))
  [🧪 test] a nested tree counts its suites, its tests and its assertions
    ✅ got: 2
    ✅ got: 3
    ✅ got: 4
    ✅ got: 0
ℹ️ info - ran 1 tasks in: 1 seconds, -86379 microseconds
ℹ️ info - counted 1 file, 1 suite, 7 tests and 13 assertions

running unit tests from file: generator/simple.scm, entrypoint: spec


ℹ️ info - shuffled with seed 672163891 (replay with VERITAS_SEED=672163891)
ℹ️ info - Code coverage: 15.1% of 3072 lines (464 covered) in 11 files
ℹ️ info - Coverage reports written to reports/lcov/veritas.info, reports/html/index.html, reports/lcov/coverage-summary.json, reports/lcov/cobertura.xml, reports/lcov/jacoco.xml
+----------------------------------------------+
[📑 suite] Basic Suite
  [🧪 test] Basic Generation
(i @ b 7 S ' f a k K x b ;)
(Z $ M W * ] ] O j * h C W % C f 0 u " ? S / ` I / e - e = G | C B j ' . k * : U)
    ✅ success running without errors
()
(19 26 7 26 19)
    ✅ success running without errors
16
21
    ✅ success running without errors
")Gd!L9)w2G9m8| {_-Z.!jeB:[Z[<sx}IqBp:#@^~v +Re{|BJAz>UBcq}\\10bHT"
"%[z{s0o4%p"
    ✅ success running without errors
ℹ️ info - ran 1 tasks in: 0 seconds, 475922 microseconds
ℹ️ info - counted 1 file, 1 suite, 1 test and 4 assertions

running unit tests from file: introduction.scm, entrypoint: spec


ℹ️ info - shuffled with seed 672163891 (replay with VERITAS_SEED=672163891)
ℹ️ info - Code coverage: 16.7% of 3075 lines (512 covered) in 11 files
ℹ️ info - Coverage reports written to reports/lcov/veritas.info, reports/html/index.html, reports/lcov/coverage-summary.json, reports/lcov/cobertura.xml, reports/lcov/jacoco.xml
+----------------------------------------------+
[📑 suite] Error and Exception Handling
  [🧪 test] Summing a list with non-numeric elements;;; note: source file ./src/veritas/runner.scm
;;;       newer than compiled /gnu/store/0w0f5c8hqiz5a524gzhhs6gakyqsjbd3-profile/lib/guile/3.0/site-ccache/veritas/runner.go
;;; note: source file ./src/veritas/runner.scm
;;;       newer than compiled /run/current-system/profile/lib/guile/3.0/site-ccache/veritas/runner.go
;;; found fresh local cache at /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/veritas/trunk/src/veritas/runner.scm.go
;;; note: source file ./src/veritas/prelude.scm
;;;       newer than compiled /gnu/store/0w0f5c8hqiz5a524gzhhs6gakyqsjbd3-profile/lib/guile/3.0/site-ccache/veritas/prelude.go
;;; note: source file ./src/veritas/prelude.scm
;;;       newer than compiled /run/current-system/profile/lib/guile/3.0/site-ccache/veritas/prelude.go
;;; found fresh local cache at /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/veritas/trunk/src/veritas/prelude.scm.go
;;; note: source file ./src/veritas/model.scm
;;;       newer than compiled /gnu/store/0w0f5c8hqiz5a524gzhhs6gakyqsjbd3-profile/lib/guile/3.0/site-ccache/veritas/model.go
;;; note: source file ./src/veritas/model.scm
;;;       newer than compiled /run/current-system/profile/lib/guile/3.0/site-ccache/veritas/model.go
;;; found fresh local cache at /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/veritas/trunk/src/veritas/model.scm.go
;;; note: source file ./src/veritas/reporter.scm
;;;       newer than compiled /gnu/store/0w0f5c8hqiz5a524gzhhs6gakyqsjbd3-profile/lib/guile/3.0/site-ccache/veritas/reporter.go
;;; note: source file ./src/veritas/reporter.scm
;;;       newer than compiled /run/current-system/profile/lib/guile/3.0/site-ccache/veritas/reporter.go
;;; found fresh local cache at /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/veritas/trunk/src/veritas/reporter.scm.go
;;; note: source file ./src/veritas/veritas.scm
;;;       newer than compiled /gnu/store/0w0f5c8hqiz5a524gzhhs6gakyqsjbd3-profile/lib/guile/3.0/site-ccache/veritas/veritas.go
;;; note: source file ./src/veritas/veritas.scm
;;;       newer than compiled /run/current-system/profile/lib/guile/3.0/site-ccache/veritas/veritas.go
;;; found fresh local cache at /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/veritas/trunk/src/veritas/veritas.scm.go
;;; note: source file ./src/veritas/assert.scm
;;;       newer than compiled /gnu/store/0w0f5c8hqiz5a524gzhhs6gakyqsjbd3-profile/lib/guile/3.0/site-ccache/veritas/assert.go
;;; note: source file ./src/veritas/assert.scm
;;;       newer than compiled /run/current-system/profile/lib/guile/3.0/site-ccache/veritas/assert.go
;;; found fresh local cache at /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/veritas/trunk/src/veritas/assert.scm.go
;;; note: source file ./src/veritas/shuffle.scm
;;;       newer than compiled /gnu/store/0w0f5c8hqiz5a524gzhhs6gakyqsjbd3-profile/lib/guile/3.0/site-ccache/veritas/shuffle.go
;;; note: source file ./src/veritas/shuffle.scm
;;;       newer than compiled /run/current-system/profile/lib/guile/3.0/site-ccache/veritas/shuffle.go
;;; found fresh local cache at /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/veritas/trunk/src/veritas/shuffle.scm.go
;;; note: source file ./src/veritas/generator.scm
;;;       newer than compiled /gnu/store/0w0f5c8hqiz5a524gzhhs6gakyqsjbd3-profile/lib/guile/3.0/site-ccache/veritas/generator.go
;;; note: source file ./src/veritas/generator.scm
;;;       newer than compiled /run/current-system/profile/lib/guile/3.0/site-ccache/veritas/generator.go
;;; found fresh local cache at /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/veritas/trunk/src/veritas/generator.scm.go
;;; note: source file ./src/veritas/coverage.scm
;;;       newer than compiled /gnu/store/0w0f5c8hqiz5a524gzhhs6gakyqsjbd3-profile/lib/guile/3.0/site-ccache/veritas/coverage.go
;;; found fresh local cache at /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/veritas/trunk/src/veritas/coverage.scm.go

    [⚙️ assert] Should fail when list contains non-numbers
    ✅ success catching error: wrong-type-arg: (+ Wrong type argument in position ~A: ~S (2 a) (a))
  [🧪 test] Valid summation should not throw an error
    [⚙️ assert] Should not fail with a valid list of numbers
    ✅ success running without errors
+----------------------------------------------+
[📑 suite] Getting Started with Assertions
  [🧪 test] Basic String and Predicate Tests
    [⚙️ assert] Greeting should be personalized
    ✅ got: Hello, Veritas!
    [⚙️ assert] 10 should be greater than 5
    ✅ got: #t
    [⚙️ assert] String comparison should be case-sensitive
    ✅ got: #f
    [⚙️ assert] Greeting should contain the provided name
    ✅ got: #t
+----------------------------------------------+
[📑 suite] Testing Logic and List Operations
  [🧪 test] Number Classification Logic
    [⚙️ assert] 99 should be classified as positive
    ✅ got: positive
    [⚙️ assert] -1 should be classified as negative
    ✅ got: negative
    [⚙️ assert] 0 should be classified as zero
    ✅ got: zero
  [🧪 test] List Summation
    [⚙️ assert] Sum of elements 1 through 5 should be 15
    ✅ got: 15
    [⚙️ assert] Sum of an empty list should be 0
    ✅ got: 0
+----------------------------------------------+
[📑 suite] Advanced Veritas Features
ℹ️ info - TRANSIRE RUBICONEM
ℹ️ info - ALEA IACTA EST
  [🧪 test] Addition ValidationInitializing...
    ✅ got: 4
  [🧪 test] A test with a complex computation block
ℹ️ info - before test runs
ℹ️ info - after test runs
    [⚙️ assert] Complex computation inside an assertion
    ✅ got: 144
+----------------------------------------------+
[📑 suite] Lifecycle hooks bracket their assertions
  [🧪 test] a #:before hook prepares state its own cases can see
    [⚙️ assert] #:before has already run
    ✅ got: (suite-before-all test-before)
  [🧪 test] the #:after of the test before it already ran
    ✅ got: (suite-before-all test-before test-after)
+----------------------------------------------+
[🚄 benchmark]
Computation of the factorial of 10000


[🏃 run #0]
%     cumulative   self             
time   seconds     seconds  procedure
100.00      0.03      0.03  ice-9/popen.scm:182:0:reap-pipes
  0.00     59.04      0.00  veritas/unit/introduction.scm:186:0:factorial
  0.00      0.03      0.00  %after-gc-thunk
  0.00      0.03      0.00  veritas/veritas.scm:992:93
  0.00      0.03      0.00  anon #x3ef1d850
---
Sample count: 2
Total time: 0.034808608 seconds (0.018179011 seconds in GC)

[🏃 run #1]
%     cumulative   self             
time   seconds     seconds  procedure
100.00      0.08      0.08  ice-9/popen.scm:182:0:reap-pipes
  0.00    218.20      0.00  veritas/unit/introduction.scm:186:0:factorial
  0.00      0.08      0.00  %after-gc-thunk
  0.00      0.08      0.00  veritas/veritas.scm:992:93
  0.00      0.08      0.00  anon #x3ef1d850
---
Sample count: 4
Total time: 0.082346254 seconds (0.068135155 seconds in GC)

ℹ️ info - ran 6 tasks in: 1 seconds, 409150 microseconds
ℹ️ info - counted 1 file, 5 suites, 9 tests and 15 assertions

running unit tests from file: coverage.scm, entrypoint: spec


ℹ️ info - shuffled with seed 672163891 (replay with VERITAS_SEED=672163891)
ℹ️ info - Code coverage: 40.8% of 3075 lines (1254 covered) in 11 files
ℹ️ info - Coverage reports written to reports/lcov/veritas.info, reports/html/index.html, reports/lcov/coverage-summary.json, reports/lcov/cobertura.xml, reports/lcov/jacoco.xml
+----------------------------------------------+
[📑 suite] Coverage reports
  [🧪 test] an LCOV file survives a round trip
    ✅ got: TN:
SF:/project/a.scm
DA:1,2
DA:2,0
LH:1
LF:2
end_of_record
SF:/project/b.scm
DA:5,1
LH:1
LF:1
end_of_record

    ✅ got: 2
    ✅ got: #t
    ✅ got: #t
    ✅ got: #t
    ✅ got: #t
    ✅ got: 0
  [🧪 test] reports merge by taking the highest count
    ✅ got: 5
    ✅ got: 0
    ✅ got: 1
    ✅ got: 2
    ✅ got: 1
    ✅ got: 2
  [🧪 test] the Cobertura document describes packages, classes and lines
    ✅ got: 0.6667
    ✅ got: 2
    ✅ got: 3
    ✅ got: 0.0
    ✅ got: #t
    ✅ got: src
    ✅ got: src/a.scm
    ✅ got: 3
    ✅ got: 2
    ✅ got: 0
  [🧪 test] the JSON summary holds the totals and the uncovered lines
    ✅ got: #t
    ✅ got: 3
    ✅ got: 2
    ✅ got: 66.67
    ✅ got: /project/a.scm
    ✅ got: #(2)
  [🧪 test] the JaCoCo document carries per-line and per-class counters
    ✅ got: veritas
    ✅ got: src
    ✅ got: src/a
    ✅ got: a.scm
    ✅ got: 3
    ✅ got: 0
    ✅ got: 1
    ✅ got: 1
    ✅ got: 0
    ✅ got: 1
    ✅ got: 2
  [🧪 test] the HTML report is one page with every file in it
    ✅ got: /tmp/veritas-coverage-zB7MTq/html/index.html
    ✅ got: #t
    ✅ got: 3
    ✅ got: #t
    ✅ got: #t
    ✅ got: #t
    ✅ got: #t
    ✅ got: #t
    ✅ got: #t
    ✅ got: #t
    ✅ got: #t
    ✅ got: #t
    ✅ got: #t
    ✅ got: #f
  [🧪 test] the reports of one run add up
    ✅ got: 2
    ✅ got: 1
    ✅ got: #t
    ✅ got: #t
    ✅ got: #t
    ✅ got: #t
    ✅ got: 3
+----------------------------------------------+
[📑 suite] Coverage measurement
  [🧪 test] lines that ran are counted, lines that did not are zero
    ✅ got: 1
    ✅ got: /tmp/veritas-coverage-qda7EN/veritas-coverage-fixture-22371.scm
    ✅ got: #t
    ✅ got: 0
    ✅ got: 0
    ✅ got: #t
    ✅ got: #t
    ✅ got: #t
  [🧪 test] collecting coverage leaves the VM engine as it found it
    ✅ got: debug
    ✅ got: debug
  [🧪 test] an empty collection is an empty report, not a covered one
    ✅ got: 0
    ✅ got: 0.0
+----------------------------------------------+
[📑 suite] Coverage filtering
  [🧪 test] the include filter is what keeps dependencies out
    ✅ got: #t
    ✅ got: #f
    ✅ got: #f
    ✅ got: #t
    ✅ got: #t
    ✅ got: #t
  [🧪 test] an explicit refusal beats a file that asks for coverage
    ✅ got: #t
    ✅ got: #t
    ✅ got: #f
    ✅ got: #f
    ✅ got: #t
    ✅ got: #t
    ✅ got: #f
    ✅ got: #f
  [🧪 test] a recorded path becomes an absolute one
    ✅ got: /tmp/veritas/x.scm
    ✅ got: /tmp/veritas/sub/x.scm
    ✅ got: /tmp/veritas/x.scm
    ✅ got: /tmp/veritas-coverage-JtHbQp/resolved.scm
+----------------------------------------------+
[📑 suite] Coverage from a run
  [🧪 test] veritas-run writes the coverage of what its tests exercise
ℹ️ info - Code coverage: 42.9% of 7 lines (3 covered) in 1 file
ℹ️ info - Coverage reports written to /tmp/veritas-coverage-sEleY0/lcov/veritas.info, /tmp/veritas-coverage-sEleY0/html/index.html, /tmp/veritas-coverage-sEleY0/lcov/coverage-summary.json, /tmp/veritas-coverage-sEleY0/lcov/cobertura.xml, /tmp/veritas-coverage-sEleY0/lcov/jacoco.xml
  [🧪 test] calls the fixture
    ✅ got: pos
ℹ️ info - ran 1 tasks in: 26 seconds, 128174 microseconds
ℹ️ info - counted 1 file, 0 suites, 1 test and 1 assertion
    ✅ got: #t
    ✅ got: #t
    ✅ got: #t
    ✅ got: #t
    ✅ got: #t
    ✅ got: #t
    ✅ got: #t
ℹ️ info - ran 4 tasks in: 107 seconds, 318209 microseconds
ℹ️ info - counted 1 file, 4 suites, 14 tests and 14 assertions

running unit tests from file: lists.scm, entrypoint: spec


ℹ️ info - shuffled with seed 672163891 (replay with VERITAS_SEED=672163891)
ℹ️ info - Code coverage: 40.8% of 3075 lines (1254 covered) in 11 files
ℹ️ info - Coverage reports written to reports/lcov/veritas.info, reports/html/index.html, reports/lcov/coverage-summary.json, reports/lcov/cobertura.xml, reports/lcov/jacoco.xml
+----------------------------------------------+
[📑 suite] List Manipulation Tests
  [🧪 test] Get First Element
    [⚙️ assert] First element of a number list
    ✅ got: 1
    [⚙️ assert] First element of a symbol list
    ✅ got: a
    [⚙️ assert] First element of an empty list should be #f
    ✅ got: #f
  [🧪 test] List Length
    [⚙️ assert] Length of empty list
    ✅ got: 0
    [⚙️ assert] Length of list with 3 elements
    ✅ got: 3
    [⚙️ assert] Length of list with one element
    ✅ got: 1
  [🧪 test] List Concatenation
    [⚙️ assert] Concatenate two non-empty lists
    ✅ got: (1 2 3 4 5)
    [⚙️ assert] Concatenate empty list with non-empty
    ✅ got: (a b)
    [⚙️ assert] Concatenate non-empty list with empty
    ✅ got: (x y)
    [⚙️ assert] Concatenate two empty lists
    ✅ got: ()
ℹ️ info - ran 1 tasks in: 1 seconds, -211429 microseconds
ℹ️ info - counted 1 file, 1 suite, 3 tests and 10 assertions

running unit tests from file: cli.scm, entrypoint: spec


ℹ️ info - shuffled with seed 672163891 (replay with VERITAS_SEED=672163891)
ℹ️ info - Code coverage: 39.0% of 3296 lines (1286 covered) in 12 files
ℹ️ info - Coverage reports written to reports/lcov/veritas.info, reports/html/index.html, reports/lcov/coverage-summary.json, reports/lcov/cobertura.xml, reports/lcov/jacoco.xml
+----------------------------------------------+
[📑 suite] CLI metadata
  [🧪 test] version and man page name are present
    ✅ got: 0.10.0
    ✅ got: veritas(1)
  [🧪 test] help text documents every flag
    [⚙️ assert] help mentions --scan-dir
    ✅ got: --scan-dir
    [⚙️ assert] help mentions --test-top-dir
    ✅ got: --test-top-dir
    [⚙️ assert] help mentions --test-type
    ✅ got: --test-type
    [⚙️ assert] help mentions --entrypoint
    ✅ got: --entrypoint
    [⚙️ assert] help mentions --test-module
    ✅ got: --test-module
    [⚙️ assert] help mentions --reporter
    ✅ got: --reporter
    [⚙️ assert] help mentions --only-test
    ✅ got: --only-test
    [⚙️ assert] help mentions --only-suite
    ✅ got: --only-suite
    [⚙️ assert] help mentions --only-tag
    ✅ got: --only-tag
    [⚙️ assert] help mentions --only-failed
    ✅ got: --only-failed
    [⚙️ assert] help mentions --no-only-failed
    ✅ got: --no-only-failed
    [⚙️ assert] help mentions --seed
    ✅ got: --seed
    [⚙️ assert] help mentions --partition
    ✅ got: --partition
    [⚙️ assert] help mentions --jobs
    ✅ got: --jobs
    [⚙️ assert] help mentions --coverage
    ✅ got: --coverage
    [⚙️ assert] help mentions --no-coverage
    ✅ got: --no-coverage
    [⚙️ assert] help mentions --coverage-dir
    ✅ got: --coverage-dir
    [⚙️ assert] help mentions --coverage-html-dir
    ✅ got: --coverage-html-dir
    [⚙️ assert] help mentions --coverage-include
    ✅ got: --coverage-include
    [⚙️ assert] help mentions --coverage-exclude
    ✅ got: --coverage-exclude
    [⚙️ assert] help mentions --shuffle
    ✅ got: --shuffle
    [⚙️ assert] help mentions --no-shuffle
    ✅ got: --no-shuffle
    [⚙️ assert] help mentions --benchmarks
    ✅ got: --benchmarks
    [⚙️ assert] help mentions --no-benchmarks
    ✅ got: --no-benchmarks
    [⚙️ assert] help mentions --help
    ✅ got: --help
    [⚙️ assert] help mentions --version
    ✅ got: --version
  [🧪 test] option grammar declares the expected options
    [⚙️ assert] scan-dir is a known option
    ✅ got: #t
    [⚙️ assert] test-top-dir is a known option
    ✅ got: #t
    [⚙️ assert] test-type is a known option
    ✅ got: #t
    [⚙️ assert] entrypoint is a known option
    ✅ got: #t
    [⚙️ assert] test-module is a known option
    ✅ got: #t
    [⚙️ assert] reporter is a known option
    ✅ got: #t
    [⚙️ assert] only-test is a known option
    ✅ got: #t
    [⚙️ assert] only-suite is a known option
    ✅ got: #t
    [⚙️ assert] only-tag is a known option
    ✅ got: #t
    [⚙️ assert] only-failed is a known option
    ✅ got: #t
    [⚙️ assert] no-only-failed is a known option
    ✅ got: #t
    [⚙️ assert] seed is a known option
    ✅ got: #t
    [⚙️ assert] partition is a known option
    ✅ got: #t
    [⚙️ assert] jobs is a known option
    ✅ got: #t
    [⚙️ assert] coverage is a known option
    ✅ got: #t
    [⚙️ assert] no-coverage is a known option
    ✅ got: #t
    [⚙️ assert] coverage-dir is a known option
    ✅ got: #t
    [⚙️ assert] coverage-html-dir is a known option
    ✅ got: #t
    [⚙️ assert] coverage-include is a known option
    ✅ got: #t
    [⚙️ assert] coverage-exclude is a known option
    ✅ got: #t
    [⚙️ assert] shuffle is a known option
    ✅ got: #t
    [⚙️ assert] no-shuffle is a known option
    ✅ got: #t
    [⚙️ assert] benchmarks is a known option
    ✅ got: #t
    [⚙️ assert] no-benchmarks is a known option
    ✅ got: #t
    [⚙️ assert] help is a known option
    ✅ got: #t
    [⚙️ assert] version is a known option
    ✅ got: #t
+----------------------------------------------+
[📑 suite] CLI driver
  [🧪 test] --version exits successfully
    ✅ got: 0
  [🧪 test] --help exits successfully
    ✅ got: 0
ℹ️ info - ran 2 tasks in: 2 seconds, 201345 microseconds
ℹ️ info - counted 1 file, 2 suites, 5 tests and 56 assertions

running unit tests from file: jobs.scm, entrypoint: spec


ℹ️ info - Code coverage: 48.8% of 3309 lines (1615 covered) in 15 files
ℹ️ info - Coverage reports written to reports/lcov/veritas.info, reports/html/index.html, reports/lcov/coverage-summary.json, reports/lcov/cobertura.xml, reports/lcov/jacoco.xml
+----------------------------------------------+
[📑 suite] worker processes
  [🧪 test] a job count is a whole number of processes
    ✅ got: 4
    ✅ got: 1
    ✅ got: #f
    ✅ got: #t
    ✅ got: #t
    ✅ got: #t
  [🧪 test] the records of several runs merge into one
    ✅ got: (a b)
    ✅ got: ()
    ✅ got: #f
    ✅ got: (a)
  [🧪 test] a record can be written where a worker puts it
    ✅ got: (the failing one)
    ✅ got: (the failing one)
    ✅ got: ()
    ✅ got: #t
  [🧪 test] JUnit data merges by summing and concatenating
    ✅ got: 5
    ✅ got: 1
    ✅ got: 0
    ✅ got: 0
    ✅ got: <testsuite name="s2"/>
<testsuite name="s3"/>

  [🧪 test] JUnit data written by a worker can be read back and merged
    ✅ got: 1
    ✅ got: #f
    ✅ got: #f
  [🧪 test] a JUnit document is written from merged data
    ✅ got: tests="5" failures="1" errors="0" skipped="0" time="0.5"
    ✅ got: <testsuite name="s2"/>
<testsuite name="s3"/>

  [🧪 test] a file that passes is reported as passed

running probe tests from file: pass.scm, entrypoint: spec


    ✅ got: #t
  [🧪 test] a file that exits is reported as failed, not as the end of the run

running probe tests from file: exit-one.scm, entrypoint: spec


the file exit-one.scm failed

    ✅ got: #f
  [🧪 test] a file that raises is reported as failed

running probe tests from file: raise.scm, entrypoint: spec


the file raise.scm raised misc-error: (#f "the fixture raised" () #f)

    ✅ got: #f
  [🧪 test] the files after a failing one still run

running probe tests from file: pass.scm, entrypoint: spec



running probe tests from file: exit-one.scm, entrypoint: spec


the file exit-one.scm failed


running probe tests from file: pass.scm, entrypoint: spec


    ✅ got: (exit-one.scm)
    ✅ got: 2
+----------------------------------------------+
[📑 suite] JUnit reports and CI annotations
  [🧪 test] the step summary gets a row per file and one header
    ✅ got: | test/a.scm | 2 | 3 | 4 |
    ✅ got: | test/b.scm | 0 | 0 | 0 |
    ✅ got: 6
  [🧪 test] GitHub annotations name the failing test and its file
    ✅ got: ::error file=test/cart.scm,title=cart > pays%2C twice::totals differ

  [🧪 test] the JUnit document places a test in its file and times it
    ✅ got: <testsuite name="test/cart.scm" tests="2" failures="1" errors="0" skipped="0" time="0.750">
<testcase name="pays" classname="test/cart.scm" file="test/cart.scm" suite="checkout" time="0.250"/>
<testcase name="refuses &lt;&amp;&gt;" classname="test/cart.scm" file="test/cart.scm" suite="checkout" time="0.500">
<failure message="refused">
&lt;no&gt;
</failure>
</testcase>
</testsuite>
<testsuite name="veritas" tests="1" failures="0" errors="1" skipped="0" time="0.000">
<testcase name="veritas" classname="veritas" time="0.000">
<error message="boom"/>
</testcase>
</testsuite>

    ✅ got: 3
    ✅ got: 1
    ✅ got: 1
    ✅ got: <testsuites name="veritas" tests="3" failures="1" errors="1" skipped="0" time="1">
    ✅ got: <testsuite name="test/cart.scm" tests="2" failures="1" errors="0" skipped="0" time="0.750">
<testcase name="pays" classname="test/cart.scm" file="test/cart.scm" suite="checkout" time="0.250"/>
<testcase name="refuses &lt;&amp;&gt;" classname="test/cart.scm" file="test/cart.scm" suite="checkout" time="0.500">
<failure message="refused">
&lt;no&gt;
</failure>
</testcase>
</testsuite>
<testsuite name="veritas" tests="1" failures="0" errors="1" skipped="0" time="0.000">
<testcase name="veritas" classname="veritas" time="0.000">
<error message="boom"/>
</testcase>
</testsuite>

ℹ️ info - ran 2 tasks in: 81 seconds, 46274 microseconds
ℹ️ info - counted 1 file, 2 suites, 13 tests and 13 assertions

running unit tests from file: simple.scm, entrypoint: spec


ℹ️ info - shuffled with seed 672163891 (replay with VERITAS_SEED=672163891)
ℹ️ info - Code coverage: 49.4% of 3309 lines (1636 covered) in 15 files
ℹ️ info - Coverage reports written to reports/lcov/veritas.info, reports/html/index.html, reports/lcov/coverage-summary.json, reports/lcov/cobertura.xml, reports/lcov/jacoco.xml
+----------------------------------------------+
[📑 suite] Complex Data Structure Tests
  [🧪 test] Association List Lookups
    [⚙️ assert] Lookup 'name' in alist
    ✅ got: Alice
    [⚙️ assert] Lookup 'age' in alist
    ✅ got: 30
    [⚙️ assert] Lookup non-existent key should be #f
    ✅ got: #f
  [🧪 test] Vector Operations
    [⚙️ assert] Vector length
    ✅ got: 3
    [⚙️ assert] Vector ref at index 1
    ✅ got: 2
    [⚙️ assert] Vector ref at index 0
    ✅ got: 1
+----------------------------------------------+
[📑 suite] Predicate Tests
  [🧪 test] List Predicates
    [⚙️ assert] Empty list should be null
    ✅ got: #t
    [⚙️ assert] Non-empty list should not be null
    ✅ got: #f
    [⚙️ assert] Pair should be a pair
    ✅ got: #t
    [⚙️ assert] Empty list should not be a pair
    ✅ got: #f
+----------------------------------------------+
[📑 suite] Error Handling Tests
  [🧪 test] Division by Zero Error
    [⚙️ assert] Should signal error on division by zero
    ✅ success catching error: misc-error: (#f Division by zero () #f)
  [🧪 test] No Error on Valid Division
    [⚙️ assert] Should not signal error on valid division
    ✅ success running without errors
    [⚙️ assert] Valid division result
    ✅ got: 5
+----------------------------------------------+
[📑 suite] Basic Suite
  [🧪 test] Do some assertions
    ✅ got: 1
    ✅ got: 1
    ✅ got: 1
  [🧪 test] Check that function calls work
    ✅ got: 42
  [🧪 test] some test without suite
    ✅ got: 1
+----------------------------------------------+
[📑 suite] str
  [🧪 test] String Operation Tests
    ✅ got: hello world
    ✅ got: #t
    ✅ got: #f
ℹ️ info - ran 6 tasks in: 1 seconds, 247167 microseconds
ℹ️ info - counted 1 file, 5 suites, 9 tests and 21 assertions

running unit tests from file: batteries.scm, entrypoint: spec


ℹ️ info - Code coverage: 46.2% of 3540 lines (1636 covered) in 20 files
ℹ️ info - Coverage reports written to reports/lcov/veritas.info, reports/html/index.html, reports/lcov/coverage-summary.json, reports/lcov/cobertura.xml, reports/lcov/jacoco.xml
+----------------------------------------------+
[📑 suite] batteries included
  [🧪 test] one import reaches the assertion library
    ✅ got: 2
    ✅ got: (1 2)
  [🧪 test] one import reaches the runner
    ✅ got: #t
    ✅ got: #t
  [🧪 test] one import reaches the doubles
    ✅ got: #t
    ✅ got: #t
  [🧪 test] one import reaches the table helpers
    ✅ got: #t
    ✅ got: #t
    ✅ got: #t
  [🧪 test] one import reaches the generators
    ✅ got: #t
    ✅ got: #t
  [🧪 test] one import reaches the BDD steps
    ✅ got: #t
    ✅ got: #t
  [🧪 test] one import reaches the snapshot helpers
    ✅ got: #t
    ✅ got: #t
  [🧪 test] one import reaches the trace recorder
    ✅ got: #t
    ✅ got: #t
    ✅ got: #t
  [🧪 test] one import reaches the retry count
    ✅ got: #t
ℹ️ info - ran 1 tasks in: 1 seconds, 227028 microseconds
ℹ️ info - counted 1 file, 1 suite, 9 tests and 19 assertions

running unit tests from file: partition.scm, entrypoint: spec


ℹ️ info - Code coverage: 47.1% of 3540 lines (1666 covered) in 20 files
ℹ️ info - Coverage reports written to reports/lcov/veritas.info, reports/html/index.html, reports/lcov/coverage-summary.json, reports/lcov/cobertura.xml, reports/lcov/jacoco.xml
+----------------------------------------------+
[📑 suite] partitioning a run
  [🧪 test] a partition string is parsed, and refused when impossible
    ✅ got: (2 . 3)
    ✅ got: #f
    ✅ got: #f
    ✅ got: #f
    ✅ got: #f
    ✅ got: #f
  [🧪 test] the partitions of a list are disjoint and complete
    ✅ got: (f0 f1 f2 f3 f4 f5 f6)
    ✅ got: ()
    ✅ got: ()
    ✅ got: ()
  [🧪 test] the split is round-robin over the sorted list
    ✅ got: (a c)
    ✅ got: (b d)
    ✅ got: ()
  [🧪 test] one partition of one is the whole list
    ✅ got: (a b)
ℹ️ info - ran 1 tasks in: 1 seconds, -274979 microseconds
ℹ️ info - counted 1 file, 1 suite, 4 tests and 4 assertions

running unit tests from file: references.scm, entrypoint: spec


ℹ️ info - Code coverage: 47.8% of 3545 lines (1696 covered) in 20 files
ℹ️ info - Coverage reports written to reports/lcov/veritas.info, reports/html/index.html, reports/lcov/coverage-summary.json, reports/lcov/cobertura.xml, reports/lcov/jacoco.xml
+----------------------------------------------+
[📑 suite] source references
  [🧪 test] a test result names the file the test was declared in
    ✅ got: references.scm
  [🧪 test] a suite passes its own declaration site down to its tests
    ✅ got: references.scm
  [🧪 test] the JUnit document writes the file of a test
    ✅ got: file="
    ✅ got: references.scm
  [🧪 test] a location string is reported for the running test
    ✅ got: references.scm
ℹ️ info - ran 1 tasks in: 1 seconds, -219357 microseconds
ℹ️ info - counted 1 file, 1 suite, 4 tests and 4 assertions

running unit tests from file: generator/bounds.scm, entrypoint: spec


ℹ️ info - shuffled with seed 672163891 (replay with VERITAS_SEED=672163891)
ℹ️ info - Code coverage: 48.4% of 3545 lines (1715 covered) in 20 files
ℹ️ info - Coverage reports written to reports/lcov/veritas.info, reports/html/index.html, reports/lcov/coverage-summary.json, reports/lcov/cobertura.xml, reports/lcov/jacoco.xml
+----------------------------------------------+
[📑 suite] integer generators
  [🧪 test] generate-integer respects its bound
    ✅ got: #t
  [🧪 test] the same seed yields the same value
    ✅ got: 2
  [🧪 test] generate-integer default bound is respected
    ✅ got: #t
+----------------------------------------------+
[📑 suite] collection generators
  [🧪 test] generate-string respects min and max length
    ✅ got: #t
  [🧪 test] generate-string yields printable strings
    ✅ got: #t
  [🧪 test] generate-list respects min and max length
    ✅ got: #t
  [🧪 test] generate-symbol respects min and max length
    ✅ got: #t
+----------------------------------------------+
[📑 suite] character generators
  [🧪 test] generate-char yields printable ASCII
    ✅ got: #t
ℹ️ info - ran 3 tasks in: 1 seconds, 354 microseconds
ℹ️ info - counted 1 file, 3 suites, 8 tests and 8 assertions

running unit tests from file: retries.scm, entrypoint: spec


ℹ️ info - Code coverage: 48.9% of 3545 lines (1733 covered) in 20 files
ℹ️ info - Coverage reports written to reports/lcov/veritas.info, reports/html/index.html, reports/lcov/coverage-summary.json, reports/lcov/cobertura.xml, reports/lcov/jacoco.xml
+----------------------------------------------+
[📑 suite] retries
  [🧪 test] a flaky test passes on its second attempt
    ✅ got: 2
    ✅ got: #t
  [🧪 test] a test that never passes is still a failure after a retry
    ✅ got: 2
    ✅ got: #f
  [🧪 test] without retries a test runs once
    ✅ got: 1
  [🧪 test] the retry count can be set for a whole run
    ✅ got: 3
+----------------------------------------------+
[📑 suite] flaky in the JUnit document
  [🧪 test] a retried pass carries flaky=true
    ✅ got: 2
    ✅ got: flaky="true"
+----------------------------------------------+
[📑 suite] flaky in the JSON reporter
  [🧪 test] the flaky line carries its own level
    ✅ got: "level":"flaky"
ℹ️ info - ran 3 tasks in: 1 seconds, -76780 microseconds
ℹ️ info - counted 1 file, 3 suites, 6 tests and 6 assertions

running unit tests from file: determinism.scm, entrypoint: spec


ℹ️ info - Code coverage: 49.1% of 3545 lines (1741 covered) in 20 files
ℹ️ info - Coverage reports written to reports/lcov/veritas.info, reports/html/index.html, reports/lcov/coverage-summary.json, reports/lcov/cobertura.xml, reports/lcov/jacoco.xml
+----------------------------------------------+
[📑 suite] determinism
  [🧪 test] a suite runs its tests in declaration order, run after run
+----------------------------------------------+
[📑 suite] flat
+----------------------------------------------+
[📑 suite] flat
    ✅ got: 3
    ✅ got: (0 1 2)
  [🧪 test] three runs of one suite produce the same JUnit document
    ✅ got: ((tests . 3) (failures . 0) (errors . 0) (skipped . 0) (xml . <testsuite name="test/veritas/unit/determinism.scm" tests="3" failures="0" errors="0" skipped="0">
<testcase name="before" classname="test/veritas/unit/determinism.scm" file="test/veritas/unit/determinism.scm" suite="outer"/>
<testcase name="inside" classname="test/veritas/unit/determinism.scm" file="test/veritas/unit/determinism.scm" suite="outer &gt; inner"/>
<testcase name="after" classname="test/veritas/unit/determinism.scm" file="test/veritas/unit/determinism.scm" suite="outer"/>
</testsuite>
))
    ✅ got: ((tests . 3) (failures . 0) (errors . 0) (skipped . 0) (xml . <testsuite name="test/veritas/unit/determinism.scm" tests="3" failures="0" errors="0" skipped="0">
<testcase name="before" classname="test/veritas/unit/determinism.scm" file="test/veritas/unit/determinism.scm" suite="outer"/>
<testcase name="inside" classname="test/veritas/unit/determinism.scm" file="test/veritas/unit/determinism.scm" suite="outer &gt; inner"/>
<testcase name="after" classname="test/veritas/unit/determinism.scm" file="test/veritas/unit/determinism.scm" suite="outer"/>
</testsuite>
))
  [🧪 test] a seeded shuffle gives the same order twice
    ✅ got: (2 4 5 1 3)
    ✅ got: 5
  [🧪 test] timestamps come from the clock seam
    ✅ got: 2026-01-01T00:00:00Z
    ✅ got: 2026-01-01T00:00:00Z
    ✅ got: 
{"timestamp":"2026-01-01T00:00:00Z","level":"fail","message":"same"}
ℹ️ info - ran 1 tasks in: 2 seconds, -222277 microseconds
ℹ️ info - counted 1 file, 1 suite, 4 tests and 4 assertions

running unit tests from file: snapshot.scm, entrypoint: spec


ℹ️ info - Code coverage: 51.2% of 3545 lines (1815 covered) in 20 files
ℹ️ info - Coverage reports written to reports/lcov/veritas.info, reports/html/index.html, reports/lcov/coverage-summary.json, reports/lcov/cobertura.xml, reports/lcov/jacoco.xml
+----------------------------------------------+
[📑 suite] snapshots
  [🧪 test] the first run writes the snapshot and passes
    [assert] greeting
    [pass] wrote snapshot ./tmp-snapshot-suite/greeting.snap
    ✅ got: #t
    ✅ got: #t
    ✅ got: (hello world)
  [🧪 test] the second run matches
    [assert] greeting
    [pass] matches snapshot ./tmp-snapshot-suite/greeting.snap
    ✅ got: #t
  [🧪 test] a mismatch fails and leaves the snapshot alone
    [assert] greeting
    [fail] snapshot mismatch for ./tmp-snapshot-suite/greeting.snap
expected: (hello world)
     got: (hello there)
(rerun with VERITAS_UPDATE_SNAPSHOTS=true to accept the new value)
    ✅ got: #f
    ✅ got: (hello world)
  [🧪 test] an update rewrites the snapshot and passes
    [assert] greeting
    [pass] updated snapshot ./tmp-snapshot-suite/greeting.snap
    ✅ got: #t
    ✅ got: (hello there)
    ✅ got: #fwarning: mutating the process environment while multiple threads are running;
         further behavior unspecified.
warning: mutating the process environment while multiple threads are running;
         further behavior unspecified.
;;; note: source file ./src/veritas/cli.scm
;;;       newer than compiled /gnu/store/0w0f5c8hqiz5a524gzhhs6gakyqsjbd3-profile/lib/guile/3.0/site-ccache/veritas/cli.go
;;; note: source file ./src/veritas/cli.scm
;;;       newer than compiled /run/current-system/profile/lib/guile/3.0/site-ccache/veritas/cli.go
;;; found fresh local cache at /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/veritas/trunk/src/veritas/cli.scm.go
;;; note: source file ./tmp-jobs-suite/veritas/probe/pass.scm
;;;       newer than compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/veritas/trunk/tmp-jobs-suite/veritas/probe/pass.scm.go
;;; note: auto-compilation is enabled, set GUILE_AUTO_COMPILE=0
;;;       or pass the --no-auto-compile argument to disable.
;;; compiling ./tmp-jobs-suite/veritas/probe/pass.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/veritas/trunk/tmp-jobs-suite/veritas/probe/pass.scm.go
;;; note: source file ./tmp-jobs-suite/veritas/probe/exit-one.scm
;;;       newer than compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/veritas/trunk/tmp-jobs-suite/veritas/probe/exit-one.scm.go
;;; compiling ./tmp-jobs-suite/veritas/probe/exit-one.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/veritas/trunk/tmp-jobs-suite/veritas/probe/exit-one.scm.go
;;; note: source file ./tmp-jobs-suite/veritas/probe/raise.scm
;;;       newer than compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/veritas/trunk/tmp-jobs-suite/veritas/probe/raise.scm.go
;;; compiling ./tmp-jobs-suite/veritas/probe/raise.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/veritas/trunk/tmp-jobs-suite/veritas/probe/raise.scm.go
;;; note: source file ./src/veritas/mock.scm
;;;       newer than compiled /gnu/store/0w0f5c8hqiz5a524gzhhs6gakyqsjbd3-profile/lib/guile/3.0/site-ccache/veritas/mock.go
;;; note: source file ./src/veritas/mock.scm
;;;       newer than compiled /run/current-system/profile/lib/guile/3.0/site-ccache/veritas/mock.go
;;; found fresh local cache at /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/veritas/trunk/src/veritas/mock.scm.go
;;; note: source file ./src/veritas/snapshot.scm
;;;       newer than compiled /gnu/store/0w0f5c8hqiz5a524gzhhs6gakyqsjbd3-profile/lib/guile/3.0/site-ccache/veritas/snapshot.go
;;; note: source file ./src/veritas/snapshot.scm
;;;       newer than compiled /run/current-system/profile/lib/guile/3.0/site-ccache/veritas/snapshot.go
;;; found fresh local cache at /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/veritas/trunk/src/veritas/snapshot.scm.go
;;; note: source file ./src/veritas/table.scm
;;;       newer than compiled /gnu/store/0w0f5c8hqiz5a524gzhhs6gakyqsjbd3-profile/lib/guile/3.0/site-ccache/veritas/table.go
;;; note: source file ./src/veritas/table.scm
;;;       newer than compiled /run/current-system/profile/lib/guile/3.0/site-ccache/veritas/table.go
;;; found fresh local cache at /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/veritas/trunk/src/veritas/table.scm.go
;;; note: source file ./src/veritas/bdd.scm
;;;       newer than compiled /gnu/store/0w0f5c8hqiz5a524gzhhs6gakyqsjbd3-profile/lib/guile/3.0/site-ccache/veritas/bdd.go
;;; note: source file ./src/veritas/bdd.scm
;;;       newer than compiled /run/current-system/profile/lib/guile/3.0/site-ccache/veritas/bdd.go
;;; found fresh local cache at /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/veritas/trunk/src/veritas/bdd.scm.go
warning: mutating the process environment while multiple threads are running;
         further behavior unspecified.
warning: mutating the process environment while multiple threads are running;
         further behavior unspecified.
;;; note: source file ./src/veritas/container.scm
  [🧪 test] a procedure is called when the assertion runs
    [assert] a call counter
    [pass] wrote snapshot ./tmp-snapshot-suite/a-call-counter.snap
    ✅ got: #t
    ✅ got: 1
    ✅ got: 1
  [🧪 test] a snapshot that cannot be read fails instead of being rewritten
    [assert] damaged
    [fail] could not read snapshot ./tmp-snapshot-suite/damaged.snap: read-error: (#f ./tmp-snapshot-suite/damaged.snap:1:12: unexpected end of input while searching for: ~A ()) #f)
    ✅ got: #f
    ✅ got: (unbalanced
  [🧪 test] names become file names
    ✅ got: ./tmp-snapshot-suite/the-rendered-cart.snap
    ✅ got: ./tmp-snapshot-suite/spaces.snap
  [🧪 test] a snapshot without a name is refused
    ✅ got: #t
  [🧪 test] the cleanup removes a tree, nested files included
    ✅ got: #t
    ✅ got: ()
    ✅ got: #f
ℹ️ info - ran 1 tasks in: 1 seconds, -6109 microseconds
ℹ️ info - counted 1 file, 1 suite, 9 tests and 9 assertions

running unit tests from file: container.scm, entrypoint: spec


ℹ️ info - shuffled with seed 672163891 (replay with VERITAS_SEED=672163891)
ℹ️ info - Code coverage: 52.9% of 3714 lines (1966 covered) in 21 files
ℹ️ info - Coverage reports written to reports/lcov/veritas.info, reports/html/index.html, reports/lcov/coverage-summary.json, reports/lcov/cobertura.xml, reports/lcov/jacoco.xml
+----------------------------------------------+
[📑 suite] container lifecycle against a fake runtime
  [🧪 test] run-command! raises on failure
    ✅ raised an error as expected
  [🧪 test] container-exec returns output
    ✅ got: exec-ok
  [🧪 test] container-run returns an id
    ✅ got: fake-container
  [🧪 test] wait-for-command succeeds
    ✅ got: #t
  [🧪 test] runtime detection honours the environment
    ✅ got: /tmp/veritas-fake-container-runtime.sh
    ✅ got: #t
  [🧪 test] container-running? detects a running container
    ✅ got: #t
  [🧪 test] assert-container-running reports success
    [⚙️ assert] the probe is running
    ✅ container assert-running-probe is running
  [🧪 test] container-build shells out to the runtime
    ✅ got: built
  [🧪 test] wait-for-log succeeds on a matching line
    ✅ got: #t
  [🧪 test] container-logs returns logs
    ✅ got: line1
ready
  [🧪 test] run-command reports status and output
    ✅ got: (3 hi
)
  [🧪 test] with-container cleans up after the thunk
    ✅ got: fake-container
    ✅ got: run -d alpine
rm -f fake-container

  [🧪 test] a yielding thunk keeps its container until it is done
    [⚙️ assert] the container is still running after the thunk yielded
    ✅ got: #t
+----------------------------------------------+
[📑 suite] container command construction and readiness
  [🧪 test] wait-until raises once the timeout is exceeded
    ✅ raised an error as expected
  [🧪 test] wait-until returns as soon as the predicate holds
    ✅ got: #t
  [🧪 test] container-exec-status returns status and output
    ✅ got: 0
    ✅ got: exec-ok

  [🧪 test] container-run forwards name, env, ports and volumes
    ✅ got: --name svc
    ✅ got: -e A=1
    ✅ got: -p 8080:80
    ✅ got: -v /tmp:/data
ℹ️ info - ran 2 tasks in: 2 seconds, -49270 microseconds
ℹ️ info - counted 1 file, 2 suites, 17 tests and 23 assertions

running unit tests from file: flexible-bodies.scm, entrypoint: spec


ℹ️ info - Code coverage: 54.9% of 3714 lines (2038 covered) in 21 files
ℹ️ info - Coverage reports written to reports/lcov/veritas.info, reports/html/index.html, reports/lcov/coverage-summary.json, reports/lcov/cobertura.xml, reports/lcov/jacoco.xml
+----------------------------------------------+
[📑 suite] flexible bodies
  [🧪 test] a let body contributes every assertion it builds
    ✅ got: (#t #t #t)
    ✅ got: (#t #t #t)
  [🧪 test] a failing assertion inside a let body is reported
    ✅ got: (#t #f #t)
  [🧪 test] a statement after the assertions does not hide them
    ✅ got: (#t)
  [🧪 test] when and cond bodies are read the same way
    ✅ got: (#t #t)
    ✅ got: (#t #t)
  [🧪 test] a list of assertions is a list of cases
    ✅ got: (#t #t #t)
    ✅ got: (#t #t)
  [🧪 test] an assertion used as an input is not run twice
    ✅ got: (#t #t)
  [🧪 test] a body that builds no assertions is a failure
    ✅ got: (#f)
    ✅ got: (#f)
  [🧪 test] a let around several tests contributes every test
    ✅ got: (#t #t)
    ✅ got: (#t #t)
  [🧪 test] a let around the steps contributes every step
    ✅ got: (#t #t #t)
    ✅ got: (#t #t #t)
  [🧪 test] the body waits for the run
    ✅ got: #f
    ✅ got: (#t)
    ✅ got: #t
  [🧪 test] hooks bracket the body and are visible to it
    ✅ got: (#t #t)
    ✅ got: done
  [🧪 test] a deadline still covers a let body
    ✅ got: (#t)
  [🧪 test] the procedures behind the macros take built cases
    ✅ got: (#t #t #t)
    ✅ got: (#t)
ℹ️ info - ran 1 tasks in: 2 seconds, 365744 microseconds
ℹ️ info - counted 1 file, 1 suite, 13 tests and 23 assertions

running unit tests from file: table.scm, entrypoint: spec


ℹ️ info - shuffled with seed 672163891 (replay with VERITAS_SEED=672163891)
ℹ️ info - Code coverage: 55.0% of 3714 lines (2041 covered) in 21 files
ℹ️ info - Coverage reports written to reports/lcov/veritas.info, reports/html/index.html, reports/lcov/coverage-summary.json, reports/lcov/cobertura.xml, reports/lcov/jacoco.xml
+----------------------------------------------+
[📑 suite] collection emptiness
+----------------------------------------------+
[📑 suite] string ""
  [🧪 test] emptiness matches
    ✅ got: #t
+----------------------------------------------+
[📑 suite] string "x"
  [🧪 test] emptiness matches
    ✅ got: #f
+----------------------------------------------+
[📑 suite] integer addition
  [🧪 test] -1 + 1 = 0
    ✅ got: 0
  [🧪 test] 10 + 20 = 30
    ✅ got: 30
  [🧪 test] 100 + -100 = 0
    ✅ got: 0
  [🧪 test] 0 + 0 = 0
    ✅ got: 0
  [🧪 test] 1 + 2 = 3
    ✅ got: 3
+----------------------------------------------+
[📑 suite] string reversal is involutive
  [🧪 test] reversing "ab" twice is identity
    ✅ got: ab
  [🧪 test] reversing "veritas" twice is identity
    ✅ got: veritas
  [🧪 test] reversing "" twice is identity
    ✅ got: 
  [🧪 test] reversing "racecar" twice is identity
    ✅ got: racecar
  [🧪 test] reversing "a" twice is identity
    ✅ got: a
+----------------------------------------------+
[📑 suite] cases->table names the columns
  [🧪 test] indexes every case by the key
    ✅ got: ((:a :a 1) (:b :b 2))
+----------------------------------------------+
[📑 suite] grouped squares
+----------------------------------------------+
[📑 suite] n = 1
  [🧪 test] square is correct
    ✅ got: 1
+----------------------------------------------+
[📑 suite] n = 2
  [🧪 test] square is correct
    ✅ got: 4
+----------------------------------------------+
[📑 suite] n = 3
  [🧪 test] square is correct
    ✅ got: 9
ℹ️ info - ran 5 tasks in: 1 seconds, 193120 microseconds
ℹ️ info - counted 1 file, 10 suites, 16 tests and 16 assertions

running unit tests from file: mock.scm, entrypoint: spec


ℹ️ info - Code coverage: 56.5% of 3714 lines (2099 covered) in 21 files
ℹ️ info - Coverage reports written to reports/lcov/veritas.info, reports/html/index.html, reports/lcov/coverage-summary.json, reports/lcov/cobertura.xml, reports/lcov/jacoco.xml
+----------------------------------------------+
[📑 suite] test doubles
  [🧪 test] a spy records the calls and the results
    ✅ got: 3
    ✅ got: 7
    ✅ got: #t
    ✅ got: ((1 2) (3 4))
    ✅ got: (3 7)
    ✅ got: 2
    ✅ got: #t
    ✅ got: #f
  [🧪 test] a stub ignores its arguments and returns a value
    ✅ got: 0
    ✅ got: 0
    ✅ got: (() (some arguments))
    ✅ got: 2
  [🧪 test] assertions read the spy when they run
    [assert] send was called
    [fail] error, expect: #t, got: #f
    ✅ got: #f
    [assert] send was called
    [pass] got: #t
    ✅ got: #t
    [assert] send was called with (ada thanks)
    [pass] got: ((ada thanks))
    ✅ got: #t
    [assert] send was called with (ada)
    [fail] error, expect: (ada), got: ((ada thanks))
    ✅ got: #f
    [assert] send was called 1 time(s)
    [pass] got: 1
    ✅ got: #t
    [assert] send was called 2 time(s)
    [fail] error, expect: 2, got: 1
    ✅ got: #f
  [🧪 test] a spy is an ordinary procedure
    ✅ got: (2 4 6)
    ✅ got: 3
  [🧪 test] a binding is replaced and restored
    ✅ got: 42
    ✅ got: 0
    ✅ got: 42
    ✅ got: #t
  [🧪 test] a call that reads the binding at run time sees the replacement
    ✅ got: 0
  [🧪 test] a binding is restored even when the body raises
    ✅ got: 42
ℹ️ info - ran 1 tasks in: 1 seconds, -176132 microseconds
ℹ️ info - counted 1 file, 1 suite, 7 tests and 7 assertions

running unit tests from file: matchers.scm, entrypoint: spec


ℹ️ info - shuffled with seed 672163891 (replay with VERITAS_SEED=672163891)
ℹ️ info - Code coverage: 58.1% of 3714 lines (2157 covered) in 21 files
ℹ️ info - Coverage reports written to reports/lcov/veritas.info, reports/html/index.html, reports/lcov/coverage-summary.json, reports/lcov/cobertura.xml, reports/lcov/jacoco.xml
+----------------------------------------------+
[📑 suite] passing matchers
  [🧪 test] ranges and membership
    ✅ got: 5
    ✅ got: 0
    ✅ got: green
  [🧪 test] containment
    ✅ got: b
    ✅ got: world
    ✅ got: 2
    ✅ got: z
    ✅ got: z
  [🧪 test] regular expressions
    ✅ got: hello
    ✅ got: abc
    ✅ got: hello
  [🧪 test] raising errors
    ✅ raised an error as expected
    ✅ raised an error as expected
    ✅ raised an error as expected
  [🧪 test] emptiness and length
    ✅ got: ()
    ✅ got: 
    ✅ got: #()
    ✅ got: (1)
    ✅ got: a
    ✅ got: (1 2 3)
    ✅ got: hello
+----------------------------------------------+
[📑 suite] matcher edge cases and failures
  [🧪 test] in-range boundaries are inclusive
    [pass] got: 1
    [pass] got: 10
    [fail] error, expect: (1 . 10), got: 11
    ✅ got: #t
    ✅ got: #t
    ✅ got: #f
  [🧪 test] not-contains
    [pass] got: 9
    [fail] error, expect: (1 2), got: 2
    ✅ got: #t
    ✅ got: #f
  [🧪 test] hash tables are containers too
    [pass] got: a
    [fail] error, expect: #<hash-table 7f576ee65600 1/31>, got: b
    ✅ got: #t
    ✅ got: #f
  [🧪 test] length and emptiness of unsized values
    [fail] error, expect: 1, got: 42
    [fail] error, expect: #t, got: 42
    [fail] error, expect: #t, got: ()
    [pass] got: #(1)
    ✅ got: #f
    ✅ got: #f
    ✅ got: #f
    ✅ got: #t
  [🧪 test] matches accepts a compiled regexp
    [pass] got: hello
    [fail] error, expect: #<regexp 7f5770877b40>, got: hello
    ✅ got: #t
    ✅ got: #f
  [🧪 test] assert-raises failure paths
    [fail] did not raise an expected error
    [fail] did not raise an expected error
    [pass] raised an error as expected
    ✅ got: #f
    ✅ got: #f
    ✅ got: #t
  [🧪 test] one-of
    [pass] got: green
    [fail] error, expect: (red green), got: blue
    ✅ got: #t
    ✅ got: #f
  [🧪 test] vector containment
    [pass] got: 2
    [fail] error, expect: #(1 2 3), got: 9
    ✅ got: #t
    ✅ got: #f
  [🧪 test] length on vectors and strings
    [pass] got: #(1 2 3)
    [pass] got: hello
    [fail] error, expect: 4, got: hello
    ✅ got: #t
    ✅ got: #t
    ✅ got: #f
  [🧪 test] not-matches
    [pass] got: hello
    [fail] error, expect: #<regexp 7f57666e4340>, got: hello
    ✅ got: #t
    ✅ got: #f
+----------------------------------------------+
[📑 suite] matcher result wiring
  [🧪 test] failing matchers are reported as failures
    [pass] got: 2
    [fail] error, expect: (1), got: 2
    ✅ got: #t
    ✅ got: #f
  [🧪 test] assert-raises fails when nothing is raised
    [fail] did not raise an expected error
    ✅ got: #f
ℹ️ info - ran 3 tasks in: 2 seconds, 177541 microseconds
ℹ️ info - counted 1 file, 3 suites, 17 tests and 49 assertions

running unit tests from file: numeric/a/num.scm, entrypoint: spec


ℹ️ info - shuffled with seed 672163891 (replay with VERITAS_SEED=672163891)
ℹ️ info - Code coverage: 58.5% of 3714 lines (2171 covered) in 21 files
ℹ️ info - Coverage reports written to reports/lcov/veritas.info, reports/html/index.html, reports/lcov/coverage-summary.json, reports/lcov/cobertura.xml, reports/lcov/jacoco.xml
+----------------------------------------------+
[📑 suite] Predicate Tests
  [🧪 test] Even Number Checks
    [⚙️ assert] 4 should be even
    ✅ got: #t
    [⚙️ assert] 7 should not be even
    ✅ got: #f
    [⚙️ assert] 0 should be even
    ✅ got: #t
    [⚙️ assert] 1 should not be even
    ✅ got: #f
+----------------------------------------------+
[📑 suite] Basic Suite
  [🧪 test] Basic Numeric Tests
    ✅ got: 1
    [⚙️ assert] checks if addition works
    ✅ got: 4
    [⚙️ assert] arithmetic approximation
    ✅ got: 0.99999999999
    [⚙️ assert] arithmetic approximation
    ✅ got: 0.99999999999
    [⚙️ assert] arithmetic approximation
    ✅ got: 0.9999999
    ✅ got: 0
    ✅ got: 1
ℹ️ info - ran 2 tasks in: 1 seconds, -65325 microseconds
ℹ️ info - counted 1 file, 2 suites, 2 tests and 11 assertions
🔬 debug - assertion-results: (#t #t #t #t #t #t #t #t #t #t #t)

running unit tests from file: shuffle.scm, entrypoint: spec


ℹ️ info - Code coverage: 58.7% of 3716 lines (2182 covered) in 21 files
ℹ️ info - Coverage reports written to reports/lcov/veritas.info, reports/html/index.html, reports/lcov/coverage-summary.json, reports/lcov/cobertura.xml, reports/lcov/jacoco.xml
+----------------------------------------------+
[📑 suite] seeded shuffling
  [🧪 test] the same seed gives the same order
    ✅ got: (2 4 5 1 3)
  [🧪 test] two different seeds are not forced to agree
    ✅ got: (1 2 3 4 5)
    ✅ got: (1 2 3 4 5)
  [🧪 test] short lists come back untouched
    ✅ got: ()
    ✅ got: (1)
  [🧪 test] a fresh seed is a usable seed
    ✅ got: #t
    ✅ got: (1 2 3)
  [🧪 test] an explicit seed is used and remembered
    ✅ got: 7
    ✅ got: 7
  [🧪 test] seeded-shuffle follows the run's seed
    ✅ got: (4 3 1 2)
ℹ️ info - ran 1 tasks in: 1 seconds, -166575 microseconds
ℹ️ info - counted 1 file, 1 suite, 6 tests and 6 assertions

running unit tests from file: nesting.scm, entrypoint: spec


ℹ️ info - shuffled with seed 672163891 (replay with VERITAS_SEED=672163891)
ℹ️ info - Code coverage: 58.9% of 3716 lines (2190 covered) in 21 files
ℹ️ info - Coverage reports written to reports/lcov/veritas.info, reports/html/index.html, reports/lcov/coverage-summary.json, reports/lcov/cobertura.xml, reports/lcov/jacoco.xml
+----------------------------------------------+
[📑 suite] depth 1
  [🧪 test] test at depth 1
    ✅ got: y
+----------------------------------------------+
[📑 suite] depth 2
+----------------------------------------------+
[📑 suite] depth 3
+----------------------------------------------+
[📑 suite] depth 4
  [🧪 test] leaf test
    ✅ got: 24
  [🧪 test] test at depth 3
    ✅ got: #t
  [🧪 test] test at depth 2
    ✅ got: (a b)
+----------------------------------------------+
[📑 suite] table nesting
+----------------------------------------------+
[📑 suite] inner table
  [🧪 test] 1 squared is 1
    ✅ got: 1
  [🧪 test] 2 squared is 4
    ✅ got: 4
  [🧪 test] 3 squared is 9
    ✅ got: 9
  [🧪 test] 1 squared is 1
    ✅ got: 1
  [🧪 test] 3 squared is 9
    ✅ got: 9
  [🧪 test] 2 squared is 4
    ✅ got: 4
+----------------------------------------------+
[📑 suite] sequential nesting
+----------------------------------------------+
[📑 suite] sequential child
+----------------------------------------------+
[📑 suite] sequential grandchild
  [🧪 test] deep sequential test
    ✅ got: 6
ℹ️ info - ran 3 tasks in: 1 seconds, 187889 microseconds
ℹ️ info - counted 1 file, 9 suites, 11 tests and 11 assertions

running unit tests from file: bdd.scm, entrypoint: spec


ℹ️ info - shuffled with seed 672163891 (replay with VERITAS_SEED=672163891)
ℹ️ info - Code coverage: 59.8% of 3716 lines (2224 covered) in 21 files
ℹ️ info - Coverage reports written to reports/lcov/veritas.info, reports/html/index.html, reports/lcov/coverage-summary.json, reports/lcov/cobertura.xml, reports/lcov/jacoco.xml
+----------------------------------------------+
[📑 suite] Scenario: a scenario written in latin
  [🧪 test] Given a list of two numbers
    ✅ got: 2
  [🧪 test] When the numbers are summed
    ✅ got: 30
  [🧪 test] Then the total is thirty
    ✅ got: 30
  [🧪 test] And the values are positive
    ✅ got: #t
  [🧪 test] But the list is not empty
    ✅ got: (10 20)
+----------------------------------------------+
[📑 suite] Scenario: summing a list of numbers
  [🧪 test] Given a list of three numbers
    ✅ got: 3
  [🧪 test] When the numbers are summed
    ✅ got: 6
  [🧪 test] Then the total is correct
    ✅ got: 6
  [🧪 test] And the list is non-empty
    ✅ got: (1 2 3)
  [🧪 test] But the list does not contain four
    ✅ got: 4
+----------------------------------------------+
[📑 suite] Scenario: steps run in declaration order
  [🧪 test] Given no recorded events
    ✅ success running without errors
  [🧪 test] When the first event is recorded
    ✅ success running without errors
  [🧪 test] Then the order is preserved
    ✅ success running without errors
+----------------------------------------------+
[📑 suite] Scenario: scenario steps keep declaration order
  [🧪 test] Given the first step records itself
    ✅ success running without errors
  [🧪 test] When the second step records itself
    ✅ success running without errors
  [🧪 test] Then the third step records itself
    ✅ success running without errors
  [🧪 test] And the recorded order is Given, When, Then
    ✅ success running without errors
+----------------------------------------------+
[📑 suite] Scenario: a scenario written with PascalCase steps
  [🧪 test] Given a list of two numbers
    ✅ got: 2
  [🧪 test] When the numbers are summed
    ✅ got: 30
  [🧪 test] Then the total is thirty
    ✅ got: 30
+----------------------------------------------+
[📑 suite] Scenario: outer scenario
+----------------------------------------------+
[📑 suite] Scenario: inner scenario
  [🧪 test] Given inner given
    ✅ got: #t
  [🧪 test] Then inner then
    ✅ got: 2
  [🧪 test] Then outer then
    ✅ got: #t
ℹ️ info - ran 6 tasks in: 2 seconds, -265566 microseconds
ℹ️ info - counted 1 file, 7 suites, 23 tests and 23 assertions

running unit tests from file: assertions.scm, entrypoint: spec


ℹ️ info - shuffled with seed 672163891 (replay with VERITAS_SEED=672163891)
ℹ️ info - Code coverage: 60.2% of 3716 lines (2237 covered) in 21 files
ℹ️ info - Coverage reports written to reports/lcov/veritas.info, reports/html/index.html, reports/lcov/coverage-summary.json, reports/lcov/cobertura.xml, reports/lcov/jacoco.xml
+----------------------------------------------+
[📑 suite] approximate assertions
  [🧪 test] assert-approximate
    [pass] got: 3.141
    [fail] error, expect: 3.14, got: 3.5
    ✅ got: #t
    ✅ got: #f
  [🧪 test] assert-not-approximate
    [pass] got: 3.5
    [fail] error, expect: 3.14, got: 3.141
    ✅ got: #t
    ✅ got: #f
  [🧪 test] is-approximate?
    ✅ got: #t
    ✅ got: #f
+----------------------------------------------+
[📑 suite] equality, identity and value assertions
  [🧪 test] assert-not-eq
    [pass] got: (1)
    [fail] error, expect: x, got: x
    ✅ got: #t
    ✅ got: #f
  [🧪 test] assert-eq
    [pass] got: foo
    [fail] error, expect: (1), got: (1)
    ✅ got: #t
    ✅ got: #f
  [🧪 test] assert-not-eqv
    [pass] got: 2
    [fail] error, expect: 1, got: 1
    ✅ got: #t
    ✅ got: #f
  [🧪 test] assert-equal
    [pass] got: 1
    [fail] error, expect: 1, got: 2
    ✅ got: #t
    ✅ got: #f
  [🧪 test] assert-eqv
    [pass] got: 42
    [fail] error, expect: 1, got: 2
    ✅ got: #t
    ✅ got: #f
  [🧪 test] assert-not-equal
    [pass] got: (1 3)
    [fail] error, expect: (1 2), got: (1 2)
    ✅ got: #t
    ✅ got: #f
+----------------------------------------------+
[📑 suite] boolean assertions
  [🧪 test] assert-false
    [pass] got: #f
    [fail] error, expect: #f, got: #t
    ✅ got: #t
    ✅ got: #f
  [🧪 test] assert-true
    [pass] got: #t
    [fail] error, expect: #t, got: #f
    ✅ got: #t
    ✅ got: #f
+----------------------------------------------+
[📑 suite] delayed evaluation of got
  [🧪 test] lazy values are evaluated when the assertion runs
    [pass] got: 144
    [pass] got: 6
    [pass] got: 1
    [pass] got: 2
    [pass] got: 2
    ✅ got: #t
    ✅ got: #t
    ✅ got: #t
    ✅ got: #t
    ✅ got: #t
+----------------------------------------------+
[📑 suite] error assertions
  [🧪 test] assert-raises honours an expected error key
    [pass] raised an error as expected
    [fail] did not raise an expected error
    ✅ got: #t
    ✅ got: #f
  [🧪 test] assert-no-error
    [pass] success running without errors
    [fail] caught error: numerical-overflow: (divide Numerical overflow #f #f)
    ✅ got: #t
    ✅ got: #f
  [🧪 test] assert-raises honours a predicate
    [pass] raised an error as expected
    [fail] did not raise an expected error
    ✅ got: #t
    ✅ got: #f
  [🧪 test] assert-raises accepts any error by default
    [pass] raised an error as expected
    [fail] did not raise an expected error
    ✅ got: #t
    ✅ got: #f
  [🧪 test] assert-error
    [pass] success catching error: numerical-overflow: (divide Numerical overflow #f #f)
    [fail] did not catch any error
    ✅ got: #t
    ✅ got: #f
+----------------------------------------------+
[📑 suite] latin aliases
  [🧪 test] equality aliases
    [pass] got: (1 2)
    [fail] error, expect: (1 2), got: (1 3)
    [pass] got: foo
    [fail] error, expect: (1), got: (1)
    [pass] got: 42
    [fail] error, expect: 1, got: 2
    [pass] got: (1 3)
    [fail] error, expect: (1 2), got: (1 2)
    [pass] got: (1)
    [fail] error, expect: x, got: x
    [pass] got: 2
    [fail] error, expect: 1, got: 1
    ✅ got: #t
    ✅ got: #f
    ✅ got: #t
    ✅ got: #f
    ✅ got: #t
    ✅ got: #f
    ✅ got: #t
    ✅ got: #f
    ✅ got: #t
    ✅ got: #f
    ✅ got: #t
    ✅ got: #f
  [🧪 test] approximate aliases
    [pass] got: 3.141
    [fail] error, expect: 3.14, got: 3.5
    [pass] got: 3.5
    [fail] error, expect: 3.14, got: 3.141
    ✅ got: #t
    ✅ got: #f
    ✅ got: #t
    ✅ got: #f
    ✅ got: #t
    ✅ got: #f
  [🧪 test] error aliases
    [pass] success catching error: numerical-overflow: (divide Numerical overflow #f #f)
    [fail] did not catch any error
    [pass] success running without errors
    [fail] caught error: numerical-overflow: (divide Numerical overflow #f #f)
    [pass] raised an error as expected
    [fail] did not raise an expected error
    ✅ got: #t
    ✅ got: #f
    ✅ got: #t
    ✅ got: #f
    ✅ got: #t
    ✅ got: #f
  [🧪 test] boolean aliases
    [pass] got: #t
    [fail] error, expect: #t, got: #f
    [pass] got: #f
    [fail] error, expect: #f, got: #t
    ✅ got: #t
    ✅ got: #f
    ✅ got: #t
    ✅ got: #f
  [🧪 test] proba is the core assert combinator
    [pass] got: 3
    [fail] error, expect: 3, got: 4
    ✅ got: #t
    ✅ got: #f
  [🧪 test] matcher aliases
    [pass] got: 2
    [fail] error, expect: (1 2), got: 9
    [pass] got: 9
    [fail] error, expect: (1 2), got: 2
    [pass] got: hello
    [fail] error, expect: #<regexp 7f576f94d840>, got: hello
    [pass] got: hello
    [fail] error, expect: #<regexp 7f5771e7d8c0>, got: hello
    [pass] got: ()
    [fail] error, expect: #t, got: (1)
    [pass] got: (1)
    [fail] error, expect: #t, got: ()
    [pass] got: (1 2 3)
    [fail] error, expect: 4, got: (1 2 3)
    [pass] got: 5
    [fail] error, expect: (1 . 10), got: 11
    [pass] got: green
    [fail] error, expect: (red green), got: blue
    ✅ got: #t
    ✅ got: #f
    ✅ got: #t
    ✅ got: #f
    ✅ got: #t
    ✅ got: #f
    ✅ got: #t
    ✅ got: #f
    ✅ got: #t
    ✅ got: #f
    ✅ got: #t
    ✅ got: #f
    ✅ got: #t
    ✅ got: #f
    ✅ got: #t
    ✅ got: #f
    ✅ got: #t
    ✅ got: #f
ℹ️ info - ran 6 tasks in: 3 seconds, 443804 microseconds
ℹ️ info - counted 1 file, 6 suites, 23 tests and 85 assertions

running unit tests from file: timeout.scm, entrypoint: spec


ℹ️ info - shuffled with seed 672163891 (replay with VERITAS_SEED=672163891)
ℹ️ info - Code coverage: 60.3% of 3717 lines (2242 covered) in 21 files
ℹ️ info - Coverage reports written to reports/lcov/veritas.info, reports/html/index.html, reports/lcov/coverage-summary.json, reports/lcov/cobertura.xml, reports/lcov/jacoco.xml
+----------------------------------------------+
[📑 suite] deadlines
  [🧪 test] a test within its deadline passes
    ✅ got: (#t #t)
  [🧪 test] a suite within its deadline passes
    ✅ got: (#t)
  [🧪 test] an assertion within its deadline passes
    ✅ got: (#t)
  [🧪 test] no deadline means no deadline
    ✅ got: (#t)
  [🧪 test] an overrunning test is reported as a failure
    ✅ got: (#f)
  [🧪 test] the timeout failure explains itself
    [⚙️ assert] the failure mentions the timeout
    ✅ got: overrunning test timed out after 0.3 seconds
  [🧪 test] an overrunning suite is reported as a failure
    ✅ got: (#f)
  [🧪 test] an overrunning lazy assertion is reported as a failure
    ✅ got: (#f)
  [🧪 test] an overrunning thunk assertion is reported as a failure
    ✅ got: (#f)
  [🧪 test] an overrunning scenario is reported as a failure
    ✅ got: (#f)
  [🧪 test] an overrunning benchmark is reported as a failure
    ✅ got: (#f)
  [🧪 test] the fiber of an overrunning test is aborted
    [⚙️ assert] the spin counter stopped growing
    ✅ got: #t
  [🧪 test] the fiber of an overrunning suite is aborted
    [⚙️ assert] the spin counter stopped growing
    ✅ got: #t
  [🧪 test] the fiber of an overrunning thunk assertion is aborted
    [⚙️ assert] the spin counter stopped growing
    ✅ got: #t
  [🧪 test] a blocked unit does not stall the run
    [⚙️ assert] the deadline returned promptly
    ✅ got: #t
  [🧪 test] a unit that raises still raises
    [⚙️ assert] the raised error reached the caller
    ✅ success catching error: misc-error: (#f boom () #f)
ℹ️ info - ran 1 tasks in: 5 seconds, -342479 microseconds
ℹ️ info - counted 1 file, 1 suite, 16 tests and 16 assertions

running unit tests from file: impact.scm, entrypoint: spec


ℹ️ info - Code coverage: 63.4% of 3717 lines (2358 covered) in 21 files
ℹ️ info - Coverage reports written to reports/lcov/veritas.info, reports/html/index.html, reports/lcov/coverage-summary.json, reports/lcov/cobertura.xml, reports/lcov/jacoco.xml
+----------------------------------------------+
[📑 suite] change-aware selection
  [🧪 test] a file's module name comes from its path
    ✅ got: (veritas reporter)
    ✅ got: (acme password)
  [🧪 test] imports are read from a module body
    ✅ got: ((acme password) (veritas veritas))
  [🧪 test] a changed module selects its own test and its importers
    ✅ got: (/tmp/veritas-impact-suite/test/acme/unit/password-spec.scm /tmp/veritas-impact-suite/test/acme/unit/password.scm /tmp/veritas-impact-suite/test/acme/unit/web.scm)
  [🧪 test] an unrelated test is left out
    ✅ got: #f
  [🧪 test] a changed test file selects itself
    ✅ got: (/tmp/veritas-impact-suite/test/acme/unit/other.scm)
  [🧪 test] a test that names a changed data file is selected
    ✅ got: (/tmp/veritas-impact-suite/test/acme/unit/data-reader.scm)
  [🧪 test] a data file the test does not name selects nothing
    ✅ got: ()
  [🧪 test] no change selects nothing
    ✅ got: ()
ℹ️ info - ran 1 tasks in: 1 seconds, 45317 microseconds
ℹ️ info - counted 1 file, 1 suite, 8 tests and 9 assertions

running unit tests from file: traces.scm, entrypoint: spec


ℹ️ info - Code coverage: 64.5% of 3717 lines (2399 covered) in 21 files
ℹ️ info - Coverage reports written to reports/lcov/veritas.info, reports/html/index.html, reports/lcov/coverage-summary.json, reports/lcov/cobertura.xml, reports/lcov/jacoco.xml
+----------------------------------------------+
[📑 suite] traces
  [🧪 test] a traced test records its start, its assertions and its end
    ✅ got: (test-start assertion assertion test-end)
    ✅ got: #t
    ✅ got: #t
    ✅ got: 1 attempt(s)
  [🧪 test] a trace survives a round trip through a file
    ✅ got: 2
    ✅ got: test-start
    ✅ got: test-end
  [🧪 test] the rendered timeline names the steps
    ✅ got: test-start
    ✅ got: test-end
  [🧪 test] tracing off records nothing
    ✅ got: ()
  [🧪 test] a missing trace file reads as no frames
    ✅ got: ()
ℹ️ info - ran 1 tasks in: 1 seconds, -256314 microseconds
ℹ️ info - counted 1 file, 1 suite, 5 tests and 5 assertions

running unit tests from file: rerun.scm, entrypoint: spec


the file rerun.scm raised wrong-number-of-args: ("allocate-struct" "Wrong number of arguments to ~A" (#<record-type pre-test-result>) #f)

global totals: 28 files, 77 suites, 269 tests and 484 assertions


1 of 29 files failed: rerun.scm

;;;       newer than compiled /gnu/store/0w0f5c8hqiz5a524gzhhs6gakyqsjbd3-profile/lib/guile/3.0/site-ccache/veritas/container.go
;;; note: source file ./src/veritas/container.scm
;;;       newer than compiled /run/current-system/profile/lib/guile/3.0/site-ccache/veritas/container.go
;;; found fresh local cache at /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/veritas/trunk/src/veritas/container.scm.go

Executing: env VERITAS_TEST_TYPE=unit VERITAS_RUN_BENCHMARKS=true VERITAS_COVERAGE=true VERITAS_COVERAGE_EXCLUDE=test:override guix shell -m manifest.scm -- guile -L ./src -L ./test -c '((@ (veritas runner) run-tests))'

maak: error: command failed (exit code 1): env VERITAS_TEST_TYPE=unit VERITAS_RUN_BENCHMARKS=true VERITAS_COVERAGE=true VERITAS_COVERAGE_EXCLUDE=test:override guix shell -m manifest.scm -- guile -L ./src -L ./test -c '((@ (veritas runner) run-tests))'
        hint: Fix the command above, or run `maak --dry-run' to inspect it first.
inspect the job's lambda expression
(lambda()
  `((task . ("maak-test" "maak-deploy"))
    (project . "veritas")
    (branch-name . "trunk")
    (clone-url . "https://codeberg.org/jjba23/veritas.git")
    (env . ((VERITAS_RUN_BENCHMARKS . false)))))