Frontend analog of the API/DB contract harness: declare UI user-flow contracts
and validate readiness to run them. Per-story Playwright flow execution is the
next increment.
Harness (contract-harness.sh):
- New ui: section (driver, base_url, tests_dir, selector_strategy, roles, flows)
in the schema + scaffold template
- _ui_preflight checks the browser driver (Playwright/Cypress, presence only),
the tests directory, and that each declared role has a session seed
- Role-seed commands now feed prerequisite inference, so their env vars and
executables are checked like any other harness command
Design phase (design-phase.sh):
- Frontend lens now requires a stable data-testid on every interactive element
and a per-AC user_flow with an allowed/forbidden expectation
- Frontend schema gains components[].test_ids and a structured user_flows shape
- Critic enforces test-ids + user-flow expectations; validate_domain_completeness
warns (advisory) when interactive components lack a data-testid
data-testid is adopted incrementally - the lens requires it on the components a
story touches, with accessible role/label fallback for pre-existing ones. The
"credentials" piece is separate: ui.roles seeds for permission-based checks.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>