본문으로 건너뛰기
cccskills
무료GitHub에 공개

review-changes

Run a disciplined review of the pending changes (uncommitted work plus the branch delta against main) across four dimensions: security, correctness, performance, and repo consistency. Fans out exploration subagents per dimension, then the main agent acts as judge: every finding is re-verified against the actual code before it is reported, and the result is saved to `.agents/local/reviews/` and replied verbatim. Use when asked to review the changes, review before a PR, check my work, audit this branch, or run a pre-merge review. Use `security-review` instead for a security-only pass, and `simplify` for quality-only cleanup with no bug hunting. Skip for reviewing a single function in conversation or code outside this repo.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

uniffy-io/uniffy스타 68(GitHub 68 + cccskills 0)

실행 점수 미검증

설치 방법 보기

포함된 파일(1)

  • SKILL.md9.5 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

Review Pending Changes

This skill is the methodology for reviewing what is about to become a PR. The shape is explore -> judge -> report (-> fix). Subagents gather candidate findings; the main agent verifies each one against the code and rejects what does not survive. A finding that was never re-read in context is a guess, and guesses do not go in the review.

1. Establish the diff under review

  1. git fetch origin (offline is fine; note it and continue).
  2. Scope the changes: git status + git diff HEAD --stat for uncommitted work, git log --oneline origin/main..HEAD and git diff origin/main...HEAD --stat for the branch delta. On main with uncommitted work, the uncommitted set IS the review scope.
  3. Upstream alignment before anything else: git log --oneline HEAD..origin/main. If upstream landed commits touching the same files, read those commits first and review against the merged reality, not the stale base. Overlaps and likely conflicts go in the review header.
  4. Bucket the changed files by area (backend / ui / mobile / proto / landing docs / infra) and drop src/proto/gen/** from the review set. Generated code is never reviewed; review the .proto source and confirm ./manage.py proto was run (a proto edit without its regenerated files is itself a finding).
  5. Check .agents/local/plans/backlogs/ for a companion backlog. It carries the intent; a review that does not know what the change was trying to do misjudges half of it.

2. Load the rules the diff touches

The rules in .agents/rules/ are the judging criteria, not background reading. A finding that contradicts a rule file is wrong; a diff that contradicts a rule file is a finding.

Changed pathsRules to read
anythingarchitecture.md, permissions.md, comment-discipline.md, CLAUDE.md "Two Product Targets"
src/uniffy/**, src/proto/schema/**backend.md
src/ui/**frontend.md
src/mobile/**mobile.md
files / chat / calls / agents / notes / mentions domainsthe matching domain rule file
src/landing/** contentlanding-voice.md

Also scan .agents/local/scaling-reviews/ (including resolved/). A limit already registered there is not a finding; a new "correct today, falls over at scale" discovery becomes a file there, not a bug in the review.

3. Fan out exploration subagents

One subagent per dimension, scaled down for small diffs (a docs-only change does not need a performance pass). Subagents explore and report candidates; they do not judge and they do not fix.

DimensionWhat to hunt
Securitythe full standard vulnerability sweep first, as if this were any exposed web app: injection of every kind (SQL, command, template, header), SSRF on any URL the server fetches, XSS and unsafe HTML/markdown rendering, path traversal on file and asset routes, authn/authz bypass and privilege escalation, IDOR, CSRF on state-changing routes, open redirects, unsafe deserialization, race conditions with security effect (double-spend, TOCTOU), timing and enumeration leaks, weak or homemade crypto, token/session lifetime and revocation, file upload abuse (type confusion, zip bombs, stored payloads), new dependencies (typosquats, postinstall scripts, telemetry). Then the repo-specific layer on top: every new RPC/route gates inside domain operations; organization_id scoping on every query; no org/domain admin content bypass (the hardest rule in permissions.md); actor vs target id confusion; secrets through OrgCipher/settings stores, never plaintext or shared-key; except Exception responds with the literal "Internal server error", never str(e); additions to PUBLIC_METHODS; missing cache invalidation after permission or membership mutations (a stale 600s perm cache is a live privilege)
Correctnessmutations paired with their cache invalidation in the same commit; transaction boundaries; races on hot rows; proto contract drift between backend and generated clients; deletions that orphan or break remaining callers (grep, do not assume); optional/HasField handling at proto boundaries; migration safety for "fresh deploy, no orgs yet"
Performanceevery code diff: N+1 and UNION-per-N shapes, pagination caps on growable lists, LIKE on indexed text lookups, LLM/external HTTP or unbounded loops on the request thread, missing batch INSERT/UPSERT/DELETE, index coverage for new query predicates, per-render work and refetch storms on the frontend. Diffs touching domains/chat, domains/agents, or `core/auth
Consistencyan existing component/helper was reused instead of reinvented (pickers, tables, SubjectAvatar, formatting utils); both product targets hold (env fallback for external services, no cloud-only or self-hosted-only assumptions, no CDN fetches, new settings land in .env.example AND an admin surface); comment discipline (no phase/plan refs, no dividers, no numpydoc blocks, no New/legacy/V2 identifiers); named exports, lazy routes, theme variables on the frontend; no backwards-compat shims anywhere

Subagent prompts MUST (per comment-discipline.md section 5, delegated agents do not auto-load rules):

  • name the exact rule files to read before looking at code, and the changed-file list in scope;
  • require every candidate as file:line + a one-sentence claim + a concrete failure scenario ("as user X calling Y, Z happens");
  • forbid running linters, pnpm build, tsc, or full test suites (targeted -k runs only, inside the docker containers, never on the host);
  • return raw findings, not prose or praise.

4. Judge: verify every finding

For each candidate, re-read the cited code yourself and try to refute it. Check the claim against the real gate order, the real call sites, the real cache keys. Only findings that survive the refutation attempt are reported, and each keeps the evidence that confirmed it. This is the project bar: findings are a few sentences with file/function/line specifics and a fix proposal that was actually verified during the review, no guesses.

Classify what survives:

  • Bug - broken at current scale. Goes in the review, severity-ordered.
  • Scaling limit - correct today, falls over later. Goes in .agents/local/scaling-reviews/{kebab-case}.md with the load at which it bites and the mitigation levers; the review links it.
  • Consistency drift - style, reuse, rule violations. Reported below the bugs, batched.

Known non-findings to reject on sight: an admin who cannot see a member's content (that is the permission model working); missing deprecation aliases or compat shims (pre-production, clean cuts are policy); generated-code diffs; missing docstrings on self-explanatory functions (comment discipline prefers deletion).

5. Report

Write .agents/local/reviews/{kebab-case}.md and reply with the same content:

  • Header: date, scope (branch, commit range, uncommitted or not), upstream alignment status.
  • Findings ordered most severe first, each with file/function/line, the verified failure scenario, and the verified fix proposal.
  • A short "checked, nothing found" list per dimension actually swept, so silence reads as coverage rather than omission.
  • Commands run and their results.

6. Fix (when the request includes it)

The skill's second hat is fixer. If the user asked for review-and-fix, apply the confirmed findings after reporting, one finding at a time:

  • Fix, then prove it with a targeted test (docker exec uniffy-dev-backend python -m pytest <file> -k <case>) or the exact repro from the finding. No full suites, no linters during the loop.
  • After any .proto edit: ./manage.py proto, then restart the backend container (watchfiles does not reliably pick up generated-code changes).
  • One full validation at the end only: ./manage.py lint -s backend / -s ui for touched sides plus the relevant test suites.
  • Update the review file with an outcome per finding (fixed / skipped and why).

Gotchas

  • Do not restart the backend to "apply" a Python change - it auto-reloads, and restarts kill live sessions. Restart only after proto regeneration.
  • Test tier discipline: never assert on compiled SQL text; query behavior is proven on real Postgres in tests/integration/ (local-only). Unit findings about filters belong there as row-level assertions.
  • A grep gate beats a claim. "No caller remains" and "no import remains" are one command; run it and paste it rather than asserting it.
  • Big diffs: review the operations and gates first, handlers second, UI last. The permission mistake is always in operations; the UI can render controls the backend denies and that is safe by design.

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

commit

무료

Create a conventional commit for all uncommitted changes

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

uniffy-io/uniffy682026년 10월 23일 업데이트

Create a Product Requirements Document from the current conversation and save it under `.agents/local/plans/`. Use when the user asks for a PRD, product specification, or requirements document for an Uniffy feature.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

uniffy-io/uniffy682026년 10월 23일 업데이트

execute

무료

Execute or resume an implementation plan from `.agents/local/plans/`, keeping its companion backlog and validation evidence current. Use when the user asks to implement a saved plan or continue planned multi-phase work.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

uniffy-io/uniffy682026년 10월 23일 업데이트

Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

uniffy-io/uniffy682026년 10월 23일 업데이트

Audit the in-tree model catalog against each provider's live API (Anthropic, OpenAI, Google, OpenRouter, xAI) using the keys in .env. Surfaces new models the catalog is missing, catalog models a provider no longer returns, and price/context drift on the curated OpenRouter subset, so the catalog stays current. Works on both stacks (docker containers or host venv). Run periodically or when a provider ships new models / changes pricing.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

uniffy-io/uniffy682026년 10월 23일 업데이트

Create a comprehensive Uniffy feature plan in `.agents/local/plans/` through deep codebase analysis, applicable rules, verified patterns, risks, tests, and executable validation steps. Use when the user asks to plan a feature or prepare implementation work without writing product code.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

uniffy-io/uniffy682026년 10월 23일 업데이트

uniffy-io의 스킬 모두 보기

이 스킬의 문제 신고