Makes the repo's AI-agent setup tool-agnostic: instructions live in
`AGENTS.md` files, skills live in `.agents/skills/`, and Claude Code,
Codex, Cursor, and Copilot all read the same sources. Also sweeps the
skills for stale and duplicated content while everything was being
moved.
**Changed:**
- Every `CLAUDE.md` (root, `apps/studio`, `apps/docs`, `apps/kb`) is now
a one-line `@AGENTS.md` import; the content moved verbatim into an
`AGENTS.md` beside it. The root one moved from `.claude/CLAUDE.md` to
the repo root for consistency.
- All skills now live in `.agents/skills/`; `.claude/skills` is a single
symlink to it (replacing the old mix of real dirs and per-skill
symlinks). Path references in `.coderabbit.yaml`, code comments, and
docs updated to match.
- `.github/copilot-instructions.md` keeps only the review policy and
points at `AGENTS.md` + `.agents/skills/`. Copilot code review reads
those natively now, so the per-topic
`.github/instructions/*.instructions.md` files were duplicates of the
skills.
- Stale skill content fixed: `studio-queries` imported a toast library
Studio doesn't use, `telemetry-standards` and `studio-testing` used
import paths that don't resolve, `safe-sql-execution` cited a boundary
test that doesn't exist, the ask-the-docs references described an
`AiPrompt` mechanism that was replaced by the ID-keyed registry, plus a
handful of wrong paths, a self-contradicting `waitForTimeout` rule, an
invalid Playwright signature, and a ConfigCat flag described as PostHog.
- `studio-error-handling` now explains when to use `AlertError` (the
default) vs `ErrorMatcher`.
**Added:**
- `apps/docs/AGENTS.md` (docs test requirements, from the old Cursor
rule)
- `studio-shortcuts` skill (from the old Copilot instruction file,
verified against the current registry)
- `ask-the-docs/reference/graphql-endpoint.md` and
`search-embeddings.md` (from the old Cursor rules, with the missing
resolver/registration/codegen steps filled in)
- Feature-flag measurement section in `telemetry-standards`
**Removed:**
- `.cursor/` (rules folded in as above; skill symlinks no longer needed)
and `.cursorignore`
- `.github/instructions/` (8 files)
- `vercel-composition-patterns/AGENTS.md` – a 946-line verbatim
concatenation of its own `rules/` directory, and a nested `AGENTS.md`
that agents could auto-load as repo instructions
- `edit-the-docs/reference/structure-and-flow.md` – word-for-word copy
of the skill's own Phase 2 text
## To test
- `readlink .claude/skills` → `../.agents/skills`, and `ls
.claude/skills/copywriting/SKILL.md` resolves
- Open a Claude Code session at the repo root and in `apps/studio` – the
imported `AGENTS.md` content should load as before
- `git diff master --stat -M` shows the skill moves as 100% renames
(content unchanged except the listed fixes)
- Spot-check a fixed claim, e.g. `import { toast } from 'sonner'` in
`studio-queries`, or the `logs.all` ESLint rule cited in
`clickhouse-logs-queries/references/codebase-integration.md`
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
- **Documentation**
- Expanded guidance for documentation workflows, GraphQL resources,
search, ClickHouse logs, React forms, Studio testing, shortcuts,
telemetry, accessibility, copywriting, and composition patterns.
- Clarified local testing, linting, build workflows, error handling, and
AI coding agent usage.
- Added contributor guidance for the knowledge base, documentation, and
Studio areas.
- **Chores**
- Consolidated agent instructions and skill references.
- Removed obsolete editor-specific guidance, duplicate links, and
superseded documentation.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
---------
Co-authored-by: Alaister Young <10985857+alaister@users.noreply.github.com>
6.5 KiB
Copilot Code Review Instructions
Review Policy — Read This First
You are a code reviewer for a large TypeScript/Next.js/React monorepo. Your reviews must be low-noise and high-signal. The team acts on fewer than 20% of default Copilot suggestions, so every comment you leave must earn its place.
Confidence Threshold
Only comment when you are >85% confident the issue is a real bug, security vulnerability, or logic error. If you are unsure, do not comment. Silence is better than noise.
What NOT to Comment On
Our CI pipeline already validates the following. Never comment on these topics:
- Formatting or whitespace — Prettier runs on every PR
- Linting issues — ESLint with auto-fix runs on every PR
- Type errors — TypeScript strict-mode typecheck runs on every PR
- Typos or spelling — Automated typo detection runs on every PR
- Missing tests for trivial changes — Handled by topic-specific test instructions
- Import ordering or grouping — Handled by linter
- Naming style preferences (camelCase vs snake_case debates) — Follow existing file conventions
- Accessibility attributes on shadcn/Radix UI components — handled by the primitives; see shadcn/Radix accessibility below
What TO Comment On (Priority Order)
- Logic errors and bugs — Off-by-one, null derefs, wrong conditional, unreachable code, incorrect early returns
- Security vulnerabilities — XSS, SQL injection, auth bypass, secrets in code, unsafe
dangerouslySetInnerHTML - Race conditions and async bugs — Missing
await, unhandled promise rejections, stale closures, effect cleanup issues - Data loss risks — Destructive operations without confirmation, missing error handling on writes
- API contract violations — Wrong HTTP method, missing auth headers, incorrect request/response shapes
Comment Style
- Be advisory, not prescriptive. Use "Consider..." or "This may..." — never demand changes.
- One comment per distinct issue. Do not leave multiple comments about the same underlying problem.
- No self-contradictions. If you suggest a change, do not then flag a problem with your own suggestion.
- Do not comment on individual commits. Review the final state of the PR diff only.
Repo Context
This is a TypeScript/Next.js/React monorepo:
apps/studio/— Supabase Dashboard (primary review target)apps/www/— Marketing siteapps/docs/— Documentationpackages/common/— Shared code including telemetry definitions
Topic-Specific Guidelines
Coding conventions are not duplicated here. Read them from the shared agent instruction files, which apply to every AI tool working in this repo:
AGENTS.md(repo root) — monorepo structure, commands, CI, conventionsapps/studio/AGENTS.md— Studio-specific rules and the task → skill map.agents/skills/*/SKILL.md— the source of truth per topic. Most relevant to review:studio-testing,studio-mock-api-tests,studio-e2e-tests,studio-error-handling,studio-queries,studio-ui-patterns,react-hook-form,telemetry-standards,safe-sql-execution,vercel-composition-patterns,studio-shortcuts,copywriting
When a skill says to flag something, treat it as advisory here — the confidence threshold and comment style above still apply.
shadcn/Radix accessibility
Studio uses shadcn/ui components built on Radix UI primitives (from packages/ui/), which provide ARIA roles, keyboard navigation, focus management, and screen-reader support automatically. Do not flag missing accessibility attributes that the underlying primitive already handles.
| Component | What Radix handles |
|---|---|
Dialog, AlertDialog |
role="dialog", aria-modal, focus trapping, ESC to close |
DropdownMenu, ContextMenu |
role="menu" / role="menuitem", arrow key navigation |
Select |
role="combobox", aria-expanded, keyboard selection |
Tabs |
role="tablist" / role="tab" / role="tabpanel", aria-selected, arrow keys |
Checkbox |
role="checkbox", aria-checked, Space to toggle |
RadioGroup |
role="radio", aria-checked, arrow key navigation |
Switch |
role="switch", aria-checked, keyboard toggle |
Tooltip |
Trigger/content association, show/hide timing |
Accordion, Collapsible |
aria-expanded, Enter/Space to toggle |
Popover, HoverCard |
Focus management, dismiss on ESC |
Slider |
role="slider", aria-valuemin/max/now, arrow keys |
Toggle, ToggleGroup |
aria-pressed, keyboard support |
ScrollArea |
Accessible scrollbar replacement |
NavigationMenu |
role="navigation", keyboard navigation |
Specifically, never flag: missing role on Radix-based components; missing aria-modal on Dialog/AlertDialog; missing aria-expanded on Accordion, Collapsible, Select, or DropdownMenu triggers; missing aria-selected on Tabs; missing aria-checked on Checkbox, RadioGroup, or Switch; missing keyboard handlers on interactive Radix components; missing focus management in dialogs; missing aria-label on DialogClose (it renders <span className="sr-only">Close</span>).
Do flag accessibility issues on:
- Custom interactive elements not using Radix primitives (e.g. a
<div onClick>that should be a<button>) - Icon-only buttons missing an accessible label —
<Button>alone does not add one; usearia-labelor<span className="sr-only"> - Missing
Labelassociation — form inputs should be paired with<Label htmlFor="...">or wrapped in a<Field>component - Images missing
alttext - Color-only state indicators