The GOAL's "generic first-run setup" / one-liner `docker run` needs the image to boot with none of the ~8 host paths the homelab compose mounts. It nearly did: every catalog already degraded to an empty list except /api/templates, which 500'd on a missing templates dir. - templates.py: a missing templates mount returns [] instead of raising. An absent catalog is a valid state; only a *named* template that isn't there is still a 404. - docker-compose.standalone.yml: the generic shape — a workspace + a data volume and nothing else required, no Traefik, no homelab paths. - scripts/standalone-smoke.sh: boots the image on a throwaway workspace and asserts every catalog endpoint + the PWA shell answer 200, and that no background thread left a traceback. This is the regression guard — it's what caught the templates 500. Verified: smoke passes on the new image, fails on the old one. Also records the two things standalone still can't do (build off-homelab: .npmrc pulls @gabvdl/ui from the host verdaccio; spawn sessions: needs the host sidecar) in GOAL.md. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
9.8 KiB
9.8 KiB