reader-protocol-pr-review

작성자: automattic

Use when reviewing PRs that touch the Reader's multi-protocol social surfaces (`client/reader/social/`, `client/reader/atmosphere/`, `client/reader/mastodon/`,…

npx skills add https://github.com/automattic/wp-calypso --skill reader-protocol-pr-review

Reader Protocol PR Review

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.

Rubric

For each finding write:

| Severity | File:line | Issue (1-2 sentences) | Suggested fix |
  • Severity tags: blocker (PR can't merge), important (real bug, would cause user-visible issues), nit (cleanup or hardening).
  • File:line: anchor with absolute path or repo-relative path so the comment can be left inline on GitHub. Use 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.
  • In-PR vs follow-up: explicitly call this out. Architectural changes that span multiple slices belong in a follow-up issue. Defensive hardening, missing default arms, etc. are cheap to fold in.
  • Verdict line: 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.

When to dispatch the code-reviewer agent

The superpowers:code-reviewer agent is independent and reads the diff fresh. Dispatch it when:

  • The PR is large (>20 files or >500 lines).
  • The PR shape is structurally similar to a sibling PR you've already reviewed (it'll surface the same recurring smells consistently).
  • You authored adjacent code and want an independent eye.

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.

Reply convention on PR threads

  • No "thanks for the review" — superpowers:receiving-code-review rules apply. State the fix or push back; actions speak.
  • Reply on inline comment threads for inline review comments (gh api repos/{owner}/{repo}/pulls/{pr}/comments/{id}/replies), not as top-level PR comments. The threading matters for context.
  • Top-level comment for review-summary acknowledgement, listing which findings landed in commit X and which are deferred follow-ups (with rationale).
  • No fabricated wp.me shortlinks — never invent a shortlink for a *.wordpress.com URL. See a8c-url-shorthand:a8c-url-shorthand.

Common smells

See references/common-smells.md — checklist of 9+ recurring findings from the recent slice cycle. Walk it before submitting your review.

Cross-pollinating fixes between sibling PRs

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:

git -C /Users/pfefferle/Code/wp-calypso show <fix-commit-on-A> -- <relevant-paths>
git -C /Users/pfefferle/Code/wp-calypso show <branch-of-B>:<relevant-path> | grep <smell>

If yes, apply the fix to B too. Don't wait for the reviewer to file the same finding twice.

File-shape expectations

These are the Reader-protocol files that consistently need attention. Reviewers should check each:

File patternWhat to verify
client/reader/social/components/post-card/{like,repost}-context.tsxLikeAction/RepostAction interface has no dead fields; null-action default mirrors the live shape.
client/reader/social/components/post-card/{like,repost}-button.tsxRenders 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.tsxAlways 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.tserrorMessageFor* switch has a default: arm; trackError includes a logToLogstash call; cid/rkey guards before calling mutate.
packages/api-queries/src/reader-{atmosphere,mastodon}.tsOptimistic 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.tsPath-interpolated wire IDs are encodeURIComponent-wrapped.

Reference

  • 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.

automattic의 다른 스킬

testing-js
automattic
자바스크립트 파일의 구문 오류를 확인하기 위한 지침
setup
automattic
dn CLI가 설치 및 구성되었는지 확인합니다. 사용자가 domain-names 플러그인을 처음 설치할 때나 dn 명령어가 CLI 때문에 실패할 때 사용합니다.
studio-cli
automattic
Studio CLI를 사용하여 로컬 WordPress 사이트, 인증 및 미리보기 사이트를 관리하세요. Studio CLI 명령을 실행하거나 관리해야 할 때 이 스킬을 호출하세요.
dn-info
automattic
등록된 도메인의 상세 정보를 dn CLI를 사용하여 조회합니다. 사용자가 만료일, 네임서버, 연락처 등의 도메인 세부 정보를 확인하려 할 때 사용하세요.
qa
automattic
추출된 WXR 콘텐츠를 원본 소스 사이트와 페이지별로 비교합니다. 누락된 텍스트, 제목, 이미지, 링크를 찾아냅니다. WXR을 패치하거나… 수정하여 해결합니다.
add-skill
automattic
a8c-design 플러그인에 새 스킬을 추가합니다. Claude Code 스킬을 구축했으며 이를 공유 Automattic a8c-design 플러그인에 기여하려는 경우 사용합니다 —…
design-foundations
automattic
해방된 사이트에서 일관된 디자인 기반 JSON을 구축합니다 — 근거 추적과 함께 의미론적 색상/타이포그래피/간격 역할을 포함합니다. 부분 스캐폴드를 사용합니다…
wp-phpstan
automattic
WordPress 프로젝트(플러그인/테마/사이트)에서 PHPStan 정적 분석을 설정, 실행 또는 수정할 때 사용: phpstan.neon 설정, 기준선,…