starting new job...
→ running command: dir='/etc/byggsteg/job-clone//byggsteg/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 8d91b85 to fc2f115
→ running command: cd /etc/byggsteg/job-clone/byggsteg/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/byggsteg/trunk && git log --name-status HEAD^..HEAD
commit fc2f115af54efcf982f9db2b98ce8e9cbac39dd1
Author: Josep Bigorra <jjbigorra@gmail.com>
Date: Wed Nov 4 23:22:46 2026 +0100
feat: Put the project logo in the navigation bar
M lib/byggsteg/html.scm
M pub/favicon.ico
M pub/img/byggsteg-logo.png
A pub/img/byggsteg-logo.svg
→ running command: cd /etc/byggsteg/job-clone/byggsteg/trunk && maak test
;;; note: auto-compilation is enabled, set GUILE_AUTO_COMPILE=0
;;; or pass the --no-auto-compile argument to disable.
;;; compiling ./test/veritas/unit/logs-live-spec.scm
;;; compiling ./app/views/logs.scm
;;; compiling ./lib/byggsteg/preferences.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/preferences.scm.go
;;; compiling ./lib/byggsteg/ansi.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/ansi.scm.go
;;; compiling ./lib/byggsteg/faces.scm
WARNING: (hygguile hygguile): imported module (hygguile components select) overrides core binding `select'
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/faces.scm.go
;;; compiling ./lib/byggsteg/html.scm
;;; compiling ./lib/byggsteg/permissions.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/permissions.scm.go
;;; compiling ./lib/byggsteg/version.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/version.scm.go
;;; compiling ./lib/byggsteg/job/pipeline.scm
;;; compiling ./lib/byggsteg/artifacts.scm
;;; compiling ./lib/byggsteg/upkeep.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/upkeep.scm.go
;;; compiling ./lib/byggsteg/domain/artifact.scm
;;; compiling ./lib/byggsteg/domain/repo.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/domain/repo.scm.go
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/domain/artifact.scm.go
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/artifacts.scm.go
;;; compiling ./lib/byggsteg/job/steps.scm
;;; compiling ./lib/byggsteg/container.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/container.scm.go
;;; compiling ./lib/byggsteg/job/runners.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/job/runners.scm.go
;;; compiling ./lib/byggsteg/job/streaming.scm
;;; compiling ./lib/byggsteg/domain/log.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/domain/log.scm.go
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/job/streaming.scm.go
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/job/steps.scm.go
;;; compiling ./lib/byggsteg/job/tasks.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/job/tasks.scm.go
;;; compiling ./lib/byggsteg/domain/job.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/domain/job.scm.go
;;; compiling ./lib/byggsteg/sqlite/job.scm
;;; compiling ./lib/byggsteg/sqlite/util.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/sqlite/util.scm.go
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/sqlite/job.scm.go
;;; compiling ./lib/byggsteg/sqlite/log.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/sqlite/log.scm.go
;;; compiling ./lib/byggsteg/sqlite/artifact.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/sqlite/artifact.scm.go
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/job/pipeline.scm.go
WARNING: (byggsteg html): `get-short-commit-sha' imported from both (hygguile hygguile) and (kracht prelude)
WARNING: (byggsteg html): imported module (hygguile hygguile) overrides core binding `select'
;;; compiled
scanning directories for unit tests...
scanning present working directory for unit tests...
shuffled the files with seed 46758784 (replay with VERITAS_SEED=46758784)
found unit tests: (logs-live-spec.scm about-page-spec.scm job-pipeline-spec.scm footer-version-spec.scm error-pages-spec.scm artifact-spec.scm api-v2-spec.scm retry-spec.scm form-width-spec.scm password-strength-spec.scm sqlite-spec.scm ansi-spec.scm retention-spec.scm container-spec.scm user-bootstrap-spec.scm console-resources-spec.scm job-pipelines-spec.scm deployment-identity-spec.scm tasks-spec.scm runners-spec.scm terminal-glass-spec.scm log-poll-spec.scm log-streaming-spec.scm job-search-spec.scm logs-page-spec.scm password-reset-spec.scm clones-spec.scm analytics-spec.scm heatmap-spec.scm)
running unit tests from file: logs-live-spec.scm, entrypoint: spec
ℹ️ info - shuffled with seed 46758784 (replay with VERITAS_SEED=46758784)
+----------------------------------------------+
[📑 suite] a list of runs while its runs are going
[🧪 test] a row says which job it is about, and whether that job can still change
[⚙️ assert] a job that is running is a row worth asking about
✅ got: (#t #t #t)
[⚙️ assert] a job that has stopped is not asked about again
✅ got: data-log-running="false"
[⚙️ assert] and neither is one that has been taken and not started
✅ got: data-log-running="true"
[🧪 test] the status is read in a place the answer can draw over
[⚙️ assert] a running row draws its status, and the mark of work in progress inside it
✅ got: (#t #t #t)
[⚙️ assert] a finished row draws the status without it
✅ got: (#t #f)
[🧪 test] the answer is the rows that were asked about
[⚙️ assert] each row of the answer names its job, its state and the place its status is read in
✅ got: (#t #t #t #t)
[⚙️ assert] and carries no output, which is a log's page business and not a list's
✅ got: spec data
[🧪 test] a run that fails while the list is open arrives with the retry for it
[⚙️ assert] the row offers the retry the list would have drawn
✅ got: (#t #t)
[⚙️ assert] and so does the answer that keeps the row current
✅ got: (#t #t)
[⚙️ assert] a reader who may not send one is drawn an empty place rather than a form
✅ got: (#t #f)
[🧪 test] a row that has just been taken is read as a run that is still to come
[⚙️ assert] its status says it is queued, and the answer keeps asking about it
✅ got: (#t #t)
[🧪 test] a run taken while the list is open arrives as a row of the list
[⚙️ assert] the run is drawn whole: its row, its state, its name and its page
✅ got: (#t #t #t #t)
[⚙️ assert] and with the controls its row would have been drawn with
✅ got: data-log-actions=""
[🧪 test] a run that is both asked about and newest is drawn once
[⚙️ assert] the row the list already has is answered with its readings, and is not drawn again
✅ got: 1
ℹ️ info - ran 1 tasks in: 0 seconds, 88069 microseconds
running unit tests from file: about-page-spec.scm, entrypoint: spec
ℹ️ info - shuffled with seed 46758784 (replay with VERITAS_SEED=46758784)
+----------------------------------------------+
[📑 suite] about page
[🧪 test] the page a crawler is handed says what it is
[⚙️ assert] it declares itself a document of this deployment
✅ got: <!DOCTYPE html>
[⚙️ assert] it is dressed in the same sheet as every other page
✅ got: /css/byggsteg.olive.min.css
[⚙️ assert] its canonical address is the page's own
✅ got: /about
[⚙️ assert] its title names the deployment and the page
✅ got: <title>byggsteg - about</title>
[🧪 test] the account is on the page, and it is this deployment's
[⚙️ assert] the story names the people, the framework and the three doors
✅ got: ()
[⚙️ assert] and it holds nothing the page was never meant to say
✅ got: ()
[⚙️ assert] the page opens under the console's own prompt
✅ got: $ byggsteg --origin
[🧪 test] the page is built by the components rather than describing them
[⚙️ assert] no component call was left un-made in the markup
✅ got: ()
[⚙️ assert] every element of the page is an element a browser knows
✅ got: ()
[⚙️ assert] no element of the page is closed on itself
❌ fail - error, expect: #t, got: (<img src="/img/byggsteg-logo.png" alt="" loading="lazy" class="h-7 shrink-0 w-auto" />)
[🧪 test] the page can be read on a phone
[⚙️ assert] no panel of it forces a width wider than the screen
✅ got: ()
[⚙️ assert] the panels are told they may shrink
✅ got: min-w-0
ℹ️ info - ran 1 tasks in: 1 seconds, -513576 microseconds
❌ error -
aborting due to error in test case...
/root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/html.scm.go
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/app/views/logs.scm.go
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/test/veritas/unit/logs-live-spec.scm.go
;;; compiling ./test/veritas/unit/about-page-spec.scm
;;; compiling ./test/veritas/support/deployment.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/test/veritas/support/deployment.scm.go
;;; compiling ./app/views/about.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/app/views/about.scm.go
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/test/veritas/unit/about-page-spec.scm.go
WARNING: (byggsteg html): `get-short-commit-sha' imported from both (hygguile hygguile) and (kracht prelude)
maak: error: command failed (exit code 1): guix time-machine --channels=channels.scm -- shell -m manifest.scm -- guile --fresh-auto-compile -L ./lib -L . -L ./test -c '(begin (setlocale LC_ALL "C.UTF-8") (use-modules (veritas runner)) (run-tests))'
hint: Fix the command above, or run `maak --dry-run' to inspect it first.
--------------------------------------------------------------
Maak 0.14.0: the infinitely extensible command runner
Loading tasks from Maak file: /etc/byggsteg/job-clone/byggsteg/trunk/maak.scm
Executing Maak tasks: test
--------------------------------------------------------------
=> Running Maak task: test
Run the project's test suite.
The specs live under test/veritas/unit. That is where the runner looks for
suites -- given the test root ./test, the module prefix `veritas' and the suite
name `unit' -- and it is also what their own `(veritas unit ...)' module names
resolve to on the load path below.
The run names the locale it reads in rather than inheriting one, and it names it
before the runner is asked for: Guile reads a page by the locale in force, and a
pattern over a page that holds a character outside ASCII reports matches where
there are none under a locale that names no encoding. `C.UTF-8' is that name
for a machine that has never generated a locale -- a service, a container, and
this project's own continuous integration, where the job that tests byggsteg is
run by a byggsteg daemon whose Shepherd unit names no locale at all. The suite
reads the pages of this console, whose prose, whose marks and whose console
output are not ASCII; run without a locale it would find elements no browser
knows and fail for a reason that has nothing to do with the change it was run to
judge. Naming it here is part of what the pinned manifest is for: a run of the
suite reads the same pages wherever the pipeline runs.
The specs are compiled rather than read from a cache. A compiled spec outlives
the library it was compiled against -- Guile decides a compiled file is still
good by the spec's own text, and not by the macros and procedures that text was
compiled with -- so a spec compiled before `(veritas veritas)' changed shape is
loaded afterwards as if it still had the old one. What that reads like is a
failure inside this project: `Wrong type to apply: #<syntax-transformer test>'
at the first test of a suite, on a spec whose source is untouched and whose
suite passes when compiled afresh. Compiling from source every run costs a few
seconds and makes the reading depend on the specs alone, which is what a suite
that is run to judge a change has to be.
Executing: guix time-machine --channels=channels.scm -- shell -m manifest.scm -- guile --fresh-auto-compile -L ./lib -L . -L ./test -c '(begin (setlocale LC_ALL "C.UTF-8") (use-modules (veritas runner)) (run-tests))'