Part 2 of 3. Stack: #50742 → #50744 → #50743. Review #50742 first. ## Problem Six skills restated style rules inline, so a rule could be corrected in the guide and stay wrong in a skill. `edit-the-docs` alone carried a second copy of the procedure format, the information-type classification rules, and the tables outline example. Two reference files said in their own text that they should be retired once a style guide existed. ## Solution Replace the restatements with pointers to the file that owns each rule. **Retired, as each file asked:** - `style-fallback.md` is deleted. It ended by telling an agent to follow the nearest comparable page, which launders whatever that page happens to do into a rule. The guide's References section replaces it. - `common-pitfalls.md` becomes a pointer, per the note at its own line 94. **Rewired**: `write-the-docs`, `edit-the-docs`, `review-the-docs`, `pm-the-docs`'s checklist, and `drafting-mechanics.md`. Skills cite a specific file rather than the directory, so one file can be loaded instead of the whole guide. `review-the-docs` gains a docs-tooling check for the inverse case: a style rule added to a skill belongs in the guide, with the skill pointing at it. ## Notes for review **`edit-the-docs`' PR 1 / PR 2 boundary is unchanged on purpose.** That split is by kind of diff — PR 1 is inline changes only, nothing moves a line — which is what makes each PR reviewable. The guide's files split by the size of the thing they govern, and the two cut across each other: choosing an admonition is an element decision but an inline diff, and chunking is a page-structure decision but currently applied in PR 1. Forcing them to match would stop PR 1 being a pure inline pass. Dropping the dash-aside rule from `write-the-docs` here lost it entirely, since it had no home in the guide. #50742 restores it in `01-voice-and-tone.md`. I audited the other four rules this PR removes from that checklist; only that one was lost. The skill's document-type list keeps `troubleshooting`, which CodeRabbit flagged as a fifth type not in the guide. The repo has 219 troubleshooting pages and a content-type gate that treats them as authorable, so the gap was in the guide. #50742 now lists five document types. ## Manual testing 1. Run `grep -rn "style-fallback\|apps/docs/WORD_LIST" .agents/skills/` and confirm no matches. 2. Open each rewired skill and confirm every style guide link resolves, including anchors such as `03-page-structure.md#chunking`. 3. Invoke `/edit-the-docs` and confirm it reads the guide rather than restating rules. 4. Run `npx prettier --config prettier.config.mjs --check ".agents/skills/*-the-docs/**/*.md"`. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Updated documentation writing, editing, and review guidance to reference the dedicated style guide for voice, terminology, page structure, and content elements. * Clarified how to classify and organize sections, and expanded style-consistency checks. * Updated related checklists and references to distinguish style guidance from repository contribution instructions. * Consolidated common drafting advice into the style guide and updated the page-type table layout. <!-- end of auto-generated comment: release notes by coderabbit.ai --> ## Stack order This PR moved above the `CONTRIBUTING.md` trim after review. The trim deletes the style sections that seven skill instructions still referenced, so trimming first left those references dangling until this PR landed. Rewiring the skills first removes that intermediate state: the skills point at the guide while `CONTRIBUTING.md` is still whole, and the trim then breaks nothing. --------- Co-authored-by: Nik Richers <nik@validmind.ai>
18 KiB
name, description
| name | description |
|---|---|
| review-the-docs | Review Supabase docs changes locally in your `supabase/supabase` checkout — either an open PR (triage, classify, verify) or your own branch before opening a PR (local self-review). Covers markdown pipeline, MDX content, tutorials, examples, Studio links, and docs tooling. Use when asked to review docs PRs, self-review a draft branch, check who has approved, verify build output, or evaluate supabase/supabase documentation changes. |
Review docs PRs
Local review workflow for supabase/supabase docs changes. Classify first, then follow the matching checklist.
Two modes:
- Open PR review (default) — triage via
gh, checkout, verify, report. Start at Phase 1. - Local self-review — no open PR yet; verify the current branch before opening one. Start at Local self-review.
For implementing docs fixes (Linear tickets, worktrees, platform E2E), use work-linear-issue instead.
Core rules
- Classify before reviewing — path patterns determine which checklist applies.
- Review stacked PRs bottom-up — each PR may base on the previous branch.
- Run verification locally — do not approve from diff alone.
- Compare against
masterwhen the PR claims to fix missing or broken output. - One report per batch — sequential review, consolidated output at the end.
- Separate blockers from nits — type/style notes are suggestions unless output breaks.
Repository layout
| Path | Purpose |
|---|---|
your local supabase/supabase checkout |
Main clone for review checkouts |
apps/docs/content/guides/ |
Source MDX |
apps/docs/internals/ |
Markdown pipeline (generate-guides-markdown.ts, etc.) |
apps/docs/internals/markdown-schema/ |
Component handlers → plain markdown strings |
apps/docs/public/markdown/guides/ |
Generated output (produced by build) |
apps/docs/components/ |
React MDX components |
examples/ |
Tutorial/quickstart apps referenced via $CodeSample |
apps/studio/ |
Dashboard UI; may link to hosted docs |
.agents/skills/ |
In-repo agent skills (canonical; .claude/skills symlinks here) |
Local self-review (no open PR)
Use this on your own branch before opening a PR (checklist Stage 4). No gh pr required.
cd <your supabase/supabase checkout>
# Ensure you're on the feature branch, not master
git branch --show-current
git diff --name-only master...HEAD
- Classify from
git diff --name-only master...HEADusing the Phase 2 table. - Walk the bar in
pm-the-docs's checklist — "What good looks like" and the Self-review checkboxes. - Run type-specific checks from the matching sections below on the current branch (no checkout step). Typical commands:
# Pipeline / schema handler
cd apps/docs && pnpm build:guides-markdown
# inspect public/markdown/guides/ for affected pages
pnpm build:reference-markdown # when reference pipeline changed
- Spot-check frontmatter, internal links, and nav wiring for content changes.
- Offer runnable verification — for content/tutorial PRs with new or changed procedural fenced blocks, ask whether to run
test-the-docs. Prerequisites are class-specific (Docker Compose stack profile for DB/API; examples profile forexample-app). If accepted, include the verification report; if declined or a required prerequisite for that class is missing, record credibledeferredreasons for those artifacts only. Do not reimplement sandbox execution here. - Write a short self-review note (blockers vs nits) suitable to paste into the future PR body under a "Self-review" heading.
Then open the PR and continue with open-PR review if a second pass is needed.
Phase 1 — Triage (read-only)
List PRs
Filter by author, label, or list all open docs PRs:
# By author
gh pr list --repo supabase/supabase --author <github-user> --state open \
--json number,title,url,reviewDecision,latestReviews,changedFiles,additions,deletions,labels
# All open docs-labeled PRs
gh pr list --repo supabase/supabase --state open --label documentation \
--json number,title,url,reviewDecision,latestReviews,author,changedFiles
PRs with empty reviewDecision and no APPROVED review need approval.
Map the stack
gh pr view <number> --repo supabase/supabase \
--json number,title,baseRefName,headRefName,body,files
Stacked series: master → PR A → PR B → PR C. Review and merge bottom-up.
Phase 2 — Classify PR type
Inspect changed files from gh pr view or:
gh pr diff <number> --repo supabase/supabase --name-only
| PR type | Path signals | Primary skill section |
|---|---|---|
| Markdown-schema handler | apps/docs/internals/markdown-schema/, generate-guides-markdown.ts |
Schema handler review |
| Pipeline / internals | apps/docs/internals/ (not just one new handler) |
Pipeline review |
| Content-only MDX | apps/docs/content/** only |
Content review |
| Tutorial / quickstart | apps/docs/content/guides/**/tutorials/, quickstarts/, plus examples/ |
Tutorial review → also work-linear-issue |
| Example app only | examples/** without matching MDX |
Example review |
| Studio ↔ docs links | apps/studio/** |
Studio review |
| Docs UI / components | apps/docs/components/, apps/docs/features/ (no pipeline) |
Component review |
| Docs tooling | .agents/skills/, apps/docs/AGENTS.md, apps/docs/CONTRIBUTING.md, apps/docs/DEVELOPERS.md, apps/docs/style-guide/ |
Docs tooling review |
| Mixed | Multiple path groups above | Run each applicable section; note overlap |
When a PR spans types (e.g. schema handler + component refactor), run all matching sections.
Phase 3 — Sequential local review
Repeat for each PR (bottom of stack first).
Common steps (all PR types)
Checkout and install:
cd <your supabase/supabase checkout>
gh pr checkout <number> --repo supabase/supabase
pnpm install --filter docs... # when node_modules missing or deps changed
CI spot-check:
gh pr checks <number> --repo supabase/supabase
Baseline on master (when PR fixes missing/broken output):
git checkout master
# run type-specific verify command (see sections below)
git checkout - # return to PR branch
Schema handler review
For PRs adding static markdown fallbacks for React MDX components.
Code checks — each handler in apps/docs/internals/markdown-schema/:
| Check | What to verify |
|---|---|
| Data source | Same data/constants as the React component — no duplicated config |
| CJS interop | shared-data via createRequire(import.meta.url) (see SharedData.ts) |
| Local JSON | Direct imports fine for apps/docs/data/ |
| Link prefix | Links use withDocsBasePath |
| SCHEMA wiring | Registered in SCHEMA in generate-guides-markdown.ts |
| Props / shapes | All MDX usages covered — flat arrays and { items: [...] } sections |
| Silent fallbacks | '' for unknown props OK if consistent with existing handlers |
Find usages: rg '<ComponentName' apps/docs/content/
Build and inspect:
cd apps/docs && pnpm build:guides-markdown
# Expect: "Generated N markdown files" where N roughly matches the .mdx count under content/guides/
Inspect public/markdown/guides/ for affected pages:
- Previously blank sections now have lists, tables, or links
- All MDX pages using the component are covered, not just the one in the PR description
- Link format:
/docs/guides/...locally; absolute URLs whenVERCEL_ENV=production
Pipeline review
For AST refactors, link rewriting, reference markdown generation, etc.
cd apps/docs
pnpm build:guides-markdown
pnpm build:reference-markdown # when reference pipeline changed
pnpm test:local:unwatch internals/internal-links.test.ts # when link handling changed (needs local Supabase — see apps/docs/AGENTS.md)
Verify both guides and reference output when generate-reference-markdown.ts or internal-links.ts changed.
Content review
MDX prose, partials, navigation — no pipeline or example changes.
Check the prose against the style guide yourself. No CI or local
check covers style or terminology. CodeRabbit reviews style, terminology, and
structure on apps/docs/content/**/*.mdx, but only once the PR is open.
Check WORD_LIST.md against the finished page last, using the
two-pass protocol in Use with an AI agent: Phrase
groups for the literal term lists, then grep '^### ' WORD_LIST.md and read only the entries matching words on the page. Include terms
the author didn't introduce.
Checklist:
- Voice follows
01-voice-and-tone.md - Section grouping and chunking follow
03-page-structure.md - Components follow
02-elements.md - Terminology matches
WORD_LIST.md - Frontmatter valid (
title,descriptionwhere required) - Internal links resolve (
/docs/guides/..., not broken anchors) $CodeSamplepaths match existing example directories- Admonitions, tabs, and partial includes render sensibly in PR preview
- No accidental whitespace-only or empty sections where components were removed
- Offered
test-the-docsfor new/changed procedural snippets; verification report present or credibledeferredreasons recorded
Compare PR preview URL (from Vercel/deployment comment) against production for visual regressions when layout components are involved.
Tutorial review
Tutorial MDX plus matching example app. Read work-linear-issue for full platform E2E — review is not complete without it when auth flows are involved.
# Example build (from work-linear-issue)
cd examples/<example-dir>
npm install && npm run build
Checklist:
- MDX steps match example code after
pnpm codegen:examples(if$CodeSampleused) - Env var names and Supabase client setup match current
@supabase/ssrpatterns - Example pins catalog versions — no
"latest"for in-repo packages - Offered
test-the-docsfor procedural tutorial steps (ordeferredwith reason) - Platform E2E (when auth involved): SQL migration applied, auth flow walked, profiles verified — see
work-linear-issuePhase 3
Example review
Example-only PRs (or example portion of a tutorial PR).
cd examples/<example-dir>
npm install && npm run build
Checklist:
- Build passes with no type errors
.env.exampledocuments required vars (no secrets committed)- If docs reference this example,
$CodeSamplepaths still valid
Studio review
Dashboard changes linking to docs.
Checklist:
- Links point to hosted docs anchors (e.g.
/guides/auth/auth-email-templates#terminology) - Local-dev-only doc paths not used as the sole link target
- Link text matches the destination section
Component review
React component changes under apps/docs/components/ without a new schema handler.
Checklist:
- No browser-only APIs leaked into build-script imports
- Shared constants extracted cleanly when also consumed by markdown handlers
- Visual behavior unchanged or intentionally improved — check PR screenshots
- If component is used in MDX exported to markdown, confirm a schema handler exists or file an follow-up
Docs tooling review
Agent skills, contributor docs, or skill symlink wiring — no MDX/pipeline changes required.
Checklist:
.agents/skills/is the canonical location — no skill content added anywhere else.claude/skillsis still a single Git symlink to../.agents/skills— no per-skill symlinks or copies under.claude/- Cross-skill links resolve: relative for in-repo skills; absolute
docs-agent-skillsURLs only for skills that remain in that private repo - No personal vault paths, Obsidian references, or private-process-only instructions
apps/docs/CONTRIBUTING.md/DEVELOPERS.md/AGENTS.mdpointers match skill names and checklist stages- A style rule added to a skill belongs in
apps/docs/style-guide/instead, with the skill pointing at it - Reference files under a skill stay near the ~250-line guideline (split if bloated)
# Symlink smoke check
test "$(readlink .claude/skills)" = "../.agents/skills"
test -f .claude/skills/<skill-name>/SKILL.md
# Leftover internal refs
rg -n 'Obsidian|pm-the-docs-full|Priorities/' .agents/skills
Phase 4 — Review report
One consolidated report after all PRs are reviewed.
Report template
# PR review report — <author, label, or topic>
Reviewed locally in a `supabase/supabase` checkout.
**Stack order:** master → #NNN → … (if applicable)
---
## [#NNN — Title](https://github.com/supabase/supabase/pull/NNN)
**Type:** schema handler | pipeline | content | tutorial | example | studio | component | docs tooling | mixed
**Verdict:** Approve | Approve with nits | Request changes
| Check | Result |
| ------------------ | ------ |
| PR type checks | … |
| Build / lint | … |
| Baseline vs master | … |
| CI | … |
**Verified:**
- …
**Notes:**
- …
---
## Summary
| PR | Type | Recommendation | Blockers |
| ---- | ---- | -------------- | -------- |
| #NNN | … | … | … |
**Merge order:** bottom-up after approval (if stacked).
Verdict guidance
| Verdict | When |
|---|---|
| Approve | All type-specific checks pass; output correct |
| Approve with nits | Works correctly; minor type/style/docs nits only |
| Request changes | Build/lint fails, broken links, wrong data, missing coverage, or failed platform E2E |
Inline review comments
https://github.com/supabase/supabase/pull/<number>/files#diff-<blob-sha>R<line>
gh api repos/supabase/supabase/pulls/<number>/files \
--jq '.[] | select(.filename | endswith("<file>")) | .sha'
Include concrete evidence — JSON line numbers, before/after output snippets, failing command output.
Handler pattern reference
// apps/docs/internals/markdown-schema/Example.ts
import { withDocsBasePath } from '../internal-links'
export const Example = ({ props }: { props: Record<string, unknown> }): string => {
// Same data source as React component → plain markdown string
}
Parallel work
Independent PRs: subagents can review in separate worktrees. Stacked series: review sequentially on one clone, bottom-up.
Output checklist
- Approval status fetched for all requested PRs
- Each PR classified by type
- Stack order documented (if applicable)
- Type-specific verification run locally (not just schema handler defaults)
- Master baseline compared when PR fixes missing output
- Platform E2E noted for tutorial/auth PRs (or deferred with reason)
- Verdict and blockers stated per PR
- Merge order recommended
- Inline comment links provided for nits