SPOT: declare the var-lib base once in default.env as INFINITO_DIR_VAR_LIB; the env build derives INFINITO_PLAYWRIGHT_REPORTS_BASE_DIR from it; reference it everywhere (utils/paths.py, scripts via ${...:?}, tests, the dev inventory's DIR_VAR_LIB injection) instead of hardcoding the literal. group_vars keeps the literal default; the env-lookup lives in the dev inventory per the no-ansible-env-lookups lint rule. pull_specific_host.py --folder is now required and the role passes {{ DIR_BACKUPS }}.
Swarm e2e: collect_playwright_reports.sh docker-cp's the reports off the manager plus a workflow upload step, so swarm Playwright traces reach CI artifacts (was compose-only).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Cleanup Utilities 🧹
This directory contains helpers that mutate persistent on-host state during purge flows.
Scope 📋
Modules under utils/cleanup/ MUST limit themselves to wiping or normalising state that survives compose and volume purges (for example secrets, token stores, cached registry data) so the surrounding entity-keyed purge primitives stay focused on stack-level cleanup.
Modules under utils/cleanup/ MUST NOT take over responsibilities that belong to the entity-keyed purge primitives in scripts/container/purge/entity/ (database drop, compose down, filesystem removal).
Usage 🛠️
Every module here SHOULD expose a callable function for in-process use and a __main__ shim so the same code path is reachable from shell orchestrators via python -m utils.cleanup.<module>.
The host-side purge flow invokes these modules through the app-keyed orchestrator apps.sh.