feat(frontend): Phase 0 verification harness (the frontend-ready gate)#186
Merged
Conversation
Stands up the automated success signal for the v1 frontend build (PRD #184, Phase 0 #185) before any feature work — a coding agent can build against this unattended because "done" is now machine-checkable. Harness (`make frontend-ready` / `npm run frontend-ready`), stops at first fail: - typecheck (tsc -b, incl. generated API types) → lint (eslint) → unit (vitest + Testing Library + MSW) → build (vite) → e2e mocked lane (Playwright) + a11y (axe) + screenshot capture. - E2E hybrid: default MSW-mocked lane (deterministic, no backend) shares fixtures with the unit tests; opt-in `e2e:real` lane hits the live API. - Typed API client generated from /v1/openapi.json (committed; regen via `npm run gen:api`) so backend contract drift is a compile error. - shadcn/ui pinned as the design-system vocabulary; smoke tests at unit, component, and e2e layers. - Reusability seam: generic harness/ core + per-project harness.config.json, so it can later lift into a scaffold-web-ui-harness skill. Fixes surfaced by the harness against the existing reference app: NavBar contrast (WCAG 1.4.3) and a Vite `@/` alias resolver gap. Legacy RfqView conditional-hook annotated (RFQ is out of v1 scope, page slated for rebuild). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Phase 0 of the v1 frontend build (PRD #184, tracking #185): the automated success signal that makes the rest of the build safe to run in an unattended coding-agent loop. No product features here — just the gate every later slice must pass.
Closes #185.
What's in the gate
make frontend-ready(ornpm run frontend-ready) — stops at first failure, exits nonzero:tsc -b, including the generated API typestsc -b && vite build@axe-core/playwrightKey decisions (from the design discussion)
npm run e2e:real) hits the live OHM API via the dev proxy. Best of both for loop reliability + real-wiring validation./v1/openapi.json(committed; regen vianpm run gen:api), so backend contract drift becomes a compile error.harness/core + per-projectharness.config.json, so the harness can later lift into ascaffold-web-ui-harnessskill for other projects (secondary goal, structured for extraction).Proven working
The gate was verified to go red at the correct stage for a deliberately injected failure at each layer, then revert clean:
Fixes the harness surfaced in the existing app
@/alias resolver (needed for@/imports)..gitignorelib/pattern was swallowing shadcn'ssrc/lib/— un-ignored soutils.tsis tracked.RfqViewconditional-hook annotated (RFQ is out of v1 scope; page slated for rebuild).After merge
frontend-dev(the feature-slice integration branch) branches frommainwith this harness in place. Next: slice PRD #184's journeys into tracer-bullet issues and start the bounded loop.🤖 Generated with Claude Code