Research Opportunity Intelligence
Phase 0 foundations. The UI is a faithful renderer of backend truth; it never computes scores, invents band labels, or composes claim language.
Phase 0 checklist
- Strict TypeScript + Prettier + ESLintToolchain from template retained.shipped
- Design tokensSemantic tokens in src/styles.css; oklch color space.shipped
- Guarded fetch (forbidden identity headers)src/lib/api-client.ts + invariant tests.shipped
- MSW harness (browser + node)src/mocks/*; onUnhandledRequest: error in tests.shipped
- Vitest + fast-check invariantsScores never merged, claimable respected, band-null property test, verbatim verification_statement, narrative-source labelling, novelty stub banner.shipped
- SyntheticDataBadge primitiveNon-prod only; suppresses in production.shipped
- ContractPendingRibbon primitiveNames endpoint + expected fields; dev builds only.shipped
- Candidate / Proposal / Evidence-set / Record endpointsDecision A expanded — awaiting backend contract.blocked
- Self-approval enforcement (Decision B)Confirmed option A — backend to add check before Phase 2.pending
- Viewer read_locked_dossier permission (Decision C)Confirmed split — backend to grant viewer read.pending
What's next
Backend to ship the four Decision-A endpoints (candidate, proposal, evidence-set, record), the workflow-state artifacts for Gate 3, the self-approval check, and theread_locked_dossierpermission split. Frontend Phases 1–3 unblock in one pass afterwards.