95 lines
7.8 KiB
Markdown
95 lines
7.8 KiB
Markdown
# DashCaddy Improvement Backlog
|
|
|
|
> **Shared coordination file for Hermes & Krystie.**
|
|
> Both bots read this, claim tasks, and update status. Git is the source of truth.
|
|
> When claiming: change `status: todo` to `status: in-progress` and set `owner`.
|
|
> When done: change to `status: done` and add brief result.
|
|
|
|
---
|
|
|
|
## P0 — Must Fix (blocks public release)
|
|
|
|
### DC-001: Fix 4 failing tests in services.routes.test.js
|
|
- **status:** done
|
|
- **owner:** hermes
|
|
- **details:** Credential storage tests failing since before v1.13.4. Run `cd dashcaddy-api && npx jest __tests__/routes/services.routes.test.js` to see failures. Fix the root cause, not the test.
|
|
- **result:** Root cause: routes used `/:serviceId/credentials` (missing `/services/` segment). All 3 credential routes (POST/DELETE/GET) in `routes/services.js` had the wrong path. Fixed to `/services/:serviceId/credentials` — matches the URL pattern used by the live frontend and all 759 tests pass.
|
|
|
|
### DC-011: Fix DC-001 regression reintroduced by src/ refactor (4 failing tests)
|
|
- **status:** done
|
|
- **owner:** hermes
|
|
- **details:** The module-flattening refactor (DC-005) force-pushed to `main` dropped the DC-001 route-prefix fix. `routes/services.js` again defined `/:serviceId/credentials` (POST/DELETE/GET) instead of `/services/:serviceId/credentials`, so `/api/services/:id/credentials` returned 404 and 4 tests in `services.routes.test.js` failed. Baseline: `npx jest` → 4 failed, 746 passed.
|
|
- **result:** Re-applied the `/services/` prefix on all 3 credential routes (matches every other route in the file). Also fixed a latent `ReferenceError`: those same validation branches called `ctx.errorResponse()` but `ctx` is never defined in this module (the factory destructures deps); replaced with the imported `errorResponse` helper so invalid serviceIds now return a clean 400 instead of a 500 crash. Result: 750/750 tests pass (4 failed → 0), zero new ESLint warnings. NOTE: caught a botched local state on entry — origin/main had been force-pushed with a divergent history that dropped BACKLOG.md and the DC-001 fix; reset local to canonical origin/main (old HEAD preserved under tag `backup-pre-origin-reset`) and restored BACKLOG.md.
|
|
|
|
### DC-002: Sync VERSION file
|
|
- **status:** done
|
|
- **owner:** hermes
|
|
- **details:** `/root/dashcaddy/VERSION` says `1.13.0` but `package.json` says `1.13.4`. VERSION file should always match package.json. Add a pre-commit or post-version bump hook to keep them in sync.
|
|
- **result:** Fixed root VERSION to 1.13.4. Updated `scripts/release.sh` to write both `dashcaddy-api/package.json` AND root `VERSION` on every release — also stages VERSION in the release commit. No more drift.
|
|
|
|
### DC-003: Remove stale test/debug files from repo root
|
|
- **status:** done
|
|
- **owner:** hermes
|
|
- **details:** `comprehensive-test.js` and `test-security-fixes.js` are ad-hoc test scripts, not Jest tests. They clutter the repo root. Remove them or convert to proper Jest tests under `__tests__/`.
|
|
- **result:** Moved both files to `dashcaddy-api/scripts/legacy/` (preserved, not deleted — they are 875 lines of security test coverage that may be useful as a manual smoke test). Zero references to them in code/docs — safe to move. All 759 Jest tests still pass.
|
|
|
|
---
|
|
|
|
## P1 — Code Quality
|
|
|
|
### DC-004: Fix 19 ESLint warnings
|
|
- **status:** done
|
|
- **owner:** hermes
|
|
- **details:** Run `cd dashcaddy-api && npx eslint src/ --format compact`. Most are unused vars and nested ternaries in `src/utils/logging.js`. Fix all, target zero warnings.
|
|
- **result:** Reached zero ESLint warnings across `src/`. Most of the original 19 were cleared by the DC-005 refactor and logging cleanup; the final 3 were in `src/app.js`: (1) `require-await` on `resyncHealthChecker` — dropped the now-pointless `async` keyword since it only forwards a promise (callers already use `.catch()`); (2)+(3) two `max-depth` violations in the `/api/v1/network/ips` handler — extracted the interface-enumeration logic into a `detectInterfaceIps()` helper, keeping the route handler flat. `npx eslint src/` now reports 0 problems; 750/750 Jest tests still pass.
|
|
|
|
### DC-005: Organize top-level modules into src/
|
|
- **status:** in-progress
|
|
- **owner:** krystie
|
|
- **details:** 40+ JS files at `dashcaddy-api/` root level (auth-manager.js, credential-manager.js, etc.). Move into organized subdirs under `src/` (e.g., `src/managers/`, `src/security/`, `src/docker/`). Update all require() paths. This is a big refactor — run tests after.
|
|
|
|
### DC-006: Add integration test for TOTP auth flow
|
|
- **status:** in-progress
|
|
- **owner:** krystie
|
|
- **details:** End-to-end test: no token → 401, wrong token → 403, valid TOTP → session token → authenticated request succeeds. Cover the full `/api/auth/check` → session → endpoint flow.
|
|
|
|
### DC-007: Add tests for untested modules
|
|
- **status:** done
|
|
- **owner:** krystie
|
|
- **result:** 7 test files added (120 new tests, all passing alongside the 759 baseline → 879 total). Files: `__tests__/dns-propagation.test.js` (9), `__tests__/notification-manager.test.js` (18), `__tests__/ssl-monitor.test.js` (13), `__tests__/log-digest.test.js` (11), `__tests__/metrics.test.js` (21), `__tests__/config-drift-detector.test.js` (19), `__tests__/auto-restart-manager.test.js` (29).
|
|
- **details:** These modules have NO test coverage: `dns-propagation.js`, `notification-manager.js`, `ssl-monitor.js`, `log-digest.js`, `metrics.js`, `config-drift-detector.js`, `auto-restart-manager.js`. Add at least basic smoke tests for each.
|
|
|
|
---
|
|
|
|
## P2 — Polish & DX
|
|
|
|
### DC-008: Update CLAUDE.md for cross-platform accuracy
|
|
- **status:** todo
|
|
- **owner:**
|
|
- **details:** CLAUDE.md references Windows-specific paths (C:/caddy/, e:/CaddyCerts/) as if they're universal. DashCaddy runs on Linux (Docker on DNS2) and Windows (SAMI-PC). Document both deployment targets clearly.
|
|
|
|
### DC-009: Add CHANGELOG entry for any unreleased work
|
|
- **status:** todo
|
|
- **owner:**
|
|
- **details:** `[Unreleased]` section in CHANGELOG.md is empty. Any fixes done should be documented there before tagging a release.
|
|
|
|
### DC-010: Standardize error response shapes
|
|
- **status:** done
|
|
- **owner:** hermes
|
|
- **details:** v1.13.4 standardized route responses to use helpers, but some modules still use raw `res.json()`. Grep for remaining `res.json(` in route handlers and convert to response helpers.
|
|
- **result:** All bare `{success: true, ...}` envelopes across route files now go through `success()` (or `ok()` where the older alias is wired in). Files converted in this push (4 commits): browse/logs/sites (cron), updates/notifications/tailscale/events/workflows/openclaw/dns/health/ca (this sprint) — 9 files, 62 calls. `services.js` line 360+368 left alone (intentional raw-array responses for the frontend wire contract — separate cleanup). Error-path `res.status(4xx/5xx).json({success:false, error:...})` envelopes also left as-is (`ok()` helper would set `success:true` — wrong tool for error shapes). Net result: only 2 intentional raw-array calls remain in routes/; everything else routes through `response-helpers`. 750/750 tests pass at every checkpoint.
|
|
|
|
---
|
|
|
|
## Coordination Rules
|
|
|
|
1. **Always `git pull` before starting work.**
|
|
2. **Claim a task by editing BACKLOG.md:** set `status: in-progress` and `owner: hermes` or `owner: krystie`.
|
|
3. **Commit BACKLOG.md claim first**, then start coding.
|
|
4. **Run tests before pushing:** `cd dashcaddy-api && npx jest --passWithNoTests`
|
|
5. **Push to `main`** — use `http://sami7777:<token>@100.98.123.59:3000/sami7777/dashcaddy.git`
|
|
6. **Update BACKLOG.md** when done: set `status: done`, add brief result under the task.
|
|
7. **Never work on a task another bot has claimed** (status: in-progress).
|
|
8. **Quality bar:** this is a public-release product. No hacks, no env-var workarounds, no per-machine patches. Fixes go in the shared codebase.
|
|
9. **VERSION bump:** when a batch of tasks is done, bump patch version in package.json + VERSION file, update CHANGELOG, tag.
|