> ## Documentation Index
> Fetch the complete documentation index at: https://docs.highailabs.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Iteration Log

> Chronological record of High IQ launch-readiness audits, test runs, blockers, and decisions.

# Iteration Log

Use this page to keep launch work from disappearing into chat, PRs, or one-off audits.

## 2026-08-03: Business Model Change + Launch Schedule

### Summary

Founder review of launch readiness, pricing, and timeline. The monetization
model changed from freemium-with-trial to a hard paywall at full price, and a
26-week execution schedule was set with three fixed dates.

### Decisions

* **Hard paywall, full price, no trial and no intro offer.** Pro is $12.99/mo or
  $99.99/yr. Rationale: launch exists to learn whether a stranger will pay full
  price; a discount buys conversions and destroys that signal. Recorded as a
  launch experiment with a defined review date (v1.1, late November), not a
  permanent commitment.
* **The website is the free tier.** `thisiswhyimhigh.com` already serves 2,525
  researched strains publicly. The app does not duplicate free browsing.
* **Guest access in the app is browse-only** — strain browse/search/detail, High
  Families, music, rate-capped label scanner. Nothing saved, no AI.
* **All personal data and all AI moves to Pro** — stash, favorites, collection,
  manual upload, rankings, and badges re-tier from Free to Pro.
* **Data retention:** 30 days for never-subscribed accounts; 12 months read-only
  for lapsed subscribers, so a canceling customer's history survives as a
  win-back asset.
* **Historical Import is Pro-included with caps.** The `highiq_historical_import`
  SKU is retired.
* **Annual is the retention strategy** for a weekly-use product — pre-selected on
  the paywall, target mix 50%+.
* **September App Store release behind an invite gate** instead of TestFlight, so
  friends and family install from a normal link. Not launch day; no marketing.
* **Push notifications move to v1.1 (November)**, with a weekly email digest
  covering the retention job for launch.

### Findings

* **Notebook generation is off in production.**
  `NOTEBOOK_GENERATION_ACTIONS_ENABLED` resolves false for production builds and
  `isNotebookArtifactRouteEnabled()` returns false unconditionally. Under the
  hard-paywall model this means a paying subscriber could not reach the feature
  they paid for. Now launch gate 4.
* **The notebook stack shipped.** `packages/notebook-engine`, ten
  `convex/notebook*.ts` modules, and the notebook screens are on `main`. Prior
  docs describing PRs #1253–1259 as unmerged draft branches were stale.
* **Google `gmail.readonly` restricted-scope verification was untracked** in
  every launch gate, risk register, and certification list despite gating both
  Gmail sync and Historical Import. Added as the longest external lead time in
  the plan.
* **No paywall exists as a sales surface.** `SubscriptionBillingScreen` is a
  billing screen; the post-onboarding sales screen is unbuilt.
* **Apple compliance items were undocumented:** paywall auto-renewal
  disclosures, EULA/Privacy links on the paywall, Restore Purchases on the
  paywall, and monthly/annual sharing one subscription group.
* **The \$4.99 recommendation in `docs/business/[plan]-pricing-strategy-projections-nov30.md`
  predates the AI-first product** and is superseded.
* **46 open pull requests**, mostly `auto/*` drafts past the 7-day staleness
  rule. Recommendation: triage and pause routine automations until submission.

### Docs Updated

* Created `planning/launch-readiness/execution-plan` — 26-week week-by-week plan
* Rewrote `planning/pricing/strategy` — hard-paywall model of record
* Rewrote `planning/launch-readiness/overview` — new gates and phases
* Updated `planning/launch-readiness/feature-matrix` — new tiers and blockers

### Next Actions

1. App Store Connect agreements, banking, tax, Small Business Program enrollment.
2. Determine the exact Google restricted-scope verification requirement and start
   whatever can start now.
3. Re-tier the feature-flag registry to the hard-paywall model.
4. Build the paywall as a sales surface with Apple's required disclosures.
5. Turn on notebook generation in production and certify runbook Phase 7.

## 2026-08-01: Comprehensive Mobile Launch-Debt Hardening

### Summary

Completed a repository-wide Mobile consistency and resilience pass across navigation, scrolling, screen layouts, design tokens, accessibility, async actions, native privacy configuration, Safari extension state sync, and bundled assets. Existing feature surfaces were preserved while shared primitives and behavior were normalized.

### Product and UX Improvements

