diff --git a/CLOUD_SESSION_CRITICAL_FIXES.txt b/CLOUD_SESSION_CRITICAL_FIXES.txt new file mode 100644 index 0000000..0b391fc --- /dev/null +++ b/CLOUD_SESSION_CRITICAL_FIXES.txt @@ -0,0 +1,82 @@ +Clone https://github.com/dannystocker/navidocs, checkout branch claude/install-run-ssh-01RZPPuRFwrveZKec62363vu (latest build with E2E tests passing), create new branch fix/critical-security-ux, then implement these 8 critical fixes using 8 Haiku agents in parallel (single message with 8 Task tool calls): + +SECURITY FIXES (Agents 1-4): + +Agent 1 - JWT Secret Enforcement: +- File: server/services/auth.service.js line 13 +- Change: const JWT_SECRET = process.env.JWT_SECRET || 'your-jwt-secret-here-change-in-production' +- To: const JWT_SECRET = process.env.JWT_SECRET; if (!JWT_SECRET || JWT_SECRET.length < 32) throw new Error('JWT_SECRET required, min 32 chars'); +- Test: Server should crash on startup without JWT_SECRET + +Agent 2 - Document/Image Route Auth: +- Files: server/routes/documents.js, server/routes/images.js +- Find all: const userId = req.user?.id || 'test-user-id' +- Change to: const userId = req.user.userId (and add authenticateToken middleware to routes) +- Import: import { authenticateToken } from '../middleware/auth.middleware.js' +- Test: Unauthenticated requests should return 401 + +Agent 3 - Search/Upload Route Auth: +- Files: server/routes/search.js, server/routes/upload.js +- Same pattern: Remove 'test-user-id' fallbacks, add authenticateToken middleware +- Test: Unauthenticated uploads/searches should return 401 + +Agent 4 - Stats Route Protection: +- File: server/routes/stats.js +- Add: import { authenticateToken, requireSystemAdmin } from '../middleware/auth.middleware.js' +- Change: router.get('/', async (req, res) => TO router.get('/', authenticateToken, requireSystemAdmin, async (req, res) => +- Test: Non-admin requests should return 403 + +MARINE UX FIXES (Agents 5-8): + +Agent 5 - Touch Targets 60px Minimum: +- Files: client/src/components/TocSidebar.vue, SearchResultsSidebar.vue, TocEntry.vue +- Find all: width: 20px, width: 32px, width: 40px, height: 20px, height: 32px, height: 40px +- Change to: min-width: 60px, min-height: 60px, padding: 10px +- Test: grep -r "width.*px|height.*px" client/src/components/ should show no values under 60px for buttons + +Agent 6 - Font Sizes 16px Minimum: +- Files: client/src/views/SearchView.vue, client/src/components/TocSidebar.vue, SearchResultsSidebar.vue +- Find all: font-size: 10px, 11px, 12px, 13px, 14px +- Change to: font-size: 16px minimum +- Test: grep -r "font-size.*px" client/src/ should show no values under 16px + +Agent 7 - ARIA Labels: +- Scan: grep -r "