agentleFS
spiriMirrorspiriMirror/libuipc/.cursor/skills/review-pr/SKILL.md

review-pr

Skill351 starsChanged 3 months agoApache-2.0View on GitHub

Review a libuipc pull request end-to-end: checkout the PR, summarize changes, list files for the human reviewer, and perform a domain-aware AI review covering physics correctness, backend architecture, C++ style, GPU code, and Python bindings. Optionally post review comments via `gh`. Use when the user provides a PR number, asks to review a PR, or wants to inspect a libuipc GitHub PR.

185 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use diagnose-ci-failures, docs-loop and 10 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • zerx-labSkill

    diagnose-ci-failures

    Diagnose CI failures for a PR using the GitHub CLI, extract error logs, and generate a plan to fix them. Use when the user asks to check CI status, pull CI issues, triage test failures, or investigate PR build failures.

    Also in 3 projects that use this

  • GeiserXSkill

    docs-loop

    Use when the user asks to audit docs, check documentation for stale claims, or verify docs against the code.

    Also in 3 projects that use this

  • GeiserXSkill

    full-loop

    Drive a repository to done with sergio-loop, then keep improving it with refine-loop at a descending theta. Use only when the user explicitly invokes full-loop.

    Also in 3 projects that use this

  • n24q02mSkill

    review-delta

    Review only changes since last commit using impact analysis. Token-efficient delta review with automatic blast-radius detection.

    Also in 3 projects that use this

  • n24q02mSkill

    build-graph

    Build or update the code review knowledge graph. Run this first to initialize, or let hooks keep it updated automatically.

    Also in 3 projects that use this

  • +7 more from GeiserX

The file

We split this skill into the rules it gives an agent

4 rules. 0 are common, 2 are distinctive, and 2 are very specific to this project.

  • 0

    Common

    Most of the 178 edited versions we read keep these.

  • 2

    Distinctive

    This author's own choices. Worth a look.

  • 2

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Follow the owner working agreements.

    line 14
  2. Very specific:

    Run gh pr diff <PR_NUMBER> --repo spiriMirror/libuipc and check every area below that is touched.

    line 88
  3. Distinctive:

    Use this markdown link format for every citation:

    line 150
  4. Very specific:

    Run gh auth status first if commands fail.

    line 214

“Common” is measured: kept by at least 6 in 10 of the 178 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

libuipc PR Review

Follow the owner working agreements. Inspect PRs without changing the working branch unless the user requests checkout; a review does not authorize publication.

Architecture primer (read before reviewing)

libuipc is a GPU-accelerated Incremental Potential Contact (IPC) simulation library (C++20 + optional Python/pybind11).

Layer split:

LayerPathRole
Coresrc/core/, include/uipc/Engine lifecycle, Scene/World, geometry attribute ECS
Geometrysrc/geometry/Mesh algorithms; libigl, TBB, Octree, embedded C++ METIS
Constitutionsrc/constitution/Material / constraint implementations
I/Osrc/io/Scene + mesh serialisation
Sanity checksrc/sanity_check/Pre-sim scene validation
Backendssrc/backends/<name>/Physics engines as runtime-loaded SHARED libraries in test and packaged builds
Pybindsrc/pybind/Thin pybind11 wrapper; mirrors C++ submodules

Backend plugin ABI (src/backends/common/module.h):

  • Exports: uipc_query_module, uipc_init_module, uipc_create_engine, uipc_destroy_engine
  • Core validates backend ABI, libuipc major/minor and backend identity before init/create.
  • Engine hierarchy: core::IEngine → backend::SimEngine → CUDA/none engines. Systems separately derive from ISimSystem / SimSystem and register with their engine.
  • RMR (Reporter–Manager–Receiver) data-oriented design; avoid heavy OOP in backend code

CUDA backend subsystems (most review-sensitive): affine_body/, finite_element/, contact_system/, collision_detection/, distance_system/, active_set_system/, inter_primitive_effect_system/, engine/ (Newton + augmented-Lagrangian step in advance_al.cu)

Workflow

1. Checkout and fetch metadata

# Only when checkout is requested:
gh pr checkout <PR_NUMBER> --repo spiriMirror/libuipc
gh pr view <PR_NUMBER> --repo spiriMirror/libuipc --json title,body,author,baseRefName,headRefName,headRefOid,headRepository,url,additions,deletions,changedFiles
gh pr diff <PR_NUMBER> --name-only --repo spiriMirror/libuipc

2. Present summary to the human reviewer

## PR #<N>: <title>
Author: <author>   Branch: `<head>` → `<base>`
URL: <url>
Stats: +<add> / -<del> across <N> files

### Description
<body>

### Files to review  (grouped by subsystem)
#### Backend — CUDA physics
  src/backends/cuda/affine_body/...
  src/backends/cuda/finite_element/...
  ...
#### Core / Public API
  include/uipc/...
  src/core/...