* Hardened tab retap and scroll-to-top behavior, including the Stash experience, nested scroll containers, deferred tab scenes, refresh behavior, and safe-area spacing.
* Normalized shared layouts, headers, cards, actions, empty/loading/error states, typography, geometry, and screen transitions across the Mobile app.
* Improved profile-photo flows and interaction labels for shared search, chat composers, and Gmail selection controls.
* Added same-frame async action gates to notebook generation/cancellation and strain submission; added abort, timeout, stale-result, and unmount protection to suggest-strain submission.
* Removed unused native permissions, disabled Android backup, tightened permission copy, deduplicated the iOS privacy manifest, aligned the production Expo profile, and set the installed app name to High IQ.
* Aligned Safari App Group identifiers and serialized extension-state writes so a late authenticated write cannot overwrite sign-out clearing.
* Removed an unused 6.9 MB mascot asset and right-sized bundled logo and splash artwork while retaining production-quality source resolution.

### Validation Evidence

* Mobile lint and TypeScript: pass.
* Mobile unit: 279 files / 2,196 tests pass.
* Convex: 42 files / 566 tests pass.
* Mobile UI: 28 suites / 77 tests pass.
* Safari extension: 23 tests pass.
* Storybook lint, TypeScript, and tests: pass (2 files / 5 tests).
* Hermes compatibility and privacy-safe diagnostics: pass.
* Mobile design-system validation: pass at the intentional 72/72 color baseline; all other tracked raw-design categories are zero.
* Mobile geometry validation: pass across 1,604 shipping files; no missing continuous border curves or raw z-index values.
* Dependency audit: 98 direct dependencies, 93 source-referenced, five provider/config-only, and zero unclassified.
* Production Expo web export: pass with 8,852 modules and 74 assets; the previous 7.2 MB unused mascot output is gone.
* React Doctor: 272 diagnostics (46 error-level compiler findings and 226 warnings). The remaining error-level groups are primarily unsupported `try/finally`, deliberate effect synchronization, and test-harness mutation; broad automatic rewriting was rejected as unsafe.

### Remaining External Certification

* Argent and simulator/device QA were intentionally deferred at product direction.
* Revyl validation requires a configured `REVYL_API_KEY` in this environment.
* Apple Developer registration and provisioning must include `group.com.highiq.app.data` before Safari extension distribution.
* RevenueCat/App Store products, purchase, restore, and webhook synchronization remain the paid-beta blocker.
* Candidate builds still need the Gate 2–4 route, journey, permission, small/large-device, and StoreKit certification runs before readiness states can advance.

## 2026-06-03: Initial Launch Readiness Audit

### Summary

First end-to-end launch-readiness pass across mobile routes, feature flags, testing coverage, recent PRs, Revyl/Argent status, docs, and pricing.

### Evidence

* Raw audit created at `docs/mobile/[audit]-launch-readiness-jun03.md`.
* Local mobile typecheck passed.
* Local mobile unit + Convex tests passed.
* Local mobile lint passed with warnings.
* Revyl YAML validation passed.
* React Doctor reported 0 errors / 720 warnings.
* Latest checked Revyl smoke workflow failed 7/8.

### Decisions

* Do not public-launch yet.
* Do not start paid launch yet.
* Move into a certification sprint for friends/family TestFlight.
* Use one paid SKU for paid beta: Pro at $12.99/month and $99.99/year.
* Defer Studio, Founder/lifetime, Basic, AI media add-ons, and broad historical import pricing.

### Blockers Found

* `useFeatureAccess` is broken open and returns accessible unconditionally.
* Guest/free/Pro model is not implemented consistently.
* Onboarding is not a complete first-run route flow.
* Revyl validates YAML but is not yet launch certification.
* Mobile screen/integration tests under `apps/mobile/test/**` are excluded from normal unit tests.
* Strain detail needs UI/device polish.
* Gmail and historical import need beta treatment and production proof.
* Docs/site pricing and feature promises conflict.

### Next Actions

1. Fix feature access and tier model.
2. Add access decision tests.
3. Freeze v1.0 feature flags.
4. Build onboarding.
5. Polish strain detail.
6. Add route smoke tests for missing launch surfaces.
7. Stabilize Revyl fixtures.
8. Reconcile docs/site pricing and feature promises.

## 2026-06-04: Feature Access Gating PR Opened

### Summary

Opened PR #806 to fix the first P0 launch-readiness blocker: feature access was broken open because `useFeatureAccess` always returned accessible.

### PR

* `https://github.com/jmegan/tiwih/pull/806`

### Changes

