veritas-b46e91a0-ed34

job succeeded

starting new job...
rundir='/etc/byggsteg/job-clone//veritas/trunk succeeded43 lines · 0.8s
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 f6c9a17 to d34e398
setupuname -a succeeded1 lines · 0.0s
Linux wolk-jjba 7.2.11-gnu #1 SMP PREEMPT_DYNAMIC 1 x86_64 GNU/Linux
setupgit log --name-status HEAD^..HEAD succeeded5 lines · 0.0s
commit d34e3982b6e1a540c079ce263e19357696a6c87f
Author: Josep Bigorra (Joe) <jjbigorra@gmail.com>
Date:   Tue Nov 10 20:47:46 2026 +0100

    chore: show the sponsor button

A       .github/FUNDING.yml
testmaak test succeeded1862 lines · 5m 22s
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 761570342 (replay with VERITAS_SEED=761570342)

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


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


ℹ️ info - shuffled with seed 761570342 (replay with VERITAS_SEED=761570342)
ℹ️ info - Code coverage: 11.5% of 3418 lines (393 covered) in 13 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] Check that function calls work
    ✅ got: 42
  [🧪 test] Do some assertions
    ✅ got: 1
    ✅ got: 1
    ✅ got: 1
+----------------------------------------------+
[📑 suite] Complex Data Structure Tests
  [🧪 test] Vector Operations
    [⚙️ assert] Vector length
    ✅ got: 3
    [⚙️ assert] Vector ref at index 1
    ✅ got: 2
    [⚙️ assert] Vector ref at index 0
    ✅ got: 1
  [🧪 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
+----------------------------------------------+
[📑 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
  [🧪 test] some test without suite
    ✅ got: 1
+----------------------------------------------+
[📑 suite] str
  [🧪 test] String Operation Tests
    ✅ got: hello world
    ✅ got: #t
    ✅ got: #f
+----------------------------------------------+
[📑 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
ℹ️ info - ran 6 tasks in: 3 seconds, 623996 microseconds
ℹ️ info - counted 1 file, 5 suites, 9 tests and 21 assertions

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


ℹ️ info - Code coverage: 13.0% of 3418 lines (443 covered) in 13 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] rerunning what failed;;; note: source file ./src/veritas/runner.scm
;;;       newer than compiled /gnu/store/21afi1i81zcsj3g9fjxxaxrkfxm3gfjp-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/21afi1i81zcsj3g9fjxxaxrkfxm3gfjp-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/21afi1i81zcsj3g9fjxxaxrkfxm3gfjp-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/21afi1i81zcsj3g9fjxxaxrkfxm3gfjp-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/21afi1i81zcsj3g9fjxxaxrkfxm3gfjp-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/21afi1i81zcsj3g9fjxxaxrkfxm3gfjp-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/21afi1i81zcsj3g9fjxxaxrkfxm3gfjp-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/21afi1i81zcsj3g9fjxxaxrkfxm3gfjp-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/21afi1i81zcsj3g9fjxxaxrkfxm3gfjp-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
;;; note: source file ./src/veritas/bdd.scm
;;;       newer than compiled 
  [🧪 test] a failing test is named and a passing one is not
    ✅ got: (the failing one)
  [🧪 test] names are found at any depth, through nested suites
    ✅ got: (the failing one)
  [🧪 test] a run that passed records nothing to rerun
    ✅ got: ()
  [🧪 test] the record round-trips through the report file
    ✅ got: (the failing one)
    ✅ got: (the failing one)
  [🧪 test] an empty record is a record, so nothing is rerun
    ✅ got: ()
    ✅ got: ()
    ✅ got: #f
    ✅ got: #f
    ✅ got: #t
    ✅ got: #t
    ✅ got: #t
ℹ️ info - ran 1 tasks in: 3 seconds, -600325 microseconds
ℹ️ info - counted 1 file, 1 suite, 5 tests and 5 assertions

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


ℹ️ info - Code coverage: 16.3% of 3418 lines (557 covered) in 13 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: 3 seconds, 94372 microseconds
ℹ️ info - counted 1 file, 1 suite, 8 tests and 9 assertions

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


ℹ️ info - Code coverage: 19.4% of 3490 lines (677 covered) in 14 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: 7 seconds, 349314 microseconds
ℹ️ info - counted 1 file, 1 suite, 13 tests and 23 assertions

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


ℹ️ info - shuffled with seed 761570342 (replay with VERITAS_SEED=761570342)
ℹ️ info - Code coverage: 19.3% of 3711 lines (715 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] CLI driver
  [🧪 test] --help exits successfully
    ✅ got: 0
  [🧪 test] --version exits successfully
    ✅ got: 0
+----------------------------------------------+
[📑 suite] CLI metadata
  [🧪 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] version and man page name are present
    ✅ got: 1.4.0
    ✅ got: veritas(1)
  [🧪 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
ℹ️ info - ran 2 tasks in: 7 seconds, -373224 microseconds
ℹ️ info - counted 1 file, 2 suites, 5 tests and 56 assertions

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


ℹ️ info - shuffled with seed 761570342 (replay with VERITAS_SEED=761570342)
ℹ️ info - Code coverage: 39.7% of 3711 lines (1474 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] 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-XYaZKj/resolved.scm
+----------------------------------------------+
[📑 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 HTML report is one page with every file in it
    ✅ got: /tmp/veritas-coverage-1hMnXl/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 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 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 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 reports of one run add up
    ✅ got: 2
    ✅ got: 1
    ✅ got: #t
    ✅ got: #t
    ✅ got: #t
    ✅ got: #t
    ✅ got: 3
+----------------------------------------------+
[📑 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-sYllGZ/lcov/veritas.info, /tmp/veritas-coverage-sYllGZ/html/index.html, /tmp/veritas-coverage-sYllGZ/lcov/coverage-summary.json, /tmp/veritas-coverage-sYllGZ/lcov/cobertura.xml, /tmp/veritas-coverage-sYllGZ/lcov/jacoco.xml
  [🧪 test] calls the fixture
    ✅ got: pos
ℹ️ info - ran 1 tasks in: 69 seconds, 301121 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
+----------------------------------------------+
[📑 suite] Coverage measurement
  [🧪 test] lines that ran are counted, lines that did not are zero
    ✅ got: 1
    ✅ got: /tmp/veritas-coverage-nhcwuh/veritas-coverage-fixture-20585.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
ℹ️ info - ran 4 tasks in: 181 seconds, -183102 microseconds
ℹ️ info - counted 1 file, 4 suites, 14 tests and 14 assertions

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


ℹ️ info - shuffled with seed 761570342 (replay with VERITAS_SEED=761570342)
ℹ️ info - Code coverage: 39.8% of 3711 lines (1476 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] Error and Exception Handling
  [🧪 test] Valid summation should not throw an error
    [⚙️ assert] Should not fail with a valid list of numbers
    ✅ success running without errors
  [🧪 test] Summing a list with non-numeric elements
    [⚙️ assert] Should fail when list contains non-numbers
    ✅ success catching error: wrong-type-arg: (+ Wrong type argument in position ~A: ~S (2 a) (a))
+----------------------------------------------+
[📑 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)
+----------------------------------------------+
[📑 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
+----------------------------------------------+
[🚄 benchmark]
Computation of the factorial of 10000


[🏃 run #0]
%     cumulative   self             
time   seconds     seconds  procedure
 50.00     58.15      0.02  veritas/unit/introduction.scm:174:0:factorial
 50.00      0.02      0.02  ice-9/popen.scm:182:0:reap-pipes
  0.00      0.03      0.00  veritas/veritas.scm:998:93
  0.00      0.02      0.00  %after-gc-thunk
  0.00      0.02      0.00  anon #x1c68e850
---
Sample count: 2
Total time: 0.031880948 seconds (0.010292344 seconds in GC)

[🏃 run #1]
%     cumulative   self             
time   seconds     seconds  procedure
100.00     62.99      0.04  veritas/unit/introduction.scm:174:0:factorial
  0.00      0.04      0.00  veritas/veritas.scm:998:93
---
Sample count: 2
Total time: 0.035388568 seconds (0.008859826 seconds in GC)

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

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


ℹ️ info - shuffled with seed 761570342 (replay with VERITAS_SEED=761570342)
ℹ️ info - Code coverage: 40.0% of 3711 lines (1483 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] 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, -99678 microseconds
ℹ️ info - counted 1 file, 1 suite, 16 tests and 16 assertions

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


ℹ️ info - shuffled with seed 761570342 (replay with VERITAS_SEED=761570342)
ℹ️ info - Code coverage: 40.6% of 3711 lines (1507 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] Basic Suite
  [🧪 test] Basic Generation
(F K M B 9 i Q & \ : e ,)
(< - U y 6 C W | Z p c k k d 8 ? ~ w ,)
    ✅ success running without errors
(7 69 7 32 38 20 1 14 3 10 62 3 42 32 29 33 14 23 42 18 42 11 21 38 2 12 24 34 29 1 3 15 39 43 10 9 39 1 53 62 27 19 1 42 0 31 0 17 37 3 5 6 11 17 1 3 37 32 5 5 7 22 40 9 11 46 69)
(7 36 0 0 3 2 31 2 44 6 40 3 75 38 65 18 6 68 19 24 34 53 6 43 13 5 48 72 71 0 36 5 21 6 42 5 6 19 24 90 34 25 18 26 0 5 41 83 2 24 18 21 0)
    ✅ success running without errors
19
16
    ✅ success running without errors
")Gd!L9)w2G9m8| {_-Z.!jeB:[Z[<sx}IqBp:#@^~v +Re{|BJAz>UBcq}\\10bHT"
"~s#Nk8xA2t&H3&&TU*,.=$5pBf~+AkyOm4ZqT!kVJtjdBtG,\"2hhk"
    ✅ success running without errors
ℹ️ info - ran 1 tasks in: 1 seconds, -147354 microseconds
ℹ️ info - counted 1 file, 1 suite, 1 test and 4 assertions

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


ℹ️ info - shuffled with seed 761570342 (replay with VERITAS_SEED=761570342)
ℹ️ info - Code coverage: 43.1% of 3711 lines (1598 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] 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
+----------------------------------------------+
[📑 suite] matcher edge cases and failures
  [🧪 test] one-of
    [pass] got: green
    [fail] error, expect: (red green), got: blue
    ✅ 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] 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] vector containment
    [pass] got: 2
    [fail] error, expect: #(1 2 3), got: 9
    ✅ got: #t
    ✅ got: #f
  [🧪 test] matches accepts a compiled regexp
    [pass] got: hello
    [fail] error, expect: #<regexp 7fa310e7f480>, 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] not-contains
    [pass] got: 9
    [fail] error, expect: (1 2), got: 2
    ✅ got: #t
    ✅ got: #f
  [🧪 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-matches
    [pass] got: hello
    [fail] error, expect: #<regexp 7fa313e29440>, got: hello
    ✅ got: #t
    ✅ got: #f
  [🧪 test] hash tables are containers too
    [pass] got: a
    [fail] error, expect: #<hash-table 7fa3127b25e0 1/31>, got: b
    ✅ got: #t
    ✅ got: #f
+----------------------------------------------+
[📑 suite] passing matchers
  [🧪 test] ranges and membership
    ✅ got: 5
    ✅ got: 0
    ✅ got: green
  [🧪 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
  [🧪 test] regular expressions
    ✅ got: hello
    ✅ got: abc
    ✅ got: hello
  [🧪 test] containment
    ✅ got: b
    ✅ got: world
    ✅ got: 2
    ✅ got: z
    ✅ got: z
ℹ️ info - ran 3 tasks in: 3 seconds, -570409 microseconds
ℹ️ info - counted 1 file, 3 suites, 17 tests and 49 assertions

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


ℹ️ info - shuffled with seed 761570342 (replay with VERITAS_SEED=761570342)
ℹ️ info - Code coverage: 46.2% of 3711 lines (1713 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] properties
  [🧪 test] a property that holds reports a passing assertion
    ✅ got: reverse of reverse is the original list
    ✅ got: 1
    ✅ got: #t
    ✅ got: #t
  [🧪 test] a property that fails reports the shrunk input
    ✅ got: #f
    ✅ got: #t
    ✅ got: #t
    ✅ got: #t
    ✅ got: #t
  [🧪 test] a property is a test task
    ✅ got: test
ℹ️ info - ran 1 tasks in: 1 seconds, 277288 microseconds
ℹ️ info - counted 1 file, 1 suite, 3 tests and 10 assertions

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


ℹ️ info - Code coverage: 50.5% of 3711 lines (1874 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] determinism
  [🧪 test] a suite runs its tests in declaration order, run after run
+----------------------------------------------+
[📑 suite] flat
+----------------------------------------------+
[📑 suite] flat
    ✅ got: 3
    ✅ got: (0 1 2)
  [🧪 test] a child that finishes first does not jump ahead of a slow one
    ✅ got: (waits signals)
  [🧪 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, 203581 microseconds
ℹ️ info - counted 1 file, 1 suite, 5 tests and 5 assertions

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


ℹ️ info - Code coverage: 51.4% of 3787 lines (1946 covered) in 16 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: #f
  [🧪 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, 100372 microseconds
ℹ️ info - counted 1 file, 1 suite, 9 tests and 9 assertions

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


ℹ️ info - shuffled with seed 761570342 (replay with VERITAS_SEED=761570342)
ℹ️ info - Code coverage: 52.3% of 3787 lines (1980 covered) in 16 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: 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 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: 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: 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
+----------------------------------------------+
[📑 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
ℹ️ info - ran 6 tasks in: 2 seconds, -323232 microseconds
ℹ️ info - counted 1 file, 7 suites, 23 tests and 23 assertions

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


ℹ️ info - shuffled with seed 761570342 (replay with VERITAS_SEED=761570342)
ℹ️ info - Code coverage: 54.5% of 3787 lines (2065 covered) in 16 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 generators
  [🧪 test] a constant generator returns its value
    ✅ got: fixed
  [🧪 test] vectors come from their element generator
    ✅ got: #t
  [🧪 test] tuples hold one value per generator
    ✅ got: #t
  [🧪 test] one-of picks from its choices
    ✅ got: #t
+----------------------------------------------+
[📑 suite] fake data generators
  [🧪 test] beers and cars are names, not empty strings
    ✅ got: #t
    ✅ got: #t
    ✅ got: #t
    ✅ got: #t
  [🧪 test] names have a first and a last part
    ✅ got: #t
    ✅ got: #t
  [🧪 test] emails look like emails
    ✅ got: #t
    ✅ got: #t
    ✅ got: #t
  [🧪 test] first and last names are strings
    ✅ got: #t
    ✅ got: #t
+----------------------------------------------+
[📑 suite] generator shrinkers
  [🧪 test] a generator with no shrinker offers no candidates
    ✅ got: ()
  [🧪 test] integers shrink toward zero
    ✅ got: #t
    ✅ got: #t
  [🧪 test] lists shrink to shorter lists
    ✅ got: #t
    ✅ got: #t
    ✅ got: #t
  [🧪 test] strings shrink to shorter strings
    ✅ got: #t
    ✅ got: #t
+----------------------------------------------+
[📑 suite] primitive generators
  [🧪 test] reals stay inside their range
    ✅ got: #t
  [🧪 test] booleans are booleans and both values appear
    ✅ got: #t
    ✅ got: #t
    ✅ got: #t
  [🧪 test] naturals are inclusive and respect their bound
    ✅ got: #t
ℹ️ info - ran 4 tasks in: 1 seconds, 604427 microseconds
ℹ️ info - counted 1 file, 4 suites, 15 tests and 28 assertions

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


ℹ️ info - Code coverage: 55.1% of 3851 lines (2123 covered) in 17 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, -76607 microseconds
ℹ️ info - counted 1 file, 1 suite, 7 tests and 7 assertions

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


ℹ️ info - Code coverage: 55.4% of 3851 lines (2133 covered) in 17 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, -152190 microseconds
ℹ️ info - counted 1 file, 1 suite, 6 tests and 6 assertions

running unit tests from file: structural-match.scm, entrypoint: spec


ℹ️ info - shuffled with seed 761570342 (replay with VERITAS_SEED=761570342)
ℹ️ info - Code coverage: 55.5% of 3857 lines (2139 covered) in 17 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] structural matching
  [🧪 test] name and timeout are accepted
    [assert] a one element list
    [pass] value (1) matches (x)
    ✅ got: #t
  [🧪 test] a failure says what did not match
    ✅ got: #t
  [🧪 test] predicates and literals work in a pattern
    [pass] value (10 4) matches (a (? even?))
    [fail] value (10 5) does not match (a (? even?))
    ✅ got: #t
    ✅ got: #f
  [🧪 test] a fixed pattern rejects a longer list
    [fail] value (1 2 3) does not match (a b)
    ✅ got: #f
  [🧪 test] a rest pattern matches a list
    [pass] value (1 2 3) matches (a b ...)
    ✅ got: #t
  [🧪 test] a quoted pattern is read as the pattern itself
    [pass] value (1 2) matches (a b)
    ✅ got: #t
ℹ️ info - ran 1 tasks in: 1 seconds, -61665 microseconds
ℹ️ info - counted 1 file, 1 suite, 6 tests and 7 assertions

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


ℹ️ info - shuffled with seed 761570342 (replay with VERITAS_SEED=761570342)
ℹ️ info - Code coverage: 55.8% of 3857 lines (2153 covered) in 17 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 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
+----------------------------------------------+
[📑 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
ℹ️ info - ran 2 tasks in: 1 seconds, -85173 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: lists.scm, entrypoint: spec


ℹ️ info - shuffled with seed 761570342 (replay with VERITAS_SEED=761570342)
ℹ️ info - Code coverage: 55.8% of 3857 lines (2153 covered) in 17 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] 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: ()
  [🧪 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] 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
ℹ️ info - ran 1 tasks in: 1 seconds, -74052 microseconds
ℹ️ info - counted 1 file, 1 suite, 3 tests and 10 assertions

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


ℹ️ info - shuffled with seed 761570342 (replay with VERITAS_SEED=761570342)
ℹ️ info - Code coverage: 55.6% of 3875 lines (2156 covered) in 18 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] 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 = 2
  [🧪 test] square is correct
    ✅ got: 4
+----------------------------------------------+
[📑 suite] n = 1
  [🧪 test] square is correct
    ✅ got: 1
+----------------------------------------------+
[📑 suite] n = 3
  [🧪 test] square is correct
    ✅ got: 9
+----------------------------------------------+
[📑 suite] integer addition
  [🧪 test] 0 + 0 = 0
    ✅ got: 0
  [🧪 test] -1 + 1 = 0
    ✅ got: 0
  [🧪 test] 100 + -100 = 0
    ✅ got: 0
  [🧪 test] 10 + 20 = 30
    ✅ got: 30
  [🧪 test] 1 + 2 = 3
    ✅ got: 3
ℹ️ info - ran 5 tasks in: 1 seconds, 277274 microseconds
ℹ️ info - counted 1 file, 10 suites, 16 tests and 16 assertions

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


ℹ️ info - shuffled with seed 761570342 (replay with VERITAS_SEED=761570342)
ℹ️ info - Code coverage: 56.4% of 4044 lines (2282 covered) in 19 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 command construction and readiness
  [🧪 test] container-exec-status returns status and output
    ✅ got: 0
    ✅ got: exec-ok

  [🧪 test] wait-until returns as soon as the predicate holds
    ✅ got: #t
  [🧪 test] container-run forwards name, env, ports and volumes
    ✅ got: --name svc
    ✅ got: -e A=1
    ✅ got: -p 8080:80
    ✅ got: -v /tmp:/data
  [🧪 test] wait-until raises once the timeout is exceeded
    ✅ raised an error as expected
+----------------------------------------------+
[📑 suite] container lifecycle against a fake runtime
  [🧪 test] with-container cleans up after the thunk
    ✅ got: fake-container
    ✅ got: run -d alpine
rm -f fake-container

  [🧪 test] wait-for-command succeeds
    ✅ got: #t
  [🧪 test] container-logs returns logs
    ✅ got: line1
ready
  [🧪 test] a yielding thunk keeps its container until it is done
    [⚙️ assert] the container is still running after the thunk yielded
    ✅ got: #t
  [🧪 test] run-command reports status and output
    ✅ got: (3 hi
)
  [🧪 test] run-command! raises on failure
    ✅ raised an error as expected
  [🧪 test] container-exec returns output
    ✅ got: exec-ok
  [🧪 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] runtime detection honours the environment
    ✅ got: /tmp/veritas-fake-container-runtime.sh
    ✅ got: #t
  [🧪 test] container-run returns an id
    ✅ got: fake-container
  [🧪 test] wait-for-log succeeds on a matching line
    ✅ got: #t
  [🧪 test] container-running? detects a running container
    ✅ got: #t
ℹ️ info - ran 2 tasks in: 2 seconds, -152349 microseconds
ℹ️ info - counted 1 file, 2 suites, 17 tests and 23 assertions

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


ℹ️ info - Code coverage: 57.0% of 4044 lines (2305 covered) in 19 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, -204011 microseconds
ℹ️ info - counted 1 file, 1 suite, 4 tests and 4 assertions

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


ℹ️ info - Code coverage: 57.0% of 4044 lines (2305 covered) in 19 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, -135283 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 761570342 (replay with VERITAS_SEED=761570342)
ℹ️ info - Code coverage: 57.2% of 4044 lines (2315 covered) in 19 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] character generators
  [🧪 test] generate-char yields printable ASCII
    ✅ got: #t
+----------------------------------------------+
[📑 suite] collection generators
  [🧪 test] generate-list respects min and max length
    ✅ got: #t
  [🧪 test] generate-symbol respects min and max length
    ✅ got: #t
  [🧪 test] generate-string respects min and max length
    ✅ got: #t
  [🧪 test] generate-string yields printable strings
    ✅ got: #t
+----------------------------------------------+
[📑 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
ℹ️ info - ran 3 tasks in: 1 seconds, 56454 microseconds
ℹ️ info - counted 1 file, 3 suites, 8 tests and 8 assertions

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


ℹ️ info - Code coverage: 57.9% of 4044 lines (2340 covered) in 19 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 nested tree counts its suites, its tests and its assertions
    ✅ got: 2
    ✅ got: 3
    ✅ got: 4
    ✅ got: 0
  [🧪 test] the summary reads as one line
    ✅ got: 1 file, 2 suites, 3 tests and 4 assertions
  [🧪 test] counts add up
    ✅ got: ((files . 0) (suites . 4) (tests . 6) (assertions . 8) (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 survive a trip through a file
    ✅ got: ((files . 1) (suites . 2) (tests . 3) (assertions . 4) (flaky . 0))
  [🧪 test] a test that passed on a retry is counted as flaky
    ✅ got: 1
    ✅ got: 0
    ✅ got: flaky
ℹ️ info - ran 1 tasks in: 1 seconds, 74593 microseconds
ℹ️ info - counted 1 file, 1 suite, 7 tests and 13 assertions

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


ℹ️ info - Code coverage: 58.1% of 4044 lines (2349 covered) in 19 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, 63773 microseconds
ℹ️ info - counted 1 file, 3 suites, 6 tests and 6 assertions

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


ℹ️ info - Code coverage: 58.1% of 4045 lines (2349 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/gnu/store/21afi1i81zcsj3g9fjxxaxrkfxm3gfjp-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
;;; note: source file ./src/veritas/cli.scm
;;;       newer than compiled /gnu/store/21afi1i81zcsj3g9fjxxaxrkfxm3gfjp-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
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/snapshot.scm
;;;       newer than compiled /gnu/store/21afi1i81zcsj3g9fjxxaxrkfxm3gfjp-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
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/mock.scm
;;;       newer than compiled /gnu/store/21afi1i81zcsj3g9fjxxaxrkfxm3gfjp-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/table.scm
;;;       newer than compiled /gnu/store/21afi1i81zcsj3g9fjxxaxrkfxm3gfjp-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/container.scm
;;;       newer than compiled /gnu/store/21afi1i81zcsj3g9fjxxaxrkfxm3gfjp-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
;;; 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
  [🧪 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, 270610 microseconds
ℹ️ info - counted 1 file, 1 suite, 9 tests and 19 assertions

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


ℹ️ info - Code coverage: 62.4% of 4055 lines (2531 covered) in 23 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 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>

  [🧪 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 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
ℹ️ info - ran 2 tasks in: 81 seconds, -578909 microseconds
ℹ️ info - counted 1 file, 2 suites, 13 tests and 13 assertions

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


ℹ️ info - shuffled with seed 761570342 (replay with VERITAS_SEED=761570342)
ℹ️ info - Code coverage: 62.6% of 4055 lines (2538 covered) in 23 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] sequential nesting
+----------------------------------------------+
[📑 suite] sequential child
+----------------------------------------------+
[📑 suite] sequential grandchild
  [🧪 test] deep sequential test
    ✅ got: 6
+----------------------------------------------+
[📑 suite] table nesting
  [🧪 test] 3 squared is 9
    ✅ got: 9
  [🧪 test] 2 squared is 4
    ✅ got: 4
+----------------------------------------------+
[📑 suite] inner table
  [🧪 test] 2 squared is 4
    ✅ got: 4
  [🧪 test] 1 squared is 1
    ✅ got: 1
  [🧪 test] 3 squared is 9
    ✅ got: 9
  [🧪 test] 1 squared is 1
    ✅ got: 1
+----------------------------------------------+
[📑 suite] depth 1
  [🧪 test] test at depth 1
    ✅ got: y
+----------------------------------------------+
[📑 suite] depth 2
  [🧪 test] test at depth 2
    ✅ got: (a b)
+----------------------------------------------+
[📑 suite] depth 3
  [🧪 test] test at depth 3
    ✅ got: #t
+----------------------------------------------+
[📑 suite] depth 4
  [🧪 test] leaf test
    ✅ got: 24
ℹ️ info - ran 3 tasks in: 1 seconds, 158050 microseconds
ℹ️ info - counted 1 file, 9 suites, 11 tests and 11 assertions

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


ℹ️ info - Code coverage: 63.6% of 4055 lines (2579 covered) in 23 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, -212096 microseconds
ℹ️ info - counted 1 file, 1 suite, 5 tests and 5 assertions

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


ℹ️ info - shuffled with seed 761570342 (replay with VERITAS_SEED=761570342)
ℹ️ info - Code coverage: 64.5% of 4055 lines (2616 covered) in 23 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] 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] 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] 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] error assertions
  [🧪 test] assert-error
    [pass] success catching error: numerical-overflow: (divide Numerical overflow #f #f)
    [fail] did not catch any 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 honours an expected error key
    [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
+----------------------------------------------+
[📑 suite] latin aliases
  [🧪 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] 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] equality aliases
    [pass] got: (1 2)
    [fail] error, expect: (1 2), got: (1 3)
  lists differ at index 1 (expected 2, got 3); lengths 2 and 2
    [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] 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 7fa311b40f80>, got: hello
    [pass] got: hello
    [fail] error, expect: #<regexp 7fa311b40300>, 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
  [🧪 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
+----------------------------------------------+
[📑 suite] equality, identity and value assertions
  [🧪 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
  [🧪 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
ℹ️ info - ran 6 tasks in: 3 seconds, 297491 microseconds
ℹ️ info - counted 1 file, 6 suites, 23 tests and 85 assertions

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


ℹ️ info - shuffled with seed 761570342 (replay with VERITAS_SEED=761570342)

;;;       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
ℹ️ info - Code coverage: 65.2% of 4055 lines (2644 covered) in 23 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] value diffs
  [🧪 test] values that are not lists, vectors or strings have no diff
    ✅ got: #f
    ✅ got: #f
  [🧪 test] a list that is a prefix says which one is longer
    ✅ got: #t
    ✅ got: #t
  [🧪 test] lists name the first differing index and both values
    ✅ got: #t
    ✅ got: #t
    ✅ got: #t
  [🧪 test] assert-equal prints the diff after the values
    ✅ got: #t
    ✅ got: #t
  [🧪 test] equal values have no diff
    ✅ got: #f
    ✅ got: #f
  [🧪 test] strings name the first differing character
    ✅ got: #t
    ✅ got: #t
    ✅ got: #t
ℹ️ info - ran 1 tasks in: 1 seconds, -65956 microseconds
ℹ️ info - counted 1 file, 1 suite, 6 tests and 14 assertions
global totals: 33 files, 85 suites, 305 tests and 549 assertions


finished running tests

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))'
deploysudo maak deploy succeeded71 lines · 1.9s
--------------------------------------------------------------

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: deploy


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

=> Running Maak task: deploy

  Publish the API docs.
API documentation saved to doc/api
index.texi:5271: warning: @end should only appear at the beginning of a line
index.texi:5286: warning: @end should only appear at the beginning of a line
index.texi:5305: warning: @end should only appear at the beginning of a line
index.texi:5320: warning: @end should only appear at the beginning of a line
index.texi:5336: warning: @end should only appear at the beginning of a line
index.texi:5352: warning: @end should only appear at the beginning of a line
index.texi: warning: must specify a title with a title command or @top

  Execute command:
guix time-machine --channels=channels.scm -- shell -m manifest.scm -- documenta api ./src/veritas

Executing: guix time-machine --channels=channels.scm -- shell -m manifest.scm -- documenta api ./src/veritas

  Execute command:
guix time-machine --channels=channels.scm -- shell -m manifest.scm -- texi2any -v --html --css-ref=https://jointhefreeworld.org/static/css/jointhefreeworld.css -o index_html ./doc/api/index.texi

Executing: guix time-machine --channels=channels.scm -- shell -m manifest.scm -- texi2any -v --html --css-ref=https://jointhefreeworld.org/static/css/jointhefreeworld.css -o index_html ./doc/api/index.texi
renamed './index_html' -> './doc/api-dist'
removed '/srv/http/jointhefreeworld.org/api-docs/veritas/API.html'
removed '/srv/http/jointhefreeworld.org/api-docs/veritas/veritas_005fall.html'
removed '/srv/http/jointhefreeworld.org/api-docs/veritas/veritas_005fassert.html'
removed '/srv/http/jointhefreeworld.org/api-docs/veritas/veritas_005fbdd.html'
removed '/srv/http/jointhefreeworld.org/api-docs/veritas/veritas_005fcli.html'
removed '/srv/http/jointhefreeworld.org/api-docs/veritas/veritas_005fcontainer.html'
removed '/srv/http/jointhefreeworld.org/api-docs/veritas/veritas_005fcoverage.html'
removed '/srv/http/jointhefreeworld.org/api-docs/veritas/veritas_005fdiff.html'
removed '/srv/http/jointhefreeworld.org/api-docs/veritas/veritas_005fgenerator.html'
removed '/srv/http/jointhefreeworld.org/api-docs/veritas/veritas_005fimpact.html'
removed '/srv/http/jointhefreeworld.org/api-docs/veritas/veritas_005fmock.html'
removed '/srv/http/jointhefreeworld.org/api-docs/veritas/veritas_005fmodel.html'
removed '/srv/http/jointhefreeworld.org/api-docs/veritas/veritas_005fprelude.html'
removed '/srv/http/jointhefreeworld.org/api-docs/veritas/veritas_005fproperty.html'
removed '/srv/http/jointhefreeworld.org/api-docs/veritas/veritas_005freporter.html'
removed '/srv/http/jointhefreeworld.org/api-docs/veritas/veritas_005frunner.html'
removed '/srv/http/jointhefreeworld.org/api-docs/veritas/veritas_005fshuffle.html'
removed '/srv/http/jointhefreeworld.org/api-docs/veritas/veritas_005fsnapshot.html'
removed '/srv/http/jointhefreeworld.org/api-docs/veritas/veritas_005ftable.html'
removed '/srv/http/jointhefreeworld.org/api-docs/veritas/veritas_005ftrace.html'
removed '/srv/http/jointhefreeworld.org/api-docs/veritas/veritas_005fveritas.html'
removed directory '/srv/http/jointhefreeworld.org/api-docs/veritas'
mkdir: created directory '/srv/http/jointhefreeworld.org/api-docs/veritas'
renamed 'doc/api-dist/API.html' -> '/srv/http/jointhefreeworld.org/api-docs/veritas/API.html'
renamed 'doc/api-dist/veritas_005fall.html' -> '/srv/http/jointhefreeworld.org/api-docs/veritas/veritas_005fall.html'
renamed 'doc/api-dist/veritas_005fassert.html' -> '/srv/http/jointhefreeworld.org/api-docs/veritas/veritas_005fassert.html'
renamed 'doc/api-dist/veritas_005fbdd.html' -> '/srv/http/jointhefreeworld.org/api-docs/veritas/veritas_005fbdd.html'
renamed 'doc/api-dist/veritas_005fcli.html' -> '/srv/http/jointhefreeworld.org/api-docs/veritas/veritas_005fcli.html'
renamed 'doc/api-dist/veritas_005fcontainer.html' -> '/srv/http/jointhefreeworld.org/api-docs/veritas/veritas_005fcontainer.html'
renamed 'doc/api-dist/veritas_005fcoverage.html' -> '/srv/http/jointhefreeworld.org/api-docs/veritas/veritas_005fcoverage.html'
renamed 'doc/api-dist/veritas_005fdiff.html' -> '/srv/http/jointhefreeworld.org/api-docs/veritas/veritas_005fdiff.html'
renamed 'doc/api-dist/veritas_005fgenerator.html' -> '/srv/http/jointhefreeworld.org/api-docs/veritas/veritas_005fgenerator.html'
renamed 'doc/api-dist/veritas_005fimpact.html' -> '/srv/http/jointhefreeworld.org/api-docs/veritas/veritas_005fimpact.html'
renamed 'doc/api-dist/veritas_005fmock.html' -> '/srv/http/jointhefreeworld.org/api-docs/veritas/veritas_005fmock.html'
renamed 'doc/api-dist/veritas_005fmodel.html' -> '/srv/http/jointhefreeworld.org/api-docs/veritas/veritas_005fmodel.html'
renamed 'doc/api-dist/veritas_005fprelude.html' -> '/srv/http/jointhefreeworld.org/api-docs/veritas/veritas_005fprelude.html'
renamed 'doc/api-dist/veritas_005fproperty.html' -> '/srv/http/jointhefreeworld.org/api-docs/veritas/veritas_005fproperty.html'
renamed 'doc/api-dist/veritas_005freporter.html' -> '/srv/http/jointhefreeworld.org/api-docs/veritas/veritas_005freporter.html'
renamed 'doc/api-dist/veritas_005frunner.html' -> '/srv/http/jointhefreeworld.org/api-docs/veritas/veritas_005frunner.html'
renamed 'doc/api-dist/veritas_005fshuffle.html' -> '/srv/http/jointhefreeworld.org/api-docs/veritas/veritas_005fshuffle.html'
renamed 'doc/api-dist/veritas_005fsnapshot.html' -> '/srv/http/jointhefreeworld.org/api-docs/veritas/veritas_005fsnapshot.html'
renamed 'doc/api-dist/veritas_005ftable.html' -> '/srv/http/jointhefreeworld.org/api-docs/veritas/veritas_005ftable.html'
renamed 'doc/api-dist/veritas_005ftrace.html' -> '/srv/http/jointhefreeworld.org/api-docs/veritas/veritas_005ftrace.html'
renamed 'doc/api-dist/veritas_005fveritas.html' -> '/srv/http/jointhefreeworld.org/api-docs/veritas/veritas_005fveritas.html'

Executing: mv -v doc/api-dist/* /srv/http/jointhefreeworld.org/api-docs/veritas
removed 'doc/api/index.texi'
removed directory 'doc/api'
removed directory 'doc/api-dist'
removed directory 'doc'
build diagnostics10 warnings, 0 errors
inspect the job's lambda expression
(lambda()
  `((task . ("maak-test" "maak-deploy"))
    (project . "veritas")
    (branch-name . "trunk")
    (clone-url . "https://github.com/jjba23/veritas.git")))