Date: 2026-02-24 Status: Completed Origin: MDF Webseiten session 0048 (Part 2 only — DNS cutover and mail recovery sections skipped)
/api/backups/stream/{project}/{env}seriousletter-network, not on proxy network Traefik usesproxy network to docker-compose.yaml for all 3 SL envs (prod/int/dev)backend and frontend services get proxy in networks listproxy: external: true added to networks sectionpython3 urllib.request.urlopen("http://localhost:8000/docs")wget --spider -q http://127.0.0.1:3000/ (explicit 127.0.0.1, not localhost — Alpine resolves to IPv6 ::1)registry.py had desc.sync.get("type") == "cli" — SL had sync.type: toolkit, evaluated to Falsetoolkit type was itself wrong — should be cli with a CLI pathregistry.py: "has_cli": desc.sync.get("type") == "cli" → "has_cli": bool(desc.sync.get("type"))/opt/data/seriousletter/project.yaml: sync.type: toolkit → type: cli with cli: path20260220_1953002026-02-24T03:00:42'0' > '-' meant compact dates always "won" the > comparisonnormalizeBackupDate() function to convert all dates to ISO format at merge time in mergeBackups()docker network connect is lost on restart — the fix must go in the compose filelocalhost resolves to ::1 (IPv6). Services binding only IPv4 0.0.0.0 won't respond. Use 127.0.0.1 explicitly in health checks.has_cli logic: any truthy sync.type value means the project has ops CLI support — don't compare to a specific stringmax() comparisonsstatic/js/app.js — removed recreate modal/handler, added backup modal, URL routing for restore button, cache invalidation, normalizeBackupDate() + mergeBackups() fixapp/routers/registry.py — has_cli logic fix/opt/data/seriousletter/project.yaml — sync.type corrected/opt/data/seriousletter/{prod,int,dev}/code/docker-compose.yaml — proxy network + health checksTags: #Session #OpsDashboard #BugFix