Certification Gates
Launch readiness means a feature is proven, not merely built.Gate 0: Local Code Health
Required before any candidate build:- Typecheck and lint: pass.
- Mobile unit tests: 279 files / 2,196 tests pass.
- Convex tests: 42 files / 566 tests pass.
- Mobile UI tests: 28 suites / 77 tests pass.
- Safari extension tests: 23 tests pass.
- Production Expo web export: pass; 8,852 modules and 74 bundled assets.
- Mobile design-system and geometry validators: pass. The color ratchet remains at its intentional baseline (72/72), with no raw spacing, typography, radius, shadow, z-index, or border-curve regressions.
- Revyl YAML validation: not runnable in this environment because
REVYL_API_KEYis absent. - React Doctor: 272 diagnostics (46 error-level compiler findings and 226 warnings). The largest error group is 28 unsupported
try/finallycompiler cases; remaining findings require focused review rather than an unsafe mechanical rewrite. - Argent/device QA: intentionally not run during this code-hardening pass.
Gate 1: Access + Tier Certification
Required before friends/family:- Guest cannot reach protected user-data routes by direct link.
- Free signed-in users can reach free signed-in features.
- Pro-only features show a paywall or locked state.
- Disabled production features are inaccessible by direct route.
- Lapsed subscribers retain data but see upgrade/restore flows.
useFeatureAccessunit coverage for guest, free, Pro, lapsed, disabled, debug override.- Revyl/Argent direct-route checks for representative gated screens.
Gate 2: P0 Revyl Smoke
Required before friends/family:- App launch
- Bottom tabs
- Public browse/search
- High Family / discovery
- Strain detail tabs
- Deep link to strain detail
- Clerk login
- Clean-new-user empty stash
- Profile settings/sign-out
- Music / now playing
- Subscription billing
- Edit profile
- Consumption preferences
- Analytics/stats
- Dispensary list/add
- Daily stories
- Notebook video
- Professor High gated state
- Run the expanded route-smoke set against the current candidate build.
- Convert any route-smoke failures into product bug, test definition issue, fixture/data issue, mobile app/API dependency, or Revyl artifact/flake.
- Add direct access/tier route checks after PR #806 lands.
Gate 3: P1 Critical Journeys
Required before paid beta:- New user to first stash entry
- Add strain from search/detail to stash
- Discovery to favorite/collection
- Manual order upload and review
- Image receipt parsing
- Notebook generation and detail
- Gmail recent sync with controlled test account
- Label scanner with fixture/permission proof
- Subscription purchase, restore, lapsed state
- preserve known, alias, ambiguous, placeholder, duplicate, and unknown order lines;
- show honest fresh, stale, conflicting, no-data, failed, and waiting research states;
- minimize, dismiss, reopen, background, cancel, and recover generation;
- keep a readable publication available while an update runs;
- compare, fail, cancel, retry, promote, and browse immutable versions;
- keep Report V2/research writes and all companion executors off until their separate activation gates pass.
Gate 4: Manual Device QA
Required before TestFlight expansion:- iPhone small screen and large screen screenshots
- Dark/light mode where supported
- Real camera/permission prompts
- Apple/Google OAuth if used
- StoreKit purchase and restore
- Push/notification prompts if enabled
- Strain detail scroll and content density review
Gate 5: Public Promise Consistency
Required before public launch:- App behavior, website, docs-site, pricing, App Store copy, and paywall all agree.
- No public copy promises hidden, disabled, beta, or unverified features.
- No “first free AI” copy if Pro-only AI is the decision.
- No inconsistent 9.99 / $12.99 pricing.
