OpenVDB - Sparse volume data structure and tools
This report summarizes scanner evidence for AcademySoftwareFoundation/openvdb, a C++ project with 3,447 GitHub stars. SynthScan examined 365,569 lines of code across 767 source files, recording 1432 pattern matches distributed across 15 syntactic categories. The legacy adjusted pattern signal is 4.1 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 1414 finding(s).
Are imports declared and package/API names verified? 4 finding(s).
Are wrappers, guards, and repeated structures necessary? 28 finding(s).
Which changes need focused human review? 1432 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 1432 distinct pattern matches across 15 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. 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 configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ci/download_houdini.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | ci/extract_test_examples.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | openvdb_cmd/vdb_view/Font.h | 1 | // Copyright Contributors to the OpenVDB Project | COMMENT |
| LOW | openvdb_cmd/vdb_view/RenderModules.h | 1 | // Copyright Contributors to the OpenVDB Project | COMMENT |
| LOW | openvdb_cmd/vdb_view/ClipBox.h | 1 | // Copyright Contributors to the OpenVDB Project | COMMENT |
| LOW | openvdb_cmd/vdb_tool/README.md | 201 | COMMENT | |
| LOW | openvdb_cmd/vdb_tool/include/Parser.h | 1 | // Copyright Contributors to the OpenVDB Project | COMMENT |
| LOW | openvdb_cmd/vdb_tool/include/Parser.h | 21 | /// control-flow scopes implementing -for, -each, -files, -if; | COMMENT |
| LOW | openvdb_cmd/vdb_tool/include/Parser.h | 41 | #include <random> | COMMENT |
| LOW | openvdb_cmd/vdb_tool/include/Parser.h | 81 | COMMENT | |
| LOW | openvdb_cmd/vdb_tool/include/Parser.h | 721 | COMMENT | |
| LOW | openvdb_cmd/vdb_tool/include/Parser.h | 861 | { | COMMENT |
| LOW | openvdb_cmd/vdb_tool/include/Parser.h | 1021 | /// @brief Always returns false; the switch scope is single-pass. | COMMENT |
| LOW | openvdb_cmd/vdb_tool/include/Parser.h | 1041 | /// @brief Destroy active scopes while their referenced Processor memory is still alive. | COMMENT |
| LOW | openvdb_cmd/vdb_tool/include/Parser.h | 1121 | /// @brief Stack of currently-open loop/if scopes, in order of opening. | COMMENT |
| LOW | openvdb_cmd/vdb_tool/include/ShrinkWrap.h | 1 | // Copyright Contributors to the OpenVDB Project | COMMENT |
| LOW | openvdb_cmd/vdb_tool/include/ShrinkWrap.h | 21 | #include <openvdb/tools/Composite.h> // for csgUnion | COMMENT |
| LOW | openvdb_cmd/vdb_tool/include/ShrinkWrap.h | 61 | /// takes a PolySoup struct and optional voxel dimension and/or voxel size. If the | COMMENT |
| LOW | openvdb_cmd/vdb_tool/include/ShrinkWrap.h | 101 | /// @note Unlike tools::meshToLevelSet this method works for any polygons, | COMMENT |
| LOW | openvdb_cmd/vdb_tool/include/ShrinkWrap.h | 121 | std::vector<Vec3I>& tri, | COMMENT |
| LOW | openvdb_cmd/vdb_tool/include/ShrinkWrap.h | 181 | /// @param voxelSize Desired voxel size of the output level set in world units. | COMMENT |
| LOW | openvdb_cmd/vdb_tool/include/ShrinkWrap.h | 201 | /// @param n Number of the shrink wrap grid, where n = 0 has the finest sampling and | COMMENT |
| LOW | openvdb_cmd/vdb_tool/include/ShrinkWrap.h | 221 | COMMENT | |
| LOW | openvdb_cmd/vdb_tool/include/ShrinkWrap.h | 281 | // A too-small dim relative to halfWidth drives the denominator above to zero | COMMENT |
| LOW | openvdb_cmd/vdb_tool/include/Calculator.h | 1 | // Copyright Contributors to the OpenVDB Project | COMMENT |
| LOW | openvdb_cmd/vdb_tool/include/Calculator.h | 21 | /// - A single infix expression, e.g. | COMMENT |
| LOW | openvdb_cmd/vdb_tool/include/Calculator.h | 41 | /// - **Persistent memory** — `evalAndRemember()` snapshots | COMMENT |
| LOW | openvdb_cmd/vdb_tool/include/Calculator.h | 61 | #include <stdexcept> | COMMENT |
| LOW | openvdb_cmd/vdb_tool/include/Calculator.h | 81 | /// an arbitrary number of named float variables. Re-entrant and | COMMENT |
| LOW | openvdb_cmd/vdb_tool/include/Calculator.h | 101 | /// input variable of the same name from that point on, and remain | COMMENT |
| LOW | openvdb_cmd/vdb_tool/include/Calculator.h | 121 | /// `switch(selector, k1, v1, ..., default)`. | COMMENT |
| LOW | openvdb_cmd/vdb_tool/include/Calculator.h | 141 | /// compilation result (and clears any registered user-defined | COMMENT |
| LOW | openvdb_cmd/vdb_tool/include/Calculator.h | 161 | /// errors include a source pointer with column number. | COMMENT |
| LOW | openvdb_cmd/vdb_tool/include/Calculator.h | 181 | inline float eval(const float* values) const; | COMMENT |
| LOW | openvdb_cmd/vdb_tool/include/Calculator.h | 201 | COMMENT | |
| LOW | openvdb_cmd/vdb_tool/include/Calculator.h | 241 | COMMENT | |
| LOW | openvdb_cmd/vdb_tool/include/Calculator.h | 281 | /// @brief Multi-line, human-readable dump of the compiled bytecode. | COMMENT |
| LOW | openvdb_cmd/vdb_tool/include/Calculator.h | 341 | COMMENT | |
| LOW | openvdb_cmd/vdb_tool/include/Calculator.h | 381 | /// forms. If @a slotsOut is non-null, the final values of all | COMMENT |
| LOW | openvdb_cmd/vdb_tool/include/Calculator.h | 1341 | // The call site has just pushed `fd.params.size()` argument values onto | COMMENT |
| LOW | openvdb_cmd/vdb_tool/include/Calculator.h | 1721 | // Walk the bytecode with a virtual stack-depth counter so eval() doesn't | COMMENT |
| LOW | openvdb_cmd/vdb_tool/include/Util.h | 1 | // Copyright Contributors to the OpenVDB Project | COMMENT |
| LOW | openvdb_cmd/vdb_tool/include/Util.h | 21 | #ifndef VDB_TOOL_UTIL_HAS_BEEN_INCLUDED | COMMENT |
| LOW | openvdb_cmd/vdb_tool/include/Util.h | 241 | /// sorted so the best matches come first (lower key = better match). | COMMENT |
| LOW | openvdb_cmd/vdb_tool/include/Util.h | 621 | /// @brief invert endianess of an array of values of a specific type | COMMENT |
| LOW | openvdb_cmd/vdb_tool/include/Util.h | 681 | #ifdef _WIN32 | COMMENT |
| LOW | openvdb_cmd/vdb_tool/include/Tool.h | 1 | // Copyright Contributors to the OpenVDB Project | COMMENT |
| LOW | openvdb_cmd/vdb_tool/include/Tool.h | 21 | /// (primarily std::clog, with std::cerr for errors), never to | COMMENT |
| LOW | openvdb_cmd/vdb_tool/include/Tool.h | 41 | #include <openvdb/tools/LevelSetDilatedMesh.h> | COMMENT |
| LOW | openvdb_cmd/vdb_tool/include/Tool.h | 61 | #include <openvdb/tools/MultiResGrid.h> | COMMENT |
| LOW | openvdb_cmd/vdb_tool/include/Tool.h | 81 | COMMENT | |
| LOW | openvdb_cmd/vdb_tool/include/Tool.h | 101 | #include "Calculator.h" | COMMENT |
| LOW | openvdb_cmd/vdb_tool/include/Tool.h | 141 | ~Tool() {this->endLog();} | COMMENT |
| LOW | openvdb_cmd/vdb_tool/include/Tool.h | 361 | COMMENT | |
| LOW | openvdb_cmd/vdb_tool/include/Tool.h | 401 | /// @brief Return an iterator to the Geometry at stack age @a age (0 = most recent). | COMMENT |
| LOW | openvdb_cmd/vdb_tool/include/Tool.h | 3621 | COMMENT | |
| LOW | openvdb_cmd/vdb_tool/include/Geometry.h | 1 | // Copyright Contributors to the OpenVDB Project | COMMENT |
| LOW | openvdb_cmd/vdb_tool/include/Geometry.h | 21 | //////////////////////////////////////////////////////////////////////////////// | COMMENT |
| LOW | openvdb_cmd/vdb_tool/include/Geometry.h | 41 | #include <openvdb/points/PointCount.h> | COMMENT |
| LOW | openvdb_cmd/vdb_tool/include/Geometry.h | 61 | #include <pxr/base/gf/vec3f.h> | COMMENT |
| 1294 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | ci/download_houdini.py | 76 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | nanovdb/nanovdb/cmd/CMakeLists.txt | 22 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | nanovdb/nanovdb/cmd/CMakeLists.txt | 28 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | nanovdb/nanovdb/cmd/CMakeLists.txt | 38 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | nanovdb/nanovdb/cmd/CMakeLists.txt | 44 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | nanovdb/nanovdb/unittest/CMakeLists.txt | 22 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | nanovdb/nanovdb/unittest/CMakeLists.txt | 36 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | nanovdb/nanovdb/unittest/CMakeLists.txt | 74 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | nanovdb/nanovdb/unittest/CMakeLists.txt | 89 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | nanovdb/nanovdb/unittest/CMakeLists.txt | 125 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | nanovdb/nanovdb/examples/CMakeLists.txt | 84 | # ----------------------------------------------------------------------- | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | openvdb_cmd/vdb_tool/include/Calculator.h | 1359 | // Step 1: per-call parameter slots. Use a fresh, uniquified name per call | COMMENT |
| LOW⚡ | openvdb_cmd/vdb_tool/include/Calculator.h | 1369 | // Step 2: store args in reverse (top-of-stack first). | COMMENT |
| LOW⚡ | openvdb_cmd/vdb_tool/include/Calculator.h | 1488 | // Step 1: insert Jump (target patched later) right BEFORE else_start. | COMMENT |
| LOW⚡ | openvdb_cmd/vdb_tool/include/Calculator.h | 1496 | // Step 2: insert JumpIfFalse right BEFORE then_start. | COMMENT |
| LOW⚡ | openvdb_cmd/vdb_tool/include/Calculator.h | 1504 | // Step 3: set targets. | COMMENT |
| LOW | openvdb_cmd/vdb_tool/include/Calculator.h | 1386 | // Step 3: copy the body's bytecode, rewriting indices. | COMMENT |
| LOW | nanovdb/nanovdb/util/MaskPrefixSum.h | 110 | // Step 1: Indicator fill. | COMMENT |
| LOW | nanovdb/nanovdb/util/MaskPrefixSum.h | 126 | // Step 2: Z-pass -- Hillis-Steele inclusive prefix sum over z. | COMMENT |
| LOW | nanovdb/nanovdb/util/MaskPrefixSum.h | 147 | // Step 3: Y-pass -- accumulate preceding-row popcounts. | COMMENT |
| LOW | nanovdb/nanovdb/util/MaskPrefixSum.h | 183 | // Step 4: Zero-extend bytes to uint16_t in linear index order. | COMMENT |
| LOW | nanovdb/nanovdb/util/MaskPrefixSum.h | 197 | // Step 5: Add cross-word offsets decoded from prefixSum. | COMMENT |
| LOW | openvdb_houdini/openvdb_houdini/AttributeTransferUtil.h | 525 | // NOTE: This class has all code in the header and so it cannot have OPENVDB_HOUDINI_API. | COMMENT |
| LOW | openvdb_houdini/openvdb_houdini/AttributeTransferUtil.h | 712 | // NOTE: This class has all code in the header and so it cannot have OPENVDB_HOUDINI_API. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | openvdb_cmd/vdb_tool/include/Geometry.h | 1253 | double p[3];// more robust to read ascii coordinates as double than float | CODE |
| MEDIUM | openvdb_ax/openvdb_ax/test/integration/TestHarness.h | 295 | #define AXTESTS_STANDARD_ASSERT_HARNESS(harness) \ | COMMENT |
| MEDIUM | openvdb_ax/openvdb_ax/codegen/FunctionTypes.h | 345 | /// leverage the AX Value API). Functions can still be generated and called | COMMENT |
| MEDIUM | openvdb_ax/openvdb_ax/codegen/Types.h | 246 | /// Fundamentally, T1->T2 mapping should be supported by | COMMENT |
| MEDIUM | openvdb_ax/openvdb_ax/ast/Visitor.h | 55 | /// you can utilize the traverse methods if you find that you require | COMMENT |
| MEDIUM | openvdb_ax/openvdb_ax/compiler/CompilerOptions.h | 34 | /// results. Fundamentally, LLVM's support for CF IR is far superior and our | COMMENT |
| MEDIUM | .github/workflows/teachme.yml | 6 | # breaks a lesson code block is caught here (the whole point of the harness). | COMMENT |
| MEDIUM | doc/nanovdb/TEACHME/test/run.sh | 2 | # Drive the TEACHME test harness: reference-check -> extract -> compile. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | openvdb_cmd/vdb_tool/include/Calculator.h | 1359 | // Step 1: per-call parameter slots. Use a fresh, uniquified name per call | COMMENT |
| LOW⚡ | openvdb_cmd/vdb_tool/include/Calculator.h | 1369 | // Step 2: store args in reverse (top-of-stack first). | COMMENT |
| LOW⚡ | openvdb_cmd/vdb_tool/include/Calculator.h | 1488 | // Step 1: insert Jump (target patched later) right BEFORE else_start. | COMMENT |
| LOW⚡ | openvdb_cmd/vdb_tool/include/Calculator.h | 1496 | // Step 2: insert JumpIfFalse right BEFORE then_start. | COMMENT |
| LOW⚡ | openvdb_cmd/vdb_tool/include/Calculator.h | 1504 | // Step 3: set targets. | COMMENT |
| LOW | openvdb_cmd/vdb_tool/include/Calculator.h | 1386 | // Step 3: copy the body's bytecode, rewriting indices. | COMMENT |
| LOW | nanovdb/nanovdb/NanoVDB.h | 6050 | // the following code block uses std and therefore needs to be ignored by CUDA and HIP | COMMENT |
| LOW | nanovdb/nanovdb/util/MaskPrefixSum.h | 110 | // Step 1: Indicator fill. | COMMENT |
| LOW | nanovdb/nanovdb/util/MaskPrefixSum.h | 126 | // Step 2: Z-pass -- Hillis-Steele inclusive prefix sum over z. | COMMENT |
| LOW | nanovdb/nanovdb/util/MaskPrefixSum.h | 147 | // Step 3: Y-pass -- accumulate preceding-row popcounts. | COMMENT |
| LOW | nanovdb/nanovdb/util/MaskPrefixSum.h | 183 | // Step 4: Zero-extend bytes to uint16_t in linear index order. | COMMENT |
| LOW | nanovdb/nanovdb/util/MaskPrefixSum.h | 197 | // Step 5: Add cross-word offsets decoded from prefixSum. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ci/download_houdini.py | 80 | def get_access_token_and_expiry_time( | CODE |
| LOW | ci/download_houdini.py | 113 | def call_api_with_access_token( | CODE |
| LOW | nanovdb/nanovdb/python/test/TestNanoVDB.py | 531 | def test_device_write_grids_multi(self): | CODE |
| LOW | nanovdb/nanovdb/python/test/TestNanoVDB.py | 568 | def test_download_before_upload_raises(self): | CODE |
| LOW | nanovdb/nanovdb/python/test/TestNanoVDB.py | 574 | def test_grids_stay_valid_across_transfers(self): | CODE |
| LOW | nanovdb/nanovdb/python/test/TestNanoVDB.py | 660 | def test_small_handles_sharing_pages(self): | CODE |
| LOW | nanovdb/nanovdb/python/test/TestNanoVDB.py | 676 | def test_release_with_a_pending_transfer(self): | CODE |
| LOW | nanovdb/nanovdb/python/test/TestNanoVDB.py | 747 | def test_signed_flood_fill_float(self): | CODE |
| LOW | nanovdb/nanovdb/python/test/TestNanoVDB.py | 777 | def test_signed_flood_fill_double(self): | CODE |
| LOW | nanovdb/nanovdb/python/test/TestNanoVDB.py | 815 | def test_sample_from_points_float(self): | CODE |
| LOW | nanovdb/nanovdb/python/test/TestNanoVDB.py | 876 | def test_sample_from_points_double(self): | CODE |
| LOW | nanovdb/nanovdb/python/test/TestNanoVDB.py | 980 | def test_create_float_nano_grid(self): | CODE |
| LOW | nanovdb/nanovdb/python/test/TestNanoVDB.py | 998 | def test_create_double_nano_grid(self): | CODE |
| LOW | nanovdb/nanovdb/python/test/TestNanoVDB.py | 1016 | def test_create_int_nano_grid(self): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | ci/download_houdini.sh | 102 | # Create an empty valid shared lib | COMMENT |
| MEDIUM | openvdb/openvdb/python/test/TestOpenVDB.py | 620 | # Create a NumPy array, fill it with the background value, | COMMENT |
| MEDIUM | openvdb/openvdb/python/test/TestOpenVDB.py | 646 | # Create an empty grid. | COMMENT |
| MEDIUM | openvdb/openvdb/python/test/TestOpenVDB.py | 727 | # Create an empty grid, fill it with the background value, | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | nanovdb/nanovdb/python/test/TestNanoVDB.py | 15 | except OSError: | CODE |
| HIGH | openvdb_houdini/openvdb_houdini/pythonrc.py | 23 | except AttributeError: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | CMakeLists.txt | 517 | # nanobind's config file only accepts the same major version as requested, | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ci/validate_docs_references.py | 28 | CODE | |
| LOW | nanovdb/nanovdb/python/__init__.py | 9 | CODE | |
| LOW | openvdb/openvdb/python/__init__.py | 3 | CODE | |
| LOW | openvdb/openvdb/python/test/TestOpenVDB.py | 17 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | nanovdb/nanovdb/cmd/updateFiles.py | 45 | CODE | |
| LOW | doc/nanovdb/TEACHME/test/teachme_tests.py | 119 | CODE | |
| LOW | doc/nanovdb/TEACHME/test/teachme_tests.py | 164 | CODE | |
| LOW | doc/nanovdb/TEACHME/test/teachme_tests.py | 220 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | nanovdb/nanovdb/python/test/TestNanoVDB.py | 1058 | def test_function(self): | CODE |
| LOW | nanovdb/nanovdb/python/test/TestNanoVDB.py | 1072 | def test_function(self): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | nanovdb/nanovdb/cmd/updateFiles.sh | 12 | # Check if dir is not a directory | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .github/workflows/weekly.yml | 512 | # note: For CI forks, make sure you have your tags synced | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ci/download_vdb_caches.py | 105 | except Exception as e: | CODE |