Fixed
- ๐ณ Docker "Tool mode save failed" โ clear root cause + actionable fix (#119) โ when the
fcm-datavolume was created with files owned by a different UID (older images, host bind-mounts),chmod -R 777had no effect because Linux checks file ownership, not mode bits. Two-layer fix:src/core/config.jsโsaveConfig()now detectsEACCES/EPERMand surfaces a friendly hint via the new exportedformatPermissionHint()function. The hint explains whychmodis the wrong tool and gives the exactdocker compose down && docker volume rm <vol> && docker compose upfix.docker-entrypoint.shโ proactive ownership check at container startup. If a config file is owned by a different UID than the runningfcmuser, the entrypoint logs a loudโ ๏ธ WARNINGblock before the first save attempt fails with a confusing error.
Closed (upstream, no FCM-side fix possible)
- ๐ Caveman CLI install fails on Node 26 (#101) โ this is upstream in
@juliusbrussee/caveman-code.better-sqlite3 v11.10.0doesn't compile against Node.js v26 (V8 API churn:GetPrototypeโGetPrototypeV2, etc.). FCM surfaces the npm error verbatim but cannot fix caveman-code's deps. Workaround: use Node v22 or v24 (both LTS, both supported bybetter-sqlite3@11).
Maintenance
- ๐งช +6 new unit tests for
formatPermissionHint()(test/config-permission-hint.test.js) โ covers empty string for non-permission errors, EACCES/EPERM detection, Docker volume mention, "chmod is not the fix" wording, multi-line output.
Pre-flight checks
- 590/590 tests pass (
pnpm test) vite buildsucceeds- All three surfaces (CLI, web dashboard, Docker) compatible