Skip to content

Prevent mobile app test files from becoming routes - #2446

Merged
Asherlc merged 6 commits into
mainfrom
codex/mobile-route-hygiene
Aug 7, 2026
Merged

Asherlc merged 6 commits into
mainfrom
codex/mobile-route-hygiene

Conversation

@Asherlc

@Asherlc Asherlc commented Aug 7, 2026

Copy link
Copy Markdown
Owner

Summary

  • Move Expo Router screen tests out of packages/mobile/app/ into packages/mobile/app-tests/.
  • Move Expo Router screen stories out of packages/mobile/app/ into packages/mobile/app-stories/ and update Storybook globs.
  • Add a route hygiene guard that fails lint when test/story files are added under packages/mobile/app/.
  • Document the convention in root/mobile agent guidance and the mobile README.

Root Cause

Expo Router treats files under packages/mobile/app/ as route candidates. Colocated *.test.* and *.stories.* files can therefore become accidental native screens or iOS tabs.

Validation

Passed locally:

  • biome check . --max-diagnostics=500
  • tsx scripts/check-mobile-app-route-files.ts
  • tsc --noEmit
  • cd packages/server && tsc --noEmit
  • cd packages/web && tsc --noEmit
  • tsc --noEmit -p packages/mobile/tsconfig.json
  • vitest run --project mobile (66 files, 570 tests)

Notes:

  • This shell does not have a global pnpm shim, so I ran the equivalent commands with repo-local binaries on PATH.
  • vitest run --changed origin/main was started, made progress through a broad unrelated affected set, then was interrupted after hanging for a long time in integration coverage that was mostly timing out/skipping without Docker dependencies. CI should provide the clean full gate on the pushed branch.

Summary by Sourcery

Enforce Expo Router route hygiene for the mobile app by moving screen tests and stories out of app/, tightening Storybook globs, and adding a lint-time guard that rejects non-route test/story files under the app/ directory.

New Features:

  • Add a route hygiene script and npm task that fail lint when test/story files are placed under packages/mobile/app/.

Bug Fixes:

  • Prevent Expo Router from treating mobile app test and Storybook files as route screens or tabs.

Enhancements:

  • Relocate mobile Expo Router screen tests to packages/mobile/app-tests/ and stories to packages/mobile/app-stories/, updating imports and Storybook configuration accordingly.
  • Document the mobile route-only app/ convention and new locations for tests and stories in AGENTS guidance and the mobile README.

Build:

  • Wire the mobile route hygiene script into the root and mobile lint commands, and expose a dedicated check:mobile-app-routes npm script.

Documentation:

  • Update root and mobile agent guidance plus the mobile README to describe proper placement of Expo Router tests and stories outside app/.

Tests:

  • Restructure mobile screen test files to live under packages/mobile/app-tests/ without changing test coverage or behavior.

Summary by cubic

