Files
dashcaddy/dashcaddy-api/__tests__
Hermes 6d875e4631
CI / Test & Lint (push) Canceled after 0s
CI / Security audit (push) Canceled after 0s
fix(api): rehydrate process.env from disk-settings.json on boot (DC-048) [glm-grade=A]
- New src/config/disk-settings-loader.js runs once at boot (require'd into
  src/app.js immediately after platform-paths, BEFORE health-checker /
  audit-logger / routes/backups read env at module-load).
- Routes the persisted values from <dataDir>/disk-settings.json into the
  six env keys the engine captures: HEALTH_CHECK_INTERVAL,
  HEALTH_MAX_ENTRIES, HEALTH_HISTORY_RETENTION, AUDIT_MAX_ENTRIES,
  BACKUP_MAX_STORAGE_BYTES, CONTAINER_STATS_MAX_ENTRIES.
- Explicit process.env values WIN over persisted file (operator override).
- Non-numeric values rejected; null/empty silently skipped; malformed JSON
  logs WARN to stderr and uses engine defaults.
- Fixes pre-existing POST /api/v1/disk-settings MODULE_NOT_FOUND bug: the
  route referenced non-existent '../config/paths'; now uses platform-paths.
- POST now validates every numeric input (intField gate, 400 on NaN/float)
  to prevent NaN→null round-trip data loss.
- Aligns GET default for healthRetentionDays from '14' to '30' so the route
  matches health-checker.js:34 (engine) and the modal's ||30 fallback.
- 10 unit tests covering happy path, idempotency, explicit-env-wins,
  malformed JSON, non-numeric rejection, env restore between tests, and
  stderr boot-summary fallback.

GLM-5.3 round 1: B (route MODULE_NOT_FOUND + MEDIUM POST NaN→null + boot log LOW).
GLM-5.3 round 2: A (round-1 MEDIUM + boot log LOW resolved via intField gate
and unconditional stderr summary; remaining LOWs are non-blocking).

Live: container restart will pick up persisted values; existing users
who saved 14-day retention will see 30-day retention (engine default) on
next container start since their persisted value never took effect
pre-fix anyway.
2026-08-17 16:04:18 -07:00
..