Skip to main content

review-pr

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.

소스 정보

저장소
spiriMirror/libuipc
최근 소스 활동
2026년 9월 3일 16:42
감지된 SKILL.md 언어
영어
스타
335
포크
68

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
review-pr
description
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.
# libuipc PR Review ## Architecture primer (read before reviewing) libuipc is a GPU-accelerated Incremental Potential Contact (IPC) simulation library (C++20 + optional Python/pybind11). **Layer split:** | Layer | Path | Role | |-------|------|------| | Core | `src/core/`, `include/uipc/` | Engine lifecycle, Scene/World, geometry attribute ECS | | Geometry | `src/geometry/` | Mesh algorithms; libigl, TBB, Octree, embedded C++ METIS | | Constitution | `src/constitution/` | Material / constraint implementations | | I/O | `src/io/` | Scene + mesh serialisation | | Sanity check | `src/sanity_check/` | Pre-sim scene validation | | Backends | `src/backends/<name>/` | Physics engines as runtime-loaded **MODULE** DLLs | | Pybind | `src/pybind/` | Thin pybind11 wrapper; mirrors C++ submodules | **Backend plugin ABI** (`src/backends/common/module.h`): - Exports: `uipc_init_module`, `uipc_create_engine`, `uipc_destroy_engine` - Base classes: `SimEngine` → `ISimSystem` → subsystem folders (`affine_body/`, `finite_element/`, `contact_system/`, `collision_detection/`, etc.) - 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 ```bash gh pr checkout <PR_NUMBER> gh pr view <PR_NUMBER> --json title,body,author,baseRefName,headRefName,headRefOid,repository,url,additions,deletions,changedFiles gh pr diff <PR_NUMBER> --name-only ``` ### 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>` and check every area below that is touched. --- #### 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 `muda::BufferView` / `muda::TripletMatrixView` (or equivalent view types) instead of raw pointers - [ ] 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 - [ ] 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:** ```bash gh pr review <PR_NUMBER> --comment --body "..." gh pr review <PR_NUMBER> --request-changes --body "..." gh pr review <PR_NUMBER> --approve --body "LGTM" ``` **Inline comment on a specific line:** ```bash 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.
GitHub에서 보기