Skip to content

Commit 69543dd

Browse files
committed
Add outstanding PR test backlog (2026-04-10)
Update MANUAL_TEST_CHECKLIST last-updated date and add a new "Z. Outstanding PR Test Backlog" section (2026-04-10). The added backlog aggregates manual test tasks pulled from PR test plans (open PRs #797#813 and closed PRs #768#799), includes a status legend, and enumerates verification checklists across categories (Z1–Z17) such as OIDC/SSO & MFA, OAuth PKCE, calendar/timeline views, note import/web clip intake, Storybook, deployment/ops, testing infrastructure (Testcontainers, cross-browser E2E, visual regression, mutation testing), PWA/offline, SignalR scale-out, Postgres migration compatibility, forecasting, inbox UX, CSV export, accessibility, E2E edge scenarios, dependency hygiene, and concurrency stress tests. This provides a single reference for outstanding manual verification items tied to the referenced PRs.
1 parent f460269 commit 69543dd

File tree

1 file changed

+220
-1
lines changed

1 file changed

+220
-1
lines changed

docs/MANUAL_TEST_CHECKLIST.md

Lines changed: 220 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
Use this checklist to manually validate current Taskdeck behavior on `main`.
44

5-
Last Updated: 2026-04-05
5+
Last Updated: 2026-04-10
66
Companion Active Docs:
77
- `docs/STATUS.md`
88
- `docs/IMPLEMENTATION_MASTERPLAN.md`
@@ -899,6 +899,225 @@ Summary scope:
899899
5. Error payload contract verification for auth/validation/sandbox paths (B-100 to B-110)
900900
6. Advanced controller families: ops/logs/users/abuse/llm-quota/agents/knowledge/webhooks/external-imports (B-130 to B-175)
901901

902+
## Z. Outstanding PR Test Backlog (2026-04-10)
903+
904+
This section captures testing tasks extracted from PR test plans (open PRs #797#813 and closed PRs #768#799) where items were marked unchecked at time of merge or remain pending on open PRs. Organized by category with source PR references.
905+
906+
Status legend: `[ ]` = not yet performed, `[x]` = verified.
907+
908+
---
909+
910+
### Z1. Security: OIDC/SSO and MFA (PR #813 — open)
911+
912+
1. [ ] Verify OIDC login flow with a test provider (e.g., Entra ID or Google).
913+
- Precondition: configure `Oidc:Providers` in backend config with a real or test OIDC provider.
914+
- Expected: clicking the OIDC button redirects to the provider, callback authenticates user, workspace loads.
915+
2. [ ] Verify MFA setup/confirm/verify/disable flow.
916+
- Navigate to user settings, enable MFA setup, scan TOTP QR code in authenticator app, enter confirmation code.
917+
- Expected: MFA is enabled; TOTP code required on subsequent sensitive actions; disable flow removes MFA requirement.
918+
3. [ ] Verify OIDC login buttons only appear when providers are configured.
919+
- With no `Oidc:Providers` configured, navigate to `/login`.
920+
- Expected: no OIDC buttons visible. Only username/password form.
921+
- With at least one provider configured, navigate to `/login`.
922+
- Expected: OIDC button(s) visible with provider display names.
923+
4. [ ] Verify MFA challenge modal appears for sensitive actions when `RequireMfaForSensitiveActions` is `true`.
924+
- Enable MFA for a user. Attempt password change or account deletion.
925+
- Expected: MFA challenge modal appears requiring TOTP code before proceeding.
926+
927+
### Z2. Security: OAuth PKCE and Account Linking (PR #812 — open)
928+
929+
1. [ ] Verify GitHub OAuth login still works end-to-end.
930+
- Precondition: `GitHubOAuth:ClientId` and `GitHubOAuth:ClientSecret` configured.
931+
- Click "Sign in with GitHub", authorize, verify callback completes and workspace loads.
932+
2. [ ] Test account linking from Settings page.
933+
- Log in with username/password. Navigate to account settings. Link a GitHub account.
934+
- Expected: GitHub identity linked; subsequent logins with that GitHub account land in the same user account.
935+
3. [ ] Verify PKCE parameters in GitHub authorization URL.
936+
- Open browser dev tools Network tab. Click "Sign in with GitHub".
937+
- Expected: authorization URL contains `code_challenge` and `code_challenge_method=S256` parameters.
938+
939+
### Z3. Calendar and Timeline Views (PR #810 — open)
940+
941+
1. [ ] Navigate to `/workspace/calendar` and verify the grid renders with cards grouped by due date.
942+
- Expected: cards with due dates appear on the correct calendar days; cards without due dates are not shown.
943+
2. [ ] Switch to timeline mode and verify chronological grouping.
944+
- Expected: cards appear in a vertical timeline ordered by due date.
945+
3. [ ] Click month navigation arrows and the "Today" button.
946+
- Expected: calendar view shifts months correctly; Today returns to current month.
947+
4. [ ] Click a card in the calendar to verify board drill-down navigation.
948+
- Expected: navigates to the card's board and opens the card modal.
949+
5. [ ] Verify empty state when no cards have due dates.
950+
- Expected: helpful empty state message (not a blank page or error).
951+
952+
### Z4. Note Import and Web Clip Intake (PR #809 — open)
953+
954+
1. [ ] Verify markdown with multiple headings creates separate capture items in inbox.
955+
- Import a markdown file with 3+ `## Heading` sections via the import API or UI.
956+
- Expected: each heading section becomes a separate capture item in the inbox.
957+
2. [ ] Verify web clip preserves URL in provenance.
958+
- Submit a web clip with a source URL via the import endpoint.
959+
- Expected: capture item provenance includes the original URL.
960+
3. [ ] Verify imported content appears in capture inbox, not directly on board.
961+
- Expected: imports go through the standard capture → triage → proposal flow, not directly to board.
962+
963+
### Z5. Storybook Tooling Validation (PR #807 — open)
964+
965+
1. [ ] Run `npm run storybook` and verify dev server launches and all 17 stories render.
966+
- Expected: Storybook opens in browser, all `Td*` component stories load without errors.
967+
968+
### Z6. Deployment and Operations (PRs #806, #798, #799 — open)
969+
970+
**Staged Deployment (PR #806):**
971+
1. [ ] Verify `scripts/deploy/smoke-test.sh` runs successfully against a local Docker Compose stack.
972+
- Run: `docker compose -f deploy/docker-compose.yml up -d --build` then `bash scripts/deploy/smoke-test.sh`
973+
- Expected: all 9 automated smoke checks pass (health, API, auth, frontend, SignalR, static assets, security headers, container restart).
974+
2. [ ] Verify `.github/workflows/cd-staging-gate.yml` YAML is valid.
975+
- Run: `docker compose -f deploy/docker-compose.yml config` or use a YAML validator.
976+
- Expected: no syntax errors.
977+
3. [ ] Confirm ADR-0028 follows template from `docs/decisions/README.md`.
978+
4. [ ] Review deployment workflow for completeness against rollback criteria in ADR-0028.
979+
5. [ ] Verify cross-references between all new and existing deployment docs are consistent.
980+
981+
**Cloud Cost Observability (PR #798):**
982+
6. [ ] Verify all cross-references between cost docs are valid (ADR links, ops doc mutual references).
983+
7. [ ] Verify ADR appears in `docs/decisions/INDEX.md` with correct number and status.
984+
8. [ ] Verify LLM cost estimates reference actual supported providers (OpenAI GPT-4o-mini, Gemini 2.5 Flash).
985+
9. [ ] Verify mitigation actions reference actual Taskdeck config keys and API endpoints.
986+
10. [ ] Verify runbook phases are actionable given the current architecture (single-node, SQLite, in-process workers).
987+
988+
**Cloud Topology ADR (PR #799 — closed):**
989+
11. [ ] Verify ADR follows existing template format (matches ADR-0001 through ADR-0022 structure).
990+
12. [ ] Verify ADR index entry is correctly formatted and numbered.
991+
13. [ ] Verify topology diagram is consistent with the described components.
992+
14. [ ] Verify cost estimates reference current AWS pricing tiers.
993+
15. [ ] Verify follow-up tasks reference existing tracked issues where applicable.
994+
16. [ ] Verify `STATUS.md` and `IMPLEMENTATION_MASTERPLAN.md` updates are consistent.
995+
996+
### Z7. Testing Infrastructure and Harness (PRs #804, #800, #797, #796 — open/closed)
997+
998+
**Testcontainers (PR #804 — open):**
999+
1. [ ] Verify solution builds cleanly: `dotnet build backend/Taskdeck.sln -c Release`
1000+
2. [ ] Verify existing backend tests pass: `dotnet test backend/Taskdeck.sln -c Release -m:1`
1001+
3. [ ] Verify container integration tests pass locally with Docker running:
1002+
- `dotnet test backend/tests/Taskdeck.Integration.Tests/Taskdeck.Integration.Tests.csproj -c Release`
1003+
4. [ ] Verify CI extended workflow triggers on `testing` label.
1004+
5. [ ] Verify cross-class isolation tests prove no data leakage between test classes.
1005+
1006+
**Cross-Browser E2E Matrix (PR #800 — open):**
1007+
6. [ ] Verify `npx playwright test --project=chromium` runs all existing tests (no `@mobile` exclusion regression).
1008+
7. [ ] Verify `npx playwright test --project=firefox --grep="@cross-browser"` runs only tagged tests.
1009+
8. [ ] Verify `npx playwright test --project=mobile-chrome --grep="@mobile"` runs only mobile-viewport tests.
1010+
9. [ ] Verify CI required workflow still passes with `--project=chromium` flag.
1011+
10. [ ] Verify nightly cross-browser matrix workflow YAML is valid.
1012+
11. [ ] Review flaky test policy doc for completeness (`docs/testing/FLAKY_TEST_POLICY.md`).
1013+
1014+
**Visual Regression (PR #797 — open):**
1015+
12. [ ] Run `npm run test:visual:update` to generate initial baselines.
1016+
- Expected: baseline screenshots created in `tests/visual/__screenshots__/`.
1017+
13. [ ] Verify visual tests pass after baseline generation: `npx playwright test --config playwright.visual.config.ts`
1018+
14. [ ] Verify CI Extended pipeline runs visual regression job when `visual` label is applied.
1019+
15. [ ] On an intentional UI change, regenerate baselines and verify diff detection works.
1020+
1021+
**Mutation Testing (PR #796 — closed):**
1022+
16. [ ] Verify Stryker.NET config is valid JSON and references correct project paths.
1023+
17. [ ] Verify Stryker JS config exports valid options and references correct vitest config.
1024+
18. [ ] Verify CI workflow syntax passes GitHub Actions validation.
1025+
19. [ ] Verify mutation testing workflow is NOT listed in `ci-required.yml` (non-blocking, nightly only).
1026+
20. [ ] Verify `StrykerOutput` directories are in `.gitignore`.
1027+
21. [ ] Run `npm run mutation:test` locally to validate frontend Stryker setup (after `npm install`).
1028+
22. [ ] Run `dotnet stryker --config-file stryker-config.json` locally in `backend/` to validate backend setup.
1029+
1030+
### Z8. Platform: PWA and Offline Readiness (PR #802 — open)
1031+
1032+
1. [ ] Verify offline banner appears when network is disconnected.
1033+
- Open the app, then disable network in browser DevTools.
1034+
- Expected: offline indicator/banner appears promptly.
1035+
2. [ ] Verify service worker update prompt appears when deploying a new build.
1036+
- Deploy a code change, revisit the app in browser.
1037+
- Expected: "Update available" prompt appears; clicking it refreshes to the new version.
1038+
3. [ ] Verify Chrome DevTools > Application > Manifest passes installability checks.
1039+
- Open DevTools > Application > Manifest.
1040+
- Expected: manifest is valid, icons are present, start_url is correct, app is installable.
1041+
1042+
### Z9. Platform: SignalR Scale-Out (PR #803 — open)
1043+
1044+
1. [ ] Verify CI pipeline passes for PR #803.
1045+
2. [ ] Verify `/health/ready` returns `signalrBackplane: NotConfigured` on local dev (no Redis configured).
1046+
- Call `GET http://localhost:5000/health/ready`.
1047+
- Expected: response includes `signalrBackplane` component with `NotConfigured` status.
1048+
1049+
### Z10. Platform: PostgreSQL Migration Compatibility (PR #801 — open)
1050+
1051+
1. [ ] Verify CI pipeline passes for PR #801.
1052+
- Expected: all 20 `DatabaseProviderCompatibilityTests` pass in CI; no new warnings.
1053+
1054+
### Z11. Forecasting and Capacity Planning (PR #790 — closed)
1055+
1056+
1. [ ] Verify forecast endpoint returns correct JSON for a board with completed cards.
1057+
- Call `GET /api/metrics/boards/{boardId}/forecast` with bearer token.
1058+
- Expected: JSON with throughput forecast, confidence bands, and projected completion dates.
1059+
2. [ ] Verify MetricsView shows forecast section with confidence bands.
1060+
- Navigate to `/workspace/metrics`, select a board with history.
1061+
- Expected: forecast section renders below the metrics charts with projected dates and confidence intervals.
1062+
3. [ ] Verify zero-throughput board shows appropriate caveats.
1063+
- Select a board where no cards have ever been moved to Done.
1064+
- Expected: forecast section shows a caveat/warning about insufficient throughput data.
1065+
4. [ ] Verify new board with no history shows "insufficient data" messaging.
1066+
- Create a brand new board, navigate to metrics.
1067+
- Expected: forecast section shows "insufficient data" message, not an error or crash.
1068+
1069+
### Z12. Inbox Premium UX Primitives (PR #788 — closed)
1070+
1071+
1. [ ] Verify skeleton loading state appears during slow network.
1072+
- Throttle network in DevTools to "Slow 3G". Navigate to `/workspace/inbox`.
1073+
- Expected: skeleton/shimmer loading placeholders appear while data loads.
1074+
2. [ ] Verify error state renders with retry button on API failure.
1075+
- Block the inbox API endpoint in DevTools. Navigate to `/workspace/inbox`.
1076+
- Expected: error state with message and "Retry" button. Clicking retry re-fetches.
1077+
3. [ ] Verify empty state renders correctly with action buttons.
1078+
- Navigate to inbox with no captures.
1079+
- Expected: empty state illustration/message with guidance on how to capture items.
1080+
4. [ ] Verify dark mode compatibility (all colors use design tokens).
1081+
- Toggle dark mode. Navigate through inbox list and detail views.
1082+
- Expected: no hardcoded light-theme colors; all surfaces use design tokens.
1083+
5. [ ] Verify responsive layout at mobile breakpoints.
1084+
- Resize browser to 375px width or use mobile device emulation.
1085+
- Expected: inbox layout adapts (no horizontal overflow, readable text, tappable targets).
1086+
1087+
### Z13. CSV Export UI (PR #787 — closed)
1088+
1089+
1. [ ] Verify "Export CSV" button appears in the metrics dashboard and triggers download.
1090+
- Navigate to `/workspace/metrics`, select a board.
1091+
- Expected: "Export CSV" button is visible. Clicking it downloads a `.csv` file with `schema_version=1.0` header comment.
1092+
1093+
### Z14. Accessibility Regression (PR #779 — closed)
1094+
1095+
1. [ ] Visual inspection: modal backdrops, board cards, inbox rows, and form inputs all function normally after a11y fixes.
1096+
- Navigate through key surfaces: card modal, label manager, inbox, command palette.
1097+
- Expected: no visual regressions from the aria/a11y attribute changes.
1098+
2. [ ] Keyboard navigation: modals dismiss on Escape, board cards respond to Enter/Space, inbox rows respond to Enter.
1099+
- Use only keyboard to navigate through board → open card → close card → open command palette → close palette.
1100+
- Expected: all interactions work without mouse.
1101+
1102+
### Z15. E2E Error/Edge Scenario Execution (PR #772 — closed)
1103+
1104+
1. [ ] Verify Playwright recognizes all new specs: `npx playwright test --list` shows error-recovery, multi-board, and edge-journey specs.
1105+
2. [ ] Run the expanded E2E suite against a live backend:
1106+
- `cd frontend/taskdeck-web && TASKDECK_E2E_DB=taskdeck.e2e.local.db npx playwright test tests/e2e/error-recovery.spec.ts tests/e2e/multi-board.spec.ts tests/e2e/edge-journeys.spec.ts --reporter=line`
1107+
- Expected: all scenarios pass.
1108+
1109+
### Z16. Dependency Hygiene Verification (PR #771 — closed)
1110+
1111+
1. [ ] Verify frontend builds after ws/p-limit override cleanup: `cd frontend/taskdeck-web && npm run build`
1112+
- Expected: build completes with no warnings about vendored packages.
1113+
2. [ ] Verify typecheck passes: `cd frontend/taskdeck-web && npm run typecheck`
1114+
- Expected: 0 type errors.
1115+
1116+
### Z17. Concurrency Stress Tests CI (PR #793 — closed)
1117+
1118+
1. [ ] Verify CI pipeline passes for concurrency stress tests.
1119+
- Expected: all 13 `ConcurrencyRaceConditionStressTests` pass in CI without deadlocks or flakiness.
1120+
9021121
---
9031122

9041123
## Incident Rehearsals

0 commit comments

Comments
 (0)