2.1 KiB
2.1 KiB
Ops Portal Full Bug Audit Report
Date: July 12, 2026 Scope: All 11 pages at ops.itpropartner.com Auditor: Claude Sonnet 4-6 (via delegation) Total bugs found: 42 (14 Critical, 9 High, 12 Medium, 7 Low)
Root Cause Summary
/js/utils.jsreturned 404 — file existed at/var/www/ops/js/utils.jsbut not at/opt/ops-portal/static/js/(the backend's JS directory)window.initNavnot exported from app.js — only exists atOps.initNav. Every page callswindow.initNav()which is undefinedlogoutBtnDOM lookups happen before nav fetch completes on 3 pageswindow.fetchStatusundefined on cost.html — hard crash on load- 6 pages have no auth guard at all
- audit.html uses sessionStorage instead of localStorage for token
Priority Fix List
🔴 P1 — Critical (fix first)
| Bug | Pages | Fix |
|---|---|---|
utils.js 404 |
All 10 pages | ✅ Already fixed — copied to backend static dir |
window.initNav undefined |
All fetched-nav pages | Export window.initNav = initNav in app.js |
logoutBtn null ref before nav |
services, servers, backups | Move getElementById inside fetch callback |
window.fetchStatus crash |
cost.html | Replace with raw fetch() call |
window.escapeHtml undefined |
config.html | Use Ops.escapeHtml or add window alias |
| audit.html uses sessionStorage | audit.html | Change to localStorage |
| No auth guard | network, cron, config, logs, cost, fleet | Add login overlay + auth check |
🟠 P2 — High
| Bug | Fix |
|---|---|
Login overlay hardcoded show class |
Remove show from HTML |
<main> misplaced in cron.html |
Move <main> to wrap content |
| Grafana Tailscale IP breaks on mobile | Replace with hostname or remove |
🟡 P3 — Medium
| Bug | Fix |
|---|---|
summary-bar CSS missing from ops.css |
Add styles |
| fleet tracker missing viewport-fit=cover | Add to meta |
Hardcoded username germaine in audit.html |
Remove value attribute |
| COT midnight hour bug in fleet tracker | Use % 24 |
Full Bug List (42 items)
See /root/.hermes/cache/delegation/subagent-summary-0-20260712_081532_243138.txt for complete details.