A contact solver for physics-based simulations involving 👚 shells, 🪵 solids, 🪢 rods, 🧱 rigid bodies and ⏳ sand.
This report presents the forensic synthetic code analysis of st-tech/ppf-contact-solver, a Python project with 4,287 GitHub stars. SynthScan v2.0 examined 241,814 lines of code across 749 source files, recording 2782 pattern matches distributed across 21 syntactic categories. The overall adjusted score of 17.9 places this repository in the Moderate AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 2782 distinct pattern matches across 21 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | crates/ppf-cts-core/src/transitions/mod.rs | 32 | // ── Project context ───────────────────────────────────────── | COMMENT |
| MEDIUM | crates/ppf-cts-core/src/transitions/mod.rs | 132 | // ── Upload landing ────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/ppf-cts-core/src/transitions/mod.rs | 190 | // ── Build ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/ppf-cts-core/src/transitions/mod.rs | 293 | // ── Solver operations ────────────────────────────────────── | COMMENT |
| MEDIUM | crates/ppf-cts-core/src/transitions/mod.rs | 379 | // ── Solver monitor events ────────────────────────────────── | COMMENT |
| MEDIUM | crates/ppf-cts-core/src/transitions/mod.rs | 463 | // ── Delete ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/ppf-cts-core/src/transitions/mod.rs | 483 | // ── Generic error ───────────────────────────────────────── | COMMENT |
| MEDIUM | crates/ppf-cts-core/src/transitions/mod.rs | 492 | // ── Guard-rejected or unknown ───────────────────────────── | COMMENT |
| MEDIUM | frontend/_scene_.py | 253 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | frontend/tests/_invisible_collider_.py | 82 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | frontend/tests/_invisible_collider_.py | 84 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | frontend/tests/_invisible_collider_.py | 207 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | frontend/tests/_invisible_collider_.py | 209 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | frontend/tests/_invisible_collider_.py | 283 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | frontend/tests/_invisible_collider_.py | 285 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | frontend/tests/_invisible_collider_.py | 329 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | frontend/tests/_invisible_collider_.py | 331 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | frontend/tests/_invisible_collider_.py | 398 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | frontend/tests/_invisible_collider_.py | 400 | # ============================================================================= | COMMENT |
| MEDIUM | frontend/tests/_invisible_collider_.py | 25 | # ============================================================================= | COMMENT |
| MEDIUM | frontend/tests/_invisible_collider_.py | 27 | # ============================================================================= | COMMENT |
| MEDIUM | frontend/tests/_invisible_collider_.py | 496 | # ============================================================================= | COMMENT |
| MEDIUM | frontend/tests/_invisible_collider_.py | 498 | # ============================================================================= | COMMENT |
| MEDIUM | frontend/tests/_invisible_collider_.py | 537 | # ============================================================================= | COMMENT |
| MEDIUM | frontend/tests/_invisible_collider_.py | 539 | # ============================================================================= | COMMENT |
| MEDIUM | calibration/report.py | 78 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | calibration/report.py | 80 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | calibration/report.py | 120 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | calibration/report.py | 122 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | calibration/report.py | 156 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | calibration/report.py | 158 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | calibration/report.py | 195 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | calibration/report.py | 197 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | calibration/report.py | 269 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | calibration/report.py | 271 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | calibration/report.py | 381 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | calibration/report.py | 384 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | calibration/cusick_drape/cusick_drape.py | 95 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | calibration/cusick_drape/cusick_drape.py | 97 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | calibration/cusick_drape/cusick_drape.py | 140 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | calibration/cusick_drape/cusick_drape.py | 142 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | calibration/cusick_drape/cusick_drape.py | 210 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | calibration/cusick_drape/cusick_drape.py | 212 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | calibration/cusick_drape/cusick_drape.py | 252 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | calibration/cusick_drape/cusick_drape.py | 254 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | calibration/cusick_drape/cusick_drape.py | 343 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | calibration/cusick_drape/cusick_drape.py | 345 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | blender_addon/capture.sh | 4 | # ============================================================================ | COMMENT |
| MEDIUM | blender_addon/capture.sh | 6 | # ============================================================================ | COMMENT |
| MEDIUM | blender_addon/capture.sh | 72 | # ============================================================================ | COMMENT |
| MEDIUM | blender_addon/ui/debug_ops.py | 517 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | blender_addon/ui/debug_ops.py | 529 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | blender_addon/ui/capture.py | 88 | # =========================================================================== | COMMENT |
| MEDIUM | blender_addon/ui/capture.py | 90 | # =========================================================================== | COMMENT |
| MEDIUM | blender_addon/ui/capture.py | 221 | # =========================================================================== | COMMENT |
| MEDIUM | blender_addon/ui/capture.py | 223 | # =========================================================================== | COMMENT |
| MEDIUM | blender_addon/ui/capture.py | 414 | # =========================================================================== | COMMENT |
| MEDIUM | blender_addon/ui/capture.py | 416 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | blender_addon/ui/dynamics/pin_capture_ops.py | 95 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | blender_addon/ui/dynamics/pin_capture_ops.py | 97 | # --------------------------------------------------------------------------- | COMMENT |
| 369 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | Cargo.toml | 21 | # `ppf-cts-solver`), the tokio-based solver host (`ppf-cts-server`), and | COMMENT |
| LOW | install-blender.sh | 1 | #!/bin/bash | COMMENT |
| LOW | install-blender.sh | 21 | # /Applications/Blender.app -- copied from the official .dmg | COMMENT |
| LOW | install-blender-addon.sh | 1 | #!/bin/bash | COMMENT |
| LOW | tools/clear_notebook_outputs.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | crates/ppf-cts-core/build.rs | 1 | // File: build.rs | COMMENT |
| LOW | crates/ppf-cts-core/cpp/intersect_ffi.cpp | 1 | // File: intersect_ffi.cpp | COMMENT |
| LOW | crates/ppf-cts-core/benches/rasterizer.rs | 1 | // File: crates/ppf-cts-core/benches/rasterizer.rs | COMMENT |
| LOW | crates/ppf-cts-core/src/parsers.rs | 1 | // File: crates/ppf-cts-core/src/parsers.rs | COMMENT |
| LOW | crates/ppf-cts-core/src/parsers.rs | 21 | // * `SimpleLog logging("name")` opens a parent group (subsequent | COMMENT |
| LOW | crates/ppf-cts-core/src/events.rs | 1 | // File: crates/ppf-cts-core/src/events.rs | COMMENT |
| LOW | crates/ppf-cts-core/src/events.rs | 41 | /// `Total Frames` from scene_info.json when readable; 0 when | COMMENT |
| LOW | crates/ppf-cts-core/src/events.rs | 141 | /// rest of the monitor loop drives frame / finish / crash | COMMENT |
| LOW | crates/ppf-cts-core/src/cancel.rs | 1 | // File: crates/ppf-cts-core/src/cancel.rs | COMMENT |
| LOW | crates/ppf-cts-core/src/lib.rs | 1 | // File: crates/ppf-cts-core/src/lib.rs | COMMENT |
| LOW | crates/ppf-cts-core/src/effects.rs | 1 | // File: crates/ppf-cts-core/src/effects.rs | COMMENT |
| LOW | crates/ppf-cts-core/src/effects.rs | 21 | COMMENT | |
| LOW | crates/ppf-cts-core/src/extra.rs | 1 | // File: crates/ppf-cts-core/src/extra.rs | COMMENT |
| LOW | crates/ppf-cts-core/src/state.rs | 1 | // File: crates/ppf-cts-core/src/state.rs | COMMENT |
| LOW | crates/ppf-cts-core/src/state.rs | 41 | #[derive(Default)] | COMMENT |
| LOW | crates/ppf-cts-core/src/state.rs | 81 | /// echoes them on every status response so the client can detect | COMMENT |
| LOW | crates/ppf-cts-core/src/utils.rs | 1 | // File: crates/ppf-cts-core/src/utils.rs | COMMENT |
| LOW | crates/ppf-cts-core/src/utils.rs | 321 | get_ci_root().join(ci_name) | COMMENT |
| LOW | crates/ppf-cts-core/src/utils.rs | 341 | /// the solver can flush state; on Windows we fall back to | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/bvh.rs | 1 | // File: crates/ppf-cts-core/src/kernels/bvh.rs | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/bvh.rs | 641 | } | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/constants.rs | 1 | // File: crates/ppf-cts-core/src/kernels/constants.rs | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/fixed_scene_assemble.rs | 1 | // File: crates/ppf-cts-core/src/kernels/fixed_scene_assemble.rs | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/fixed_scene_assemble.rs | 41 | /// assembly never owns Python state. | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/fixed_scene_assemble.rs | 61 | /// are tolerated (skipped). Empty slice = treat every triangle as 0. | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/fixed_scene_assemble.rs | 141 | pub combined_message: String, | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/fixed_scene_assemble.rs | 161 | /// | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/scene_loops.rs | 1 | // File: crates/ppf-cts-core/src/kernels/scene_loops.rs | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/scene_loops.rs | 41 | PinOpsOffsetsMismatch { ops_len: usize, headers_len: usize }, | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/scene_loops.rs | 181 | out.extend_from_slice(&index_data[s..e]); | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/scene_loops.rs | 241 | // Transform-keyframe segment interpolation packing. | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/geom_util.rs | 1 | // File: crates/ppf-cts-core/src/kernels/geom_util.rs | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/geom_util.rs | 81 | } else if point[i] > bmax[i] { | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/decoder.rs | 1 | // File: crates/ppf-cts-core/src/kernels/decoder.rs | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/decoder.rs | 21 | // path math and the validation helpers the Python decoder calls | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/invisible_collider.rs | 1 | // File: crates/ppf-cts-core/src/kernels/invisible_collider.rs | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/invisible_collider.rs | 61 | /// | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/proximity.rs | 1 | // File: crates/ppf-cts-core/src/kernels/proximity.rs | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/rasterizer.rs | 1 | // File: crates/ppf-cts-core/src/kernels/rasterizer.rs | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/rasterizer.rs | 21 | // pixel being independent operations that any single thread can | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/rasterizer.rs | 41 | COMMENT | |
| LOW | crates/ppf-cts-core/src/kernels/intersection.rs | 1 | // File: crates/ppf-cts-core/src/kernels/intersection.rs | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/intersection.rs | 21 | // | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/sdf.rs | 1 | // File: crates/ppf-cts-core/src/kernels/sdf.rs | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/sdf.rs | 421 | /// Marching cubes over the SDF union. Builds the grid internally, | COMMENT |
| LOW | …ates/ppf-cts-core/src/kernels/scene_build/index_map.rs | 1 | // File: crates/ppf-cts-core/src/kernels/scene_build/index_map.rs | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/scene_build/color_uv.rs | 1 | // File: crates/ppf-cts-core/src/kernels/scene_build/color_uv.rs | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/scene_build/color_uv.rs | 221 | COMMENT | |
| LOW | …tes/ppf-cts-core/src/kernels/scene_build/quaternion.rs | 1 | // File: crates/ppf-cts-core/src/kernels/scene_build/quaternion.rs | COMMENT |
| LOW | …tes/ppf-cts-core/src/kernels/scene_build/pin_kernel.rs | 1 | // File: crates/ppf-cts-core/src/kernels/scene_build/pin_kernel.rs | COMMENT |
| LOW | …tes/ppf-cts-core/src/kernels/scene_build/pin_kernel.rs | 21 | use super::quaternion::{apply_trs_to_verts, quat_slerp}; | COMMENT |
| LOW | …tes/ppf-cts-core/src/kernels/scene_build/pin_kernel.rs | 201 | COMMENT | |
| LOW | crates/ppf-cts-core/src/kernels/scene_build/mod.rs | 1 | // File: crates/ppf-cts-core/src/kernels/scene_build/mod.rs | COMMENT |
| LOW | …s/ppf-cts-core/src/kernels/scene_build/mesh_metrics.rs | 1 | // File: crates/ppf-cts-core/src/kernels/scene_build/mesh_metrics.rs | COMMENT |
| LOW | …ates/ppf-cts-core/src/kernels/scene_build/transform.rs | 1 | // File: crates/ppf-cts-core/src/kernels/scene_build/transform.rs | COMMENT |
| 588 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | warmup.py | 361 | print(f"Error: pip not found at {pip_path}") | CODE |
| MEDIUM | warmup.py | 1101 | print(f"Error: Architecture '{machine}' is not supported.") | CODE |
| LOW | warmup.py | 663 | except Exception as e: | CODE |
| LOW | warmup.py | 975 | except Exception as e: | CODE |
| LOW | warmup.py | 988 | except Exception as e: | CODE |
| LOW | warmup.py | 1001 | except Exception as e: | CODE |
| LOW | warmup.py | 1030 | except Exception as e: | CODE |
| LOW | warmup.py | 1043 | except Exception as e: | CODE |
| LOW | warmup.py | 1056 | except Exception as e: | CODE |
| LOW | warmup.py | 1069 | except Exception as e: | CODE |
| LOW | warmup.py | 1082 | except Exception as e: | CODE |
| LOW | crates/ppf-cts-py/tests/python_smoke.py | 31 | except Exception as e: # pragma: no cover - environment-dependent | CODE |
| LOW | frontend/_mesh_.py | 290 | except Exception as e: | CODE |
| LOW | frontend/_mesh_.py | 886 | except Exception as e: | STRING |
| LOW | frontend/build_worker.py | 211 | except Exception: | CODE |
| LOW | frontend/build_worker.py | 215 | except Exception as exc: | CODE |
| LOW | frontend/build_worker.py | 248 | except Exception as werr: # best-effort; never mask the build error | CODE |
| LOW | frontend/_session_.py | 1058 | except Exception as e: | CODE |
| LOW | frontend/_session_.py | 1070 | except Exception as e: | CODE |
| LOW | frontend/_session_.py | 1199 | except Exception: | CODE |
| LOW | frontend/_session_.py | 1208 | except Exception as _: | CODE |
| LOW | frontend/_session_.py | 1594 | except Exception: | CODE |
| LOW | frontend/_session_.py | 1604 | except Exception: | CODE |
| LOW | frontend/_decoder_.py | 1563 | except Exception: | CODE |
| LOW | frontend/_decoder_.py | 1594 | except Exception: | CODE |
| LOW | frontend/_decoder_.py | 1633 | except Exception: | CODE |
| LOW | frontend/_decoder_.py | 1726 | except Exception: | CODE |
| LOW | frontend/_decoder_.py | 2651 | except Exception: | CODE |
| MEDIUM | frontend/_utils_.py | 129 | print("Error occurred while running nvidia-smi:", e) | CODE |
| MEDIUM | frontend/_utils_.py | 148 | print("Error occurred while running nvidia-smi:", e) | CODE |
| LOW | frontend/tests/_proximity_.py | 370 | except Exception as e: | CODE |
| LOW | frontend/tests/_self_intersection_.py | 416 | except Exception as e: | CODE |
| LOW | frontend/tests/_cbor_bridge_.py | 87 | except Exception as e: | CODE |
| LOW | frontend/tests/_sdf_.py | 65 | except Exception as e: | CODE |
| LOW | frontend/tests/_rasterizer_.py | 75 | except Exception as e: | CODE |
| LOW | frontend/tests/_bvh_.py | 372 | except Exception as e: | CODE |
| LOW | frontend/tests/_invisible_collider_.py | 585 | except Exception as e: | CODE |
| LOW | frontend/tests/_decoder_solid_threshold_.py | 39 | except Exception as exc: # pragma: no cover - environment-dependent | CODE |
| LOW | frontend/tests/_asset_.py | 99 | except Exception as e: | CODE |
| LOW | calibration/viz.py | 33 | except Exception: | CODE |
| LOW | calibration/viz.py | 37 | except Exception: | CODE |
| LOW | blender_addon/capture.sh | 350 | except Exception: | CODE |
| LOW | blender_addon/capture.sh | 419 | except Exception as e: | CODE |
| LOW | blender_addon/capture.sh | 441 | except Exception as e: | CODE |
| LOW | blender_addon/capture.sh | 591 | except Exception: | CODE |
| LOW | blender_addon/capture.sh | 602 | except Exception: | CODE |
| LOW | blender_addon/capture.sh | 689 | except Exception as e: | CODE |
| LOW | blender_addon/capture.sh | 824 | except Exception as e: | CODE |
| MEDIUM | blender_addon/capture.sh | 435 | def _run_capture(): | CODE |
| MEDIUM⚡ | blender_addon/__init__.py | 439 | print(f"Error during engine cleanup: {e}") | CODE |
| MEDIUM⚡ | blender_addon/__init__.py | 525 | print(f"Error during MCP cleanup: {e}") | CODE |
| LOW⚡ | blender_addon/__init__.py | 125 | except Exception: | CODE |
| LOW⚡ | blender_addon/__init__.py | 130 | except Exception: | CODE |
| LOW⚡ | blender_addon/__init__.py | 413 | except Exception as e: | CODE |
| LOW⚡ | blender_addon/__init__.py | 421 | except Exception as e: | CODE |
| LOW⚡ | blender_addon/__init__.py | 431 | except Exception as e: | CODE |
| LOW⚡ | blender_addon/__init__.py | 438 | except Exception as e: | CODE |
| LOW⚡ | blender_addon/__init__.py | 499 | except Exception: | CODE |
| LOW⚡ | blender_addon/__init__.py | 506 | except Exception: | CODE |
| LOW⚡ | blender_addon/__init__.py | 514 | except Exception: | CODE |
| 385 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/clear_notebook_outputs.py | 18 | CODE | |
| LOW | crates/ppf-cts-formats/tests/scripts/gen_fixtures.py | 22 | CODE | |
| LOW | crates/ppf-cts-py/tests/python_smoke.py | 18 | CODE | |
| LOW | frontend/_mesh_.py | 730 | CODE | |
| LOW | frontend/_cbor_bridge_.py | 14 | CODE | |
| LOW | frontend/__init__.py | 146 | CODE | |
| LOW | frontend/__init__.py | 147 | CODE | |
| LOW | frontend/__init__.py | 148 | CODE | |
| LOW | frontend/__init__.py | 148 | CODE | |
| LOW | frontend/__init__.py | 148 | CODE | |
| LOW | frontend/__init__.py | 149 | CODE | |
| LOW | frontend/__init__.py | 150 | CODE | |
| LOW | frontend/__init__.py | 151 | CODE | |
| LOW | frontend/__init__.py | 151 | CODE | |
| LOW | frontend/__init__.py | 151 | CODE | |
| LOW | frontend/__init__.py | 151 | CODE | |
| LOW | frontend/__init__.py | 151 | CODE | |
| LOW | frontend/__init__.py | 152 | CODE | |
| LOW | frontend/__init__.py | 153 | CODE | |
| LOW | frontend/__init__.py | 153 | CODE | |
| LOW | frontend/__init__.py | 154 | CODE | |
| LOW | frontend/__init__.py | 154 | CODE | |
| LOW | frontend/__init__.py | 154 | CODE | |
| LOW | frontend/__init__.py | 154 | CODE | |
| LOW | frontend/__init__.py | 154 | CODE | |
| LOW | frontend/__init__.py | 154 | CODE | |
| LOW | frontend/__init__.py | 154 | CODE | |
| LOW | frontend/__init__.py | 154 | CODE | |
| LOW | frontend/__init__.py | 154 | CODE | |
| LOW | frontend/__init__.py | 172 | CODE | |
| LOW | frontend/__init__.py | 172 | CODE | |
| LOW | frontend/__init__.py | 172 | CODE | |
| LOW | frontend/__init__.py | 172 | CODE | |
| LOW | frontend/__init__.py | 172 | CODE | |
| LOW | frontend/__init__.py | 172 | CODE | |
| LOW | frontend/__init__.py | 172 | CODE | |
| LOW | frontend/__init__.py | 172 | CODE | |
| LOW | frontend/__init__.py | 182 | CODE | |
| LOW | frontend/__init__.py | 182 | CODE | |
| LOW | frontend/_session_inspect_.py | 36 | CODE | |
| LOW | frontend/_session_inspect_.py | 37 | CODE | |
| LOW | frontend/_session_.py | 35 | CODE | |
| LOW | frontend/_session_.py | 35 | CODE | |
| LOW | frontend/_session_.py | 49 | CODE | |
| LOW | frontend/_decoder_.py | 18 | CODE | |
| LOW | frontend/_scene_.py | 35 | CODE | |
| LOW | frontend/_scene_.py | 38 | CODE | |
| LOW | frontend/_scene_.py | 47 | CODE | |
| LOW | frontend/_scene_.py | 47 | CODE | |
| LOW | frontend/_scene_.py | 47 | CODE | |
| LOW | frontend/_scene_.py | 47 | CODE | |
| LOW | frontend/_scene_.py | 47 | CODE | |
| LOW | frontend/_scene_.py | 47 | CODE | |
| LOW | frontend/tests/__init__.py | 8 | CODE | |
| LOW | frontend/tests/__init__.py | 8 | CODE | |
| LOW | frontend/tests/__init__.py | 9 | CODE | |
| LOW | frontend/tests/_contract_frontend_api_.py | 20 | CODE | |
| LOW | frontend/tests/_decoder_solid_threshold_.py | 23 | CODE | |
| LOW | frontend/tests/_decoder_solid_threshold_.py | 36 | CODE | |
| LOW | calibration/viz.py | 13 | CODE | |
| 406 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | warmup.py | 122 | def create_vscode_ext_recommend(): | CODE |
| LOW | frontend/_proximity_.py | 16 | def check_contact_offset_violation( | CODE |
| LOW | frontend/_app_.py | 22 | def _suppress_stale_widget_errors(): | CODE |
| LOW | frontend/_scene_transform_.py | 56 | def _apply_transform_to_verts( | CODE |
| LOW | frontend/_mesh_.py | 907 | def _assert_tetgen_surface_unchanged(self, vert, tri, input_vert, n_input): | STRING |
| LOW | frontend/_scene_object_.py | 660 | def _append_transform_keyframe( | CODE |
| LOW | frontend/_scene_object_.py | 684 | def _ensure_transform_animation(self): | CODE |
| LOW | frontend/_scene_object_.py | 1091 | def angular_velocity_schedule_pca(self, schedule: list) -> "Object": | CODE |
| LOW | frontend/_scene_object_.py | 1145 | def angular_velocity_schedule_world(self, schedule: list) -> "Object": | CODE |
| LOW | frontend/_session_.py | 1576 | def fixed_session_to_cbor_dict( | CODE |
| LOW | frontend/_decoder_.py | 776 | def _split_solid_holder_by_threshold(self, dyn_obj, obj_cfg, verbose=False): | CODE |
| LOW | frontend/_decoder_.py | 1200 | def _build_solid_embedded_move_ops(sim_weights, obj_cfg, harmonic=None): | CODE |
| LOW | frontend/_decoder_.py | 1301 | def _build_solid_poisson_move_ops(solid_pin, obj_cfg): | CODE |
| LOW | frontend/_decoder_.py | 1469 | def apply_invisible_colliders(self, scene, verbose: bool = False): | CODE |
| LOW | frontend/_decoder_.py | 1510 | def _apply_common_collider_params(collider, spec, kind): | CODE |
| LOW | frontend/_decoder_.py | 1525 | def _graph_laplacian_from_edges(e0, e1, n): | CODE |
| LOW | frontend/_decoder_.py | 1544 | def _build_harmonic_interior_operator(n_verts, tets, surf_ids, interior_ids): | CODE |
| LOW | frontend/_invisible_collider_.py | 154 | def check_invisible_collider_violations( | CODE |
| LOW | frontend/tests/_proximity_.py | 13 | def _create_two_triangles_close(): | CODE |
| LOW | frontend/tests/_proximity_.py | 32 | def _create_two_triangles_far(): | CODE |
| LOW | frontend/tests/_proximity_.py | 85 | def _create_triangle_and_edge_close(): | CODE |
| LOW | frontend/tests/_proximity_.py | 104 | def _create_triangle_and_edge_far(): | CODE |
| LOW | frontend/tests/_proximity_.py | 123 | def _create_crossing_edges_close(): | CODE |
| LOW | frontend/tests/_proximity_.py | 140 | def test_triangle_triangle_proximity(): | CODE |
| LOW | frontend/tests/_proximity_.py | 197 | def test_triangle_edge_proximity(): | CODE |
| LOW | frontend/tests/_proximity_.py | 262 | def test_point_point_proximity(): | CODE |
| LOW | frontend/tests/_self_intersection_.py | 148 | def _create_two_intersecting_triangles(): | CODE |
| LOW | frontend/tests/_self_intersection_.py | 165 | def _create_two_coplanar_overlapping(): | CODE |
| LOW | frontend/tests/_self_intersection_.py | 182 | def _create_two_coplanar_non_overlapping(): | CODE |
| LOW | frontend/tests/_self_intersection_.py | 199 | def _create_adjacent_triangles(): | CODE |
| LOW | frontend/tests/_self_intersection_.py | 214 | def _create_near_touching_triangles(): | CODE |
| LOW | frontend/tests/_self_intersection_.py | 237 | def _create_nearly_touching_coplanar_triangles(): | CODE |
| LOW | frontend/tests/_self_intersection_.py | 324 | def test_collider_intersection(): | CODE |
| LOW | frontend/tests/_cbor_bridge_.py | 36 | def test_envelope_numpy_payload(): | CODE |
| LOW | frontend/tests/_cbor_bridge_.py | 50 | def test_envelope_wrong_kind_raises(): | CODE |
| LOW | frontend/tests/_sdf_.py | 13 | def test_sphere_marching_cubes_closed_mesh(): | CODE |
| LOW | frontend/tests/_rasterizer_.py | 13 | def test_triangle_produces_coverage(): | CODE |
| LOW | frontend/tests/_contract_frontend_api_.py | 138 | def test_public_names_match_snapshot(): | CODE |
| LOW | frontend/tests/_contract_frontend_api_.py | 149 | def test_public_names_actually_resolvable(): | CODE |
| LOW | frontend/tests/_contract_frontend_api_.py | 169 | def test_app_public_members_match_snapshot(): | CODE |
| LOW | frontend/tests/_contract_frontend_api_.py | 185 | def test_app_method_signatures_match_snapshot(): | CODE |
| LOW | frontend/tests/_bvh_.py | 269 | def test_non_uniform_world_scale(): | CODE |
| LOW⚡ | frontend/tests/_invisible_collider_.py | 87 | def _create_vertices_above_wall(): | CODE |
| LOW⚡ | frontend/tests/_invisible_collider_.py | 212 | def _create_vertices_outside_sphere(): | CODE |
| LOW⚡ | frontend/tests/_invisible_collider_.py | 288 | def test_inverted_sphere_no_violations(): | CODE |
| LOW⚡ | frontend/tests/_invisible_collider_.py | 334 | def test_hemisphere_below_center(): | CODE |
| LOW⚡ | frontend/tests/_invisible_collider_.py | 403 | def test_combined_wall_and_sphere(): | CODE |
| LOW | frontend/tests/_invisible_collider_.py | 99 | def _create_vertices_below_wall(): | CODE |
| LOW | frontend/tests/_invisible_collider_.py | 158 | def test_wall_different_normals(): | CODE |
| LOW | frontend/tests/_invisible_collider_.py | 193 | def test_wall_pinned_vertices_excluded(): | CODE |
| LOW | frontend/tests/_invisible_collider_.py | 224 | def _create_vertices_inside_sphere(): | CODE |
| LOW | frontend/tests/_invisible_collider_.py | 236 | def test_sphere_no_violations(): | CODE |
| LOW | frontend/tests/_invisible_collider_.py | 309 | def test_inverted_sphere_violations(): | CODE |
| LOW | frontend/tests/_invisible_collider_.py | 355 | def test_hemisphere_above_center(): | CODE |
| LOW | frontend/tests/_invisible_collider_.py | 378 | def test_hemisphere_transition(): | CODE |
| LOW | frontend/tests/_invisible_collider_.py | 482 | def test_sphere_pinned_excluded(): | CODE |
| LOW⚡ | frontend/tests/_decoder_solid_threshold_.py | 134 | def test_threshold_zero_all_surface_is_all_hard(): | CODE |
| LOW⚡ | frontend/tests/_decoder_solid_threshold_.py | 142 | def test_threshold_one_is_all_soft(): | CODE |
| LOW⚡ | frontend/tests/_decoder_solid_threshold_.py | 152 | def test_boundary_weight_equal_threshold_is_hard(): | CODE |
| LOW⚡ | frontend/tests/_decoder_solid_threshold_.py | 159 | def test_default_threshold_is_half(): | CODE |
| 239 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | frontend/_session_inspect_.py | 334 | """Walk every plausible source root for `// Name:` / `logging.push("...")` | STRING |
| HIGH | frontend/_parse_.py | 13 | ``logging.push("...")`` entries in ``.cu`` and ``.rs`` files and | STRING |
| HIGH | blender_addon/core/profile.py | 280 | # TOML has no null; emit an empty string so loader round-trips produce | COMMENT |
| HIGH⚡ | blender_addon/core/backends.py | 832 | f"PIDS=$(lsof -ti tcp:{port} 2>/dev/null); " | CODE |
| HIGH⚡ | blender_addon/core/backends.py | 833 | f'[ -n "$PIDS" ] && kill $PIDS 2>/dev/null; ' | CODE |
| HIGH⚡ | blender_addon/core/backends.py | 835 | f"PIDS=$(lsof -ti tcp:{port} 2>/dev/null); " | CODE |
| HIGH⚡ | blender_addon/core/backends.py | 836 | f'[ -n "$PIDS" ] && kill -9 $PIDS 2>/dev/null; ' | CODE |
| HIGH⚡ | blender_addon/core/backends.py | 837 | f"pkill -f 'ppf-cts-server .*--port {port}' 2>/dev/null; true", | CODE |
| HIGH | blender_addon/mcp/http_handler.py | 85 | # host (e.g. Origin: null, file://) is rejected. | COMMENT |
| HIGH | docs/tools/restructure_workflow.py | 288 | print("\nDone. Clean build recommended: rm -rf docs/_build && docs/build.sh") | CODE |
| HIGH | .github/workflows/scripts/run-all-once-gen.py | 189 | if command -v nvidia-smi &> /dev/null; then | CODE |
| HIGH⚡ | .github/workflows/scripts/run-all-once-gen.py | 269 | ubuntu@localhost "test -f /tmp/setup-complete && echo READY" 2>/dev/null | grep -q READY; then | CODE |
| HIGH⚡ | .github/workflows/scripts/run-all-once-gen.py | 271 | kill $TUNNEL_PID 2>/dev/null || true | CODE |
| HIGH⚡ | .github/workflows/scripts/run-all-once-gen.py | 275 | kill $TUNNEL_PID 2>/dev/null || true | CODE |
| HIGH | .github/workflows/scripts/run-all-once-gen.py | 307 | "cd ${{{{env.WORKDIR}}}} && tar -xzf repo.tar.gz && rm repo.tar.gz" | CODE |
| HIGH | .github/workflows/scripts/run-all-once-gen.py | 309 | kill $TUNNEL_PID 2>/dev/null || true | CODE |
| HIGH | .github/workflows/scripts/run-all-once-gen.py | 336 | kill $TUNNEL_PID 2>/dev/null || true | CODE |
| HIGH | .github/workflows/scripts/run-all-once-gen.py | 382 | kill $TUNNEL_PID 2>/dev/null || true | CODE |
| HIGH | .github/workflows/scripts/run-all-once-gen.py | 411 | kill $TUNNEL_PID 2>/dev/null || true | CODE |
| HIGH | .github/workflows/scripts/run-all-once-gen.py | 423 | kill $TUNNEL_PID 2>/dev/null || true | CODE |
| HIGH | .github/workflows/scripts/run-all-once-gen.py | 467 | kill $TUNNEL_PID 2>/dev/null || true | CODE |
| HIGH | .github/workflows/scripts/run-all-once-gen.py | 506 | kill $TUNNEL_PID 2>/dev/null || true | CODE |
| HIGH | .github/workflows/scripts/run-all-once-gen.py | 535 | kill $TUNNEL_PID 2>/dev/null || true | CODE |
| HIGH⚡ | .github/workflows/scripts/run-all-once-gen-win.py | 218 | if nc -z localhost 2222 2>/dev/null; then | CODE |
| HIGH⚡ | .github/workflows/scripts/run-all-once-gen-win.py | 220 | kill $TUNNEL_PID 2>/dev/null || true | CODE |
| HIGH⚡ | .github/workflows/scripts/run-all-once-gen-win.py | 224 | kill $TUNNEL_PID 2>/dev/null || true | CODE |
| HIGH | .github/workflows/scripts/run-all-once-gen-win.py | 257 | kill $TUNNEL_PID 2>/dev/null || true | CODE |
| HIGH | .github/workflows/scripts/run-all-once-gen-win.py | 284 | kill $TUNNEL_PID 2>/dev/null || true | CODE |
| HIGH | .github/workflows/scripts/run-all-once-gen-win.py | 302 | "cmd /c 'cd C:\\\\ppf-contact-solver\\\\build-win-native && warmup.bat /nopause'" | CODE |
| HIGH | .github/workflows/scripts/run-all-once-gen-win.py | 305 | kill $TUNNEL_PID 2>/dev/null || true | CODE |
| HIGH | .github/workflows/scripts/run-all-once-gen-win.py | 323 | "cmd /c 'cd C:\\\\ppf-contact-solver\\\\build-win-native && build.bat /nopause'" | CODE |
| HIGH | .github/workflows/scripts/run-all-once-gen-win.py | 326 | kill $TUNNEL_PID 2>/dev/null || true | CODE |
| HIGH | .github/workflows/scripts/run-all-once-gen-win.py | 356 | kill $TUNNEL_PID 2>/dev/null || true | CODE |
| HIGH | .github/workflows/scripts/run-all-once-gen-win.py | 375 | kill $TUNNEL_PID 2>/dev/null || true | CODE |
| HIGH | .github/workflows/scripts/run-all-once-gen-win.py | 406 | kill $TUNNEL_PID 2>/dev/null || true | CODE |
| HIGH | .github/workflows/scripts/run-all-once-gen-win.py | 448 | kill $TUNNEL_PID 2>/dev/null || true | CODE |
| HIGH | .github/workflows/scripts/run-all-once-gen-win.py | 477 | kill $TUNNEL_PID 2>/dev/null || true | CODE |
| HIGH | build-win-native/scripts/test_backend_e2e.py | 21 | set T2_ROOT=C:\\dev\\build-win-native\\dist && set T2_PORT=9092 && \\ | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | frontend/_app_.py | 250 | Recover the fixed session previously saved under ``name``. The session is located via a symlink in the data dir | STRING |
| HIGH | frontend/_plot_.py | 202 | Plot a triangle mesh, optionally with visualized stitch connections. If ``stitch`` is provided, additional vert | STRING |
| HIGH | frontend/_scene_object_.py | 990 | Pin a PDRD body as a hinge about one of its principal axes. Filters the body's reduced rigid DOF so its positio | STRING |
| HIGH | frontend/_session_.py | 99 | Select an existing session by name. Args: name (str): The name of the session. Defaults to ``"sessi | STRING |
| HIGH | frontend/_session_.py | 120 | Create a new session. If ``name`` is empty, an auto-generated name is used: ``"session"`` for the first | STRING |
| HIGH | frontend/_session_param_.py | 60 | Set a parameter value. If ``value`` is ``None``, the parameter is set to ``True``. Args: k | STRING |
| HIGH | frontend/_session_param_.py | 131 | Select the current dynamic parameter key and reset the internal time cursor. Args: key (str): The d | STRING |
| HIGH | frontend/_session_param_.py | 157 | Change the value of the dynamic parameter at the current time. Args: value (Any): The new value of | STRING |
| HIGH | frontend/_session_param_.py | 242 | Advance the current time cursor for the dynamic parameter. Args: time (float): The new current time | STRING |
| HIGH | frontend/_session_param_.py | 268 | Get the value of a parameter. Args: key (Optional[str]): The parameter key. Must be specified. | STRING |
| HIGH | frontend/_asset_.py | 370 | Return the type tag of a registered asset. Args: name (str): The name of the asset. Return | STRING |
| HIGH | frontend/_asset_.py | 396 | Return the raw arrays stored for an asset. The keys present in the returned dictionary depend on the asset | STRING |
| HIGH | frontend/_asset_.py | 431 | Return the vertex and face arrays of a triangle mesh asset. Args: name (str): The name of the asset | STRING |
| HIGH | frontend/_asset_.py | 459 | Return the arrays of a tetrahedral mesh asset. Args: name (str): The name of the asset. Re | STRING |
| HIGH | frontend/_asset_.py | 487 | Return the vertex and edge arrays of a rod mesh asset. Args: name (str): The name of the asset. | STRING |
| HIGH | frontend/_asset_.py | 516 | Return the index and weight arrays of a stitch asset. Args: name (str): The name of the asset. | STRING |
| HIGH | blender_addon/core/connection.py | 276 | Connect using Windows native build. The *root* path must be the project root directory where ``ppf-cts-server.e | STRING |
| HIGH | blender_addon/mcp/decorators.py | 51 | Parse function docstring to extract description and parameter info. Args: func: Function to parse docstring | STRING |
| HIGH | blender_addon/mcp/decorators.py | 232 | Validate and convert arguments based on function signature. Args: func: Function to validate arguments for | STRING |
| HIGH | blender_addon/ops/api/solver.py | 83 | Look up a group by UUID. Args: group_uuid: UUID string of the group. Returns: | STRING |
| HIGH | blender_addon/ops/api/solver.py | 279 | Translate *object_a* so its nearest vertex lands on *object_b*. Args: object_a: Name of the mesh th | STRING |
| HIGH | blender_addon/ops/api/solver.py | 307 | Mark two objects to be merged at their shared contact. Args: object_a: Name of the first mesh. | STRING |
| HIGH | blender_addon/ops/api/solver.py | 333 | Remove a previously added merge pair. The ordering of *object_a* and *object_b* does not matter; the pa | STRING |
| HIGH | blender_addon/ops/api/solver.py | 390 | Add an invisible infinite-plane wall collider. Args: position: ``(x, y, z)`` world-space point on t | STRING |
| HIGH | blender_addon/ops/api/solver.py | 417 | Add an invisible sphere collider. Args: position: ``(x, y, z)`` world-space center. rad | STRING |
| HIGH | blender_addon/ops/api/curve.py | 69 | Append a Bezier spline with AUTO handles. Args: points: Iterable of ``(x, y, z)`` control-point coo | STRING |
| HIGH | blender_addon/ops/api/curve.py | 99 | Bind a material to a spline by index. The material is appended to the curve's slots if it isn't already | STRING |
| HIGH | blender_addon/ops/api/group.py | 297 | Keyframe a velocity on an object assigned to this group. Appends an entry to the assigned object's ``ve | STRING |
| HIGH | blender_addon/ops/api/group.py | 397 | Pin a PDRD body assigned to this group as a hinge (per object). Locks the body's position and restricts its rot | STRING |
| HIGH | blender_addon/ops/api/group.py | 458 | Pin a vertex group (mesh) or set of control points (curve). Args: object_name: Name of the mesh or | STRING |
| HIGH | blender_addon/ops/api/collider.py | 152 | Advance the keyframe cursor. Args: frame: Target frame (must be strictly greater than the current | STRING |
| HIGH | blender_addon/ops/api/collider.py | 327 | Advance the keyframe cursor. Args: frame: Target frame (must be strictly greater than the current | STRING |
| HIGH | blender_addon/ops/api/dynamics.py | 76 | Advance the frame cursor. Args: frame: Target frame (must be strictly greater than the current | STRING |
| HIGH | blender_addon/ops/api/dynamics.py | 206 | Select a parameter for dynamic keyframing. Args: key: One of ``"gravity"``, ``"wind"``, ``"air_dens | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | warmup.py | 29 | CODE | |
| LOW | warmup.py | 273 | CODE | |
| LOW | warmup.py | 523 | CODE | |
| LOW | warmup.py | 708 | CODE | |
| LOW | frontend/_plot_.py | 373 | CODE | |
| LOW | frontend/_scene_object_.py | 378 | CODE | |
| LOW | frontend/_session_inspect_.py | 246 | CODE | |
| LOW | frontend/_scene_pin_.py | 476 | CODE | |
| LOW | frontend/build_worker.py | 75 | CODE | |
| LOW | frontend/_session_.py | 608 | CODE | |
| LOW | frontend/_session_.py | 944 | CODE | |
| LOW | frontend/_session_.py | 1084 | CODE | |
| LOW | frontend/_session_.py | 1212 | CODE | |
| LOW | frontend/_session_.py | 1017 | CODE | |
| LOW | frontend/_session_.py | 1251 | CODE | |
| LOW | frontend/_session_.py | 1175 | CODE | |
| LOW | frontend/_decoder_.py | 217 | CODE | |
| LOW | frontend/_decoder_.py | 520 | CODE | |
| LOW | frontend/_decoder_.py | 618 | CODE | |
| LOW | frontend/_decoder_.py | 676 | CODE | |
| LOW | frontend/_decoder_.py | 776 | CODE | |
| LOW | frontend/_decoder_.py | 1392 | CODE | |
| LOW | frontend/_decoder_.py | 1814 | CODE | |
| LOW | frontend/_decoder_.py | 1939 | CODE | |
| LOW | frontend/_decoder_.py | 2104 | CODE | |
| LOW | frontend/_decoder_.py | 2512 | CODE | |
| LOW | frontend/_scene_.py | 635 | CODE | |
| LOW | frontend/_scene_.py | 1280 | CODE | |
| LOW | frontend/_scene_.py | 1867 | CODE | |
| LOW | blender_addon/__init__.py | 135 | CODE | |
| LOW | blender_addon/__init__.py | 219 | CODE | |
| LOW | blender_addon/__init__.py | 403 | CODE | |
| LOW | blender_addon/__init__.py | 240 | CODE | |
| LOW | blender_addon/ui/solver.py | 299 | CODE | |
| LOW | blender_addon/ui/solver.py | 1194 | CODE | |
| LOW | blender_addon/ui/solver_control_ops.py | 88 | CODE | |
| LOW | blender_addon/ui/connection_ops.py | 59 | CODE | |
| LOW | blender_addon/ui/connection_ops.py | 128 | CODE | |
| LOW | blender_addon/ui/capture.py | 352 | CODE | |
| LOW | blender_addon/ui/capture.py | 787 | CODE | |
| LOW | blender_addon/ui/capture.py | 830 | CODE | |
| LOW | blender_addon/ui/capture.py | 983 | CODE | |
| LOW | blender_addon/ui/capture.py | 1046 | CODE | |
| LOW | blender_addon/ui/capture.py | 1122 | CODE | |
| LOW | blender_addon/ui/capture.py | 1004 | CODE | |
| LOW | blender_addon/ui/state.py | 159 | CODE | |
| LOW | blender_addon/ui/main_panel.py | 730 | CODE | |
| LOW | blender_addon/ui/main_panel.py | 259 | CODE | |
| LOW | blender_addon/ui/dynamics/overlay.py | 70 | CODE | |
| LOW | blender_addon/ui/dynamics/dyn_param_ops.py | 78 | CODE | |
| LOW | blender_addon/ui/dynamics/group_ops.py | 380 | CODE | |
| LOW | blender_addon/ui/dynamics/group_ops.py | 159 | CODE | |
| LOW | blender_addon/ui/dynamics/group_ops.py | 195 | CODE | |
| LOW | blender_addon/ui/dynamics/pin_ops.py | 411 | CODE | |
| LOW | blender_addon/ui/dynamics/pin_ops.py | 772 | CODE | |
| LOW | blender_addon/ui/dynamics/pin_ops.py | 802 | CODE | |
| LOW | blender_addon/ui/dynamics/pin_ops.py | 56 | CODE | |
| LOW | blender_addon/ui/dynamics/pin_ops.py | 105 | CODE | |
| LOW | blender_addon/ui/dynamics/pin_ops.py | 207 | CODE | |
| LOW | blender_addon/ui/dynamics/export_ops.py | 189 | CODE | |
| 118 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | frontend/_session_.py | 1169 | # Create the interactive slider | COMMENT |
| MEDIUM | frontend/tests/_self_intersection_.py | 328 | # Create a flat sheet (dynamic) and a sphere (static collider) that intersect | COMMENT |
| MEDIUM | blender_addon/core/transitions.py | 10 | # This module is the **single source of truth** for every state change in the | COMMENT |
| MEDIUM | blender_addon/core/encoder/mesh.py | 178 | # Create a simple hash key using group type and UUID | COMMENT |
| MEDIUM | blender_addon/mcp/blender_handlers.py | 61 | # Create a safe execution environment with common Blender modules | COMMENT |
| MEDIUM | blender_addon/ops/zozo_contact_solver.py | 157 | # Create the class | COMMENT |
| MEDIUM | .github/workflows/yarn.yml | 481 | # Create the runnable script with proper imports | COMMENT |
| MEDIUM | .github/workflows/trampoline.yml | 481 | # Create the runnable script with proper imports | COMMENT |
| MEDIUM | .github/workflows/codim.yml | 481 | # Create the runnable script with proper imports | COMMENT |
| MEDIUM | .github/workflows/belt.yml | 481 | # Create the runnable script with proper imports | COMMENT |
| MEDIUM | .github/workflows/ribbon.yml | 481 | # Create the runnable script with proper imports | COMMENT |
| MEDIUM | .github/workflows/cards.yml | 481 | # Create the runnable script with proper imports | COMMENT |
| MEDIUM | .github/workflows/fitting.yml | 481 | # Create the runnable script with proper imports | COMMENT |
| MEDIUM | .github/workflows/domino.yml | 481 | # Create the runnable script with proper imports | COMMENT |
| MEDIUM | .github/workflows/stack.yml | 481 | # Create the runnable script with proper imports | COMMENT |
| MEDIUM | .github/workflows/run-all-once.yml | 400 | # Create the runnable script with proper imports (using printf to avoid nested heredoc) | COMMENT |
| MEDIUM | .github/workflows/run-all-once.yml | 440 | # Create the runnable script with proper imports (using printf to avoid nested heredoc) | COMMENT |
| MEDIUM | .github/workflows/run-all-once.yml | 480 | # Create the runnable script with proper imports (using printf to avoid nested heredoc) | COMMENT |
| MEDIUM | .github/workflows/run-all-once.yml | 520 | # Create the runnable script with proper imports (using printf to avoid nested heredoc) | COMMENT |
| MEDIUM | .github/workflows/run-all-once.yml | 560 | # Create the runnable script with proper imports (using printf to avoid nested heredoc) | COMMENT |
| MEDIUM | .github/workflows/run-all-once.yml | 1044 | # Create the runnable script with proper imports (using printf to avoid nested heredoc) | COMMENT |
| MEDIUM | .github/workflows/run-all-once.yml | 1084 | # Create the runnable script with proper imports (using printf to avoid nested heredoc) | COMMENT |
| MEDIUM | .github/workflows/run-all-once.yml | 1124 | # Create the runnable script with proper imports (using printf to avoid nested heredoc) | COMMENT |
| MEDIUM | .github/workflows/run-all-once.yml | 1164 | # Create the runnable script with proper imports (using printf to avoid nested heredoc) | COMMENT |
| MEDIUM | .github/workflows/run-all-once.yml | 1648 | # Create the runnable script with proper imports (using printf to avoid nested heredoc) | COMMENT |
| MEDIUM | .github/workflows/run-all-once.yml | 1688 | # Create the runnable script with proper imports (using printf to avoid nested heredoc) | COMMENT |
| MEDIUM | .github/workflows/run-all-once.yml | 1728 | # Create the runnable script with proper imports (using printf to avoid nested heredoc) | COMMENT |
| MEDIUM | .github/workflows/run-all-once.yml | 1768 | # Create the runnable script with proper imports (using printf to avoid nested heredoc) | COMMENT |
| MEDIUM | .github/workflows/run-all-once.yml | 2252 | # Create the runnable script with proper imports (using printf to avoid nested heredoc) | COMMENT |
| MEDIUM | .github/workflows/run-all-once.yml | 2292 | # Create the runnable script with proper imports (using printf to avoid nested heredoc) | COMMENT |
| MEDIUM | .github/workflows/run-all-once.yml | 2332 | # Create the runnable script with proper imports (using printf to avoid nested heredoc) | COMMENT |
| MEDIUM | .github/workflows/run-all-once.yml | 2372 | # Create the runnable script with proper imports (using printf to avoid nested heredoc) | COMMENT |
| MEDIUM | .github/workflows/run-all-once.yml | 2856 | # Create the runnable script with proper imports (using printf to avoid nested heredoc) | COMMENT |
| MEDIUM | .github/workflows/run-all-once.yml | 2896 | # Create the runnable script with proper imports (using printf to avoid nested heredoc) | COMMENT |
| MEDIUM | .github/workflows/run-all-once.yml | 2936 | # Create the runnable script with proper imports (using printf to avoid nested heredoc) | COMMENT |
| MEDIUM | .github/workflows/run-all-once.yml | 2976 | # Create the runnable script with proper imports (using printf to avoid nested heredoc) | COMMENT |
| MEDIUM | .github/workflows/five-twist.yml | 481 | # Create the runnable script with proper imports | COMMENT |
| MEDIUM | .github/workflows/friction.yml | 481 | # Create the runnable script with proper imports | COMMENT |
| MEDIUM | .github/workflows/woven.yml | 481 | # Create the runnable script with proper imports | COMMENT |
| MEDIUM | .github/workflows/roller.yml | 481 | # Create the runnable script with proper imports | COMMENT |
| MEDIUM | .github/workflows/hang.yml | 481 | # Create the runnable script with proper imports | COMMENT |
| MEDIUM | .github/workflows/fishingknot.yml | 481 | # Create the runnable script with proper imports | COMMENT |
| MEDIUM | .github/workflows/trapped.yml | 481 | # Create the runnable script with proper imports | COMMENT |
| MEDIUM | .github/workflows/drape.yml | 481 | # Create the runnable script with proper imports | COMMENT |
| MEDIUM | .github/workflows/needle.yml | 481 | # Create the runnable script with proper imports | COMMENT |
| MEDIUM | .github/workflows/noodle.yml | 481 | # Create the runnable script with proper imports | COMMENT |
| MEDIUM | .github/workflows/twist.yml | 481 | # Create the runnable script with proper imports | COMMENT |
| MEDIUM | .github/workflows/curtain.yml | 481 | # Create the runnable script with proper imports | COMMENT |
| MEDIUM | .github/workflows/template/aws-template.yml | 481 | # Create the runnable script with proper imports | COMMENT |
| MEDIUM | .github/workflows/scripts/run-all-once-gen.py | 453 | # Create the runnable script with proper imports (using printf to avoid nested heredoc) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …tes/ppf-cts-solver/src/cpp/energy/model/pdrd_rigid.hpp | 83 | // rotation with its 180-degree-robust Gram-Schmidt seed) live in pdrd_polar.hpp | COMMENT |
| MEDIUM | crates/ppf-cts-py/Cargo.toml | 25 | # Rust test/doctest harness for this crate fails to link (`undefined | COMMENT |
| MEDIUM | crates/ppf-cts-py/Cargo.toml | 27 | # crate instead, so disable the cargo test harness. Without this, now that | COMMENT |
| MEDIUM | frontend/_decoder_.py | 1446 | # (robust to re-tetrahedralization). Closest-vertex search | COMMENT |
| MEDIUM | calibration/cantilever_bend/cantilever_bend.py | 17 | # as the drape harness (it imports them from cusick_drape), so a strip uses | COMMENT |
| MEDIUM | calibration/cantilever_bend/cantilever_bend.py | 33 | # Reuse the drape harness's preset loading and wire-param mapping. | COMMENT |
| MEDIUM | calibration/cusick_drape/cusick_drape.py | 7 | # Cusick drape-test harness for the bundled fabric presets. | COMMENT |
| MEDIUM | calibration/cusick_drape/cusick_drape.py | 77 | # Default simulation length. The harness pins fps = 1/dt (see run_drape) so one | COMMENT |
| MEDIUM | calibration/tensile/tensile.py | 7 | # Tensile / stretch harness for the bundled fabric presets: calibrates the | COMMENT |
| MEDIUM | calibration/tensile/tensile.py | 23 | # the limit the elongation reports the cap, not the modulus. The harness | COMMENT |
| MEDIUM | blender_addon/core/profile.py | 488 | # robust to object/VG renames. Readable display key stays for | COMMENT |
| LOW | blender_addon/mcp/decorators.py | 151 | # Optional[T] / 'T | None' -> just use T | COMMENT |
| MEDIUM | blender_addon/debug/orchestrator.py | 318 | # Reuse the harness's cross-platform tree-kill so server-only and | COMMENT |
| MEDIUM | blender_addon/debug/orchestrator.py | 421 | # Bring up Blender if the scenario asked for it. The harness is | COMMENT |
| MEDIUM | blender_addon/debug/blender_harness.py | 16 | # The harness exposes a thin interface on top of the existing debug | COMMENT |
| MEDIUM | blender_addon/debug/scenarios/bl_static_fcurve_anim.py | 63 | # Backend-agnostic: the assertions below are robust invariants (finite PC2, | COMMENT |
| MEDIUM | …nder_addon/debug/scenarios/_world_scaling_kinematic.py | 9 | # These reuse the per-pin-op fidelity harness in | COMMENT |
| MEDIUM | …nder_addon/debug/scenarios/_world_scaling_kinematic.py | 16 | # The ONLY thing these add on top of the fidelity harness is setting | COMMENT |
| MEDIUM | blender_addon/debug/scenarios/bl_solid_solid_stitch.py | 51 | # Backend-agnostic: the assertions below are robust invariants (finite PC2, | COMMENT |
| MEDIUM | blender_addon/debug/scenarios/bl_static_stitch.py | 51 | # Backend-agnostic: the assertions below are robust invariants (finite PC2, | COMMENT |
| MEDIUM | blender_addon/debug/scenarios/bl_static_op_anim.py | 81 | # Backend-agnostic: the assertions below are robust invariants (finite PC2, | COMMENT |
| MEDIUM | blender_addon/debug/scenarios/bl_chain_param_repeat.py | 4 | # value (verified by fetch + PC2 inspection in the chain harness). | COMMENT |
| MEDIUM | blender_addon/debug/scenarios/bl_ssh_remote_solid.py | 22 | # and the free bottom lags it, a robust invariant on the real deformable | COMMENT |
| MEDIUM | …ender_addon/debug/scenarios/bl_addon_reload_handoff.py | 202 | # The harness does not start it for us (blender_harness.spawn | COMMENT |
| MEDIUM | …addon/debug/scenarios/bl_solid_fix_weight_threshold.py | 44 | # Backend-agnostic: the assertions below are robust invariants (finite PC2, | COMMENT |
| MEDIUM | blender_addon/debug/scenarios/bl_shell_static_stitch.py | 36 | # Backend-agnostic: the assertions below are robust invariants (finite PC2, | COMMENT |
| MEDIUM | …n/debug/scenarios/bl_self_intersection_build_reject.py | 269 | # primitive + label text keeps this robust to color/alpha tweaks. | COMMENT |
| MEDIUM | blender_addon/debug/scenarios/bl_tetgen_solid_build.py | 42 | # Backend-agnostic: the assertions below are robust invariants (finite PC2, | COMMENT |
| MEDIUM | blender_addon/debug/scenarios/_chain_lib.py | 10 | # fragment) inside its driver to set up the harness: | COMMENT |
| MEDIUM | blender_addon/debug/scenarios/_chain_lib.py | 16 | # * ``run_steps(harness, sequence)`` — invokes each named step and | COMMENT |
| MEDIUM | blender_addon/debug/scenarios/bl_export_cache.py | 287 | # axis reorientation, so this is a robust content check). | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | warmup.py | 222 | # Check if nvim is already installed | COMMENT |
| LOW | warmup.py | 261 | # Check if nvim config already exists | COMMENT |
| LOW | warmup.py | 285 | # Check if fish is installed | COMMENT |
| LOW | warmup.py | 289 | # Check if config.fish is a symlink | COMMENT |
| LOW | warmup.py | 375 | # Check if CUDA is installed | COMMENT |
| LOW | warmup.py | 493 | # Check if it's a symlink | COMMENT |
| LOW | warmup.py | 610 | # Check if process is still running | COMMENT |
| LOW | warmup.py | 622 | # Check if jupyter is ready (only if not already confirmed) | COMMENT |
| LOW | frontend/_session_inspect_.py | 176 | # Check if frames are available | STRING |
| LOW | frontend/_session_inspect_.py | 222 | # Check if any PNG images were rendered before attempting video creation | STRING |
| LOW | frontend/_scene_.py | 603 | # Check if rendering should be skipped (e.g., on Windows headless) | COMMENT |
| LOW | blender_addon/ui/solver.py | 328 | # Check if broader migration is needed (pins, pairs, keyframes) | COMMENT |
| LOW | blender_addon/ui/dynamics/pin_ops.py | 69 | # Check if any control points are selected | COMMENT |
| LOW | blender_addon/ui/dynamics/export_ops.py | 111 | # Read the file the exporter will actually sample (the modifier's own | COMMENT |
| LOW | blender_addon/core/ssh_config.py | 206 | # Check if any pattern matches the host | COMMENT |
| LOW | blender_addon/mcp/blender_handlers.py | 355 | # Check if it's an operator class | COMMENT |
| LOW | blender_addon/mcp/mcp_server.py | 42 | # Check if port is available | COMMENT |
| LOW | blender_addon/mcp/handlers/group.py | 543 | # Check if there are objects to remove | COMMENT |
| LOW | .github/workflows/getting-started.yml | 233 | # Check if setup is complete (includes SSH connectivity check) | COMMENT |
| LOW | .github/workflows/yarn.yml | 227 | # Check if setup is complete (includes SSH connectivity check) | COMMENT |
| LOW | .github/workflows/trampoline.yml | 227 | # Check if setup is complete (includes SSH connectivity check) | COMMENT |
| LOW | .github/workflows/codim.yml | 227 | # Check if setup is complete (includes SSH connectivity check) | COMMENT |
| LOW | .github/workflows/belt.yml | 227 | # Check if setup is complete (includes SSH connectivity check) | COMMENT |
| LOW | .github/workflows/ribbon.yml | 227 | # Check if setup is complete (includes SSH connectivity check) | COMMENT |
| LOW | .github/workflows/cards.yml | 227 | # Check if setup is complete (includes SSH connectivity check) | COMMENT |
| LOW | .github/workflows/fitting.yml | 227 | # Check if setup is complete (includes SSH connectivity check) | COMMENT |
| LOW | .github/workflows/domino.yml | 227 | # Check if setup is complete (includes SSH connectivity check) | COMMENT |
| LOW | .github/workflows/stack.yml | 227 | # Check if setup is complete (includes SSH connectivity check) | COMMENT |
| LOW | .github/workflows/run-all-once.yml | 215 | # Check if setup is complete (includes SSH connectivity check) | COMMENT |
| LOW | .github/workflows/run-all-once.yml | 859 | # Check if setup is complete (includes SSH connectivity check) | COMMENT |
| LOW | .github/workflows/run-all-once.yml | 1463 | # Check if setup is complete (includes SSH connectivity check) | COMMENT |
| LOW | .github/workflows/run-all-once.yml | 2067 | # Check if setup is complete (includes SSH connectivity check) | COMMENT |
| LOW | .github/workflows/run-all-once.yml | 2671 | # Check if setup is complete (includes SSH connectivity check) | COMMENT |
| LOW | .github/workflows/five-twist.yml | 227 | # Check if setup is complete (includes SSH connectivity check) | COMMENT |
| LOW | .github/workflows/friction.yml | 227 | # Check if setup is complete (includes SSH connectivity check) | COMMENT |
| LOW | .github/workflows/woven.yml | 227 | # Check if setup is complete (includes SSH connectivity check) | COMMENT |
| LOW | .github/workflows/build-docker.yml | 249 | # Check if setup is complete (includes SSH connectivity check) | COMMENT |
| LOW | .github/workflows/roller.yml | 227 | # Check if setup is complete (includes SSH connectivity check) | COMMENT |
| LOW | .github/workflows/hang.yml | 227 | # Check if setup is complete (includes SSH connectivity check) | COMMENT |
| LOW | .github/workflows/fishingknot.yml | 227 | # Check if setup is complete (includes SSH connectivity check) | COMMENT |
| LOW | .github/workflows/trapped.yml | 227 | # Check if setup is complete (includes SSH connectivity check) | COMMENT |
| LOW | .github/workflows/drape.yml | 227 | # Check if setup is complete (includes SSH connectivity check) | COMMENT |
| LOW | .github/workflows/needle.yml | 227 | # Check if setup is complete (includes SSH connectivity check) | COMMENT |
| LOW | .github/workflows/noodle.yml | 227 | # Check if setup is complete (includes SSH connectivity check) | COMMENT |
| LOW | .github/workflows/twist.yml | 227 | # Check if setup is complete (includes SSH connectivity check) | COMMENT |
| LOW | .github/workflows/curtain.yml | 227 | # Check if setup is complete (includes SSH connectivity check) | COMMENT |
| LOW | .github/workflows/template/aws-template.yml | 227 | # Check if setup is complete (includes SSH connectivity check) | COMMENT |
| LOW⚡ | .github/workflows/scripts/run-all-once-gen.py | 264 | # Check if setup is complete (includes SSH connectivity check) | COMMENT |
| LOW⚡ | .github/workflows/scripts/example-gen-win.py | 54 | # Check if template exists | COMMENT |
| LOW⚡ | .github/workflows/scripts/example-gen-win.py | 59 | # Check if examples.txt exists | COMMENT |
| LOW⚡ | .github/workflows/scripts/example-gen-win.py | 64 | # Check if examples directory exists | COMMENT |
| LOW | .github/workflows/scripts/example-gen-win.py | 88 | # Check if the notebook file exists | COMMENT |
| LOW | .github/workflows/scripts/make-slim-ffmpeg.sh | 15 | # Check if ffmpeg already exists | COMMENT |
| LOW | build-win-native/make-slim-ffmpeg.sh | 35 | # Check if ffmpeg already exists | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | crates/ppf-cts-solver/src/builder.rs | 1060 | for (i, face_neighbors) in mesh.mesh.neighbor.hinge.face.iter().enumerate() { | CODE |
| CRITICAL | blender_addon/ops/api/curve.py | 145 | bpy.context.scene.collection.objects.link(obj) | CODE |
| CRITICAL | examples/blender/five-twist.py | 140 | bpy.context.scene.collection.objects.link(obj) | CODE |
| CRITICAL | examples/blender/pdrd_chain.py | 118 | bpy.context.scene.collection.objects.link(obj) | CODE |
| CRITICAL | examples/blender/cards.py | 145 | bpy.context.scene.collection.objects.link(obj) | CODE |
| CRITICAL | examples/blender/cards.py | 232 | bpy.context.scene.collection.objects.link(sphere_obj) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/ppf-cts-core/src/kernels/bvh.rs | 179 | // Step 0: scene bounds over centroids. | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/bvh.rs | 204 | // Step 1: per-element Morton codes (parallel). | COMMENT |
| LOW⚡ | crates/ppf-cts-core/src/kernels/bvh.rs | 221 | // Step 2: argsort by Morton code, stable. | COMMENT |
| LOW⚡ | crates/ppf-cts-core/src/kernels/bvh.rs | 225 | // Step 3: tree topology by midpoint split (sequential, single stack). | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/bvh.rs | 260 | // Step 4: leaf bboxes (parallel over node_count). | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/bvh.rs | 307 | // Step 5: bottom-up bbox propagation. | COMMENT |
| LOW⚡ | crates/ppf-cts-core/src/kernels/intersection.rs | 359 | // Step 1: derive mesh edges + per-edge parents. | COMMENT |
| LOW⚡ | crates/ppf-cts-core/src/kernels/intersection.rs | 363 | // Step 2: append rod edges with parent (-1, -1). When there are | COMMENT |
| LOW⚡ | crates/ppf-cts-core/src/kernels/intersection.rs | 380 | // Step 3: build tri-BVH; per-edge bboxes only (no edge-BVH needed, | COMMENT |
| LOW⚡ | crates/ppf-cts-core/src/kernels/intersection.rs | 385 | // Step 4: default is_collider and per-tri PDRD body id. | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/intersection.rs | 403 | // Step 5: per-edge parallel scan into (edge_idx, tri_idx) hits. | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/intersection.rs | 423 | // Step 6: convert (edge, tri) → (parent, tri); dedup; sort. Rod | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/scene_build/assembly.rs | 311 | // Step 1: scatter vertex / color / velocity / dmap for every dyn | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/scene_build/assembly.rs | 361 | // Step 2: rod assembly. Walk every rod-typed object's edges, | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/scene_build/assembly.rs | 395 | // Step 3: shell triangles (tri-only objects, no tet). UVs + | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/scene_build/assembly.rs | 438 | // Step 4: tet surface triangles (objects with both tris and tets). | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/scene_build/assembly.rs | 473 | // Step 5: tet assembly. | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/scene_build/assembly.rs | 497 | // Step 6: per-object stitches. Map local indices through map and | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/scene_build/assembly.rs | 561 | // Step 7: cross-object stitches. Translate per-object indices. | COMMENT |
| LOW | crates/ppf-cts-solver/src/main.rs | 173 | // Step 1: Parallel computation | COMMENT |
| LOW | crates/ppf-cts-solver/src/main.rs | 193 | // Step 2: Sequential deduplication | COMMENT |
| LOW | crates/ppf-cts-solver/src/builder.rs | 674 | // Step 1: Parallel computation of vertex params | COMMENT |
| LOW⚡ | crates/ppf-cts-solver/src/builder.rs | 748 | // Step 2: Sequential deduplication | COMMENT |
| LOW⚡ | crates/ppf-cts-solver/src/builder.rs | 758 | // Step 1: Parallel computation of hinge data. `bend_rest_v` / `bend_mask` | COMMENT |
| LOW | crates/ppf-cts-solver/src/builder.rs | 820 | // Step 2: Sequential deduplication | COMMENT |
| LOW⚡ | blender_addon/mcp/mcp_server.py | 149 | # Step 1: Signal shutdown to prevent new requests | COMMENT |
| LOW⚡ | blender_addon/mcp/mcp_server.py | 156 | # Step 2: Close server socket to stop accepting connections | COMMENT |
| LOW⚡ | blender_addon/mcp/mcp_server.py | 165 | # Step 3: Wait for server thread to finish with increased timeout | COMMENT |
| LOW⚡ | blender_addon/mcp/mcp_server.py | 177 | # Step 4: Clean up references | COMMENT |
| LOW⚡ | blender_addon/mcp/mcp_server.py | 181 | # Step 5: Wait for port to be released | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/ppf-cts-core/src/kernels/bvh.rs | 179 | // Step 0: scene bounds over centroids. | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/bvh.rs | 204 | // Step 1: per-element Morton codes (parallel). | COMMENT |
| LOW⚡ | crates/ppf-cts-core/src/kernels/bvh.rs | 221 | // Step 2: argsort by Morton code, stable. | COMMENT |
| LOW⚡ | crates/ppf-cts-core/src/kernels/bvh.rs | 225 | // Step 3: tree topology by midpoint split (sequential, single stack). | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/bvh.rs | 260 | // Step 4: leaf bboxes (parallel over node_count). | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/bvh.rs | 307 | // Step 5: bottom-up bbox propagation. | COMMENT |
| LOW⚡ | crates/ppf-cts-core/src/kernels/intersection.rs | 359 | // Step 1: derive mesh edges + per-edge parents. | COMMENT |
| LOW⚡ | crates/ppf-cts-core/src/kernels/intersection.rs | 363 | // Step 2: append rod edges with parent (-1, -1). When there are | COMMENT |
| LOW⚡ | crates/ppf-cts-core/src/kernels/intersection.rs | 380 | // Step 3: build tri-BVH; per-edge bboxes only (no edge-BVH needed, | COMMENT |
| LOW⚡ | crates/ppf-cts-core/src/kernels/intersection.rs | 385 | // Step 4: default is_collider and per-tri PDRD body id. | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/intersection.rs | 403 | // Step 5: per-edge parallel scan into (edge_idx, tri_idx) hits. | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/intersection.rs | 423 | // Step 6: convert (edge, tri) → (parent, tri); dedup; sort. Rod | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/scene_build/assembly.rs | 311 | // Step 1: scatter vertex / color / velocity / dmap for every dyn | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/scene_build/assembly.rs | 361 | // Step 2: rod assembly. Walk every rod-typed object's edges, | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/scene_build/assembly.rs | 395 | // Step 3: shell triangles (tri-only objects, no tet). UVs + | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/scene_build/assembly.rs | 438 | // Step 4: tet surface triangles (objects with both tris and tets). | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/scene_build/assembly.rs | 473 | // Step 5: tet assembly. | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/scene_build/assembly.rs | 497 | // Step 6: per-object stitches. Map local indices through map and | COMMENT |
| LOW | crates/ppf-cts-core/src/kernels/scene_build/assembly.rs | 561 | // Step 7: cross-object stitches. Translate per-object indices. | COMMENT |
| LOW | crates/ppf-cts-solver/src/main.rs | 173 | // Step 1: Parallel computation | COMMENT |
| LOW | crates/ppf-cts-solver/src/main.rs | 193 | // Step 2: Sequential deduplication | COMMENT |
| LOW | crates/ppf-cts-solver/src/builder.rs | 674 | // Step 1: Parallel computation of vertex params | COMMENT |
| LOW⚡ | crates/ppf-cts-solver/src/builder.rs | 748 | // Step 2: Sequential deduplication | COMMENT |
| LOW⚡ | crates/ppf-cts-solver/src/builder.rs | 758 | // Step 1: Parallel computation of hinge data. `bend_rest_v` / `bend_mask` | COMMENT |
| LOW | crates/ppf-cts-solver/src/builder.rs | 820 | // Step 2: Sequential deduplication | COMMENT |
| LOW⚡ | blender_addon/mcp/mcp_server.py | 149 | # Step 1: Signal shutdown to prevent new requests | COMMENT |
| LOW⚡ | blender_addon/mcp/mcp_server.py | 156 | # Step 2: Close server socket to stop accepting connections | COMMENT |
| LOW⚡ | blender_addon/mcp/mcp_server.py | 165 | # Step 3: Wait for server thread to finish with increased timeout | COMMENT |
| LOW⚡ | blender_addon/mcp/mcp_server.py | 177 | # Step 4: Clean up references | COMMENT |
| LOW⚡ | blender_addon/mcp/mcp_server.py | 181 | # Step 5: Wait for port to be released | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | crates/ppf-cts-core/src/kernels/bvh.rs | 499 | /// rolled copy of this scaffold (≈25 lines) that differed only in | COMMENT |
| MEDIUM⚡ | blender_addon/ui/dynamics/export_ops.py | 146 | # Shared operator scaffolding | COMMENT |
| MEDIUM | blender_addon/core/effects.py | 6 | # Typed, frozen effect classes for the event-driven state machine. | COMMENT |
| MEDIUM | blender_addon/core/events.py | 6 | # Typed, frozen event classes for the event-driven state machine. | COMMENT |
| MEDIUM | blender_addon/core/client.py | 6 | # Re-exports the event-driven ``CommunicatorFacade`` as the ``communicator`` | COMMENT |
| MEDIUM | blender_addon/core/transitions.py | 6 | # Pure state-transition function for the event-driven state machine. | COMMENT |
| MEDIUM⚡ | blender_addon/core/state.py | 7 | # event-driven state machine. The entire addon state is captured by | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | warmup.py | 20 | CODE | |
| LOW | frontend/_scene_.py | 90 | CODE | |
| LOW | calibration/tensile/tensile.py | 139 | CODE | |
| LOW | blender_addon/mcp/handlers/object_ops.py | 183 | CODE | |
| LOW | blender_addon/mcp/handlers/object_ops.py | 1240 | CODE | |
| LOW | blender_addon/mcp/handlers/remote.py | 49 | CODE | |
| LOW | blender_addon/mcp/handlers/dyn_params.py | 233 | CODE | |
| LOW | blender_addon/ops/api/pin.py | 133 | CODE | |
| LOW | blender_addon/ops/api/pin.py | 200 | CODE | |
| LOW | blender_addon/debug/orchestrator.py | 505 | CODE | |
| LOW | examples/blender/woven.py | 80 | CODE | |
| LOW | examples/blender/five-twist.py | 158 | CODE | |
| LOW | examples/blender/cards.py | 150 | CODE | |
| LOW | examples/blender/noodle.py | 71 | CODE | |
| LOW | examples/blender/yarn.py | 102 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/ppf-cts-core/src/extra.rs | 349 | std::fs::write(dest.join("placeholder"), "x").unwrap(); | CODE |
| LOW | crates/ppf-cts-server/src/wire/data.rs | 173 | /// the form `{remote_root}/dummy_data.pickle`, where `remote_root` is | COMMENT |
| LOW⚡ | crates/ppf-cts-server/src/wire/data.rs | 219 | let p = resolve_under_root(&root, "/data/proj/dummy_data.pickle").unwrap(); | CODE |
| LOW⚡ | crates/ppf-cts-server/src/wire/data.rs | 220 | assert_eq!(p, PathBuf::from("/data/proj/dummy_data.pickle")); | CODE |
| LOW⚡ | crates/ppf-cts-server/src/wire/data.rs | 226 | let p = resolve_under_root(&root, "sub/dummy_data.pickle").unwrap(); | CODE |
| LOW⚡ | crates/ppf-cts-server/src/wire/data.rs | 227 | assert_eq!(p, PathBuf::from("/data/proj/sub/dummy_data.pickle")); | CODE |
| LOW | blender_addon/ui/debug_ops.py | 117 | f"{remote_root}/dummy_data.pickle", | CODE |
| LOW | blender_addon/ui/debug_ops.py | 153 | "dummy_data.pickle", | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontend/__init__.py | 109 | __all__ = [ | CODE |
| LOW | frontend/tests/__init__.py | 11 | __all__ = [ | CODE |
| LOW | blender_addon/ui/capture.py | 1484 | __all__ = [ | CODE |
| LOW | blender_addon/ui/dynamics/__init__.py | 134 | __all__ = [ | CODE |
| LOW | blender_addon/ui/dynamics/pin_ops.py | 772 | def _set_pin_fcurves_linear(obj) -> None: | CODE |
| LOW | blender_addon/ui/dynamics/overlay_geometry/__init__.py | 22 | __all__ = [ | CODE |
| LOW | blender_addon/core/facade.py | 81 | def set_project_name(self, name: str) -> None: | CODE |
| LOW | blender_addon/core/effect_runner.py | 358 | def set_fetched_frames(self, frames: list[int]) -> None: | CODE |
| LOW | blender_addon/core/encoder/__init__.py | 38 | __all__ = [ | CODE |
| LOW | blender_addon/ops/api/__init__.py | 69 | __all__ = [ | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | crates/ppf-cts-solver/src/cpp/buffer/buffer.hpp | 67 | // Allocate a buffer and reinterpret as requested type. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | articles/cloud.md | 167 | RUNPOD_API_KEY="...your_api_key..." | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | install-blender.sh | 10 | # Usage: | COMMENT |
| LOW | install-blender-addon.sh | 12 | # Usage: | COMMENT |