Per Phase 1 audit at cowork/docs-overhaul-phase-1-audit-2026-05-04/
and the section-by-section plan in testing-guide-tumor.md.
testing-guide.md was 30% of all docs/ content (8268 lines) but was
integration test code written in markdown, not operator documentation.
The audit's tumor analysis disposed of every Part:
- ~65% DELETE (test cases that already exist in code)
- ~22% MOVE to inline test code
- ~8% KEEP-COMPRESSED into focused operator-runbook docs
- Title + contents + release sign-off ~5% KEEP
This commit ships the KEEP-COMPRESSED dispersal:
docs/contributor/qa-prerequisites.md (NEW, ~120 lines):
From testing-guide.md "Prerequisites" section. Stack boot procedure,
demo data baseline, reference IDs operators reuse across QA docs.
docs/contributor/gui-qa-checklist.md (NEW, ~105 lines):
From testing-guide.md "Part 35: GUI Testing". Manual GUI verification
pass for release sign-off. 25-row table covering every dashboard page.
docs/contributor/release-sign-off.md (NEW, ~130 lines):
From testing-guide.md "Release Sign-Off" section (originally 1009
lines of per-test detail tables). Compressed to a release-day
checklist organized by gate category: code state, automated gates,
manual QA passes, release artefact verification, branch protection,
post-release.
docs/operator/performance-baselines.md (NEW, ~100 lines):
From testing-guide.md "Part 39: Performance Spot Checks". Four
operator-runnable benchmarks (API request handling, inventory list
pagination, scheduler tick, bulk revoke) with baseline numbers and
when-to-re-baseline guidance.
docs/operator/helm-deployment.md (NEW, ~120 lines):
From testing-guide.md "Part 52: Helm Chart Deployment". Operator
runbook for the bundled deploy/helm/certctl/ chart: prereqs,
install, four cert-source patterns, verify, upgrade, troubleshooting.
docs/reference/cli.md (NEW, ~120 lines):
From testing-guide.md "Part 28: CLI Tool". certctl-cli command
reference with command-group breakdown, common workflows
(list/filter, renew, revoke, bulk import, EST enrollment, status),
output formats, CI/CD integration patterns.
docs/README.md navigation index updated to include the 6 new docs:
Reference section gains: cli.md, release-verification.md (was added
in Phase 13)
Operator section gains: helm-deployment.md, performance-baselines.md
Contributor section gains: qa-prerequisites.md, gui-qa-checklist.md,
release-sign-off.md
docs/testing-guide.md deleted. Git history preserves the 8268 lines —
if any specific test case is found missing from inline test code or
the destination docs during future work, lift from `git show
HEAD~1:docs/testing-guide.md`.
Net: docs/ total line count drops by ~7700 lines (28%), from 26,369
to 18,742. testing-guide.md was the single largest doc; pruning it is
the single biggest content-edit win of the entire restructure.
Phase 5 is the last major content phase. Remaining: Phase 4 follow-on
(per-connector page extractions from reference/connectors/index.md),
Phase 15 (WHAT/HOW/WHY remediation), Phase 16 (final acceptance gate).
4.1 KiB
GUI QA Checklist
Last reviewed: 2026-05-05
Manual GUI verification pass for release sign-off. Vitest covers component-level behavior; this checklist covers end-to-end flows that only land correctly when the React SPA, the REST API, and the database are all wired together.
Prereqs
The full stack must be running and healthy per qa-prerequisites.md. Open https://localhost:8443 in a fresh browser session (Incognito / Private mode is fine — avoids cached state from previous QA passes).
Pages to verify
For each page, the verification is "open it, confirm it renders without console errors, exercise the documented action, confirm the action lands as expected."
| Page | Action to verify | Expected result |
|---|---|---|
/dashboard |
Page loads, all 4 stat cards populate | Total / Active / Expiring / Expired counts match GET /api/v1/stats/summary |
/certificates |
Inventory list paginates | "Next page" button works; URL updates with cursor; row count consistent |
/certificates/<id> |
Detail page opens for any cert | Cert chain renders, deployment status shows, audit timeline visible |
/issuers |
Catalog renders all configured issuers | Each issuer card shows last-used / status; clicking opens detail |
/issuers/<id> |
Issuer config form | Edit + Save round-trips through PATCH /api/v1/issuers/<id> |
/issuers/hierarchy |
CA tree view | Multi-level hierarchy renders; admin-gated CRUD buttons present for admins only |
/agents |
Fleet view | Online/offline status accurate; OS/arch grouping correct |
/agents/<id> |
Agent detail | Last heartbeat, registered date, deployment job history |
/agents/groups |
Agent groups CRUD | Create + edit + delete a test group; verify dynamic membership matching |
/jobs |
Job queue | Filter by status / type works; click into a job opens detail |
/jobs/<id> |
Job detail | Status, retries, logs, owner attribution |
/policies |
Renewal policies CRUD | Edit AlertChannels matrix, save, verify backend reflects change |
/profiles |
Certificate profiles | EKU constraints + max TTL editable; profile binding works |
/notifications |
Notifier config | Test connection button against each configured notifier |
/discovery |
Discovery triage | Claim / Dismiss buttons round-trip to backend |
/network-scans |
Scan target CRUD | Create scan target, trigger immediate scan, results appear |
/audit |
Audit trail | Filter by actor / action / time range; CSV export works |
/short-lived |
Short-lived credential dashboard | Live TTL countdown updates; auto-refresh every 10s |
/observability |
Observability dashboard | Charts render: expiration heatmap, renewal trends, issuance rate |
/health |
Health monitor | TLS endpoint health: healthy / degraded / down states accurate |
/digest |
Digest preview | Email preview renders; "Send digest" button dispatches |
/owners |
Owners CRUD | Create owner with team, edit, delete (after reassigning certs) |
/teams |
Teams CRUD | Create + delete; verify cascade removes orphan owners |
/scep |
SCEP admin tabs | Profiles / Intune Monitoring / Recent Activity all populate |
/est |
EST admin tabs | Profiles / Recent Activity / Trust Bundle all populate |
/login |
Login flow | API key entry persists for the session; bad key rejected |
Console hygiene
Open browser DevTools and confirm:
- No uncaught exceptions on any page
- No 404 / 500 responses in the Network tab from API calls
- No CORS errors
- No CSP violations
Mobile / narrow-viewport
The dashboard is desktop-first but should not break catastrophically on narrow viewports. Resize the browser to 380px width; confirm:
- Sidebar collapses to a hamburger menu
- Tables either scroll horizontally or stack on mobile
- Forms remain usable
Accessibility spot-check
- Tab through any single page using only the keyboard. Every interactive element must be reachable, and the focus indicator must be visible.
- Lighthouse accessibility audit on
/dashboard: target ≥ 90.
Sign-off
Document any deviations in the release sign-off matrix at release-sign-off.md.