diff --git a/playwright.config.ts b/playwright.config.ts index 268ccd25..4195dd79 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -12,14 +12,14 @@ const chromiumExecutablePath = process.env.PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH; // Tag-level filters keep production and prototype journeys disjoint even when // they share a spec file. const productionSpecPattern = - /.*ui-(smoke|stress|accessibility|tools|overlap|universal-search|specifiers|formulation|pwa)\.spec\.ts/; + /.*(?:answer-progress-ui-smoke|ui-(smoke|stress|accessibility|tools|overlap|universal-search|specifiers|formulation|pwa))\.spec\.ts/; const mockupSpecPattern = /.*ui-(tools|tools-collapse|tools-task-directory)\.spec\.ts/; const mockupTag = /@mockup/; export default defineConfig({ testDir: "./tests", testMatch: - /.*ui-(smoke|stress|accessibility|tools|tools-collapse|tools-task-directory|overlap|universal-search|specifiers|formulation|pwa)\.spec\.ts/, + /.*(?:answer-progress-ui-smoke|ui-(smoke|stress|accessibility|tools|tools-collapse|tools-task-directory|overlap|universal-search|specifiers|formulation|pwa))\.spec\.ts/, timeout: 60_000, retries: 0, // Fail the run if a stray `test.only` is committed: otherwise it silently diff --git a/scripts/ci-change-scope.mjs b/scripts/ci-change-scope.mjs index 2014a8e1..8c738370 100644 --- a/scripts/ci-change-scope.mjs +++ b/scripts/ci-change-scope.mjs @@ -89,6 +89,11 @@ const uiPatterns = [ "src/components", "src/styles", "public", + // Answer progress is a production Playwright journey even though its + // historical filename does not start with `ui-`. Keep its CI trigger in + // lockstep with playwright.config.ts so an edited assertion cannot evade + // the required UI job (Vitest does not collect *.spec.ts files). + "tests/answer-progress-ui-smoke.spec.ts", /^tests\/ui-.*\.spec\.ts$/, /^tests\/playwright-.*\.ts$/, /^playwright(?:\..*)?\.config\.ts$/, @@ -420,6 +425,12 @@ function selfTest() { ui_changed: true, build_changed: true, }); + assertScope("answer-progress-playwright", ["tests/answer-progress-ui-smoke.spec.ts"], { + source_changed: true, + coverage_changed: true, + ui_changed: true, + build_changed: false, + }); assertScope("db", ["supabase/migrations/20260710000000_example.sql"], { db_changed: true, source_changed: true,