ai-assisted-todolist

Troubleshooting#

Dev Services does nothing, or Maven reports no container runtime. Quarkus needs a Docker-compatible socket. With Podman on macOS, start the machine and export the socket it prints:

podman machine start
export DOCKER_HOST="unix://$(podman machine inspect --format '{{.ConnectionInfo.PodmanSocket.Path}}')"

The Keycloak container starts and is immediately killed (exit 137). It has run out of memory — the default Podman machine is too small for it. Give the machine more:

podman machine stop
podman machine set --memory 5120 --cpus 4
podman machine start

npm run dev says it is ready, but http://localhost:5173 cannot connect. Vite used to bind whatever Node resolved localhost to, which can be IPv6 [::1] alone, while the browser resolved localhost to 127.0.0.1 first and found nothing there. vite.config.ts now binds 127.0.0.1 explicitly. With strictPort it also refuses to start when 5173 is taken, instead of moving to 5174 without saying so. If it says the port is in use, an earlier dev server is still running: lsof -nP -iTCP:5173 -sTCP:LISTEN names it.

Dev mode floods the log with IllegalAccessError: module java.base does not open java.lang. jboss-threads resets thread locals on Java 24 and later, which needs java.lang opened to the unnamed module. backend/pom.xml passes the flag to the JVM that quarkus:dev forks, so a current checkout does not need anything; if you are on an older one, ./mvnw quarkus:dev -Djvm.args="--add-opens java.base/java.lang=ALL-UNNAMED" does the same thing for one run. The plugin's own openJavaLang option looks like the right answer but is broken in Quarkus 3.25.2 — it emits a doubled = and the forked JVM refuses to boot.

docker build succeeds but Compose cannot find the image. With a buildx docker-container driver the build result stays in the build cache rather than in the image store; add --load to the docker build command.

Port 8080, 8082, 5173 or 3000 is already in use. Usually one of the other stacks is still up. docker compose -f deployment/docker/docker-compose.e2e.yml down -v and docker compose -f deployment/docker/docker-compose.yml down, then check for a stray quarkus:dev.

Signed in, but every request comes back 401. Usually a q_session cookie left over from a previous run whose Keycloak realm no longer exists — the cookie decrypts to tokens issued by a dead instance. Clear cookies for localhost:5173 (or :3000) and sign in again.

Sign-in lands you on port 8080 instead of returning to the app. A proxy is rewriting the Host header. Check changeOrigin: false in frontend/vite.config.ts, or ProxyPreserveHost On in frontend/docker/httpd.conf.

400 on every request after signing in. The session cookie is chunked, and all the chunks come back in one Cookie header. If it has outgrown Apache's limit, raise LimitRequestFieldSize in frontend/docker/httpd.conf — it is already set well above what the current tokens need, so this means the provider started issuing larger ones.

A deep link 404s instead of loading the app. FallbackResource /index.html is missing from frontend/docker/httpd.conf, or the path is being served from outside the document root.

The backend container exits immediately with no log output. The image was built on a base with an older JDK than the code targets. quarkus.jib.base-jvm-image must stay pinned to a Java 25 base.