After code changes, run both:
pnpm typecheck # type errors (noUncheckedIndexedAccess is on)
pnpm lint # eslint with type-aware rules + playwright pluginnoUncheckedIndexedAccessis on —array[0]returnsT | undefined. Handle withif,??,.at(0), orconst [first] = array. Do not silence with!unless there is a comment explaining why.pnpmonly (not npm/yarn). CI usespnpm install --frozen-lockfile.package.json5is the single source of truth for Playwright version — Dockerfile and CI derive from it.DEFAULT_TEST_IMAGEinplaywright.config.tsis parsed by.github/workflows/test-playwright-action.yamlvia grep. Keep it as a single-line string assignment. Do not rename the variable or split across lines.cypress/is legacy. Do not modify it, install Cypress types, or integrate with Playwright.- Fixture types live in
tests/fixtures.ts. Fixture implementations live in each spec'sbase.extend<T>()call. connectCDPfixture switches between Playwright-managed browser and an external Chrome connected via CDP on a given port.- OpenShift tests (
openshift_console.spec.ts) requireKUBECONFIGenv var pointing to a valid kubeconfig.