Second half of the contract execution engine (held on branch per bundle plan).
- generate_playwright_spec: translate ui.flows into a Playwright spec - goto /
getByTestId click+fill (with getByLabel/getByRole/getByText fallback),
visible/hidden/text/url assertions, role-based storageState for allowed/
forbidden checks; persistence is delegated to backend cases
- run_ui_flows: generate the spec, run it via the project's `npx playwright
test --reporter=json`, and parse results
- parse_playwright_report: read stats.unexpected + failed titles into
CONTRACT_EXEC_FAILURES for the fix loop
- _pw_locator (testid → label → role → text) and _ts_safe helpers
Tested: spec generation for the canonical "create a quote" allowed flow + a
"viewer cannot" forbidden flow produces correct TS; report parsing handles
pass and fail. Live browser execution needs the real app + browser binaries.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>