Prevents non-route files in packages/mobile/app/ from becoming Expo Router screens by moving tests, stories, and fixtures out, updating Storybook globs, and adding a strict lint guard. Also pins nanoid@3.3.17 and ignores two no‑patch advisories to quiet dependency audit noise.

  • Bug Fixes

    • Moved route tests to packages/mobile/app-tests/, stories to packages/mobile/app-stories/, and shared fixtures to packages/mobile/app-fixtures/ with their tests colocated; updated imports.
    • Updated Storybook globs to app-stories/** in RN (.rnstorybook) and web (.storybook) configs.
    • Added scripts/check-mobile-app-route-files.ts and wired it into root lint:sandbox and mobile lint; it fails on *.test.*, *.stories.*, and files named like fixtures/helpers under app/.
    • Documented the route-only app/ convention in packages/mobile/AGENTS.md and packages/mobile/README.md.
  • Migration

    • Put screen tests in packages/mobile/app-tests/, screen stories in packages/mobile/app-stories/, and shared fixtures (and their tests) in packages/mobile/app-fixtures/. Only real routes/layouts belong in packages/mobile/app/.

Written for commit 26a5159. Summary will update on new commits.

Review in cubic

Summary by CodeRabbit

  • Documentation

    • Clarified mobile project structure and routing guidelines.
    • Added guidance for keeping tests, stories, and fixtures separate from route files.
  • Chores

    • Added automated validation for mobile route-file organization.
    • Updated Storybook discovery to use the dedicated stories location.
    • Reorganized test and story references without changing coverage or behavior.
    • Added worktree directories to version-control exclusions.
    • Added reusable fixtures to support consistent mobile testing and Storybook scenarios.

@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

The mobile app now keeps Expo Router routes separate from tests, Storybook stories, and shared fixtures. Storybook paths and imports were updated. Route validation runs through workspace and mobile lint scripts.

Changes

Mobile route hygiene

Layer / File(s) Summary
Route policy and validation
.gitignore, AGENTS.md, package.json, packages/mobile/AGENTS.md, packages/mobile/README.md, packages/mobile/package.json, scripts/check-mobile-app-route-files.ts
Documentation defines route-only files under packages/mobile/app/. A checker reports forbidden test, story, fixture, and helper files. Lint scripts run the checker.
Storybook discovery and fixtures
packages/mobile/.storybook/*, packages/mobile/.rnstorybook/*, packages/mobile/app-stories/*, packages/mobile/app-fixtures/*
Storybook scans app-stories. Stories import application modules and shared fixtures. Date, food, and processing-status fixtures are added.
Test imports
packages/mobile/app-tests/*
Tests import screens, fixtures, components, stories, and mocks from app, app-fixtures, or app-stories. Test behavior and assertions remain unchanged.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Possibly related PRs

  • Asherlc/dofek#1123: Introduced mobile Activities stories and tests later relocated by this change.
  • Asherlc/dofek#1199: Added mobile test patterns affected by the route-directory separation.
  • Asherlc/dofek#2402: Directly relates to relocating mobile route tests and stories.

Suggested labels: area/mobile, type/refactor

🚥 Pre-merge checks | ✅ 1 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Title check ⚠️ Warning The title accurately describes the mobile route-prevention changes and uses imperative mood, but it lacks the required [mobile] area prefix. Prefix the title with [mobile], for example: [mobile] Prevent mobile app test files from becoming routes
✅ Passed checks (1 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@codereviewbot-ai

Copy link
Copy Markdown

🤖 Review skipped: Repository rate limit exceeded. Free accounts are limited to 2 reviews per 4 hours per repository. Upgrade to a paid plan for unlimited reviews.

@sourcery-ai

sourcery-ai Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Reviewer's Guide

This PR moves Expo Router screen tests and stories out of the route tree into dedicated app-tests/app-stories directories, updates imports and Storybook config accordingly, and adds a lint-time guard plus documentation to enforce route hygiene in the mobile app.

Flow diagram for lint-time mobile app route hygiene guard

flowchart TD
  lint_script["npm run lint"]
  biome_check["biome check ."]
  route_guard["tsx scripts/check-mobile-app-route-files.ts"]
  app_dir["packages/mobile/app"]
  violation_found["Forbidden *.test.* or *.stories.* file found"]
  lint_fail["Lint fails (exit 1)"]
  lint_pass["Lint passes"]

  lint_script --> biome_check
  lint_script --> route_guard
  route_guard --> app_dir
  app_dir -->|no forbidden files| lint_pass
  app_dir -->|has forbidden files| violation_found --> lint_fail
Loading

File-Level Changes

Change Details Files
Relocate mobile app screen tests out of Expo Router app/ tree and fix imports to point back into app/.
  • Move multiple *.test.(ts
tsx) files from packages/mobile/app/ to packages/mobile/app-tests/ while preserving relative structure (tabs, providers, activity, settings, etc.).
  • Update test imports from local ./ modules to use relative paths back into ../../app/ or ../app/ for the actual screens and helpers.
  • Adjust vi.mock module paths in tests to reference ../app/ or ../../app/ modules instead of local ./ files.
  • Relocate Expo Router stories out of app/ into app-stories/ and adjust Storybook configuration and imports.
    • Move screen Storybook files from packages/mobile/app/ to packages/mobile/app-stories/ preserving directory structure for tabs, activity, login, providers, settings, activities, and ZoneCharts.
    • Update story components to import screens from ../app/ or ../../app/ rather than local ./ paths.
    • Change Storybook config story globs to point to app-stories/ instead of app/ so stories are still discovered after relocation.
    packages/mobile/app-stories/(tabs)/index.stories.tsx
    packages/mobile/app-stories/(tabs)/strain.stories.tsx
    packages/mobile/app-stories/activities.stories.tsx
    packages/mobile/app-stories/activity/ZoneCharts.stories.tsx
    packages/mobile/app-stories/login.stories.tsx
    packages/mobile/app-stories/providers/index.stories.tsx
    packages/mobile/app-stories/settings.stories.tsx
    packages/mobile/.rnstorybook/main.ts
    packages/mobile/.storybook/main.ts
    + corresponding removals from packages/mobile/app/*.stories.*
    Add a route hygiene check script and wire it into lint and npm scripts so non-route test/story files under app/ fail CI.
    • Introduce scripts/check-mobile-app-route-files.ts that recursively scans packages/mobile/app for files matching .test. or .stories. and exits non-zero with a helpful message if any are found.
    • Update root package.json lint script to run the new check after biome, and add a dedicated check:mobile-app-routes npm script.
    • Update packages/mobile/package.json lint script to run the route check from the repo root via tsx.
    scripts/check-mobile-app-route-files.ts
    package.json
    packages/mobile/package.json
    Document Expo Router route hygiene conventions for mobile in AGENTS guidance and mobile README.
    • Extend packages/mobile/README.md project structure to describe app-tests/ and app-stories/ alongside app/ and explain that app/ must remain route-only.
    • Add a "Mobile Expo Router route hygiene" guideline section to root AGENTS.md describing where tests and stories must live and warning against non-route files under app/.
    • Add the same Expo Router route hygiene note under Navigation in packages/mobile/AGENTS.md.
    packages/mobile/README.md
    AGENTS.md
    packages/mobile/AGENTS.md

    Tips and commands

    Interacting with Sourcery

    • Trigger a new review: Comment @sourcery-ai review on the pull request.
    • Continue discussions: Reply directly to Sourcery's review comments.
    • Generate a GitHub issue from a review comment: Ask Sourcery to create an
      issue from a review comment by replying to it. You can also reply to a
      review comment with @sourcery-ai issue to create an issue from it.
    • Generate a pull request title: Write @sourcery-ai anywhere in the pull
      request title to generate a title at any time. You can also comment
      @sourcery-ai title on the pull request to (re-)generate the title at any time.
    • Generate a pull request summary: Write @sourcery-ai summary anywhere in
      the pull request body to generate a PR summary at any time exactly where you
      want it. You can also comment @sourcery-ai summary on the pull request to
      (re-)generate the summary at any time.
    • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
      request to (re-)generate the reviewer's guide at any time.
    • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
      pull request to resolve all Sourcery comments. Useful if you've already
      addressed all the comments and don't want to see them anymore.
    • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
      request to dismiss all existing Sourcery reviews. Especially useful if you
      want to start fresh with a new review - don't forget to comment
      @sourcery-ai review to trigger a new review!

    Customizing Your Experience

    Access your dashboard to:

    • Enable or disable review features such as the Sourcery-generated pull request
      summary, the reviewer's guide, and others.
    • Change the review language.
    • Add, remove or edit custom review instructions.
    • Adjust other review settings.

    Getting Help

    @codereviewbot-ai

    codereviewbot-ai Bot commented Aug 7, 2026

    Copy link
    Copy Markdown

    LGTM! The changes cleanly relocate mobile app stories into app-stories to prevent route conflicts with Expo Router, updating Storybook globs and component import paths accordingly.


    🤖 Reviewed by codereviewbot.ai - Catch bugs before your team does.

    @github-actions

    github-actions Bot commented Aug 7, 2026

    Copy link
    Copy Markdown
    Contributor

    Mobile Preview

    Scan to open on device:

    QR code for dofek://preview/pr-2446

    Channel pr-2446
    Deep Link dofek://preview/pr-2446
    Commit 3fdd46e

    To test on device:

    1. Build and install the preview client: PREVIEW_CHANNEL=pr-2446 pnpm expo prebuild --clean -p ios
    2. Or tap deep link on an existing preview build: dofek://preview/pr-2446

    Each PR gets its own channel. Build a preview client with PREVIEW_CHANNEL=pr-{N} to test.

    @github-actions

    github-actions Bot commented Aug 7, 2026

    Copy link
    Copy Markdown
    Contributor

    Storybook previews for 3fdd46e9 are ready:

    This comment updates automatically on each PR push.

    @Asherlc
    Asherlc marked this pull request as ready for review August 7, 2026 20:40
    Copilot AI lite review requested due to automatic review settings August 7, 2026 20:40
    @cursor

    cursor Bot commented Aug 7, 2026

    Copy link
    Copy Markdown

    Bugbot is not enabled for your account, so this pull request was not reviewed.

    Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

    Copilot AI left a comment

    Copy link
    Copy Markdown
    Contributor

    Choose a reason for hiding this comment

    The reason will be displayed to describe this comment to others. Learn more.

    Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

    @sourcery-ai sourcery-ai Bot left a comment

    Copy link
    Copy Markdown
    Contributor

    Choose a reason for hiding this comment

    The reason will be displayed to describe this comment to others. Learn more.

    Sorry @Asherlc, your pull request is larger than the review limit of 150000 diff characters

    @qodo-code-review

    Copy link
    Copy Markdown

    PR Summary by Qodo

    Enforce Expo Router route hygiene by moving tests/stories out of app/

    🐞 Bug fix 🧪 Tests ⚙️ Configuration changes 📝 Documentation 🕐 40+ Minutes

    Grey Divider

    AI Description

    • Move Expo Router screen tests from packages/mobile/app/ to packages/mobile/app-tests/.
    • Move Expo Router screen stories from packages/mobile/app/ to packages/mobile/app-stories/ and
     update Storybook globs.
    • Add a lint-time guard that fails when *.test.* / *.stories.* are added under
     packages/mobile/app/.
    
    Diagram

    graph TD
    Lint["pnpm lint"] --> Guard["route hygiene check"] --> AppDir["packages/mobile/app/"] --> Router["Expo Router"]
    Storybook["Storybook"] --> AppStories["packages/mobile/app-stories/"]
    Vitest["Vitest (mobile)"] --> AppTests["packages/mobile/app-tests/"]
    
    Loading
    High-Level Assessment

    The following are alternative approaches to this PR:

    1. Configure Expo Router to ignore `*.test.*` / `*.stories.*`
    • ➕ Avoids moving files and rewriting imports
    • ➕ Preserves colocated tests/stories next to route files
    • ➖ Often brittle/underdocumented across Expo Router versions
    • ➖ Higher long-term regression risk if config drifts or is bypassed
    2. Convention-only (no guard)
    • ➕ No additional tooling/runtime cost
    • ➖ Does not prevent regressions; relies on reviewers catching mistakes
    • ➖ Accidental routes can silently ship and surface as extra tabs/screens
    3. CI-only enforcement (skip local lint integration)
    • ➕ Keeps local lint minimal
    • ➖ Slower feedback; violations found only after push
    • ➖ More churn from avoidable CI failures

    Recommendation: The chosen approach (physically separating app-tests/ and app-stories/ from app/, plus a lint-time guard) is the most robust: it aligns with Expo Router’s file-based routing model, prevents accidental route registration by construction, and provides fast feedback locally and in CI.

    Files changed (76) +467 / -403

    Tests (67) +413 / -397
    activities.stories.tsxFix imports after moving tab stories to app-stories/ +1/-1

    Fix imports after moving tab stories to app-stories/

    • Updates relative imports so the story references the routable screen code under 'app/(tabs)/...'.
    

    packages/mobile/app-stories/(tabs)/activities.stories.tsx

    food.stories.tsxFix imports after moving tab stories to app-stories/ +2/-2

    Fix imports after moving tab stories to app-stories/

    • Updates relative imports so the story references the routable screen code under 'app/(tabs)/...'.
    

    packages/mobile/app-stories/(tabs)/food.stories.tsx

    index.stories.tsxFix Today tab story imports and fixture paths +4/-4

    Fix Today tab story imports and fixture paths

    • Repoints imports for the Today screen and processing-status fixture helpers to 'app/(tabs)/...' from the new story location.
    

    packages/mobile/app-stories/(tabs)/index.stories.tsx

    recovery.stories.tsxFix Recovery tab story imports and fixture paths +5/-5

    Fix Recovery tab story imports and fixture paths

    • Repoints imports for the Recovery screen and fixture helpers to 'app/(tabs)/...' from the new story location.
    

    packages/mobile/app-stories/(tabs)/recovery.stories.tsx

    strain.stories.tsxFix imports after moving tab stories to app-stories/ +4/-4

    Fix imports after moving tab stories to app-stories/

    • Updates relative imports so the story references the routable screen code under 'app/(tabs)/...'.
    

    packages/mobile/app-stories/(tabs)/strain.stories.tsx

    ActivitySourceDecisionCard.stories.tsxUpdate activity story imports after move +1/-1

    Update activity story imports after move

    • Adjusts imports to reference the underlying components/modules correctly from 'app-stories/'.
    

    packages/mobile/app-stories/activity/ActivitySourceDecisionCard.stories.tsx

    ZoneCharts.stories.tsxUpdate activity story imports after move +1/-1

    Update activity story imports after move

    • Adjusts imports to reference the underlying components/modules correctly from 'app-stories/'.
    

    packages/mobile/app-stories/activity/ZoneCharts.stories.tsx

    alerts.stories.tsxPoint alerts story at app/ screen module +1/-1

    Point alerts story at app/ screen module

    • Updates the story to import 'AlertsScreen' from '../app/alerts'.
    

    packages/mobile/app-stories/alerts.stories.tsx

    behavior-associations.stories.tsxPoint story at app/ screen module +1/-1

    Point story at app/ screen module

    • Updates imports to reference the screen under 'app/' from the new story location.
    

    packages/mobile/app-stories/behavior-associations.stories.tsx

    breathwork.stories.tsxPoint story at app/ screen module +1/-1

    Point story at app/ screen module

    • Updates imports to reference the screen under 'app/' from the new story location.
    

    packages/mobile/app-stories/breathwork.stories.tsx

    correlation.stories.tsxPoint story at app/ screen module +1/-1

    Point story at app/ screen module

    • Updates imports to reference the screen under 'app/' from the new story location.
    

    packages/mobile/app-stories/correlation.stories.tsx

    cycle.stories.tsxPoint story at app/ screen module +1/-1

    Point story at app/ screen module

    • Updates imports to reference the screen under 'app/' from the new story location.
    

    packages/mobile/app-stories/cycle.stories.tsx

    experiments.stories.tsxPoint story at app/ screen module +1/-1

    Point story at app/ screen module

    • Updates imports to reference the screen under 'app/' from the new story location.
    

    packages/mobile/app-stories/experiments.stories.tsx

    login.stories.tsxPoint login story at app/ screen module +1/-1

    Point login story at app/ screen module

    • Updates the story to import 'LoginScreen' from '../app/login'.
    

    packages/mobile/app-stories/login.stories.tsx

    more.stories.tsxPoint story at app/ screen module +1/-1

    Point story at app/ screen module

    • Updates imports to reference the screen under 'app/' from the new story location.
    

    packages/mobile/app-stories/more.stories.tsx

    nutrition-analytics.stories.tsxPoint story at app/ screen module +1/-1

    Point story at app/ screen module

    • Updates imports to reference the screen under 'app/' from the new story location.
    

    packages/mobile/app-stories/nutrition-analytics.stories.tsx

    index.stories.tsxPoint providers story at app/ screen module +1/-1

    Point providers story at app/ screen module

    • Updates imports to reference 'app/providers/index' from 'app-stories/'.
    

    packages/mobile/app-stories/providers/index.stories.tsx

    provider-danger-zone.stories.tsxUpdate provider story imports after move +1/-1

    Update provider story imports after move

    • Adjusts imports to reference provider modules correctly from the new story location.
    

    packages/mobile/app-stories/providers/provider-danger-zone.stories.tsx

    provider-detail-actions-card.stories.tsxUpdate provider story imports after move +1/-1

    Update provider story imports after move

    • Adjusts imports to reference provider modules correctly from the new story location.
    

    packages/mobile/app-stories/providers/provider-detail-actions-card.stories.tsx

    sync-all-controls.stories.tsxUpdate provider story imports after move +1/-1

    Update provider story imports after move

    • Adjusts imports to reference provider modules correctly from the new story location.
    

    packages/mobile/app-stories/providers/sync-all-controls.stories.tsx

    settings.stories.tsxPoint story at app/ screen module +1/-1

    Point story at app/ screen module

    • Updates imports to reference the screen under 'app/' from the new story location.
    

    packages/mobile/app-stories/settings.stories.tsx

    tracking.stories.tsxPoint story at app/ screen module +1/-1

    Point story at app/ screen module

    • Updates imports to reference the screen under 'app/' from the new story location.
    

    packages/mobile/app-stories/tracking.stories.tsx

    _fixture-dates.test.tsUpdate fixture date test imports after move +1/-1

    Update fixture date test imports after move

    • Repoints imports to reference fixture helpers under 'app/(tabs)/...' from the new 'app-tests/' location.
    

    packages/mobile/app-tests/(tabs)/_fixture-dates.test.ts

    _food-story-fixture.test.tsUpdate food story fixture test imports after move +1/-1

    Update food story fixture test imports after move

    • Repoints imports to reference fixture helpers under 'app/(tabs)/...' from the new 'app-tests/' location.
    

    packages/mobile/app-tests/(tabs)/_food-story-fixture.test.ts

    _layout.test.tsxUpdate tabs layout test to import app/(tabs)/_layout +1/-1

    Update tabs layout test to import app/(tabs)/_layout

    • Repoints imports so the test uses the routable 'app/(tabs)/_layout' module instead of a colocated test copy.
    

    packages/mobile/app-tests/(tabs)/_layout.test.tsx

    _processing-status-story-fixture.test.tsUpdate processing status fixture test imports after move +1/-1

    Update processing status fixture test imports after move

    • Repoints imports to reference processing-status fixture helpers under 'app/(tabs)/...'.
    

    packages/mobile/app-tests/(tabs)/_processing-status-story-fixture.test.ts

    activities.test.tsxUpdate Activities tab test imports after move +1/-1

    Update Activities tab test imports after move

    • Updates dynamic imports to load the Activities screen from 'app/(tabs)/activities'.
    

    packages/mobile/app-tests/(tabs)/activities.test.tsx

    food.test.tsxUpdate Food tab test imports after move +12/-12

    Update Food tab test imports after move

    • Updates dynamic imports to load the Food screen from 'app/(tabs)/food'.
    

    packages/mobile/app-tests/(tabs)/food.test.tsx

    index.test.tsxUpdate Today tab test imports after move +23/-23

    Update Today tab test imports after move

    • Updates dynamic imports to load the Today screen from 'app/(tabs)/index'.
    

    packages/mobile/app-tests/(tabs)/index.test.tsx

    recovery.test.tsxUpdate Recovery tab test imports after move +25/-25

    Update Recovery tab test imports after move

    • Updates dynamic imports to load the Recovery screen from 'app/(tabs)/recovery'.
    

    packages/mobile/app-tests/(tabs)/recovery.test.tsx

    strain.test.tsxUpdate Strain tab test imports after move +27/-27

    Update Strain tab test imports after move

    • Updates dynamic imports to load the Strain screen from 'app/(tabs)/strain'.
    

    packages/mobile/app-tests/(tabs)/strain.test.tsx

    +native-intent.test.tsUpdate native intent route test imports after move +1/-1

    Update native intent route test imports after move

    • Adjusts imports to reference route code under 'app/' from the new 'app-tests/' location.
    

    packages/mobile/app-tests/+native-intent.test.ts

    _layout.cleanup.test.tsxUpdate root layout cleanup test imports after move +2/-2

    Update root layout cleanup test imports after move

    • Adjusts imports to reference root layout modules under 'app/' from the new test location.
    

    packages/mobile/app-tests/_layout.cleanup.test.tsx

    _layout.telemetry-guard.test.tsUpdate telemetry guard test imports after move +1/-1

    Update telemetry guard test imports after move

    • Adjusts imports to reference root layout modules under 'app/' from the new test location.
    

    packages/mobile/app-tests/_layout.telemetry-guard.test.ts

    _layout.test.tsUpdate root stack options test import path +1/-1

    Update root stack options test import path

    • Repoints 'rootStackScreenOptions' import to 'app/_layout-options' so the test still targets the routable config.
    

    packages/mobile/app-tests/_layout.test.ts

    ActivityDetailCharts.test.tsxUpdate activity chart test imports after move +2/-2

    Update activity chart test imports after move

    • Adjusts import paths to reference activity modules correctly from the new test location.
    

    packages/mobile/app-tests/activity/ActivityDetailCharts.test.tsx

    ZoneDistributionCharts.test.tsxUpdate activity chart test imports after move +1/-1

    Update activity chart test imports after move

    • Adjusts import paths to reference activity modules correctly from the new test location.
    

    packages/mobile/app-tests/activity/ZoneDistributionCharts.test.tsx

    [id].test.tsxUpdate Activity detail route test imports and mocks +27/-27

    Update Activity detail route test imports and mocks

    • Repoints mocks and dynamic imports to 'app/activity/[id]' and related helpers (e.g., 'useChartScrub') from the new test location.
    

    packages/mobile/app-tests/activity/[id].test.tsx

    alerts.test.tsxUpdate alerts screen test imports after move +1/-1

    Update alerts screen test imports after move

    • Adjusts imports to reference 'app/alerts' from 'app-tests/'.
    

    packages/mobile/app-tests/alerts.test.tsx

    behavior-associations.test.tsxUpdate behavior associations test imports after move +13/-13

    Update behavior associations test imports after move

    • Adjusts imports to reference the screen under 'app/' from 'app-tests/'.
    

    packages/mobile/app-tests/behavior-associations.test.tsx

    ble-probe.test.tsxUpdate BLE probe test imports after move +4/-4

    Update BLE probe test imports after move

    • Adjusts imports to reference the screen under 'app/' from 'app-tests/'.
    

    packages/mobile/app-tests/ble-probe.test.tsx

    breathwork.test.tsxUpdate breathwork test imports after move +9/-9

    Update breathwork test imports after move

    • Adjusts imports to reference the screen under 'app/' from 'app-tests/'.
    

    packages/mobile/app-tests/breathwork.test.tsx

    correlation.test.tsxUpdate correlation test imports after move +14/-14

    Update correlation test imports after move

    • Adjusts imports to reference the screen under 'app/' from 'app-tests/'.
    

    packages/mobile/app-tests/correlation.test.tsx

    cycle.test.tsxUpdate cycle test imports after move +14/-14

    Update cycle test imports after move

    • Adjusts imports to reference the screen under 'app/' from 'app-tests/'.
    

    packages/mobile/app-tests/cycle.test.tsx

    daily-heart-rate.test.tsxUpdate daily heart rate test imports after move +8/-8

    Update daily heart rate test imports after move

    • Adjusts imports to reference the screen under 'app/' from 'app-tests/'.
    

    packages/mobile/app-tests/daily-heart-rate.test.tsx

    data-quality.test.tsxUpdate data quality test imports after move +1/-1

    Update data quality test imports after move

    • Adjusts imports to reference the screen under 'app/' from 'app-tests/'.
    

    packages/mobile/app-tests/data-quality.test.tsx

    experiments.test.tsxUpdate experiments test imports after move +5/-5

    Update experiments test imports after move

    • Adjusts imports to reference the screen under 'app/' from 'app-tests/'.
    

    packages/mobile/app-tests/experiments.test.tsx

    FoodResultCard.test.tsxUpdate FoodResultCard test imports after move +2/-2

    Update FoodResultCard test imports after move

    • Adjusts imports to reference food UI modules correctly from the new test location.
    

    packages/mobile/app-tests/food/FoodResultCard.test.tsx

    QuickAddTab.test.tsxUpdate QuickAddTab test imports after move +1/-1

    Update QuickAddTab test imports after move

    • Adjusts imports to reference food UI modules correctly from the new test location.
    

    packages/mobile/app-tests/food/QuickAddTab.test.tsx

    add-types.test.tsUpdate add-types test imports after move +1/-1

    Update add-types test imports after move

    • Adjusts imports to reference shared food type helpers correctly from the new test location.
    

    packages/mobile/app-tests/food/add-types.test.ts

    heart-rate-visualization.test.tsxUpdate heart rate visualization test import paths +19/-7

    Update heart rate visualization test import paths

    • Repoints mocks and dynamic imports to 'app/heart-rate-visualization' and 'app/_layout-options' from the new 'app-tests/' location.
    

    packages/mobile/app-tests/heart-rate-visualization.test.tsx

    imu-visualization.test.tsxUpdate IMU visualization test imports after move +2/-2

    Update IMU visualization test imports after move

    • Adjusts imports to reference the screen under 'app/' from 'app-tests/'.
    

    packages/mobile/app-tests/imu-visualization.test.tsx

    login.stories.test.tsxUpdate login story test imports after move +1/-1

    Update login story test imports after move

    • Adjusts imports so the test references the correct story/screen locations after the move.
    

    packages/mobile/app-tests/login.stories.test.tsx

    login.test.tsxUpdate login screen test imports after move +1/-1

    Update login screen test imports after move

    • Adjusts imports to reference the screen under 'app/' from 'app-tests/'.
    

    packages/mobile/app-tests/login.test.tsx

    more.test.tsxUpdate more screen test imports after move +1/-1

    Update more screen test imports after move

    • Adjusts imports to reference the screen under 'app/' from 'app-tests/'.
    

    packages/mobile/app-tests/more.test.tsx

    nutrition-analytics.test.tsxUpdate nutrition analytics test imports after move +4/-4

    Update nutrition analytics test imports after move

    • Adjusts imports to reference the screen under 'app/' from 'app-tests/'.
    

    packages/mobile/app-tests/nutrition-analytics.test.tsx

    onboarding.test.tsxUpdate onboarding test imports after move +1/-1

    Update onboarding test imports after move

    • Adjusts imports to reference the screen under 'app/' from 'app-tests/'.
    

    packages/mobile/app-tests/onboarding.test.tsx

    preview.test.tsxUpdate preview test imports after move +4/-4

    Update preview test imports after move

    • Adjusts imports to reference the screen under 'app/' from 'app-tests/'.
    

    packages/mobile/app-tests/preview.test.tsx

    [id].test.tsxUpdate provider detail route test imports after move +51/-51

    Update provider detail route test imports after move

    • Repoints dynamic imports/mocks to load provider route code from 'app/providers/[id]' from the new test location.
    

    packages/mobile/app-tests/providers/[id].test.tsx

    auth-modals.test.tsxUpdate provider auth modals test imports after move +1/-1

    Update provider auth modals test imports after move

    • Adjusts imports to reference provider auth UI modules correctly from the new test location.
    

    packages/mobile/app-tests/providers/auth-modals.test.tsx

    index.test.tsxUpdate providers screen test imports after move +26/-22

    Update providers screen test imports after move

    • Repoints imports/dynamic imports to 'app/providers/index' and related card modules (e.g., 'provider-card', 'file-import-provider-card').
    

    packages/mobile/app-tests/providers/index.test.tsx

    sync-all-controls.test.tsxUpdate sync-all-controls test imports after move +1/-1

    Update sync-all-controls test imports after move

    • Adjusts imports to reference provider sync UI modules correctly from the new test location.
    

    packages/mobile/app-tests/providers/sync-all-controls.test.tsx

    reports.test.tsxUpdate reports test imports after move +6/-6

    Update reports test imports after move

    • Adjusts imports to reference the screen under 'app/' from 'app-tests/'.
    

    packages/mobile/app-tests/reports.test.tsx

    settings.test.tsxUpdate settings test imports after move +41/-41

    Update settings test imports after move

    • Adjusts imports to reference the screen under 'app/' from 'app-tests/'.
    

    packages/mobile/app-tests/settings.test.tsx

    sleep.test.tsxUpdate sleep test imports after move +7/-7

    Update sleep test imports after move

    • Adjusts imports to reference the screen under 'app/' from 'app-tests/'.
    

    packages/mobile/app-tests/sleep.test.tsx

    supplements.test.tsxUpdate supplements test imports after move +8/-8

    Update supplements test imports after move

    • Adjusts imports to reference the screen under 'app/' from 'app-tests/'.
    

    packages/mobile/app-tests/supplements.test.tsx

    tracking.test.tsxUpdate tracking test imports after move +6/-6

    Update tracking test imports after move

    • Adjusts imports to reference the screen under 'app/' from 'app-tests/'.
    

    packages/mobile/app-tests/tracking.test.tsx

    Documentation (3) +5 / -1
    AGENTS.mdDocument Expo Router route hygiene convention +1/-0

    Document Expo Router route hygiene convention

    • Adds guidance that 'packages/mobile/app/' must be route-only and that tests/stories belong in 'app-tests/' and 'app-stories/'.
    

    AGENTS.md

    AGENTS.mdAdd mobile-specific route hygiene guidance +1/-0

    Add mobile-specific route hygiene guidance

    • Documents the route-only 'app/' convention and points to 'app-tests/' and 'app-stories/' for non-route files.
    

    packages/mobile/AGENTS.md

    README.mdDocument app-tests/ and app-stories/ directories +3/-1

    Document app-tests/ and app-stories/ directories

    • Updates the mobile project structure section to warn that 'app/' should remain route-only and to list 'app-tests/' and 'app-stories/'.
    

    packages/mobile/README.md

    Other (6) +49 / -5
    .gitignoreIgnore local worktree metadata +1/-0

    Ignore local worktree metadata

    • Adds '.worktrees/' to '.gitignore' so local worktree directories are not committed.
    

    .gitignore

    package.jsonAdd and run check:mobile-app-routes in lint +3/-2

    Add and run check:mobile-app-routes in lint

    • Adds 'check:mobile-app-routes' and wires it into 'lint:sandbox' so lint fails if forbidden files exist under 'packages/mobile/app/'.
    

    package.json

    main.tsUpdate RN Storybook globs to app-stories/ +4/-1

    Update RN Storybook globs to app-stories/

    • Changes Storybook configuration to load stories from '../app-stories/**' instead of '../app/**'.
    

    packages/mobile/.rnstorybook/main.ts

    main.tsUpdate web Storybook globs to app-stories/ +1/-1

    Update web Storybook globs to app-stories/

    • Changes Storybook configuration to load stories from '../app-stories/**' instead of '../app/**'.
    

    packages/mobile/.storybook/main.ts

    package.jsonRun route hygiene check from mobile lint +1/-1

    Run route hygiene check from mobile lint

    • Extends the mobile 'lint' script to also run the root 'check:mobile-app-routes' guard.
    

    packages/mobile/package.json

    check-mobile-app-route-files.tsAdd script to forbid test/story files under packages/mobile/app/ +39/-0

    Add script to forbid test/story files under packages/mobile/app/

    • Adds a recursive directory scan for 'packages/mobile/app/' that fails with a clear message if any '*.test.*' or '*.stories.*' files are found.
    

    scripts/check-mobile-app-route-files.ts

    @qodo-code-review

    qodo-code-review Bot commented Aug 7, 2026

    Copy link
    Copy Markdown

    Code Review by Qodo

    🐞 Bugs (0) 📘 Rule violations (0) 📜 Skill insights (0)

    Grey Divider


    Remediation recommended

    1. Expo Router claim lacks citation ✓ Resolved 📘 Rule violation § Compliance
    Description
    Docs added new claims about Expo Router treating files under packages/mobile/app/ as route
    candidates, but the statements are not cited with an official primary source link. This violates the
    documentation requirement and can mislead readers if the third-party behavior changes.
    
    Code

    packages/mobile/AGENTS.md[16]

    +- **Expo Router route hygiene**: Never colocate tests, stories, fixtures, or helper-only files under `packages/mobile/app/`. Expo Router treats files in `app/` as route candidates, which can create extra iOS tabs/screens. Put route tests under `packages/mobile/app-tests/` and route stories under `packages/mobile/app-stories/`. If a file under `app/` is not a real route/layout/special Expo Router file, move it out instead of hiding it with `href: null`.
    Relevance

    ●●● Strong

    Compliance precedent: team accepts adding required references/links in docs to support claims.
    

    PR-#2397

    ⓘ Recommendations generated based on similar findings in past PRs

    Evidence
    The added lines describe third-party platform behavior (Expo Router routing based on files in
    app/) but include no adjacent hyperlink/reference to official Expo Router documentation, which the
    rule requires for such claims.
    

    Rule 1505719: Cite third-party behavior claims in docs with primary sources
    AGENTS.md[67-67]
    packages/mobile/AGENTS.md[16-16]
    packages/mobile/README.md[19-21]

    Agent prompt
    The issue below was found during a code review. Follow the provided context and guidance below and implement a solution
    
    ## Issue description
    New documentation text asserts third-party behavior (Expo Router route candidate behavior) without including adjacent primary-source citations.
    
    ## Issue Context
    Compliance requires third-party behavior claims in `AGENTS.md`, `README.md`, or `docs/` to include a nearby link to an official/primary source.
    
    ## Fix Focus Areas
    - AGENTS.md[67-67]
    - packages/mobile/AGENTS.md[16-16]
    - packages/mobile/README.md[19-21]
    

    ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


    Grey Divider

    Context used
    ✅ Compliance rules (platform): 169 rules

    To customize comments, go to the Qodo configuration screen, or learn more in the docs.

    Qodo Logo

    Comment thread packages/mobile/AGENTS.md Outdated

    @coderabbitai coderabbitai Bot left a comment

    Copy link
    Copy Markdown

    Choose a reason for hiding this comment

    The reason will be displayed to describe this comment to others. Learn more.

    Actionable comments posted: 4

    🤖 Prompt for all review comments with AI agents
    Verify each finding against current code. Fix only still-valid issues, skip the
    rest with a brief reason, keep changes minimal, and validate.
    
    Inline comments:
    In `@package.json`:
    - Around line 216-217: Update the validator invoked by check:mobile-app-routes
    in check-mobile-app-route-files.ts to enforce the documented route-only policy
    for packages/mobile/app/. Extend its filename checks to reject fixtures and
    helper-only files, or define and apply a canonical route allowlist covering all
    permitted route names; keep the validator and AGENTS.md documentation
    consistent.
    - Around line 216-217: Update the package script check:mobile-app-routes to
    invoke the repository’s TypeScript runner through pnpm, using pnpm tsx
    scripts/check-mobile-app-route-files.ts instead of calling tsx directly.
    
    In `@packages/mobile/app-tests/food/add-types.test.ts`:
    - Line 2: Update the canonical AGENTS.md guidance with a scoped
    packages/mobile/app-tests/** exception allowing mobile route tests to remain
    outside packages/mobile/app, consistent with the mobile README. Preserve the
    general colocated-test rule and do not move
    packages/mobile/app-tests/food/add-types.test.ts.
    
    In `@scripts/check-mobile-app-route-files.ts`:
    - Line 5: Update forbiddenRouteFilePattern to match any filename containing the
    .test. or .stories. marker with a trailing extension, removing the [jt]sx?
    whitelist so files such as .mts and .d.ts are detected.
    
    🪄 Autofix

    Fix all unresolved CodeRabbit comments on this PR:

    • Push a commit to this branch (recommended)
    • Create a new PR with the fixes

    ℹ️ Review info
    ⚙️ Run configuration

    Configuration used: Path: .coderabbit.yaml

    Review profile: ASSERTIVE

    Plan: Pro Plus

    Run ID: ed4e3b0a-79b4-4442-9115-162a10eb7cff

    📥 Commits

    Reviewing files that changed from the base of the PR and between 02436ba and d9f06b4.

    📒 Files selected for processing (76)
    • .gitignore
    • AGENTS.md
    • package.json
    • packages/mobile/.rnstorybook/main.ts
    • packages/mobile/.storybook/main.ts
    • packages/mobile/AGENTS.md
    • packages/mobile/README.md
    • packages/mobile/app-stories/(tabs)/activities.stories.tsx
    • packages/mobile/app-stories/(tabs)/food.stories.tsx
    • packages/mobile/app-stories/(tabs)/index.stories.tsx
    • packages/mobile/app-stories/(tabs)/recovery.stories.tsx
    • packages/mobile/app-stories/(tabs)/strain.stories.tsx
    • packages/mobile/app-stories/activity/ActivitySourceDecisionCard.stories.tsx
    • packages/mobile/app-stories/activity/ZoneCharts.stories.tsx
    • packages/mobile/app-stories/alerts.stories.tsx
    • packages/mobile/app-stories/behavior-associations.stories.tsx
    • packages/mobile/app-stories/breathwork.stories.tsx
    • packages/mobile/app-stories/correlation.stories.tsx
    • packages/mobile/app-stories/cycle.stories.tsx
    • packages/mobile/app-stories/experiments.stories.tsx
    • packages/mobile/app-stories/login.stories.tsx
    • packages/mobile/app-stories/more.stories.tsx
    • packages/mobile/app-stories/nutrition-analytics.stories.tsx
    • packages/mobile/app-stories/providers/index.stories.tsx
    • packages/mobile/app-stories/providers/provider-danger-zone.stories.tsx
    • packages/mobile/app-stories/providers/provider-detail-actions-card.stories.tsx
    • packages/mobile/app-stories/providers/sync-all-controls.stories.tsx
    • packages/mobile/app-stories/settings.stories.tsx
    • packages/mobile/app-stories/tracking.stories.tsx
    • packages/mobile/app-tests/(tabs)/_fixture-dates.test.ts
    • packages/mobile/app-tests/(tabs)/_food-story-fixture.test.ts
    • packages/mobile/app-tests/(tabs)/_layout.test.tsx
    • packages/mobile/app-tests/(tabs)/_processing-status-story-fixture.test.ts
    • packages/mobile/app-tests/(tabs)/activities.test.tsx
    • packages/mobile/app-tests/(tabs)/food.test.tsx
    • packages/mobile/app-tests/(tabs)/index.test.tsx
    • packages/mobile/app-tests/(tabs)/recovery.test.tsx
    • packages/mobile/app-tests/(tabs)/strain.test.tsx
    • packages/mobile/app-tests/+native-intent.test.ts
    • packages/mobile/app-tests/_layout.cleanup.test.tsx
    • packages/mobile/app-tests/_layout.telemetry-guard.test.ts
    • packages/mobile/app-tests/_layout.test.ts
    • packages/mobile/app-tests/activity/ActivityDetailCharts.test.tsx
    • packages/mobile/app-tests/activity/ZoneDistributionCharts.test.tsx
    • packages/mobile/app-tests/activity/[id].test.tsx
    • packages/mobile/app-tests/alerts.test.tsx
    • packages/mobile/app-tests/behavior-associations.test.tsx
    • packages/mobile/app-tests/ble-probe.test.tsx
    • packages/mobile/app-tests/breathwork.test.tsx
    • packages/mobile/app-tests/correlation.test.tsx
    • packages/mobile/app-tests/cycle.test.tsx
    • packages/mobile/app-tests/daily-heart-rate.test.tsx
    • packages/mobile/app-tests/data-quality.test.tsx
    • packages/mobile/app-tests/experiments.test.tsx
    • packages/mobile/app-tests/food/FoodResultCard.test.tsx
    • packages/mobile/app-tests/food/QuickAddTab.test.tsx
    • packages/mobile/app-tests/food/add-types.test.ts
    • packages/mobile/app-tests/heart-rate-visualization.test.tsx
    • packages/mobile/app-tests/imu-visualization.test.tsx
    • packages/mobile/app-tests/login.stories.test.tsx
    • packages/mobile/app-tests/login.test.tsx
    • packages/mobile/app-tests/more.test.tsx
    • packages/mobile/app-tests/nutrition-analytics.test.tsx
    • packages/mobile/app-tests/onboarding.test.tsx
    • packages/mobile/app-tests/preview.test.tsx
    • packages/mobile/app-tests/providers/[id].test.tsx
    • packages/mobile/app-tests/providers/auth-modals.test.tsx
    • packages/mobile/app-tests/providers/index.test.tsx
    • packages/mobile/app-tests/providers/sync-all-controls.test.tsx
    • packages/mobile/app-tests/reports.test.tsx
    • packages/mobile/app-tests/settings.test.tsx
    • packages/mobile/app-tests/sleep.test.tsx
    • packages/mobile/app-tests/supplements.test.tsx
    • packages/mobile/app-tests/tracking.test.tsx
    • packages/mobile/package.json
    • scripts/check-mobile-app-route-files.ts

    Comment thread package.json Outdated
    Comment thread packages/mobile/app-tests/food/add-types.test.ts
    Comment thread scripts/check-mobile-app-route-files.ts Outdated
    @Asherlc
    Asherlc enabled auto-merge (squash) August 7, 2026 22:33
    @codereviewbot-ai

    Copy link
    Copy Markdown

    🤖 Review skipped: Repository Owner rate limit exceeded. Free accounts are limited to 3 reviews per 4 hours across all repositories. Upgrade to a paid plan for unlimited reviews.

    @coderabbitai coderabbitai Bot left a comment

    Copy link
    Copy Markdown

    Choose a reason for hiding this comment

    The reason will be displayed to describe this comment to others. Learn more.

    Actionable comments posted: 3

    🤖 Prompt for all review comments with AI agents
    Verify each finding against current code. Fix only still-valid issues, skip the
    rest with a brief reason, keep changes minimal, and validate.
    
    Inline comments:
    In `@packages/mobile/AGENTS.md`:
    - Line 16: Update the Storybook guidance in packages/mobile/AGENTS.md to
    distinguish configuration directories from story-file locations: retain
    .storybook and .rnstorybook for Storybook configuration, explicitly place route
    stories in app-stories/, and specify the approved location for component story
    files.
    
    In `@packages/mobile/app-tests/`(tabs)/_fixture-dates.test.ts:
    - Line 2: Move packages/mobile/app-tests/(tabs)/_fixture-dates.test.ts to
    packages/mobile/app-fixtures/(tabs)/fixture-dates.test.ts and
    packages/mobile/app-tests/(tabs)/_processing-status-story-fixture.test.ts to
    packages/mobile/app-fixtures/(tabs)/processing-status-story-fixture.test.ts,
    removing the leading underscores while preserving each test’s existing imports
    and behavior.
    
    In `@packages/mobile/app-tests/`(tabs)/_food-story-fixture.test.ts:
    - Line 3: Move the fixture test importing seedFoodStoryQuery from the app-tests
    location to app-fixtures/(tabs)/food-story-fixture.test.ts, colocating it with
    food-story-fixture.ts; preserve the test contents and behavior unchanged.
    
    🪄 Autofix

    Fix all unresolved CodeRabbit comments on this PR:

    • Push a commit to this branch (recommended)
    • Create a new PR with the fixes

    ℹ️ Review info
    ⚙️ Run configuration

    Configuration used: Path: .coderabbit.yaml

    Review profile: ASSERTIVE

    Plan: Pro Plus

    Run ID: 9539dc66-9710-4416-8e25-f245b71c9856

    📥 Commits

    Reviewing files that changed from the base of the PR and between d9f06b4 and 9ebd8c7.

    📒 Files selected for processing (15)
    • AGENTS.md
    • package.json
    • packages/mobile/AGENTS.md
    • packages/mobile/README.md
    • packages/mobile/app-fixtures/(tabs)/fixture-dates.ts
    • packages/mobile/app-fixtures/(tabs)/food-story-fixture.ts
    • packages/mobile/app-fixtures/(tabs)/processing-status-story-fixture.ts
    • packages/mobile/app-stories/(tabs)/food.stories.tsx
    • packages/mobile/app-stories/(tabs)/index.stories.tsx
    • packages/mobile/app-stories/(tabs)/recovery.stories.tsx
    • packages/mobile/app-stories/(tabs)/strain.stories.tsx
    • packages/mobile/app-tests/(tabs)/_fixture-dates.test.ts
    • packages/mobile/app-tests/(tabs)/_food-story-fixture.test.ts
    • packages/mobile/app-tests/(tabs)/_processing-status-story-fixture.test.ts
    • scripts/check-mobile-app-route-files.ts

    Comment thread packages/mobile/AGENTS.md
    Comment thread packages/mobile/app-tests/(tabs)/_fixture-dates.test.ts Outdated
    Comment thread packages/mobile/app-tests/(tabs)/_food-story-fixture.test.ts Outdated
    @codereviewbot-ai

    Copy link
    Copy Markdown

    🤖 Review skipped: Repository Owner rate limit exceeded. Free accounts are limited to 3 reviews per 4 hours across all repositories. Upgrade to a paid plan for unlimited reviews.

    @codereviewbot-ai

    Copy link
    Copy Markdown

    🤖 Review skipped: Repository Owner rate limit exceeded. Free accounts are limited to 3 reviews per 4 hours across all repositories. Upgrade to a paid plan for unlimited reviews.

    @Asherlc
    Asherlc merged commit 35db917 into main Aug 7, 2026
    107 checks passed
    @Asherlc
    Asherlc deleted the codex/mobile-route-hygiene branch August 7, 2026 23:18
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

    Labels

    None yet

    Projects

    None yet

    Development

    Successfully merging this pull request may close these issues.

    2 participants