DC-009: populate [Unreleased] section in CHANGELOG.md
Documents all unreleased work since v1.5.0: - Security: TOTP 4-part recovery system - Added: OpenClaw routes, auto-backup + storage limits, monitoring widget, Sami Files template, unified logger, notification manager, update UX, 7 new test files (120 tests) - Changed: Route response standardization (DC-010, ~62 calls), /api/v1/ versioning, release.sh hardening - Fixed: DC-011 credential route regression, 19 ESLint warnings (DC-004), workflow engine init, container-logs wireModal misuse, CSP hash mismatch, SW cache tag, updater false-positive loop - Removed: legacy test scripts (moved to scripts/legacy/, preserved), stale root files, dead routes/ directory
This commit is contained in:
@@ -7,6 +7,38 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
### Security
|
||||||
|
- **TOTP recovery system (4-part defense against permanent lockout).** Pre-lockout: `.bak` fallback credentials file checked at every TOTP init, used silently when primary fails. Diagnostic: `/recovery-info` endpoint + `/recovery-panel` UI on the entry screen with one-click "Import Backup" + "Download Backup" buttons. Post-lockout: friction-free `.license-secret` restore flow. (`d230b39`, `3dff49c`, `7bbd969`)
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- **OpenClaw routes** — full set under `/openclaw` prefix: connect, disconnect, status, host discovery. `docker.client` wrapper fixed; duplicate `/apps/` paths stripped across sub-routers.
|
||||||
|
- **Auto-backup scheduling (premium tier)** + storage-limit enforcement (prune oldest when `maxStorageBytes` exceeded) + restore-from-backup on update rollback. Bundled workflows included out-of-the-box.
|
||||||
|
- **Monitoring widget on main dashboard** — CPU/mem data flattened, health summary added; `/api/monitoring/stats` exposed as a public route with rate-limit.
|
||||||
|
- **Sami Files template** — logPath wired into the template and mounted in `start.sh`.
|
||||||
|
- **Unified logger** — single source of truth for logs, errors, and audit events.
|
||||||
|
- **Notification manager + resource alerting** (premium tier).
|
||||||
|
- **Update UX** — badge→modal flow, orange update button, "Update All", toast notifications, workflow triggers.
|
||||||
|
- **Comprehensive test suite additions:** 7 new test files (`dns-propagation`, `notification-manager`, `ssl-monitor`, `log-digest`, `metrics`, `config-drift-detector`, `auto-restart-manager`) — 120 new tests, all passing.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- **Route response standardization (DC-010).** Every `{success, ...}` envelope across 9 route files now flows through `response-helpers` (`success()` / `ok()`). Only 2 intentional raw-array calls remain (`routes/services.js` lines 360+368 — frontend wire contract). Error-path envelopes use `error()` separately. ~62 calls converted across `browse/logs/sites/updates/notifications/tailscale/events/workflows/openclaw/dns/health/ca`.
|
||||||
|
- **`/api/v1/` versioning:** all routes mounted under `/api/v1/`. Legacy un-versioned `/api/` mount removed. Frontend, OpenAPI spec, DashCA pages, and all internal path matchers (CSRF exclusions, auth public routes, audit log, rate-limit mounts) updated.
|
||||||
|
- **`scripts/release.sh`** now stages build-rewritten files (`sw.js`, `index.html`) for the published tarball, copies `VERSION` into the tarball, and writes both `dashcaddy-api/package.json` AND root `VERSION` on every release. No more version drift.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- **Credential route path regression (DC-011).** `routes/services.js` had dropped the `/services/` prefix from credential routes (POST/DELETE/GET) during a refactor, causing 4 test failures and a live 404. Re-applied the prefix; also fixed a latent `ReferenceError` where invalid serviceIds called `ctx.errorResponse()` in a factory-destructured module (replaced with the imported `errorResponse` helper).
|
||||||
|
- **19 ESLint warnings (DC-004).** Reached zero warnings across `src/` — most cleared by the refactor, the final 3 (`require-await` on `resyncHealthChecker`, two `max-depth` violations) fixed in `src/app.js`.
|
||||||
|
- **Workflow engine init broken** — `fetchT` not imported, `NotificationManager` constructor missing `new`, `servicesStateManager` not hoisted. Fixed; events now fire on startup.
|
||||||
|
- **Container-logs feature was misusing `wireModal`** — short-circuited the rest of `features.js` and broke unrelated dashboard features. Replaced with the correct wiring.
|
||||||
|
- **CSP hash mismatch** between Windows and Linux builds — now computed on LF-normalized `index.html` so hashes are identical across platforms.
|
||||||
|
- **SW cache tag** now derived from bundle content hash, so the service worker invalidates correctly when bundle content changes.
|
||||||
|
- **Updater false-positive loop** when commit hash was unknown — fixed.
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
- Stale ad-hoc test/debug scripts (`comprehensive-test.js`, `test-security-fixes.js`) moved to `dashcaddy-api/scripts/legacy/` (preserved, not deleted — 875 lines of security test coverage retained as a manual smoke test).
|
||||||
|
- Stale root-level files: `*.bak`, `server-old.js`, and ad-hoc reports (`DEPLOYMENT-SUCCESS.md`, `FINAL-DEPLOYMENT-REPORT.md`, `DESLOPIFICATION-ROADMAP.md`, etc.) — disk-only cleanup, already gitignored.
|
||||||
|
- Dead `routes/` directory at API root (replaced by `src/routes/`).
|
||||||
|
|
||||||
## [1.5.0] - 2026-05-17
|
## [1.5.0] - 2026-05-17
|
||||||
|
|
||||||
### Changed (BREAKING)
|
### Changed (BREAKING)
|
||||||
|
|||||||
Reference in New Issue
Block a user