npx skills add ...
npx skills add automattic/wp-calypso --skill reader-protocol-pr-review
npx skills add automattic/wp-calypso --skill reader-protocol-pr-review
Use when reviewing PRs that touch the Reader's multi-protocol social surfaces (`client/reader/social/`, `client/reader/atmosphere/`, `client/reader/mastodon/`, `packages/api-core/src/reader-{atmosphere,mastodon}/`, `packages/api-queries/src/reader-{atmosphere,mastodon}.ts`). Captures the review rubric + the recurring smells from the CM-625 / CM-658 / CM-660 / CM-662 slice cycle.
Use this when reviewing a PR in the Reader's social/atmosphere/mastodon territory — slice work for the protocol-adapter pattern, optimistic mutations, or the shared post-card components. The recurring findings are concrete enough to be a checklist; the rubric below comes from the CM-658/CM-660 cycle where the same issues appeared in both PRs.
For each finding write:
blocker (PR can't merge), important (real bug, would cause user-visible issues), nit (cleanup or hardening).gh api repos/Automattic/wp-calypso/pulls/{n}/comments to post inline replies (not top-level PR comments) when the line is in the diff.Approve / Request changes / Needs more discussion. If approve, list any follow-ups worth filing as separate tickets.Cap reviews at ~700 words. The reviewer's signal-to-noise ratio matters — detailed prose drowns out the actual blockers.
code-reviewer agentThe superpowers:code-reviewer agent is independent and reads the diff fresh. Dispatch it when:
Brief the agent with: PR number, branch path, what the PR does, and a list of recurring smells from references/common-smells.md to specifically check. The agent's response is the body of your review.
superpowers:receiving-code-review rules apply. State the fix or push back; actions speak.gh api repos/{owner}/{repo}/pulls/{pr}/comments/{id}/replies), not as top-level PR comments. The threading matters for context.*.wordpress.com URL. See a8c-url-shorthand:a8c-url-shorthand.See references/common-smells.md — checklist of 9+ recurring findings from the recent slice cycle. Walk it before submitting your review.
When two slice PRs are open simultaneously (CM-658 + CM-660 was the canonical case), review feedback on one almost always applies to the other. The architectural patterns mirror each other.
After landing a fix on PR A, check whether PR B has the same issue:
If yes, apply the fix to B too. Don't wait for the reviewer to file the same finding twice.
These are the Reader-protocol files that consistently need attention. Reviewers should check each:
| File pattern | What to verify |
|---|---|
client/reader/social/components/post-card/{like,repost}-context.tsx | LikeAction/RepostAction interface has no dead fields; null-action default mirrors the live shape. |
client/reader/social/components/post-card/{like,repost}-button.tsx | Renders a static-count fallback when !action.supported — not null. The fallback lives inside the button, not in <PostCardCounts>. |
client/reader/social/components/post-card/post-card-counts.tsx | Always renders <LikeButton> / <RepostButton> (no connectionId ternary for the like/repost slot — the button handles supported / unsupported internally). |
client/reader/{atmosphere,mastodon}/use-{protocol}-{like,repost}-action.ts | errorMessageFor* switch has a default: arm; trackError includes a logToLogstash call; cid/rkey guards before calling mutate. |
packages/api-queries/src/reader-{atmosphere,mastodon}.ts | Optimistic patcher is connection-scoped; cancelQueries is wrapped in try/catch in onMutate; mutation factories take connectionId: number, not QueryClient. |
packages/api-core/src/reader-{atmosphere,mastodon}/fetchers.ts | Path-interpolated wire IDs are encodeURIComponent-wrapped. |
references/common-smells.md — the smell catalog, with concrete examples from the slice cycle.client/reader/social/AGENTS.md — describes the provider-adapter pattern + naming convention.client/reader/AGENTS.md § "Optimistic-mutation hardening checklist" — engineering-side pre-flight for the patterns this skill reviews.