Story 1733 - pramaan-admin

Playwright now accepts BDD features without losing the existing admin E2E suite

This story wires playwright-bdd into the existing Playwright runner. The existing Chromium project still owns the current TypeScript specs, and a sibling Chromium BDD project points at the generated specs, so reporter, base URL, and web-server behavior continue to use the same Playwright config.

What changed

playwright.config.ts now registers feature files from tests/features/**/*.feature and scoped step definitions from tests/steps/**/*.ts. Generated specs are emitted to tests/e2e/.features-gen, which is ignored by git.

The test:e2e and test:e2e:ui scripts now run bddgen before playwright test. Existing Playwright specs under tests/e2e stay in the original chromium project, while generated BDD specs run in chromium-bdd.

First scenario

The seed scenario is intentionally small and real: it opens /sign-in as a signed-out operator and verifies that the browser remains on the admin sign-in route. It uses createBdd(test) from playwright-bdd and does not require the backend stub server.

Acceptance evidence

Criterion Evidence State
Pin current 9.x line package.json pins playwright-bdd to 9.2.0. done
Keep existing Playwright behavior testDir, the existing TypeScript testMatch patterns, reporter, original Chromium project, baseURL, and web-server environment switches remain on the existing admin config path. The added chromium-bdd project points only at generated BDD *.spec.js files because playwright-bdd v9 requires the project testDir to match its generated output directory. done
Generate BDD tests pnpm exec bddgen succeeds and emits the generated spec under tests/e2e/.features-gen. done
Local verify gate pnpm exec tsc --noEmit, pnpm run lint, and pnpm run test:unit pass locally. done

This ticket only installs the BDD substrate and one example scenario. Product workflow scenarios remain out of scope for Story 1733.