review(mcp): reject non-finite TRS components in node-anim helper - #588
Conversation
CodeRabbit nit on PR #587 — `readNumericArray` accepted any JSON Double, but extremely large literals (e.g. `1e400`) parse as Inf and would propagate silently into the keyframe + downstream exporters. Round-trip through glTF would then NaN-cascade. Fix: `std::isfinite()` check on each component; rejection message mentions "finite" so callers know what failed. New regression test on `SetNodeKeyframe_RejectsNonFiniteTRSComponent` exercises the 1e400 path. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
Warning Rate limit exceeded
You’ve run out of usage credits. Purchase more in the billing tab. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (2)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
Fourth sub-slice of #520. Adds a CLI subcommand to enumerate node-animation clips on a scene file from the shell. Mirrors the existing `qtmesh morph --list` precedent: one file in, names + count out (text or `--json`). Useful for CI scripts that audit Mixamo- style assets imported via the editor's GUI, and the round-trip target for the future C5 glTF/FBX exporter work. ## What ships - `cmdNodeAnim(argc, argv)` in `CLIPipeline.{h,cpp}` — parses `nodeanim <file> --list [--json]`, runs `MeshImporterExporter::importer`, reads `NodeAnimationManager::instance()->listClips()`, prints text or JSON. JSON shape mirrors `qtmesh morph --list --json`: `{ file, count, clips: [name…] }`. - Subcommand registration in `main.cpp` (CLI-mode detection by first non-flag arg) and `CLIPipeline::run` dispatcher. - Help text in `printUsage` next to the `morph` line. ## What's deferred - Authoring on the CLI side (`--add-clip`, `--add-keyframe`, `-o out.gltf`) needs the C5 exporter round-trip first — otherwise edits don't persist anywhere outside the in-process scene. ## #520 status | Sub-slice | Status | |-|-| | C1 — Manager data layer | shipped (#584) | | C3 — Undo commands | shipped (#585) | | C6 — MCP tools | shipped (#586, hardened #587 + #588) | | C-CLI — `qtmesh nodeanim --list` | **this PR** | | C2 — Inspector subgroup | follow-up | | C4 — Dope-sheet integration | follow-up | | C5 — glTF + FBX exporter round-trip | follow-up | Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>



CodeRabbit nit on PR #587 (merged) —
readNumericArrayaccepted any JSON Double, but extremely large literals (e.g.1e400) parse asInfand would propagate silently into the keyframe + downstream exporters. Round-trip through glTF would then NaN-cascade.Fix
std::isfinite()check on each component before storing.1 new test
SetNodeKeyframe_RejectsNonFiniteTRSComponentexercises1e400in a translate slot.🤖 Generated with Claude Code