Files
supabase/.coderabbit.yaml
T
Alaister YoungandAlaister Young 32798c3162 [FE-3423] chore(studio): flag pages/** edits to mirror into TanStack routes (#47650)
Adds a PR-time reminder to mirror any edit to `apps/studio/pages/**`
into the corresponding `apps/studio/routes/**` file, since the Next.js
pages router and the TanStack Start route tree ship side-by-side during
the migration and can silently drift.

**Added:**
- A CodeRabbit `path_instructions` rule (`.coderabbit.yaml`) scoped to
`apps/studio/pages/**` that prompts authors to check whether a page
change needs mirroring into `routes/**`. It encodes the migration's
nuance so it isn't noise — pure body edits on re-export (Path A) pages
propagate automatically, but layout/`getLayout`, `staticData` props,
`withAuth`, redirect-path, or new-page changes must be mirrored by hand.
Framed as verify-not-block, and explicitly tells authors *not* to delete
the `pages/**` file.

**Changed:**
- `apps/studio/TANSTACK_MIGRATION.md` — documents the guardrail under
the Runtime model section, and adds a cleanup-checklist line to remove
it once `pages/**` is deleted (FE-3106).

This is temporary scaffolding — it comes out with the final `pages/**`
cleanup pass.

## To test

- This needs to land on `master` first, then open a throwaway PR that
touches a file under `apps/studio/pages/**` and confirm CodeRabbit
leaves the reminder comment.
- `path_instructions` can be flaky — if CodeRabbit doesn't fire
reliably, the fallback is a GitHub Action + sticky PR comment scoped to
`paths: ['apps/studio/pages/**']`.

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Documentation**
* Added migration guidance for Studio page changes to help keep mirrored
routes in sync during the transition period.
* Clarified when page updates need to be reflected in the matching route
files, including new pages and changes to layout, access control,
titles, static data, or paths.
* Added a cleanup reminder for removing the temporary review guidance
once the migration is complete.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Alaister Young <10985857+alaister@users.noreply.github.com>
2026-07-06 15:26:43 +00:00

93 lines
5.3 KiB
YAML

# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json
# Don't inherit organization-level settings (they're tuned for other repos);
# this config is self-contained and unset values use CodeRabbit defaults.
inheritance: false
# Enrich linked issues with related code and potential solutions during review.
issue_enrichment:
auto_enrich:
enabled: true
reviews:
# Skip machine-generated / vendored files (mirrors .prettierignore). Keeps
# reviews focused on hand-written code and preserves rate-limit budget on
# large codegen diffs.
path_filters:
- '!pnpm-lock.yaml'
- '!packages/api-types/types/**' # generated API types (api.d.ts, platform.d.ts)
- '!supabase/functions/common/database-types.ts' # generated by `pnpm generate:types`
- '!**/routeTree.gen.ts' # TanStack Router generated
- '!**/__generated__/**'
- '!apps/docs/features/docs/generated/**'
- '!apps/www/.generated/**'
- '!apps/design-system/__registry__/**'
- '!apps/ui-library/__registry__/**'
- '!apps/ui-library/public/r/**' # registry output
- '!packages/icons/__registry__/**'
- '!packages/icons/src/icons/**' # generated icon components
# Targeted, path-scoped review guidance, version-controlled alongside the code.
path_instructions:
- path: 'packages/common/telemetry-constants.ts'
instructions: |
Strictly enforce event naming: [object]_[verb] in snake_case. Only approved
verbs: opened, clicked, submitted, created, removed, updated, retrieved,
intended, evaluated, added, enabled, disabled, copied, exposed, failed,
converted. Properties must be camelCase for new events (match existing
convention when adding to existing events). Flag any usage of
useSendEventMutation. Verify @group Events and @source JSDoc tags are
accurate. Check that new interfaces are added to the TelemetryEvent union type.
- path: 'apps/studio/components/**/!(*.test).tsx' # production components only, not tests
instructions: |
Only suggest adding PostHog event tracking (via useTrack from
lib/telemetry/track, [object]_[verb] snake_case) when a new user-facing
interaction is growth-relevant: e.g. first-use of a feature, onboarding steps,
project/org creation, upgrade/billing actions, enabling or disabling a product
feature, or any action that signals activation or retention. Do not suggest
tracking for: passive views, page loads, UI-only state changes (e.g. expanding
a panel, switching tabs in a settings page), developer/internal tooling
interactions, or interactions clearly unrelated to product adoption.
- path: 'apps/studio/pages/**'
instructions: |
Studio is mid-migration from the Next.js pages router (apps/studio/pages/**)
to TanStack Start (apps/studio/routes/**). Both runtimes ship side-by-side, so
every URL served from pages/** has a mirror in routes/**. See
apps/studio/TANSTACK_MIGRATION.md for the full route map and strategy.
Leave a comment reminding the author to check whether this change needs to be
mirrored into the corresponding apps/studio/routes/** file so the two builds
don't silently drift:
- Most route files re-export the page's default export (Path A), so pure
page-body edits propagate automatically — no mirror needed.
- A mirror IS needed when the change touches something the route file
duplicates rather than imports: getLayout / layout wrapping, page title or
other props the route encodes as staticData, withAuth / auth gating, or the
route/redirect path itself.
- A brand-new page under pages/** needs a matching new route under routes/**
(and a checklist entry in apps/studio/TANSTACK_MIGRATION.md).
- Do NOT suggest deleting the pages/** file — the Next file stays load-bearing
for both runtimes until the final cleanup pass (tracked in FE-3106).
Keep this a reminder to verify, not a hard blocker: if no mirror is required,
say so briefly rather than forcing a change.
# Applies our internal engineering skills (.claude/skills/) as CodeRabbit review
# guidelines. The skills are the single source of truth — they are consumed
# directly, with no copy of their content elsewhere.
#
# `applyTo` decouples where a guideline file lives from the code it governs.
# Without it, CodeRabbit scopes a guideline file to its own directory and below;
# our skills live in .claude/skills/, which contains no code, so they would never
# reach apps/studio. `applyTo` points them at the right paths instead.
knowledge_base:
code_guidelines:
filePatterns:
# Studio code conventions — React/TS, UI patterns, composition, data fetching, errors
- files: '.claude/skills/{studio-best-practices,studio-ui-patterns,vercel-composition-patterns,studio-queries,studio-error-handling}/SKILL.md'
applyTo: 'apps/studio/**/*.{ts,tsx}'
# Studio unit / component test conventions
- files: '.claude/skills/{studio-testing,studio-mock-api-tests}/SKILL.md'
applyTo: 'apps/studio/**/*.test.{ts,tsx}'
# Studio end-to-end (Playwright) test conventions
- files: '.claude/skills/studio-e2e-tests/SKILL.md'
applyTo: 'e2e/studio/**/*.spec.ts'