2.1 KiB
2.1 KiB
Phase 3 — Surface E: delivery tree
~3 days. Zero new data sources, zero new attack surface, highest signal — reads as platform engineering, not hobby.
RED
delivery_test.go— apps group correctly bysync-wave; Secret names absent from output (kind+count only);repoURLabsent from outputdelivery.test.tsx— 550-node tree renders under frame budget with virtualization ondelivery.e2e.ts(Playwright, hard requirement) — load/delivery, click app node, assert side panel opens with virtualized resource tree, assert no Secret names appear in DOM
GREEN
GET /api/delivery— Argo apps, wave-grouped (0→8), resource children lazy; capped 256 KBGET /api/delivery/{app}/resources— cursor-paginated at 100 items (prometheus alone has 68 resources today)- Frontend: React Flow, wave columns left→right from
sync-waveannotations. Click app → side panel withreact-arboristvirtualized resource tree, lazy-loaded children - Live sync animation
OutOfSync → Syncing → Synceddriven by Application watch (reuse Phase 2 SSE/api/stream, adddeliveryevent type) - Redaction check specific to this surface: 21
Secretresources appear in Argo trees today — render kind+count only, never names (includessops-secrets);status.conditions[].messageechoes raw errors with internal hostnames — emit condition type only
REFACTOR
simplifypass on wave-grouping + virtualized tree code
Verify
# trigger an Argo sync, observe wave-ordered animation
argocd app sync homelab-root
pnpm test:e2e delivery.e2e.ts # required, must pass before merge
Also in scope for this phase: delete fabricated stats in app/page.tsx ("40% CPU reduction", "99.2% uptime", "Mission-critical", "60% latency cut") — wire each card to a real number from /api/topology or /api/delivery, or remove the claim. Five of six landing cards link to routes that don't exist (/infrastructure, /systems, /llm, /kafka, /opensource) — fix or remove.
Next: 05-phase4-terminal.md