Content
78%Weight 40%Scale 1-5Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.
A dense, highly actionable migration guide with excellent classification-first structure, real API-level code, and a useful final checklist. Its main weaknesses are a dangling reference.md link (the only progressive-disclosure mechanism), placeholder-ellipse code snippets, and no explicit post-migration verification step.
Suggestions
Ship reference.md in the bundle (or remove the link) so 'Detailed patterns and rationale: reference.md' resolves — currently the skill's only external reference is a dead path.
Add an explicit validation step to the workflow, e.g. 'After removing a slice/provider, grep for remaining dispatches/consumers and run the typecheck/build' — this would also lift workflow_clarity to the top anchor.
Replace the ellipsis placeholders in the React Query example (`useQuery(...)`, `useMemo(() => ({ ... })`)`) with a complete runnable snippet, and fix the malformed nuqs 'Before' example (`const [page, setPage] = useDispatch(...)`).
| Dimension | Reasoning | Score |
|---|---|---|
Conciseness | The body is lean and assumes Claude's competence — it never explains what Redux, React Query, nuqs, or Zustand are, and every section consists of directives, constraints ("Keep payload small (e.g. Chrome ~2k chars)", "up to ~1.5–2MB"), or code rather than background. Re-reading anchor 4 ("minor instances of over-explanation"), nothing here explains concepts Claude already knows; the classification table and checklist each earn their tokens. | 5 / 5 |
Actionability | Concrete, near-executable guidance throughout: exact APIs (`useQueryState('param', parseAsString.withDefault('…'))`, `useDashboardStore(state => state.isDashboardLocked)`), named plugin config (`plugin:zustand-rules/recommended`), and cache options (`refetchOnMount: false`, `staleTime`). Not anchor 5 because several snippets contain ellipsis placeholders (`useQuery(...)`, `useMemo(() => ({ ... })`)`) and the nuqs "Before" example is malformed pseudocode (`const [page, setPage] = useDispatch(...)`), so examples are not fully copy-paste ready. | 4 / 5 |
Workflow Clarity | Clear sequence: classify state first ("Before changing code, classify what the state represents"), then per-target migration steps, then a consolidating checklist including removal items ("Remove old Redux slices / Context providers and all dispatches/consumers"). Not anchor 5 because there is no explicit validation step after migration (e.g., typecheck or grep for remaining dispatches/usages); the checklist is a to-do list rather than a verify-fix-retry loop. The destructive/batch cap is not applied since this is git-recoverable code refactoring, not the document/DB/batch category the rubric names. | 4 / 5 |
Progressive Disclosure | The body is well-sectioned and keeps SKILL.md at overview size, and it signals deeper material ("Detailed patterns and rationale: [reference.md](reference.md)"), but that file does not exist in the bundle — the link dangles, so the promised detail is unreachable (the linked project rule `.claude/rules/frontend-state.md` is likewise absent). Per the guideline to score against the actual bundle structure, this lands at anchor 3 (references present but not usable) rather than 4. | 3 / 5 |
Total | 16 / 20 Passed |