#### Geometry / Constitution
  src/geometry/...   src/constitution/...
#### Python bindings
  src/pybind/...   python/src/uipc/...
#### Build / CMake
  CMakeLists.txt   src/backends/.../CMakeLists.txt
#### Tests
  apps/tests/...   python/tests/...

3. AI review — libuipc-specific checklist

Run gh pr diff <PR_NUMBER> --repo spiriMirror/libuipc and check every area below that is touched. Metadata fields must match the GitHub CLI JSON contract.


Fast fail

  • All expected internal invariants are checked with UIPC_ASSERT where feasible
  • All user-facing inputs are validated with UIPC_ASSERT_THROW

C++20 style

  • C-style code is forbidden unless unavoidable (e.g., DLL export signatures)
  • Raw pointer parameters are forbidden unless unavoidable; prefer span<T>
  • const std::string& parameters are forbidden; use std::string_view instead
  • Multiple inheritance is forbidden; separate concerns into distinct classes

CUDA / GPU code

  • GPU buffer arguments use cuda_tool::BufferView / sparse-matrix views instead of raw pointers
  • Business kernels are named __global__ functions with raw <<<>>> launches
  • CUB scratch is persistent; buffer growth preserves the required initialization/history
  • Correctness findings identify algorithmic or synchronization defects, not valid atomic-order rounding alone
  • Raw pointer parameters are forbidden in device code unless unavoidable

Constitution / material

  • New constitutions implement required IConstitution-family interface
  • Material parameters validated / clamped (no negative stiffness, density, etc.)

Public C++ API (include/uipc/)

  • No breaking changes to public headers without a version bump or deprecation notice
  • New public classes/functions follow existing naming: CamelCase types, snake_case functions, m_ prefix for members
  • #pragma once present; no <windows.h>-style global macros leaked

C++ style (.clang-format enforced)

  • 4-space indent, 80-column limit
  • Allman braces ({ on its own line)
  • Left-aligned pointers (int* p, not int *p)
  • No using namespace std; in headers

CMake / XMake

  • Build-affecting changes are mirrored in both build systems, including CUDA component ownership
  • New backend follows uipc_add_backend(name) macro in src/backends/CMakeLists.txt
  • New CMake options added to the root CMakeLists.txt option block with sensible defaults
  • file(GLOB ...) patterns extended if new source subdirs added

Python bindings (src/pybind/ + python/)

  • Check whether new features expose a public API that should be mirrored in the Python bindings
  • New C++ types exposed via matching pybind submodule (mirrors C++ namespace)
  • __init__.py import chain not broken (pyuipc → init() → config["module_dir"])
  • Python-side tests added under python/tests/ for new pybind surface

Tests

  • C++ tests use Catch2 macros; added via uipc_add_test in the appropriate apps/tests/<subsystem>/CMakeLists.txt
  • Regression tests added for bug fixes

4. Output format

Each finding must have a sequential number (1, 2, 3 … across all severity tiers) and a clickable local file link constructed from the absolute repo path + relative file path. Use this markdown link format for every citation:

[filename.ext:LINE](ABSOLUTE_REPO_PATH/relative/path/to/file.ext)

For example, if the repo is at /home/user/libuipc and the file is src/backends/cuda/affine_body/foo.cu at line 42:

[foo.cu:42](/home/user/libuipc/src/backends/cuda/affine_body/foo.cu)

Full output template:

## AI Review — PR #<N>

### Summary of changes
<one paragraph>

### Findings

🔴 Critical (must fix)
**#1** — [filename.ext:LINE](ABSOLUTE_PATH/relative/path/filename.ext)
Description of the issue and why it matters.

**#2** — [filename.ext:LINE](ABSOLUTE_PATH/relative/path/filename.ext)
Description.

🟡 Suggestion
**#3** — [filename.ext:LINE](ABSOLUTE_PATH/relative/path/filename.ext)
Description.

🟢 Nice-to-have
**#4** — [filename.ext:LINE](ABSOLUTE_PATH/relative/path/filename.ext)
Description.

### Checklist coverage
(tick the items above that were verified or N/A)

5. Post comments via gh (when asked)

General review comment / request changes / approve:

gh pr review <PR_NUMBER> --repo spiriMirror/libuipc --comment --body "..."
gh pr review <PR_NUMBER> --repo spiriMirror/libuipc --request-changes --body "..."
gh pr review <PR_NUMBER> --repo spiriMirror/libuipc --approve --body "LGTM"

Inline comment on a specific line:

gh api repos/<OWNER>/<REPO>/pulls/<PR_NUMBER>/comments \
  --method POST \
  -f path="<FILE_PATH>" \
  -f body="Your comment" \
  -F line=<LINE_NUMBER> \
  -f side="RIGHT" \
  -f commit_id="<HEAD_REF_OID>"

Run gh auth status first if commands fail.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.