{"id":"6fa1f65c-af8b-4a96-8d7c-6398d196dc5e","shortId":"SdwzT5","kind":"skill","title":"review-reliability","tagline":"Perform a reliability review covering graceful shutdown, gRPC production patterns, stability patterns (timeouts, circuit breakers, bulkheads), and stability anti-patterns. Use when the user asks for a reliability review, production readiness assessment, stability analysis, or gra","description":"# Reliability Review\n\nStructured reliability review producing 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`, config files, Kubernetes manifests). 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.\n  - **Full codebase:** No filtering; explore everything (default).\n- **Pass the resolved scope** (file list) to all exploration and investigation subagents so they only read and analyze scoped files.\n- Explore the scoped code using parallel subagents (`subagent_type=\"explore\"`). Read all relevant source files, configs, Kubernetes manifests, and deployment definitions.\n\n### 2. System overview\n\nProduce a brief architecture summary covering:\n- Services, ports, and transport (gRPC, HTTP, etc.)\n- Data stores and external dependencies\n- Deployment model (if discernible)\n\nMap the critical hot paths:\n\n```\nClient → Transport\n  → step 1 (local / I/O annotation)\n  → step 2 (DB round-trip #1)\n  → step 3 (external call, round-trip #2)\n  → response\n```\n\nAnnotate each step: local vs. I/O, serial vs. parallel, cached vs. uncached.\n\n### 3. Launch investigation subagent\n\nLaunch a single investigation subagent (`subagent_type=\"generalPurpose\"`, `model: sonnet` per `subagent-model-routing`) with the system overview, flow mapping, and in-scope file list.\n\nPrompt it to:\n- Read all in-scope source files.\n- Analyze against all reliability categories: graceful shutdown contract, gRPC production patterns, stability patterns, and stability anti-patterns (see [reference.md](reference.md)).\n- **Goroutine leak test coverage**: search test files for `goleak.VerifyNone` or `goleak.VerifyTestMain` usage. Search source files for goroutine-spawning patterns (`go func`, `go ` keyword launching goroutines). Flag packages that spawn goroutines but have no goleak checks in their tests (see Steady State in [reference.md](reference.md)).\n- For each finding, search nearby code and project documentation (README, doc comments, TODO/FIXME/HACK/XXX comments, issue references) for existing tracking.\n- Return findings using the **reliability findings** template.\n- Every finding must include specific file paths, line numbers or function names, priority (P0–Pn), impact, effort estimate, and tracking status.\n\n### 4. Present results\n\nResolve the review output directory:\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}/RELIABILITY-REVIEW.md`.\n\nWrite the output to `${REVIEW_DIR}/RELIABILITY-REVIEW.md`, structured as:\n1. Run metadata header\n2. System overview and flow mapping\n3. Reliability findings table\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### Reliability findings\n\n```markdown\n| Priority | Finding | Impact | Effort | Tracked |\n|----------|---------|--------|--------|---------|\n| P0 | Description with code references | Impact on availability/latency | trivial / small / moderate / large | — |\n| P1 | Description with code references | Impact description | Effort estimate | FIXME in file:line |\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 new approaches.\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 `RELIABILITY-REVIEW.md`, re-evaluate all prior findings, and update with the re-evaluation table appended.\n- For detailed framework categories, see [reference.md](reference.md).\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 (Reliability section) 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","reliability","skill","issue","paultyng","agent-skills","ai-tools","claude-code","cursor","dotfiles"],"capabilities":["skill","source-paultyng","skill-review-reliability","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-reliability","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 (7,271 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:02.899Z","embedding":null,"createdAt":"2026-05-18T13:21:27.909Z","updatedAt":"2026-05-18T19:09:02.899Z","lastSeenAt":"2026-05-18T19:09:02.899Z","tsv":"'-1':600,946 '/.../pull/n/files#diff-':719 '/.claude/rules/probe-not-assume.md':1042 '/.claude/scripts/pr-deeplink.sh':709 '/dev/null':691,943 '/internal/auth':166 '/reliability-review.md':507,514 '1':56,263,273,517,887 '123':869 '2':230,268,281,521,690,895,942 '3':275,295,527 '4':449,531 'abbrev':577 'abbrev-ref':576 'action':47 'addit':999 'affect':140 'alreadi':857 'already-captur':856 'also':609 'alway':1002 'analysi':38 'analyz':206,336 'anchor':775 'annot':266,283 'anti':23,352 'anti-pattern':22,351 'append':963 'appli':777 'applic':898 'approach':915 'architectur':236 'argument':755 'ask':29,926 'assess':36 'availability/latency':830 'base':85,608,610,612,619,650,651,653 'block':503,554 'branch':74,95,571,639,641 'breaker':18 'brief':235,890 'bug':802 'bulkhead':19 'cach':292 'call':277 'caller':678 'captur':487,544,858 'categori':340,967 'chang':69,91,109,886,900 'check':392,1003 'circuit':17 'cite':1027 'client':260 'code':52,212,407,760,826,838 'code-level':51 'codebas':66,183,906 'column':788,849 'command':1034 'comment':413,415,798 'commit':581,589,613,643,645,654 'concern':78 'concret':799 'config':135,224 'confirm':60 'contain':150,947 'context':976 'contract':343 'cover':8,238 'coverag':360 'criteria':1001 'critic':257 'd':105,463,470,566,940 'data':246 'date':459,460,468,478,479,562 'datetim':561,638 'db':269 'default':111,188,761 'definit':229 'depend':250 'deploy':228,251 'deriv':139 'descript':657,824,836,841,888,896 'detail':965 'diff':75,98,103,124,607,812 'diff-bas':606 'diff-filt':102 'dir':465,472,475,486,506,513,548 'directori':149,159,173,456,938 'discern':254 'display':730 'doc':412 'document':410,558 'domain':1009 'domain-specif':1008 'e.g':160,165,789 'effort':444,821,842,917 'empti':723 'estim':445,843,918 'etc':245,872 'evalu':875,951,961 'everi':428,695 'everyth':187 'evid':1029 'exclud':1019 'exist':419,910,987 'explan':891 'explicit':153 'explor':59,186,197,209,218 'extern':249,276 'fi':482 'file':70,92,110,132,136,145,152,169,179,193,208,223,324,335,363,371,433,767,774,846,862,866,1021 'file-anchor':773 'file-level':766 'file/package':83 'filter':104,129,185 'find':49,404,422,426,429,529,658,701,757,769,793,816,819,854,859,883,933,954,1025 'fix':533,800,889,894 'fixm':844,864 'flag':383 'flow':318,525 'follow':795,879,930 'follow-up':878,929 'foo.go:42':792 'fourth':754 'framework':966 'full':65,182,590,646 'func':378 'function':438 'generalpurpos':306 'get':108,771 'gh':122,683 'git':97,570,572,580,582,588,591,596,598,614,640,642,644,648 'github':670,908 'github.com':718 'github.com/.../pull/n/files#diff-':717 'given':171 'go':134,141,151,162,377,379 'goe':745 'goleak':391 'goleak.verifynone':365 'goleak.verifytestmain':367 'goroutin':357,374,382,387 'goroutine-spawn':373 'gra':40 'grace':9,341 'grep':1032 'grpc':11,243,344 'guidelin':901 'h':480,567 'h1':633 'head':106,579,587,595 'header':493,497,520,543,621 'help':920 'high':1006 'hot':258 'http':244 'i/o':265,288 'ident':741 'impact':443,820,828,840 'implement':922 'in-scop':321,331 'includ':177,431,916 'individu':168 'insid':699,785 'instead':128 'integr':972 'internal/auth':161 'investig':199,297,302 'issu':416,870 'item':1004,1011 'json':686 'keyword':380 'kubernet':137,225 'l':751 'larg':834 'launch':296,299,381 'leak':358 'level':53,768 'line':435,697,716,725,734,783,847,863,867,1031 'link':659,707,738,748,776 'list':84,194,325 'local':264,286 'log':599 'look':740 'ls':939 'm':462,481,565,568 'main':113 'manifest':138,226 'map':255,319,526 'markdown':635,706,817,882 'match':1020,1039 'may':157 'md':630 'medium':1015 'metadata':489,492,496,519,542 'mkdir':483 'mode':662 'model':252,307,312 'moder':833 'must':430,1026 'name':100,126,439 'name-on':99,125 'near':546 'nearbi':406 'new':853,914 'nit':804 'number':120,436 'omit':764 'one':693 'option':801 'orchestr':985 'order':534 'organ':904 'output':455,510,557,629,813,1033 'overview':232,317,523 'p':484 'p0':441,823 'p1':835 'packag':142,163,175,384 'packages/directories':68 'parallel':214,291 'parent':148 'pars':575,585,594,617 'pass':189,750 'path':146,259,434,696,715,724,733,782,1030 'paths/packages':154 'pattern':13,15,24,164,176,346,348,353,376,911,1018,1038 'pattern-match':1037 'per':309,1041 'perform':4 'place':623 'plain':726,736 'pn':442 'port':240 'pr':72,93,119,123,661,671,672,684,710,712,721 'prais':808 'prefix':806 'prepend':500,551 'present':450,535 'pretti':601 'prior':953 'priorit':48,921 'prioriti':440,818 'probe':1028 'produc':46,233 'product':12,34,345 'project':409 'prompt':326 'provid':675,979 'q':688 'r':720,763 're':874,950,960 're-evalu':873,949,959 'read':204,219,329 'readi':35 'readm':411,868 'recent':936 'recommend':532,913 'ref':578,611,620,652 'refer':54,117,417,698,784,827,839,871 'reference.md':355,356,400,401,969,970 'relev':131,221 'reliability-review.md':948 'reliabl':3,6,32,41,44,339,425,528,815,1012 'remov':759 'render':502,553 'report':537 'repositori':990 'request':90 'resolut':549 'resolv':79,191,452 'respons':282 'restat':810 'result':451,1035 'return':421,692 'rev':574,584,593,616 'rev-pars':573,583,592,615 'review':2,7,33,42,45,454,458,464,466,467,471,474,476,477,485,505,512,547,665,881,932,937,941,983,1000,1023 'review-al':982 'review-reli':1 'review.md':971,975 'risk':803 'root':991 'round':271,279 'round-trip':270,278 'rout':313 'rule':997 'run':96,488,491,495,518,541,560,636,637,681,993 'run-metadata-head':494 'scope':57,61,80,192,207,211,323,333,604,655,656,667,1024 'search':361,369,405,902 'section':977,1013 'see':354,396,490,968 'serial':289 'servic':239 'set':714 'sever':1007,1016 'sh':457,559,708 'short':586,618 'shutdown':10,342 'singl':301 'skill' 'skill-review-reliability' 'skip':1017 'small':832 'sonnet':308 'sort':944 'sourc':222,334,370 'source-paultyng' 'sourcegraph':907 'spawn':375,386 'specif':67,77,432,1010 'specifi':158 'stabil':14,21,37,347,350 'standalon':682,994 'state':398 'status':448,884 'stay':732 'steadi':397 'step':262,267,274,285 'still':897 'store':247 'structur':43,515 'subag':200,215,216,298,303,304,311 'subagent-model-rout':310 'subject':597,647,649 'summari':237 'suspicion':1040 'system':231,316,522 'tabl':530,702,739,876,962 'tail':945 'target':749 'templat':427,622,814 'ters':797 'terse-com':796 'test':359,362,395 'text':727,731 'timeout':16 'titl':634 'todo':790,860 'todo/fixme/hack/xxx':414 'top':626 'topic-agent-skills' 'topic-ai-tools' 'topic-claude-code' 'topic-cursor' 'topic-dotfiles' 'track':420,447,787,822,848 'transport':242,261 'treat':995 'trip':272,280 'trivial':831 'type':133,217,305 'u':563 'uncach':294 'unchang':728 'uniqu':147 'unsur':805 'updat':956 'url':673,687,689,711,713,722,744 'usag':368 'use':25,121,213,423,851 'user':28,64,89,116,156,540,925 'utc':569 'valu':850 'view':685 'vs':287,290,293 'workflow':55 'wrap':660,694,780 'write':508 'y':461,564","prices":[{"id":"8a79b7fe-452d-49dc-b18e-b4a3401b0a1c","listingId":"6fa1f65c-af8b-4a96-8d7c-6398d196dc5e","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:27.909Z"}],"sources":[{"listingId":"6fa1f65c-af8b-4a96-8d7c-6398d196dc5e","source":"github","sourceId":"paultyng/skill-issue/review-reliability","sourceUrl":"https://github.com/paultyng/skill-issue/tree/main/skills/review-reliability","isPrimary":false,"firstSeenAt":"2026-05-18T13:21:27.909Z","lastSeenAt":"2026-05-18T19:09:02.899Z"}],"details":{"listingId":"6fa1f65c-af8b-4a96-8d7c-6398d196dc5e","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"paultyng","slug":"review-reliability","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":"fee7fb65a0664a515ec074f9b2b1648d19e3c02c","skill_md_path":"skills/review-reliability/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/paultyng/skill-issue/tree/main/skills/review-reliability"},"layout":"multi","source":"github","category":"skill-issue","frontmatter":{"name":"review-reliability","description":"Perform a reliability review covering graceful shutdown, gRPC production patterns, stability patterns (timeouts, circuit breakers, bulkheads), and stability anti-patterns. Use when the user asks for a reliability review, production readiness assessment, stability analysis, or graceful shutdown audit."},"skills_sh_url":"https://skills.sh/paultyng/skill-issue/review-reliability"},"updatedAt":"2026-05-18T19:09:02.899Z"}}