Commit eac1c56
authored
ENH: Add Claude Code project scaffolding and developer tooling (#34)
* ENH: Add .claude configuration as part of the repo
* BUG: Address CoPilot and CodeRabbit reviews
**PR:** ENH: Add Claude Code project scaffolding and developer tooling
**Branch:** `claude_agents` -> `main`
**Reviewed:** 2026-03-28
**Comments processed:** 16 (2 PR-level, 14 inline)
| # | File | Line | Reviewer | Decision | Reasoning |
|---|------|------|----------|----------|-----------|
| 1 | *(PR overview)* | — | copilot | SKIPPED | Overview comment only; no actionable change |
| 2 | *(PR overview)* | — | coderabbitai | SKIPPED | Overview comment only; no actionable change |
| 3 | `.pre-commit-config.yaml` | 35 | copilot | APPLIED | Fixed `python` -> `py` per project convention (Windows launcher) |
| 4 | `CLAUDE.md` | 107 | copilot | REJECTED | Suggested `X \| None`; CLAUDE.md explicitly mandates `Optional[X]` (UP007 suppressed) |
| 5 | `AGENTS.md` | 15 | copilot | REJECTED | Same `Optional[X]` rule — project convention is unambiguous |
| 6 | `utils/setup_feature_worktree.py` | 241 | copilot | APPLIED | Fixed missing `f` prefix — `{branch_name}` was printing as a literal string |
| 7 | `utils/setup_feature_worktree.py` | 200 | copilot | REJECTED | Adding `git check-ref-format` validation is beyond stated scope of the script |
| 8 | `utils/setup_feature_worktree.py` | 389 | copilot | REJECTED | Lockfile detection is speculative; current editable-install fallback is intentional design |
| 9 | `.claude/agents/architecture.md` | 12 | coderabbitai | APPLIED | Added `text` language tag to unlabeled code fence (MD040) |
| 10 | `.claude/agents/testing.md` | 22 | coderabbitai | REVISED | `::test_extract_surface` does not exist; replaced with `::TestContourTools` (verified against test file) |
| 11 | `AGENTS.md` | 13 | coderabbitai | REJECTED | Narrowing the `Optional[X]` rule to specific contexts would diverge from CLAUDE.md, which states it universally |
| 12 | `CLAUDE.md` | 55 | coderabbitai | APPLIED | Fixed `python` -> `py` in API map regeneration command |
| 13 | `CLAUDE.md` | 69 | coderabbitai | APPLIED | Fixed stale class name `CompareImages` -> `TestTools` (confirmed by reading `test_tools.py`) |
| 14 | `README.md` | 701 | coderabbitai | APPLIED | Added `text` language tag to 7 unlabeled fenced code blocks (MD040) |
| 15 | `vtk_to_usd/CLAUDE.md` | 10 | coderabbitai | REJECTED | Strict wording is intentional; softening it risks agents bypassing `ConvertVTKToUSD` |
| 16 | `utils/setup_feature_worktree.py` | 242 | coderabbitai | SKIPPED | Duplicate of #6; f-string fix already applied |
- **`.pre-commit-config.yaml`** — `python` -> `py` (Windows launcher consistency)
- **`utils/setup_feature_worktree.py:242`** — added missing `f` prefix to f-string; `{branch_name}` was printing as a literal
- **`.claude/agents/architecture.md`** — added `text` to unlabeled code fence (MD040 lint)
- **`.claude/agents/testing.md`** — replaced nonexistent test node ID `::test_extract_surface` with `::TestContourTools`
- **`CLAUDE.md:55`** — `python` -> `py` in API map regeneration command
- **`CLAUDE.md:69`** — `CompareImages` -> `TestTools` (stale class name)
- **`README.md`** — `text` tag added to 7 unlabeled fenced code blocks
- **`X | None` syntax (×2, copilot + coderabbitai):** CLAUDE.md explicitly mandates `Optional[X]`; ruff UP007 is suppressed project-wide. No exceptions.
- **`git check-ref-format` validation (copilot):** Speculative complexity for a utility script with a clear, narrow scope.
- **Lockfile/pip-upgrade detection (copilot):** The editable-install fallback is a documented intentional design choice, not an oversight.
- **`vtk_to_usd/CLAUDE.md` wording (coderabbitai):** The strict "never call this from outside `ConvertVTKToUSD`" language is a deliberate guardrail; weakening it undermines the purpose of the file.
- **`AGENTS.md` `Optional[X]` scoping (coderabbitai):** The rule is universal by design; scoping it to specific contexts would create ambiguity.
1. **`python` vs `py`** appeared in 3 files; all fixed. This is a recurring slip — the Windows launcher convention should be enforced by pre-commit or linting if it keeps appearing.
2. **`Optional[X]` vs `X | None`** was the dominant reviewer conflict. Both bots flagged it repeatedly. The project rule is clear and was correctly rejected each time, but it may be worth adding a note to `CONTRIBUTING` so external reviewers understand it is intentional.
3. **The f-string bug** (`{branch_name}` missing `f` prefix) was independently caught by both reviewers — a genuine defect. Worth adding a pre-commit check or test for this pattern in utility scripts.
4. **CodeRabbit nitpicks** consistently trended toward adding speculative complexity (lockfile variants, pip upgrade paths, extended validation) that conflicts with CLAUDE.md's explicit instruction to avoid handling impossible or out-of-scope scenarios.
* ENH: tighten agent rules, simplify API map hook, add --since-last-push to review script
- claude_github_reviews: filter by remote reflog cutoff; document py vs venv
- pre-commit: run generate_api_map without bash/git add wrapper
- AGENTS / vtk_to_usd CLAUDE: narrow PhysioMotion4DBase and print() guidance
- Regenerate docs/API_MAP.md1 parent d2325e1 commit eac1c56
19 files changed
Lines changed: 2929 additions & 78 deletions
File tree
- .claude
- agents
- skills
- doc-feature
- impl
- plan
- test-feature
- docs
- src/physiomotion4d/vtk_to_usd
- utils
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | | - | |
3 | 2 | | |
4 | 3 | | |
5 | 4 | | |
| |||
0 commit comments