4.2 KiB
4.2 KiB
id, title, status, wave, depends_on, plan, spec
| id | title | status | wave | depends_on | plan | spec | |||
|---|---|---|---|---|---|---|---|---|---|
| 29-enhancement-validation | Azure enhancement validation | completed | 14 |
|
plan.md | ../../specs/azure-devops-integration/spec.md |
Task 29: Azure Enhancement Validation
Acceptance
- The Azure mock/API helper can deterministically seed paginated comments, comment failure/retry, unsafe description HTML, PAT identity, revision conflict, watcher matches, duplicate polls, reset previews, and terminal provider state without external Azure credentials.
- Desktop Playwright proves: core detail plus effort/discussion; Assign to me; board column move; unsafe HTML exclusion; quick-action task creation and a visible linked task; work-item watcher create/enable/Run now/reset/delete; and pull-request watcher creation.
- Mobile Playwright proves direct card-to-detail navigation, full-height containment with one internal scroll owner, 44px actions, assignment, board move, task launch/link, watcher create/edit/Run now/reset, safe-area clearance, and no document horizontal overflow. Radix owns focus return for the Dialog/Drawer surfaces.
- E2E asserts visible outcomes and persisted API state, not private React state or timing-only sleeps. Watcher generation/dedup and terminal cleanup are covered by the Go service/orchestrator tests.
- Public docs describe remembered filters, read-only detail fields, allowed assignment/status changes, PAT identity semantics, quick actions/default queries, watchers, and immediate activation.
TDD Sequence
- For each missing desktop behavior, add the Playwright assertion against the current production build and record the expected failure before extending mock routes/UI.
- Add the minimum deterministic mock seed/state transition and product code required for the desktop flow to pass; remove no assertion to obtain green.
- Repeat RED/GREEN for phone-specific drawer, geometry, watcher cards, and
safe-area/no-overflow assertions in
mobile-azure-devops.spec.ts. - Run both focused specs together, then docs validation and the repository verification sequence. Record exact commands/results in Task 29 and the parent plan before marking complete.
Verification
pnpm e2e:run --host --no-build tests/integrations/azure-devops.spec.ts -- --project=chromiumfromapps/web— passed.pnpm e2e:run --host --no-build tests/integrations/mobile-azure-devops.spec.ts -- --project=mobile-chromefromapps/web— passed (2 tests).- Managed
pnpm e2e:run tests/integrations/azure-devops.spec.ts -- --project=chromiumand the mobile equivalent — passed after the production build. node --test scripts/validate-public-docs.test.mjsandnode scripts/validate-public-docs.mjsfrom the repository root — passed (58 tests; 41 published pages).make fmt, thenmake typecheck test lintfrom the repository root — passed.
Files Likely Touched
apps/backend/internal/azuredevops/mock_client.goapps/backend/internal/azuredevops/mock_controller.goapps/backend/internal/azuredevops/mock_client_test.goapps/web/e2e/helpers/api-client.tsapps/web/e2e/tests/integrations/azure-devops.spec.tsapps/web/e2e/tests/integrations/mobile-azure-devops.spec.tsdocs/public/integrations.md
Dependencies
Tasks 18, 27, and 28, transitively all enhancement tasks.
Parallelism
Sequential. E2E fixtures and documentation assert the final integrated contract.
Inputs
- All new scenarios in the Azure DevOps spec.
- Required skills during implementation:
/e2e,/mobile-parity,/docs-maintainer. - Existing Azure mock controller and desktop/mobile integration specs.
Risks
- Run through the managed E2E command so both Go and production Vite artifacts
are rebuilt;
--no-buildcan silently validate stale code. - Keep each spec isolated with mock reset/seed in setup; watcher reservations and task links from one scenario must not make another pass accidentally.
Output Contract
Report desktop/mobile outcomes, geometry assertions, screenshots/visual inspection, docs validation, exact commands/results, files changed, residual risks, and update task/plan status.