{"id":"a5300ba2-c9ec-42b6-abfd-ab4f5f959542","shortId":"8qfrsY","kind":"skill","title":"review","tagline":"Load before every commit, push, or merge-request finalization — also use to review someone else's branch or merge request with inline comments and approval. Verifies your own work before shipping; routes by target [commit|branch|merge-request|staged].","description":"## Setup\n\nFetch the diff for the requested scope (commit hash, branch, staged, or code review request via your `source-control` capability). Read modified files for full context; skip generated files, lock files, vendored code.\n\nRead project rules: `AGENTS.md` (root + nested), `CONVENTIONS.md`, `REVIEW.md`, `CONTRIBUTING.md`, plus `docs/` development guides. `REVIEW.md` overrides everything else.\n\nFetch issue context via your `issues` capability — parse branch name and code review request body for issue IDs, fetch acceptance criteria.\n\n## Trigger and reconcile automated review (when a code review request exists)\n\nWhen reviewing a code review request, check your `automated-review` capability:\n\n- **Available, not yet run** → trigger it and wait for completion before proceeding.\n- **Available, has run** → fetch prior comments. Per-finding, classify as `addressed | dismissed-with-reasoning | pending | moved-but-still-true`. Treat pending and moved-but-still-true findings as required input to the next path.\n- **Not available** → skip this section.\n\n## Two paths\n\n### Reviewing your code (your own commits, branch, or your own merge request)\n\n1. If automated review surfaced findings, fix pending and moved-but-still-true findings via TDD before proceeding.\n2. **Run the local pass** (below).\n\n### Reviewing theirs (someone else's code review request)\n\nYour contribution is reviewer judgment, not a duplicate AI pass. **Posting AI-generated findings as your own is dishonest** when an embedded automated reviewer is already on the request.\n\n1. If automated review ran, add inline replies that agree, disagree, or expand on bot findings — don't open new threads duplicating them.\n2. **Run the local pass** (below) but only post issues genuinely caught yourself, plus `moved-but-still-true` cases where the bot's original comment is gone but the concern remains.\n3. **Add reviewer judgment**: verdict, acceptance-criteria coverage, QA observations.\n\n## Local pass\n\nRun these against the diff in order, treating each as a distinct lens. Write findings after each pass before moving to the next so you don't blur lenses.\n\n**Always run:**\n\n1. **Reviewability** — can a human reviewer understand and confidently approve this diff? Check for:\n   - Unrelated changes (refactors, dep bumps, formatting fixes) mixed into the diff → split into a separate commit, branch, or PR\n   - Whitespace-only or formatting-only hunks with no semantic content → drop or isolate\n   - Large single commits that could be decomposed into logical steps without losing safety → suggest split points\n   - Diff noise that obscures intent (e.g. indentation reflow, import reordering mixed with logic) → separate\n   If any issues found, list the specific files/hunks and the recommended action (drop, stage separately, squash, etc.) before proceeding with other passes.\n2. **Correctness** — does behavior match intent and the issue's acceptance criteria? See `specialists/correctness.md`.\n3. **Code quality** — apply your `code-quality` capability. Follow the pre-existing-pattern rule.\n\n**Conditional (run if the diff touches the trigger):**\n\n3. **Security** — when auth, params, sessions, encryption, CORS, env config, or dependencies appear. Trace input paths end-to-end.\n4. **Performance** — when DB queries, associations, loops, batch jobs, view collections, or migrations appear. Check N+1, missing indexes, unbounded collections.\n\nWhen in doubt, run the conditional pass. For deeper guidance, see `specialists/` and `verify-findings.md`.\n\nAfter all passes: deduplicate findings, verify each by attempting to disprove it (read surrounding code, check version-control history for pre-existing issues, confirm `file:line` is in the diff). Default is keep — discard only on positive disproof.\n\n## QA when UI is touched\n\nIf the diff modifies views, templates, controllers, frontend code, or UI interactions: spawn the project's dev server in the background (auto-detect from `package.json` scripts.dev/start, then `Procfile` web entry, then `Makefile` dev/serve/start target, then `README.md` getting-started block). Wait up to 15 s for ready signal. Use your `qa` capability with the changed flows. Kill the server when done.\n\nAlways attempt for code review requests; only when UI is touched for commit/branch/staged. Include results under `## QA Results`.\n\n## Submit\n\nPost findings as inline comments via your `source-control` capability — do not include verdict, TL;DR, or summaries in the submitted body (those are session output only). Exception: a review-wide observation that genuinely cannot be attributed to any line.\n\nWhen a code review request has reviews and merge conflicts, use merge (not rebase) — rebasing invalidates existing inline comments.\n\nSee `output-format.md` for the output template.","tags":["review","dotfiles","athal7","agent-skills"],"capabilities":["skill","source-athal7","skill-review","topic-agent-skills"],"categories":["dotfiles"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/athal7/dotfiles/review","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add athal7/dotfiles","source_repo":"https://github.com/athal7/dotfiles","install_from":"skills.sh"}},"qualityScore":"0.453","qualityRationale":"deterministic score 0.45 from registry signals: · indexed on github topic:agent-skills · 6 github stars · SKILL.md body (4,787 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:14:35.996Z","embedding":null,"createdAt":"2026-05-18T13:22:31.440Z","updatedAt":"2026-05-18T19:14:35.996Z","lastSeenAt":"2026-05-18T19:14:35.996Z","tsv":"'+1':544 '/start,':636 '1':208,271,370 '15':654 '2':227,294,470 '3':326,484,508 '4':528 'accept':114,332,480 'acceptance-criteria':331 'action':459 'add':276,327 'address':162 'agents.md':81 'agre':280 'ai':249,253 'ai-gener':252 'alreadi':267 'also':12 'alway':368,672 'appear':520,541 'appli':487 'approv':27,379 'associ':533 'attempt':571,673 'attribut':729 'auth':511 'auto':630 'auto-detect':629 'autom':119,136,210,264,273 'automated-review':135 'avail':139,151,190 'background':628 'batch':535 'behavior':473 'block':650 'blur':366 'bodi':109,713 'bot':285,316 'branch':19,38,53,103,202,400 'bump':388 'cannot':727 'capabl':64,101,138,492,662,701 'case':313 'caught':305 'chang':385,665 'check':133,382,542,578 'classifi':160 'code':56,77,106,123,130,198,238,485,490,577,616,675,735 'code-qu':489 'collect':538,548 'comment':25,156,319,695,751 'commit':5,37,51,201,399,420 'commit/branch/staged':684 'complet':148 'concern':324 'condit':500,554 'confid':378 'config':517 'confirm':588 'conflict':742 'content':414 'context':70,97 'contribut':242 'contributing.md':86 'control':63,581,614,700 'conventions.md':84 'cor':515 'correct':471 'could':422 'coverag':334 'criteria':115,333,481 'db':531 'decompos':424 'dedupl':566 'deeper':557 'default':595 'dep':387 'depend':519 'detect':631 'dev':624 'dev/serve/start':643 'develop':89 'diff':46,343,381,394,434,504,594,610 'disagre':281 'discard':598 'dishonest':260 'dismiss':164 'dismissed-with-reason':163 'disproof':602 'disprov':573 'distinct':350 'doc':88 'done':671 'doubt':551 'dr':707 'drop':415,460 'duplic':248,292 'e.g':439 'els':17,94,236 'embed':263 'encrypt':514 'end':525,527 'end-to-end':524 'entri':640 'env':516 'etc':464 'everi':4 'everyth':93 'except':719 'exist':126,497,586,749 'expand':283 'fetch':44,95,113,154 'file':67,73,75,589 'files/hunks':455 'final':11 'find':159,181,213,222,255,286,353,567,692 'fix':214,390 'flow':666 'follow':493 'format':389,408 'formatting-on':407 'found':451 'frontend':615 'full':69 'generat':72,254 'genuin':304,726 'get':648 'getting-start':647 'gone':321 'guid':90 'guidanc':558 'hash':52 'histori':582 'human':374 'hunk':410 'id':112 'import':442 'includ':685,704 'indent':440 'index':546 'inlin':24,277,694,750 'input':184,522 'intent':438,475 'interact':619 'invalid':748 'isol':417 'issu':96,100,111,303,450,478,587 'job':536 'judgment':245,329 'keep':597 'kill':667 'larg':418 'len':351 'lens':367 'line':590,732 'list':452 'load':2 'local':230,297,337 'lock':74 'logic':426,446 'loop':534 'lose':429 'makefil':642 'match':474 'merg':9,21,40,206,741,744 'merge-request':8,39 'migrat':540 'miss':545 'mix':391,444 'modifi':66,611 'move':169,177,218,309,358 'moved-but-still-tru':168,176,217,308 'n':543 'name':104 'nest':83 'new':290 'next':187,361 'nois':435 'obscur':437 'observ':336,724 'open':289 'order':345 'origin':318 'output':717,756 'output-format.md':753 'overrid':92 'package.json':633 'param':512 'pars':102 'pass':231,250,298,338,356,469,555,565 'path':188,195,523 'pattern':498 'pend':167,174,215 'per':158 'per-find':157 'perform':529 'plus':87,307 'point':433 'posit':601 'post':251,302,691 'pr':402 'pre':496,585 'pre-exist':584 'pre-existing-pattern':495 'prior':155 'proceed':150,226,466 'procfil':638 'project':79,622 'push':6 'qa':335,603,661,688 'qualiti':486,491 'queri':532 'ran':275 'read':65,78,575 'readi':657 'readme.md':646 'reason':166 'rebas':746,747 'recommend':458 'reconcil':118 'refactor':386 'reflow':441 'remain':325 'reorder':443 'repli':278 'request':10,22,41,49,58,108,125,132,207,240,270,677,737 'requir':183 'result':686,689 'review':1,15,57,107,120,124,128,131,137,196,211,233,239,244,265,274,328,371,375,676,722,736,739 'review-wid':721 'review.md':85,91 'root':82 'rout':34 'rule':80,499 'run':142,153,228,295,339,369,501,552 'safeti':430 'scope':50 'scripts.dev':635 'scripts.dev/start,':634 'section':193 'secur':509 'see':482,559,752 'semant':413 'separ':398,447,462 'server':625,669 'session':513,716 'setup':43 'ship':33 'signal':658 'singl':419 'skill' 'skill-review' 'skip':71,191 'someon':16,235 'sourc':62,699 'source-athal7' 'source-control':61,698 'spawn':620 'specialist':560 'specialists/correctness.md':483 'specif':454 'split':395,432 'squash':463 'stage':42,54,461 'start':649 'step':427 'still':171,179,220,311 'submit':690,712 'suggest':431 'summari':709 'surfac':212 'surround':576 'target':36,644 'tdd':224 'templat':613,757 'thread':291 'tl':706 'topic-agent-skills' 'touch':505,607,682 'trace':521 'treat':173,346 'trigger':116,143,507 'true':172,180,221,312 'two':194 'ui':605,618,680 'unbound':547 'understand':376 'unrel':384 'use':13,659,743 'vendor':76 'verdict':330,705 'verifi':28,568 'verify-findings.md':562 'version':580 'version-control':579 'via':59,98,223,696 'view':537,612 'wait':146,651 'web':639 'whitespac':404 'whitespace-on':403 'wide':723 'without':428 'work':31 'write':352 'yet':141","prices":[{"id":"56e49846-e21e-4c48-b628-6d17a82fd8e3","listingId":"a5300ba2-c9ec-42b6-abfd-ab4f5f959542","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"athal7","category":"dotfiles","install_from":"skills.sh"},"createdAt":"2026-05-18T13:22:31.440Z"}],"sources":[{"listingId":"a5300ba2-c9ec-42b6-abfd-ab4f5f959542","source":"github","sourceId":"athal7/dotfiles/review","sourceUrl":"https://github.com/athal7/dotfiles/tree/main/skills/review","isPrimary":false,"firstSeenAt":"2026-05-18T13:22:31.440Z","lastSeenAt":"2026-05-18T19:14:35.996Z"}],"details":{"listingId":"a5300ba2-c9ec-42b6-abfd-ab4f5f959542","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"athal7","slug":"review","github":{"repo":"athal7/dotfiles","stars":6,"topics":["agent-skills"],"license":null,"html_url":"https://github.com/athal7/dotfiles","pushed_at":"2026-05-18T18:53:57Z","description":null,"skill_md_sha":"ce43bde59cf6ed4873553edb2744ad0f536332d2","skill_md_path":"skills/review/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/athal7/dotfiles/tree/main/skills/review"},"layout":"multi","source":"github","category":"dotfiles","frontmatter":{"name":"review","license":"MIT","description":"Load before every commit, push, or merge-request finalization — also use to review someone else's branch or merge request with inline comments and approval. Verifies your own work before shipping; routes by target [commit|branch|merge-request|staged].","compatibility":"opencode"},"skills_sh_url":"https://skills.sh/athal7/dotfiles/review"},"updatedAt":"2026-05-18T19:14:35.996Z"}}