# gates for radicale, catalog working tree on 55b8c8a + the radicale commit's files, 2026-10-01T14:57:24Z
== check-image-pins.py
image-pin gate OK — 54 templates, 0 unpinned images
gate exit code = 0
== check-image-resolvable.py radicale
resolving 1 unique image pin(s)…
image-resolvability gate OK — 1 unique pins, all resolve
gate exit code = 0
== check-probe-matches-compose.py radicale

probe-matches-compose: OK — every probe dials the port (and, where it can fail, the path) that the app's own compose healthcheck dials
gate exit code = 0
== check-probe-measured.py radicale
probe-measured: OK — 0 probes, each with a measured before/after
gate exit code = 0
== check-copy-i18n.py radicale
copy-i18n: translated so far — actualbudget 15/15, adventurelog 18/18, audiobookshelf 21/21, bentopdf 14/14, bookstack 21/21, calcom 22/22, calibre-web 27/27, claper 20/20, code-server 20/20, crafty-controller 24/24, d
copy-i18n: OK
gate exit code = 0
== check-test-record.py radicale
test-record gate — 1 template(s) read, 1 carry a ladder, 0 convicted
gate exit code = 0
== check-volume-persistence.py radicale (RUNTIME, on bench 9401 — scratch host; full log ../G/cvp-radicale-tail.txt)
self-testing the prober (both directions)…
  prober flags the R-156 signature and clears a correct template — trustworthy
radicale             CLEAN         
1 clean · 0 broken · 0 undetermined (of 1 in scope)
volume-persistence gate OK
gate exit code = 0
(note: the runtime gate ran on bench 9401 against the template at 3.8.0 with the first-start-only login — the definition the ladder step starts from; 3.8.1 changes only the image tag)
