{"id":"6a1f63b5-d692-49e1-b4db-53246785fb34","shortId":"fY7bau","kind":"skill","title":"review-code","tagline":"Review code architecture (SOLID, design patterns, package design, coupling, testability), Go best practices, and protobuf/API design using manual analysis and static analysis tools (gocyclo, staticcheck, buf). Use when the user asks for a code review, architecture review, Go revi","description":"# Code Review\n\nStructured code review covering architecture, Go best practices, and protobuf/API design. Produces actionable, prioritized findings with code-level references.\n\n## Workflow\n\n### 1. Scope and explore\n\n- Confirm scope with the user: full codebase, specific packages/directories, changed files only (PR or branch diff), or specific concern.\n- **Resolve scope to a file/package list.** Based on what the user requested:\n  - **Changed files (PR or branch):** Run `git diff --name-only --diff-filter=d <base>...HEAD` to get changed files (default `<base>` is `main`). If the user references a PR number, use `gh pr diff <number> --name-only` instead. Filter to relevant file types (`.go`, `.proto`). Derive affected Go packages from the file paths (unique parent directories containing `.go` files).\n  - **Explicit paths/packages:** The user may specify directories (e.g. `internal/auth/`), Go package patterns (e.g. `./internal/auth/...`), or individual files. When given a directory or package pattern, include all files under it. Derive Go package paths for static analysis tool invocations.\n  - **Full codebase:** No filtering. Explore everything (default).\n- **Pass the resolved scope** (file list and derived package paths) to all exploration and investigation subagents so they only read and analyze scoped files. Static analysis tools receive package paths; manual review subagents receive the file list.\n- Explore the scoped code using parallel subagents (`subagent_type=\"explore\"`). Read all relevant source files, paying attention to package structure, type definitions, interfaces, import graphs, `.go` files, `.proto` files, and test files.\n- **Classify the scope** for change-aware subagents:\n  - `has_changes`: true when scope is \"changed files (PR or branch)\", **or** when scope is \"explicit paths\" and those paths have a diff against the base ref (run `git diff --name-only --diff-filter=d <base>...HEAD -- <paths>` to check; default base is `main`). False for full-codebase reviews with no diff baseline. When true, derive the **changed file list** (intersection of scoped files and files with diffs) and carry the **base ref** forward for subagents that need them.\n- Determine which subagents are applicable:\n  - **Architecture and Design**: applicable if code files (`.go`, `.rs`, `.ts`, `.tsx`, `.js`, `.jsx`, `.swift`, `.kt`, `.kts`, `.py`, `.rb`) exist in scope\n  - **Go Best Practices**: applicable if `.go` files exist in scope\n  - **Protobuf and API Design**: applicable if `.proto` files exist in scope\n  - **Go Static Analysis**: applicable if `.go` files exist in scope\n  - **Protobuf Linting**: applicable if `.proto` files exist in scope\n  - **Regression History**: applicable if code files exist in scope and `has_changes` is true\n  - **Conformance Check**: applicable if code files exist in scope (lightweight mode by default; full mode when `conformance_mode` is `full`)\n\n### 2. Launch investigation subagents in parallel\n\nLaunch applicable subagents concurrently using the Task tool (max 4 at a time; if more than 4 are applicable, launch 4 first and the remaining after one completes). Each subagent is `subagent_type=\"generalPurpose\"`, `model: sonnet` by default (per `subagent-model-routing`), except Subagent A which uses `model: opus` (see below).\n\nEvery investigation subagent must check each finding against existing documentation: TODO comments, README notes, FIXME/HACK/XXX comments, and issue tracker references. Report tracked findings but mark them accordingly.\n\n**Subagent A. Architecture and Design Principles** (`subagent_type=\"generalPurpose\"`, `model: opus` per `subagent-model-routing` — always on; SOLID/DIP analysis requires architecture-level reasoning, requires code files)\n\nPrompt the subagent to:\n- Read all in-scope source files.\n- Analyze against all 5 SOLID principles, GoF design pattern usage, package cohesion/coupling, minimal-changes alignment, and testability indicators (see [reference-architecture.md](reference-architecture.md)).\n- Check design pattern usage: verify canonical naming, flag pattern anti-patterns (singletons via globals, forced patterns, pattern names without the pattern). Flag code that implements a recognizable pattern but doesn't use the canonical name.\n- Apply the minimal-changes lens: flag speculative abstractions, premature generalization, and over-engineering.\n- Analyze dependency graphs, import structure, and circular dependencies.\n- Check interface placement: interfaces should be defined in the consumer package, not the implementor.\n- Apply the testing-philosophy lens: flag concrete dependencies that should use interfaces for DI, mock-heavy test setups indicating tight coupling, and tests making real calls to external services.\n- For each finding, search nearby code and project documentation for existing TODOs or notes.\n- Return findings using the **per-category findings** template with `ARCH-` prefixed IDs for design/SOLID findings and `DEP-` prefixed IDs for dependency/testability findings.\n- Every finding must include specific file paths, line numbers or function names, a severity rating (CRITICAL / HIGH / MEDIUM / LOW), and tracking status.\n\n**Subagent B. Go Best Practices** (`subagent_type=\"generalPurpose\"`, requires `.go` files)\n\nPrompt the subagent to:\n- Read all in-scope `.go` source files.\n- Analyze against Go code review comments, Go proverbs, and Go best practices (see [reference-go.md](reference-go.md)).\n- For each finding, search nearby code and project documentation for existing TODOs or notes.\n- Return findings using the **per-category findings** template with `GO-` prefixed IDs.\n- Every finding must include specific file paths, line numbers or function names, a severity rating (CRITICAL / HIGH / MEDIUM / LOW), and tracking status.\n\n**Subagent C. Protobuf and API Design** (`subagent_type=\"generalPurpose\"`, requires `.proto` files)\n\nPrompt the subagent to:\n- Read all in-scope `.proto` files and any generated code or API-related source.\n- Analyze against protobuf best practices and AEP rules (see [reference-protobuf.md](reference-protobuf.md)).\n- For each finding, search nearby code and project documentation for existing TODOs or notes.\n- Return findings using the **per-category findings** template with `PB-` prefixed IDs.\n- Every finding must include specific file paths, line numbers or function names, a severity rating (CRITICAL / HIGH / MEDIUM / LOW), and tracking status.\n\n**Subagent D. Go Static Analysis** (`subagent_type=\"generalPurpose\"`, requires `.go` files)\n\nPrompt the subagent to run all 6 automated Go analysis tools via **parallel Shell calls** (launch all concurrently, then collect results) and report findings with `SA-` prefixed IDs. In each command below, replace `./...` with the resolved package paths when scope is narrowed (e.g. `./internal/auth/...`). Use `./...` only for full-codebase scope.\n- **gocyclo**: `go run github.com/fzipp/gocyclo/cmd/gocyclo@latest -over 12 -ignore \"_test|vendor\" ./...`. Cyclomatic complexity scan. Include each flagged function with its complexity score and refactoring guidance.\n- **staticcheck**: `go run honnef.co/go/tools/cmd/staticcheck@latest ./...`. Bugs (SA*), simplifications (S*), dead code, deprecated API usage.\n- **errcheck**: `go run github.com/kisielk/errcheck@latest ./...`. Unchecked error return values.\n- **nilaway**: `go run go.uber.org/nilaway/cmd/nilaway@latest ./...`. Nil pointer dereference detection via type-flow inference.\n- **exhaustive**: `go run github.com/nishanths/exhaustive/cmd/exhaustive@latest ./...`. Non-exhaustive enum switch statements and map literal keys.\n- **deadcode**: `go run golang.org/x/tools/cmd/deadcode@latest -filter=$(go list -m) ./...`. Unreachable functions via call graph analysis.\n- **revive**: if a `.golangci.yml` enables revive, run `go run github.com/mgechev/revive@latest ./...` with the project's revive config. If no revive config is found, skip and note in Tool Availability.\n- If a tool fails, skip it but note why in a **Tool Availability** section.\n- For each finding, search nearby code and project documentation for existing TODOs or notes.\n- Return findings using the **per-category findings** template with `SA-` prefixed IDs.\n\n**Subagent E. Protobuf Linting** (`subagent_type=\"generalPurpose\"`, requires `.proto` files)\n\nPrompt the subagent to run automated protobuf analysis tools via Shell and report findings with `PBL-` prefixed IDs:\n- Check if `buf` is on PATH (`which buf`). If available, run `buf lint` and `buf breaking --against .git#branch=main` via **parallel Shell calls**. When scope is narrowed, pass `--path <dir>` for each directory containing in-scope `.proto` files. Include diagnostics as findings. If `buf` is not available or the repo has no git history for the breaking check, note in Tool Availability and continue.\n- Include a **Tool Availability** section listing each tool's status (ran / skipped + reason).\n- For each finding, search nearby code and project documentation for existing TODOs or notes.\n- Return findings using the **per-category findings** template with `PBL-` prefixed IDs.\n\n**Subagent F. Regression History Analysis** (`subagent_type=\"generalPurpose\"`, requires code files and `has_changes`)\n\nPrompt the subagent to:\n- Receive the list of changed files and the base ref.\n- For each changed file, run `git log -n 200 --oneline --all -- <file>` to get recent commit history. Filter commits whose messages match regression/bug-fix signals: keywords like `fix`, `bug`, `revert`, `regression`, `hotfix`, `patch`, `CVE`, `workaround`; conventional-commit prefixes like `fix:`, `fix(...):`; revert commits (`Revert \"...\"`).\n- For each matching historical commit, run `git show <commit> -- <file>` to retrieve the diff of that fix.\n- Retrieve the current diff for the file (`git diff <base>...HEAD -- <file>`).\n- Analyze whether the current changes overlap with or undo the historical fix, specifically whether modified/deleted lines or logic reversals touch the same code regions as a prior fix.\n- **Test removal and modification detection**: examine the current diff for deleted, gutted, or weakened test functions, test cases, or test files. Flag removal of test coverage and changes that relax assertions (e.g. removing checks, loosening expected values, commenting out assertions, reducing test case coverage). Pay extra attention to tests that were added as part of a historical bug fix (cross-reference with the historical commit diffs). Legitimate test refactors (e.g. moving tests to a new file, renaming, updating assertions to match intentional behavior changes) should not be flagged; look for the test logic reappearing elsewhere before reporting.\n- For each potential regression reintroduction or test coverage reduction, search nearby code for TODO/FIXME/HACK/XXX comments or issue references.\n- Return findings using the **per-category findings** template with `REG-` prefixed IDs.\n- Every finding must include the historical fix commit hash and message (for regression reintroductions), the file and line region affected, why the current change appears to unwind the fix or reduce test coverage, a severity rating (CRITICAL / HIGH / MEDIUM / LOW), and tracking status.\n\n**Subagent G. Conformance Check** (`subagent_type=\"generalPurpose\"`, requires code files)\n\nPrompt the subagent to:\n- Load explicit conformance rules from: REVIEW.md (if provided by review-all or present at repo root), CLAUDE.md (if present at repo root), AGENTS.md (if present at repo root), and all files in `.claude/rules/` (if directory exists). These are the **explicit rules**.\n- Determine conformance mode:\n  - **Lightweight** (default, or when `conformance_mode` is `lightweight`): For each in-scope file, read sibling files in the same package to infer local patterns. Require at least 3 sibling files showing the same pattern before flagging a deviation. Check whether the in-scope file conforms to both explicit rules and inferred local patterns.\n  - **Full** (when `conformance_mode` is `full`): If `REVIEW_DIR` was provided by the review-all orchestrator, read `${REVIEW_DIR}/PATTERNS.md`. Otherwise, find the most recent patterns file (`ls -t reviews/*/PATTERNS.md 2>/dev/null | head -1`); if none exists, run `/discover-patterns` first. Check all in-scope files against both explicit rules and the discovered patterns.\n- When `has_changes` is true (diff mode): focus findings on changed/added lines only. For each deviation, reference the established pattern with an exemplar.\n- When `has_changes` is false (full mode): identify outlier files/packages that deviate from the majority pattern.\n- For each finding, search nearby code for TODOs or notes.\n- Return findings using the **per-category findings** template with `CONF-` prefixed IDs.\n- Every finding must include: the pattern being violated, an exemplar of the correct pattern (file:line), the violating code (file:line), and tracking status.\n- Severity mapping:\n  - CRITICAL: explicit rule violation (from REVIEW.md, CLAUDE.md, AGENTS.md, or `.claude/rules/`)\n  - HIGH: deviation from ESTABLISHED pattern (>80% conformance)\n  - MEDIUM: deviation from EMERGING pattern (50-80% conformance)\n\n### 3. Summarize\n\nAfter all subagents complete, deduplicate overlapping findings, produce a consolidated table ordered by severity, and recommend fix order.\n\n### 4. Present results\n\nResolve the review output directory (skip if `REVIEW_DIR` was provided by the review-all orchestrator):\n\n```sh\nREVIEW_DATE=$(date +%Y-%m-%d)\nREVIEW_DIR=\"reviews/${REVIEW_DATE}\"\nif [ -d \"$REVIEW_DIR\" ]; then REVIEW_DIR=\"reviews/${REVIEW_DATE}-$(date +%H%M)\"; fi\nmkdir -p \"$REVIEW_DIR\"\n```\n\nCapture run metadata (see [Run metadata header](#run-metadata-header) below) and prepend the rendered block to `${REVIEW_DIR}/CODE-REVIEW.md`.\n\nWrite the output to `${REVIEW_DIR}/CODE-REVIEW.md`, structured as:\n1. Run metadata header\n2. Tool availability summary\n3. Consolidated findings table (with tracking status inline)\n4. Recommended fix order\n\nPresent the report to the user.\n\n---\n\n## Run metadata header\n\nCapture once near `REVIEW_DIR` resolution and prepend the rendered block to the output document:\n\n```sh\nRUN_DATETIME=$(date -u +\"%Y-%m-%d %H:%M UTC\")\nGIT_BRANCH=$(git rev-parse --abbrev-ref HEAD)\nGIT_COMMIT=$(git rev-parse --short HEAD)\nGIT_COMMIT_FULL=$(git rev-parse HEAD)\nGIT_SUBJECT=$(git log -1 --pretty=%s)\n# When scope is diff-based, also: BASE_REF=<base>; BASE_COMMIT=$(git rev-parse --short \"$BASE_REF\")\n```\n\nHeader template (placed at the top of the output `.md`, before the H1 title):\n\n```markdown\n> **Run:** {RUN_DATETIME}\n> **Branch:** {GIT_BRANCH} @ {GIT_COMMIT} (`{GIT_COMMIT_FULL}`)\n> **Subject:** {GIT_SUBJECT}\n> **Base:** {BASE_REF} @ {BASE_COMMIT}   <!-- omit when scope is not diff-based -->\n> **Scope:** {scope description}\n```\n\n---\n\n## Finding link wrapping (PR mode)\n\nWhen the review is scoped to a GitHub PR (`pr_url` is provided by the caller, or, when run standalone, `gh pr view --json url -q .url 2>/dev/null` returns one), wrap every `path:line` reference inside the finding tables below as a Markdown link:\n\n```sh\n~/.claude/scripts/pr-deeplink.sh \"$pr_url\" <path> <line>\n# pr_url set   → [path:line](https://github.com/.../pull/N/files#diff-<hash>R<line>)\n# pr_url empty → path:line   (plain text, unchanged)\n```\n\nThe display text stays `path:line` so plain and linked tables look identical; only the URL goes in the link target. Pass `L` as the fourth argument for findings about removed code (default is `R`). Omit `<line>` for file-level findings to get a file-anchor link. Apply the same wrapping to `path:line` references inside the Tracked column (e.g. `TODO in foo.go:42`). Findings themselves follow `terse-comments`: concrete fix, optional `bug:`/`risk:`/`nit:`/`unsure:` prefix, no praise or restating the diff.\n\n---\n\n## Output Templates\n\n### Per-category findings\n\n```markdown\n| # | Finding | Severity | Tracked |\n|---|---------|----------|---------|\n| ARCH1 | **Description.** Specific code reference (file:line). Explanation. | HIGH | — |\n| DEP1 | Description with code reference. | MEDIUM | TODO in file:line |\n| GO1 | Description with code reference. | HIGH | — |\n| PB1 | Description with code reference. | MEDIUM | — |\n| SA1 | Description with code reference. | LOW | — |\n| PBL1 | Description with code reference. | LOW | — |\n| REG1 | Description with code reference and historical commit. | HIGH | — |\n| CONF1 | Description with pattern exemplar and violating code. | MEDIUM | — |\n```\n\n### Consolidated findings\n\n```markdown\n| Severity | ID | Finding | Source | Tracked |\n|----------|----|---------|--------|---------|\n| HIGH | 1 | Description with code references | ARCH1, DEP3 | — |\n| HIGH | 2 | Description with code references | REG1 | — |\n| MEDIUM | 3 | Description with code references | GO5, SA2 | TODO in file:line |\n| MEDIUM | 4 | Description with code references | CONF1, CONF2 | — |\n```\n\n**Tracked column values:** Use `—` for new findings. For already-captured findings: `TODO in file:line`, `FIXME in file:line`, `README`, `#123` (issue reference), etc.\n\n### Re-evaluation table (for follow-up reviews)\n\n```markdown\n| Finding | Status | What Changed |\n|---------|--------|--------------|\n| ~~1. Description~~ | FIXED | Brief explanation of the fix |\n| 2. Description | Still applicable | No changes |\n```\n\n---\n\n## Guidelines\n\n- Search the organization's codebase (Sourcegraph, GitHub) for existing patterns before recommending changes.\n- Include effort estimates to help prioritize implementation.\n- When the user asks for a follow-up review, find the most recent review directory (`ls -d reviews/*/ 2>/dev/null | sort | tail -1`) containing `CODE-REVIEW.md`, re-evaluate all prior findings, and update with the re-evaluation table appended.\n- For detailed checklists, see [reference-architecture.md](reference-architecture.md), [reference-go.md](reference-go.md), and [reference-protobuf.md](reference-protobuf.md).\n- For documentation quality (doc comments, examples, README), see **review-documentation**.\n- **REVIEW.md integration**: If a `REVIEW.md` context section was provided by the review-all orchestrator (or exists at the repository root when running standalone), treat its rules as additional review criteria. \"Always check\" items are HIGH severity; domain-specific items (Go conventions, Protobuf & API) are MEDIUM severity. \"Skip\" patterns exclude matching files from review scope.\n- Findings must cite probed evidence (`path:line`, grep output, command result), not pattern-matched suspicion. Per `~/.claude/rules/probe-not-assume.md`.","tags":["review","code","skill","issue","paultyng","agent-skills","ai-tools","claude-code","cursor","dotfiles"],"capabilities":["skill","source-paultyng","skill-review-code","topic-agent-skills","topic-ai-tools","topic-claude-code","topic-cursor","topic-dotfiles"],"categories":["skill-issue"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/paultyng/skill-issue/review-code","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add paultyng/skill-issue","source_repo":"https://github.com/paultyng/skill-issue","install_from":"skills.sh"}},"qualityScore":"0.454","qualityRationale":"deterministic score 0.45 from registry signals: · indexed on github topic:agent-skills · 8 github stars · SKILL.md body (18,570 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:09:01.687Z","embedding":null,"createdAt":"2026-05-18T13:21:26.919Z","updatedAt":"2026-05-18T19:09:01.687Z","lastSeenAt":"2026-05-18T19:09:01.687Z","tsv":"'-1':1758,2077,2501 '-80':1890 '/.../pull/n/files#diff-':2196 '/.claude/rules/probe-not-assume.md':2614 '/.claude/scripts/pr-deeplink.sh':2186 '/code-review.md':1982,1989 '/dev/null':1756,2168,2498 '/discover-patterns':1763 '/fzipp/gocyclo/cmd/gocyclo@latest':1017 '/go/tools/cmd/staticcheck@latest':1042 '/internal/auth':173,1004 '/kisielk/errcheck@latest':1057 '/mgechev/revive@latest':1120 '/nilaway/cmd/nilaway@latest':1067 '/nishanths/exhaustive/cmd/exhaustive@latest':1082 '/patterns.md':1743,1754 '/x/tools/cmd/deadcode@latest':1098 '1':66,1992,2370,2443 '12':1019 '123':2425 '2':462,1755,1996,2167,2378,2451,2497 '200':1349 '3':1696,1892,2000,2385 '4':477,484,488,1912,2008,2397 '5':589 '50':1889 '6':967 '80':1882 'abbrev':2054 'abbrev-ref':2053 'abstract':652 'accord':546 'action':57 'ad':1488 'addit':2569 'aep':896 'affect':147,1585 'agents.md':1646,1874 'align':601 'alreadi':2413 'already-captur':2412 'also':2086 'alway':563,2572 'analysi':22,25,195,230,411,566,954,970,1108,1197,1317 'analyz':226,586,659,794,890,1409 'anchor':2252 'anti':618 'anti-pattern':617 'api':400,862,887,1050,2585 'api-rel':886 'appear':1590 'append':2518 'appli':644,681,2254 'applic':366,370,391,402,412,421,430,444,469,486,2454 'arch':736 'arch1':2300,2375 'architectur':6,39,49,367,549,569 'architecture-level':568 'argument':2232 'ask':34,2481 'assert':1467,1476,1516 'attent':258,1483 'autom':968,1195 'avail':1138,1151,1217,1255,1270,1276,1998 'awar':280 'b':772 'base':95,307,323,354,1339,2085,2087,2089,2096,2127,2128,2130 'baselin':335 'behavior':1520 'best':15,51,389,774,804,893 'block':1978,2031 'branch':84,105,292,1226,2048,2116,2118 'break':1223,1265 'brief':2446 'buf':29,1210,1215,1219,1222,1252 'bug':1043,1367,1494,2279 'c':859 'call':708,975,1106,1231 'caller':2155 'canon':613,642 'captur':1962,2021,2414 'carri':352 'case':1454,1479 'categori':732,829,921,1173,1306,1559,1834,2294 'chang':79,101,119,279,283,288,340,439,600,648,1326,1335,1343,1413,1464,1521,1589,1781,1804,2442,2456,2470 'change-awar':278 'changed/added':1789 'check':321,443,524,608,667,1208,1266,1470,1612,1707,1765,2573 'checklist':2521 'circular':665 'cite':2599 'classifi':274 'claude.md':1640,1873 'claude/rules':1656,1876 'code':3,5,37,43,46,62,245,372,432,446,573,631,717,797,814,884,906,1048,1158,1291,1322,1431,1546,1617,1823,1859,2237,2303,2312,2322,2328,2334,2340,2346,2359,2373,2381,2388,2400 'code-level':61 'code-review.md':2503 'codebas':76,199,330,1010,2462 'cohesion/coupling':597 'collect':980 'column':2265,2405 'command':991,2606 'comment':531,535,799,1474,1549,2275,2534 'commit':1355,1358,1376,1382,1388,1502,1573,2058,2066,2090,2120,2122,2131,2350 'complet':495,1897 'complex':1024,1032 'concern':88 'concret':688,2276 'concurr':471,978 'conf':1838 'conf1':2352,2402 'conf2':2403 'config':1126,1130 'confirm':70 'conform':442,458,1611,1625,1666,1672,1714,1725,1883,1891 'consolid':1903,2001,2361 'consum':676 'contain':157,1241,2502 'context':2546 'continu':1272 'convent':1375,2583 'conventional-commit':1374 'correct':1853 'coupl':12,703 'cover':48 'coverag':1462,1480,1542,1598 'criteria':2571 'critic':764,851,943,1602,1867 'cross':1497 'cross-refer':1496 'current':1401,1412,1444,1588 'cve':1372 'cyclomat':1023 'd':115,318,951,1938,1945,2043,2495 'date':1934,1935,1943,1953,1954,2039 'datetim':2038,2115 'dead':1047 'deadcod':1093 'dedupl':1898 'default':121,204,322,454,505,1669,2238 'defin':673 'definit':263 'delet':1447 'dep':743 'dep1':2309 'dep3':2376 'depend':660,666,689 'dependency/testability':747 'deprec':1049 'derefer':1070 'deriv':146,189,212,338 'descript':2134,2301,2310,2320,2326,2332,2338,2344,2353,2371,2379,2386,2398,2444,2452 'design':8,11,19,55,369,401,551,593,609,863 'design/solid':740 'detail':2520 'detect':1071,1441 'determin':362,1665 'deviat':1706,1794,1813,1878,1885 'di':695 'diagnost':1248 'diff':85,108,113,134,304,311,316,334,350,1395,1402,1407,1445,1503,1784,2084,2289 'diff-bas':2083 'diff-filt':112,315 'dir':1731,1742,1923,1940,1947,1950,1961,1981,1988,2025 'directori':156,166,180,1240,1658,1919,2493 'discov':1777 'display':2207 'doc':2533 'document':529,720,817,909,1161,1294,2035,2531,2540 'doesn':638 'domain':2579 'domain-specif':2578 'e':1181 'e.g':167,172,1003,1468,1507,2266 'effort':2472 'elsewher':1532 'emerg':1887 'empti':2200 'enabl':1113 'engin':658 'enum':1086 'errcheck':1052 'error':1059 'establish':1797,1880 'estim':2473 'etc':2428 'evalu':2431,2506,2516 'everi':520,749,836,928,1566,1841,2172 'everyth':203 'evid':2601 'examin':1442 'exampl':2535 'except':511 'exclud':2591 'exemplar':1801,1850,2356 'exhaust':1077,1085 'exist':385,395,406,416,425,434,448,528,722,819,911,1163,1296,1659,1761,2466,2557 'expect':1472 'explan':2307,2447 'explicit':160,297,1624,1663,1717,1773,1868 'explor':69,202,217,242,251 'extern':710 'extra':1482 'f':1314 'fail':1142 'fals':326,1806 'fi':1957 'file':80,102,120,142,152,159,176,186,209,228,240,256,268,270,273,289,341,346,348,373,394,405,415,424,433,447,574,585,754,781,793,841,869,880,933,960,1189,1246,1323,1336,1344,1405,1457,1513,1581,1618,1654,1681,1684,1698,1713,1750,1770,1855,1860,2244,2251,2305,2317,2394,2418,2422,2593 'file-anchor':2250 'file-level':2243 'file/package':93 'files/packages':1811 'filter':114,139,201,317,1099,1357 'find':59,526,542,714,727,733,741,748,750,811,824,830,837,903,916,922,929,984,1155,1168,1174,1203,1250,1288,1301,1307,1554,1560,1567,1745,1787,1820,1829,1835,1842,1900,2002,2135,2178,2234,2246,2270,2295,2297,2362,2366,2410,2415,2439,2488,2509,2597 'first':489,1764 'fix':1366,1379,1380,1398,1420,1436,1495,1572,1594,1910,2010,2277,2445,2450 'fixm':2420 'fixme/hack/xxx':534 'flag':615,630,650,687,1028,1458,1525,1704 'flow':1075 'focus':1786 'follow':2272,2435,2485 'follow-up':2434,2484 'foo.go:42':2269 'forc':623 'forward':356 'found':1132 'fourth':2231 'full':75,198,329,455,461,1009,1723,1728,1807,2067,2123 'full-codebas':328,1008 'function':759,846,938,1029,1104,1452 'g':1610 'general':654 'generalpurpos':501,555,778,866,957,1186,1320,1615 'generat':883 'get':118,1353,2248 'gh':132,2160 'git':107,310,1225,1261,1346,1390,1406,2047,2049,2057,2059,2065,2068,2073,2075,2091,2117,2119,2121,2125 'github':2147,2464 'github.com':1016,1056,1081,1119,2195 'github.com/.../pull/n/files#diff-':2194 'github.com/fzipp/gocyclo/cmd/gocyclo@latest':1015 'github.com/kisielk/errcheck@latest':1055 'github.com/mgechev/revive@latest':1118 'github.com/nishanths/exhaustive/cmd/exhaustive@latest':1080 'given':178 'global':622 'go':14,41,50,144,148,158,169,190,267,374,388,393,409,414,773,780,791,796,800,803,833,952,959,969,1013,1038,1053,1063,1078,1094,1100,1116,2582 'go.uber.org':1066 'go.uber.org/nilaway/cmd/nilaway@latest':1065 'go1':2319 'go5':2390 'gocyclo':27,1012 'goe':2222 'gof':592 'golang.org':1097 'golang.org/x/tools/cmd/deadcode@latest':1096 'golangci.yml':1112 'graph':266,661,1107 'grep':2604 'guidanc':1036 'guidelin':2457 'gut':1448 'h':1955,2044 'h1':2110 'hash':1574 'head':116,319,1408,1757,2056,2064,2072 'header':1968,1972,1995,2020,2098 'heavi':698 'help':2475 'high':765,852,944,1603,1877,2308,2324,2351,2369,2377,2576 'histor':1387,1419,1493,1501,1571,2349 'histori':429,1262,1316,1356 'honnef.co':1041 'honnef.co/go/tools/cmd/staticcheck@latest':1040 'hotfix':1370 'id':738,745,835,927,988,1179,1207,1312,1565,1840,2365 'ident':2218 'identifi':1809 'ignor':1020 'implement':633,2477 'implementor':680 'import':265,662 'in-scop':581,788,876,1242,1678,1710,1767 'includ':184,752,839,931,1026,1247,1273,1569,1844,2471 'indic':604,701 'individu':175 'infer':1076,1690,1720 'inlin':2007 'insid':2176,2262 'instead':138 'integr':2542 'intent':1519 'interfac':264,668,670,693 'internal/auth':168 'intersect':343 'investig':219,464,521 'invoc':197 'issu':537,1551,2426 'item':2574,2581 'js':378 'json':2163 'jsx':379 'key':1092 'keyword':1364 'kt':381 'kts':382 'l':2228 'launch':463,468,487,976 'least':1695 'legitim':1504 'len':649,686 'level':63,570,2245 'lightweight':451,1668,1675 'like':1365,1378 'line':756,843,935,1424,1583,1790,1856,1861,2174,2193,2202,2211,2260,2306,2318,2395,2419,2423,2603 'link':2136,2184,2215,2225,2253 'lint':420,1183,1220 'list':94,210,241,342,1101,1278,1333 'liter':1091 'load':1623 'local':1691,1721 'log':1347,2076 'logic':1426,1530 'look':1526,2217 'loosen':1471 'low':767,854,946,1605,2336,2342 'ls':1751,2494 'm':1102,1937,1956,2042,2045 'main':123,325,1227 'major':1816 'make':706 'manual':21,235 'map':1090,1866 'mark':544 'markdown':2112,2183,2296,2363,2438 'match':1361,1386,1518,2592,2611 'max':476 'may':164 'md':2107 'medium':766,853,945,1604,1884,2314,2330,2360,2384,2396,2587 'messag':1360,1576 'metadata':1964,1967,1971,1994,2019 'minim':599,647 'minimal-chang':598,646 'mkdir':1958 'mock':697 'mock-heavi':696 'mode':452,456,459,1667,1673,1726,1785,1808,2139 'model':502,509,516,556,561 'modif':1440 'modified/deleted':1423 'move':1508 'must':523,751,838,930,1568,1843,2598 'n':1348 'name':110,136,313,614,626,643,760,847,939 'name-on':109,135,312 'narrow':1002,1235 'near':2023 'nearbi':716,813,905,1157,1290,1545,1822 'need':360 'new':1512,2409 'nil':1068 'nilaway':1062 'nit':2281 'non':1084 'non-exhaust':1083 'none':1760 'note':533,725,822,914,1135,1146,1166,1267,1299,1827 'number':130,757,844,936 'omit':2241 'one':494,2170 'onelin':1350 'option':2278 'opus':517,557 'orchestr':1739,1931,2555 'order':1905,1911,2011 'organ':2460 'otherwis':1744 'outlier':1810 'output':1918,1985,2034,2106,2290,2605 'over-engin':656 'overlap':1414,1899 'p':1959 'packag':10,149,170,182,191,213,233,260,596,677,997,1688 'packages/directories':78 'parallel':247,467,973,1229 'parent':155 'pars':2052,2062,2071,2094 'part':1490 'pass':205,1236,2227 'patch':1371 'path':153,192,214,234,298,301,755,842,934,998,1213,1237,2173,2192,2201,2210,2259,2602 'paths/packages':161 'pattern':9,171,183,594,610,616,619,624,625,629,636,1692,1702,1722,1749,1778,1798,1817,1846,1854,1881,1888,2355,2467,2590,2610 'pattern-match':2609 'pay':257,1481 'pb':925 'pb1':2325 'pbl':1205,1310 'pbl1':2337 'per':506,558,731,828,920,1172,1305,1558,1833,2293,2613 'per-categori':730,827,919,1171,1304,1557,1832,2292 'philosophi':685 'place':2100 'placement':669 'plain':2203,2213 'pointer':1069 'potenti':1537 'pr':82,103,129,133,290,2138,2148,2149,2161,2187,2189,2198 'practic':16,52,390,775,805,894 'prais':2285 'prefix':737,744,834,926,987,1178,1206,1311,1377,1564,1839,2283 'prematur':653 'prepend':1975,2028 'present':1636,1642,1648,1913,2012 'pretti':2078 'principl':552,591 'prior':1435,2508 'priorit':58,2476 'probe':2600 'produc':56,1901 'project':719,816,908,1123,1160,1293 'prompt':575,782,870,961,1190,1327,1619 'proto':145,269,404,423,868,879,1188,1245 'protobuf':398,419,860,892,1182,1196,2584 'protobuf/api':18,54 'proverb':801 'provid':1630,1733,1925,2152,2549 'py':383 'q':2165 'qualiti':2532 'r':2197,2240 'ran':1283 'rate':763,850,942,1601 'rb':384 're':2430,2505,2515 're-evalu':2429,2504,2514 'read':224,252,579,786,874,1682,1740 'readm':532,2424,2536 'real':707 'reappear':1531 'reason':571,1285 'receiv':232,238,1331 'recent':1354,1748,2491 'recogniz':635 'recommend':1909,2009,2469 'reduc':1477,1596 'reduct':1543 'ref':308,355,1340,2055,2088,2097,2129 'refactor':1035,1506 'refer':64,127,539,1498,1552,1795,2175,2261,2304,2313,2323,2329,2335,2341,2347,2374,2382,2389,2401,2427 'reference-architecture.md':606,607,2523,2524 'reference-go.md':807,808,2525,2526 'reference-protobuf.md':899,900,2528,2529 'reg':1563 'reg1':2343,2383 'region':1432,1584 'regress':428,1315,1369,1538,1578 'regression/bug-fix':1362 'reintroduct':1539,1579 'relat':888 'relax':1466 'relev':141,254 'remain':492 'remov':1438,1459,1469,2236 'renam':1514 'render':1977,2030 'replac':993 'repo':1258,1638,1644,1650 'report':540,983,1202,1534,2014 'repositori':2560 'request':100 'requir':567,572,779,867,958,1187,1321,1616,1693 'resolut':2026 'resolv':89,207,996,1915 'restat':2287 'result':981,1914,2607 'retriev':1393,1399 'return':726,823,915,1060,1167,1300,1553,1828,2169 'rev':2051,2061,2070,2093 'rev-pars':2050,2060,2069,2092 'revers':1427 'revert':1368,1381,1383 'revi':42 'review':2,4,38,40,44,47,236,331,798,1633,1730,1737,1741,1753,1917,1922,1929,1933,1939,1941,1942,1946,1949,1951,1952,1960,1980,1987,2024,2142,2437,2487,2492,2496,2539,2553,2570,2595 'review-al':1632,1736,1928,2552 'review-cod':1 'review-document':2538 'review.md':1628,1872,2541,2545 'reviv':1109,1114,1125,1129 'risk':2280 'root':1639,1645,1651,2561 'rout':510,562 'rs':375 'rule':897,1626,1664,1718,1774,1869,2567 'run':106,309,965,1014,1039,1054,1064,1079,1095,1115,1117,1194,1218,1345,1389,1762,1963,1966,1970,1993,2018,2037,2113,2114,2158,2563 'run-metadata-head':1969 'sa':986,1044,1177 'sa1':2331 'sa2':2391 'scan':1025 'scope':67,71,90,208,227,244,276,286,295,345,387,397,408,418,427,436,450,583,790,878,1000,1011,1233,1244,1680,1712,1769,2081,2132,2133,2144,2596 'score':1033 'search':715,812,904,1156,1289,1544,1821,2458 'section':1152,1277,2547 'see':518,605,806,898,1965,2522,2537 'servic':711 'set':2191 'setup':700 'sever':762,849,941,1600,1865,1907,2298,2364,2577,2588 'sh':1932,2036,2185 'shell':974,1200,1230 'short':2063,2095 'show':1391,1699 'sibl':1683,1697 'signal':1363 'simplif':1045 'singleton':620 'skill' 'skill-review-code' 'skip':1133,1143,1284,1920,2589 'solid':7,590 'solid/dip':565 'sonnet':503 'sort':2499 'sourc':255,584,792,889,2367 'source-paultyng' 'sourcegraph':2463 'specif':77,87,753,840,932,1421,2302,2580 'specifi':165 'specul':651 'standalon':2159,2564 'statement':1088 'static':24,194,229,410,953 'staticcheck':28,1037 'status':770,857,949,1282,1608,1864,2006,2440 'stay':2209 'still':2453 'structur':45,261,663,1990 'subag':220,237,248,249,281,358,364,465,470,497,499,508,512,522,547,553,560,577,771,776,784,858,864,872,950,955,963,1180,1184,1192,1313,1318,1329,1609,1613,1621,1896 'subagent-model-rout':507,559 'subject':2074,2124,2126 'summar':1893 'summari':1999 'suspicion':2612 'swift':380 'switch':1087 'tabl':1904,2003,2179,2216,2432,2517 'tail':2500 'target':2226 'task':474 'templat':734,831,923,1175,1308,1561,1836,2099,2291 'ters':2274 'terse-com':2273 'test':272,684,699,705,1021,1437,1451,1453,1456,1461,1478,1485,1505,1509,1529,1541,1597 'testabl':13,603 'testing-philosophi':683 'text':2204,2208 'tight':702 'time':480 'titl':2111 'todo':530,723,820,912,1164,1297,1825,2267,2315,2392,2416 'todo/fixme/hack/xxx':1548 'tool':26,196,231,475,971,1137,1141,1150,1198,1269,1275,1280,1997 'top':2103 'topic-agent-skills' 'topic-ai-tools' 'topic-claude-code' 'topic-cursor' 'topic-dotfiles' 'touch':1428 'track':541,769,856,948,1607,1863,2005,2264,2299,2368,2404 'tracker':538 'treat':2565 'true':284,337,441,1783 'ts':376 'tsx':377 'type':143,250,262,500,554,777,865,956,1074,1185,1319,1614 'type-flow':1073 'u':2040 'unchang':2205 'uncheck':1058 'undo':1417 'uniqu':154 'unreach':1103 'unsur':2282 'unwind':1592 'updat':1515,2511 'url':2150,2164,2166,2188,2190,2199,2221 'usag':595,611,1051 'use':20,30,131,246,472,515,640,692,728,825,917,1005,1169,1302,1555,1830,2407 'user':33,74,99,126,163,2017,2480 'utc':2046 'valu':1061,1473,2406 'vendor':1022 'verifi':612 'via':621,972,1072,1105,1199,1228 'view':2162 'violat':1848,1858,1870,2358 'weaken':1450 'whether':1410,1422,1708 'whose':1359 'without':627 'workaround':1373 'workflow':65 'wrap':2137,2171,2257 'write':1983 'y':1936,2041","prices":[{"id":"22d84d42-4b9b-412d-acda-34803daf367e","listingId":"6a1f63b5-d692-49e1-b4db-53246785fb34","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"paultyng","category":"skill-issue","install_from":"skills.sh"},"createdAt":"2026-05-18T13:21:26.919Z"}],"sources":[{"listingId":"6a1f63b5-d692-49e1-b4db-53246785fb34","source":"github","sourceId":"paultyng/skill-issue/review-code","sourceUrl":"https://github.com/paultyng/skill-issue/tree/main/skills/review-code","isPrimary":false,"firstSeenAt":"2026-05-18T13:21:26.919Z","lastSeenAt":"2026-05-18T19:09:01.687Z"}],"details":{"listingId":"6a1f63b5-d692-49e1-b4db-53246785fb34","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"paultyng","slug":"review-code","github":{"repo":"paultyng/skill-issue","stars":8,"topics":["agent-skills","ai-tools","claude-code","cursor","dotfiles"],"license":"mit","html_url":"https://github.com/paultyng/skill-issue","pushed_at":"2026-05-18T18:26:54Z","description":"Personal Claude Code / Cursor agent skills, rules, and config","skill_md_sha":"2f46967b47561167bd81e202306397c53b5b36df","skill_md_path":"skills/review-code/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/paultyng/skill-issue/tree/main/skills/review-code"},"layout":"multi","source":"github","category":"skill-issue","frontmatter":{"name":"review-code","description":"Review code architecture (SOLID, design patterns, package design, coupling, testability), Go best practices, and protobuf/API design using manual analysis and static analysis tools (gocyclo, staticcheck, buf). Use when the user asks for a code review, architecture review, Go review, protobuf review, SOLID review, or design pattern review."},"skills_sh_url":"https://skills.sh/paultyng/skill-issue/review-code"},"updatedAt":"2026-05-18T19:09:01.687Z"}}