[Guide] coverage-reconcile.py cannot see a new module in an already-documented SPA #25
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
scripts/coverage-reconcile.pyexists so nothing new stays undocumented. It has a blind spot that already cost us one: hiveops-fleet#119 shippedfleet.task-permissions— a live, customer-facing capability — with zero guide coverage, and the reconciler stayed silent. Found by hand; fixed in #23/#24.Why it missed it
The script checks four things:
technical.<svc>agent.<slug>Check 4 (line ~82) is all-or-nothing per app:
fleetalready had 5 modules, soapp in appswas true and the check passed. The script never enumerates SPA nav items, so a new module inside an already-documented SPA is invisible. Check 3 only validates modules that are already present — a module that doesn't exist has no tabs to be missing.Impact
Every documented SPA (fleet, incident, devices, analytics, reports, …) can grow new tabs indefinitely with no coverage signal. This is the common case — new SPAs are rare, new tabs in existing SPAs are routine. The reconciler is strongest exactly where we need it least.
Suggested fix
Derive each SPA's module list from its nav definition and diff against guide keys. In fleet the source of truth is
frontend/src/App.svelte:Caveats worth designing around:
permissions→fleet.task-permissions,patch-windows→fleet.patch-windows. Needs an alias map or a convention, or it will emit false positives immediately.App.sveltemay not generalise. A small per-app declaration (nav key → guide key) that CI validates may beat inferring it.Alternative, cheaper: have
GuidePanelreport apageKeythat 404s, so a missing module surfaces at runtime instead of at CI. Complementary, not a replacement — it only fires if someone wires a Guide button.