* Adds a pure feature-access resolver for disabled flags, login-required features, free-tier features, and Pro subscription-required features.
* Marks signed-in free vs Pro tiers in the mobile feature flag registry.
* Aligns label scanner as a Pro feature, matching the existing screen-level upgrade gate and AI vision cost.
* Removes the global main-layout subscription guard that blocked signed-in non-subscribers from all main app surfaces.
* Adds unit coverage for access decisions and tier metadata.

### Validation

* `pnpm --filter @highiq/mobile typecheck`
* `pnpm --filter @highiq/mobile test`
* `pnpm --filter @highiq/mobile lint` passed with existing warnings
* `pnpm test:revyl:validate`

### Remaining Work

* Review and merge PR #806.
* Add direct-route Revyl/Argent tests for guest, free signed-in, Pro, disabled, and lapsed states.
* Continue feature-by-feature certification, starting with onboarding and strain detail.

## 2026-06-04: First-Run Onboarding Entry PR Opened

### Summary

Opened PR #807 to add the smallest launch-ready onboarding path: signed-in users with no orders, stash, notebooks, or favorites get a short first-value setup instead of landing directly in the main app.

### PR

* `https://github.com/jmegan/tiwih/pull/807`

### Changes

* Adds a dedicated `/onboarding` route.
* Routes newly signed-in and cold-launch first-time users into onboarding.
* Points users toward the existing first-order upload path instead of adding a large wizard.
* Lets users browse strains with completion persisted through `STORAGE_KEYS.ONBOARDING_COMPLETE`.
* Updates `useFirstTimeUser` so anonymous users are not classified as first-time signed-in users.
* Keeps `Skip for Now` temporary instead of permanently completing onboarding for empty users.

### Validation

* `pnpm --filter @highiq/mobile typecheck`
* `pnpm --filter @highiq/mobile test`
* `pnpm --filter @highiq/mobile lint` passed with existing warnings
* `pnpm test:revyl:validate`

### Remaining Work

* Review and merge PR #807 after PR #806 is reviewed.
* Add Revyl/Argent proof for sign-in -> onboarding -> log first order -> review -> save -> stash payoff.
* Add screenshot QA for the onboarding screen on mobile viewports.

## 2026-06-04: Active i18n Test Gate PR Opened

### Summary

Opened PR #808 to start closing the mobile test coverage gap where files under `apps/mobile/test/**` are excluded from the active Vitest gate.

### PR

* `https://github.com/jmegan/tiwih/pull/808`

### Changes

* Expands the active mobile Vitest include pattern to support `src/**/*.test.tsx`.
* Adds an active i18n key audit under `src/_i18n`.
* Replaces the older shell/grep callback test with a Node/Vitest scan for literal `tx`, `labelTx`, and `translate()` keys.

### Validation

* `pnpm --filter @highiq/mobile test:unit`
* `pnpm --filter @highiq/mobile typecheck`
* `pnpm --filter @highiq/mobile test`
* `pnpm --filter @highiq/mobile lint` passed with existing warnings
* `pnpm test:revyl:validate`

### Remaining Work

* Migrate or replace stale screen/integration tests under `apps/mobile/test/**`.
* Add active TSX tests for onboarding, locked/pro access states, and first-order upload UI where practical.
* Decide whether to install `@testing-library/react-native` or keep screen coverage in Revyl/Argent plus focused pure-view-model tests.

## 2026-06-04: Launch Route Smoke PR Opened

### Summary

Opened PR #813 to close the missing-route-smoke definition gap in Gate 2.

### PR

* `https://github.com/jmegan/tiwih/pull/813`

### Changes

* Adds P0 Revyl route-smoke definitions for High Family discovery, music/now-playing, subscription billing, profile edit/preferences, analytics/stats, dispensaries, notebook daily story/video, and Professor High gated state.
* Wires the new route smokes into nightly regression and release-gate workflows.
* Leaves the fast pre-merge smoke workflow unchanged so routine mobile PRs do not inherit the expanded route suite yet.
* Updates `docs/testing/revyl/mobile-feature-coverage-matrix.md` and `docs/testing/revyl/test-catalog.md`.

### Validation

* `pnpm test:revyl:validate`
* `git diff --check`

### Remaining Work

* Run PR #813's expanded route-smoke set against the current candidate build.
* Add access/tier direct-route checks after PR #806 lands.
* Add fixture contracts for deterministic `new`, `power-with-dispensary`, `rich`, and `lapsed` personas.
