6.9.3 Story tests — quick-search correctness + permission/exclusion + the #98 large-seed regression E2E + a11y sweep
Estimate: 26m · Depends on: 6.9.2
The story-closing verification (Principle #18).
Vitest (integration, real Postgres): quick-search correctness (key prefix/exact + title trgm, relevance order, bound), the permission scope (a user cannot find issues in a project they cannot read — per 6.4 role), the link-candidate composition (exclusions preserved under search), and the #98 regression guard: seed a large item set, prove an EARLY-created issue is returned by a search from a LATE issue’s picker (the exact case the newest-50 cap broke).
Playwright E2E (extend tests/e2e/*link*): open a late issue’s relationships panel → Link issue → type an early issue’s key → it appears → link it → it renders in its group; assert the no-results state; assert the create-modal link control searches the same way. a11y: strict axe sweep over the link form (empty / typing / no-results / selected).
Acceptance criteria
- The correctness + permission + exclusion matrix is green; the #98 large-seed regression guard fails on the old newest-50 read and passes on the new one.
- The E2E journey passes in CI’s Playwright lane (async waits via the harness, not sleeps); the axe sweep reports zero violations.
- The Story 6.9 verification recipe runs clean top to bottom;
pnpm test:coveragekeeps all 6.9 files ≥ 90%.
Context refs
- finding #98 (the behaviour the regression guard pins); 6.9.1 / 6.9.2
tests/integration/+tests/e2e/conventions; the E2E harness / selector memories- The Story 6.9 verification recipe — the checklist this automates