{"data":{"skill":{"slug":"cloudai-x-threejs-geometry","name":"threejs-geometry","icon":"📦","repo":"https://github.com/cloudai-x/threejs-skills/tree/0e181866f095b5f06d005133876e926515390d95/skills/threejs-geometry","status":"approved","author":"cloudai-x","authorVersion":null,"skillstoreRevision":1,"license":null},"licenseCorrection":null,"audit":{"id":"2767e741-943c-4e43-ac7e-4b1dbdc7424e","skill_id":"24145406-cbea-49c5-b42c-66b66037d932","version":1,"content_hash":"v3:c993c6abcbffafea2683d7748b53b3dfaf438415:c29c1568cb56e902999b6a50316cd5079c53ee620138148897d269e9716e8da7:3a2d42ea30e99ca98c4001b359b218bb3dc0e6412ebace0e7babdaa20a56811f:736b696c6c732f636c6f756461692d782f74687265656a732d67656f6d65747279:867cbd8d93c1fec624d118c293fd1a1b","risk_level":"safe","is_blocked":false,"safe_to_publish":true,"analysis_status":"ok","agent_auto_install_policy":"allowed","manual_install_policy":"allowed","summary":"All 72 static findings are false positives caused by Markdown code fences or inline code, not Ruby or shell execution. The source provides Three.js geometry examples, including a relative font asset request. No evidence found of prompt injection, credential access, data exfiltration, or malicious instructions.","remediation":[],"risk_factor_evidence":[{"factor":"external_commands","evidence":[{"file":"SKILL.md","line_end":35,"line_start":12},{"file":"SKILL.md","line_end":41,"line_start":35},{"file":"SKILL.md","line_end":55,"line_start":41},{"file":"SKILL.md","line_end":59,"line_start":55},{"file":"SKILL.md","line_end":72,"line_start":59},{"file":"SKILL.md","line_end":76,"line_start":72},{"file":"SKILL.md","line_end":99,"line_start":76},{"file":"SKILL.md","line_end":103,"line_start":99},{"file":"SKILL.md","line_end":122,"line_start":103},{"file":"SKILL.md","line_end":126,"line_start":122},{"file":"SKILL.md","line_end":126,"line_start":126},{"file":"SKILL.md","line_end":151,"line_start":130},{"file":"SKILL.md","line_end":155,"line_start":151},{"file":"SKILL.md","line_end":164,"line_start":155},{"file":"SKILL.md","line_end":168,"line_start":164},{"file":"SKILL.md","line_end":177,"line_start":168},{"file":"SKILL.md","line_end":181,"line_start":177},{"file":"SKILL.md","line_end":194,"line_start":181},{"file":"SKILL.md","line_end":198,"line_start":194},{"file":"SKILL.md","line_end":207,"line_start":198},{"file":"SKILL.md","line_end":211,"line_start":207},{"file":"SKILL.md","line_end":220,"line_start":211},{"file":"SKILL.md","line_end":226,"line_start":220},{"file":"SKILL.md","line_end":242,"line_start":226},{"file":"SKILL.md","line_end":250,"line_start":242},{"file":"SKILL.md","line_end":272,"line_start":250},{"file":"SKILL.md","line_end":276,"line_start":272},{"file":"SKILL.md","line_end":292,"line_start":276},{"file":"SKILL.md","line_end":298,"line_start":292},{"file":"SKILL.md","line_end":307,"line_start":298},{"file":"SKILL.md","line_end":310,"line_start":307},{"file":"SKILL.md","line_end":316,"line_start":310},{"file":"SKILL.md","line_end":332,"line_start":316},{"file":"SKILL.md","line_end":336,"line_start":332},{"file":"SKILL.md","line_end":355,"line_start":336},{"file":"SKILL.md","line_end":359,"line_start":355},{"file":"SKILL.md","line_end":372,"line_start":359},{"file":"SKILL.md","line_end":376,"line_start":372},{"file":"SKILL.md","line_end":380,"line_start":376},{"file":"SKILL.md","line_end":384,"line_start":380},{"file":"SKILL.md","line_end":397,"line_start":384},{"file":"SKILL.md","line_end":404,"line_start":397},{"file":"SKILL.md","line_end":409,"line_start":404},{"file":"SKILL.md","line_end":417,"line_start":409},{"file":"SKILL.md","line_end":435,"line_start":417},{"file":"SKILL.md","line_end":439,"line_start":435},{"file":"SKILL.md","line_end":453,"line_start":439},{"file":"SKILL.md","line_end":457,"line_start":453},{"file":"SKILL.md","line_end":471,"line_start":457},{"file":"SKILL.md","line_end":475,"line_start":471}]}],"critical_findings":[],"high_findings":[],"medium_findings":[],"low_findings":[],"dangerous_patterns":[],"files_scanned":1,"total_lines":501,"audit_model":"codex","audited_at":"2026-11-07T14:36:46.92+00:00","created_at":"2026-11-09T15:33:30.87216+00:00","static_findings":[{"id":"external_commands:SKILL.md:12:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":35,"severity":"medium","line_start":12},{"id":"external_commands:SKILL.md:35:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":41,"severity":"medium","line_start":35},{"id":"external_commands:SKILL.md:41:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":55,"severity":"medium","line_start":41},{"id":"external_commands:SKILL.md:55:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":59,"severity":"medium","line_start":55},{"id":"external_commands:SKILL.md:59:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":72,"severity":"medium","line_start":59},{"id":"external_commands:SKILL.md:72:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":76,"severity":"medium","line_start":72},{"id":"external_commands:SKILL.md:76:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":99,"severity":"medium","line_start":76},{"id":"external_commands:SKILL.md:99:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":103,"severity":"medium","line_start":99},{"id":"external_commands:SKILL.md:103:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":122,"severity":"medium","line_start":103},{"id":"external_commands:SKILL.md:122:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":126,"severity":"medium","line_start":122},{"id":"external_commands:SKILL.md:126:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"The base class of every geometry: typed arrays of vertex data plus an optional index. Attributes are","category":"external_commands","line_end":126,"severity":"medium","line_start":126},{"id":"external_commands:SKILL.md:130:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":151,"severity":"medium","line_start":130},{"id":"external_commands:SKILL.md:151:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":155,"severity":"medium","line_start":151},{"id":"external_commands:SKILL.md:155:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":164,"severity":"medium","line_start":155},{"id":"external_commands:SKILL.md:164:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":168,"severity":"medium","line_start":164},{"id":"external_commands:SKILL.md:168:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":177,"severity":"medium","line_start":168},{"id":"external_commands:SKILL.md:177:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":181,"severity":"medium","line_start":177},{"id":"external_commands:SKILL.md:181:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":194,"severity":"medium","line_start":181},{"id":"external_commands:SKILL.md:194:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":198,"severity":"medium","line_start":194},{"id":"external_commands:SKILL.md:198:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":207,"severity":"medium","line_start":198},{"id":"external_commands:SKILL.md:207:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":211,"severity":"medium","line_start":207},{"id":"external_commands:SKILL.md:211:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":220,"severity":"medium","line_start":211},{"id":"external_commands:SKILL.md:220:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":226,"severity":"medium","line_start":220},{"id":"external_commands:SKILL.md:226:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":242,"severity":"medium","line_start":226},{"id":"external_commands:SKILL.md:242:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":250,"severity":"medium","line_start":242},{"id":"external_commands:SKILL.md:250:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":272,"severity":"medium","line_start":250},{"id":"external_commands:SKILL.md:272:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":276,"severity":"medium","line_start":272},{"id":"external_commands:SKILL.md:276:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":292,"severity":"medium","line_start":276},{"id":"external_commands:SKILL.md:292:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":298,"severity":"medium","line_start":292},{"id":"external_commands:SKILL.md:298:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":307,"severity":"medium","line_start":298},{"id":"external_commands:SKILL.md:307:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"// With WebGLRenderer and a ShaderMaterial, declare `in vec3 offset;` in the vertex","category":"external_commands","line_end":310,"severity":"medium","line_start":307},{"id":"external_commands:SKILL.md:310:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":316,"severity":"medium","line_start":310},{"id":"external_commands:SKILL.md:316:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":332,"severity":"medium","line_start":316},{"id":"external_commands:SKILL.md:332:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":336,"severity":"medium","line_start":332},{"id":"external_commands:SKILL.md:336:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":355,"severity":"medium","line_start":336},{"id":"external_commands:SKILL.md:355:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":359,"severity":"medium","line_start":355},{"id":"external_commands:SKILL.md:359:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":372,"severity":"medium","line_start":359},{"id":"external_commands:SKILL.md:372:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":376,"severity":"medium","line_start":372},{"id":"external_commands:SKILL.md:376:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":380,"severity":"medium","line_start":376},{"id":"external_commands:SKILL.md:380:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":384,"severity":"medium","line_start":380},{"id":"external_commands:SKILL.md:384:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":397,"severity":"medium","line_start":384},{"id":"external_commands:SKILL.md:397:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":404,"severity":"medium","line_start":397},{"id":"external_commands:SKILL.md:404:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":409,"severity":"medium","line_start":404},{"id":"external_commands:SKILL.md:409:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":417,"severity":"medium","line_start":409},{"id":"external_commands:SKILL.md:417:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":435,"severity":"medium","line_start":417},{"id":"external_commands:SKILL.md:435:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":439,"severity":"medium","line_start":435},{"id":"external_commands:SKILL.md:439:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":453,"severity":"medium","line_start":439},{"id":"external_commands:SKILL.md:453:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":457,"severity":"medium","line_start":453},{"id":"external_commands:SKILL.md:457:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":471,"severity":"medium","line_start":457},{"id":"external_commands:SKILL.md:471:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":475,"severity":"medium","line_start":471},{"id":"external_commands:SKILL.md:475:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `BufferGeometryUtils.computeTangents(geometry)` → `geometry.computeTangents()`: BufferGeometryUtil","category":"external_commands","line_end":475,"severity":"medium","line_start":475},{"id":"external_commands:SKILL.md:476:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `new THREE.BufferAttribute(new Uint8Array(rgbBytes), 3)` → `new THREE.BufferAttribute(new Uint8Arr","category":"external_commands","line_end":476,"severity":"medium","line_start":476},{"id":"external_commands:SKILL.md:477:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `geometry.copy(new THREE.BoxGeometry(1, 1, 1));` → `geometry.copy(new THREE.BoxGeometry(1, 1, 1));","category":"external_commands","line_end":477,"severity":"medium","line_start":477},{"id":"external_commands:SKILL.md:478:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `batchedMesh.addGeometry(boxGeometry)` → `batchedMesh.addInstance(batchedMesh.addGeometry(boxGeome","category":"external_commands","line_end":478,"severity":"medium","line_start":478},{"id":"external_commands:SKILL.md:479:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `new THREE.LineLoop(geometry, material)` → `new THREE.Line(new THREE.BufferGeometry().setFromPoint","category":"external_commands","line_end":479,"severity":"medium","line_start":479},{"id":"external_commands:SKILL.md:480:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `import { TextGeometry } from \"three/examples/jsm/geometries/TextGeometry.js\"` → `import { TextGeo","category":"external_commands","line_end":480,"severity":"medium","line_start":480},{"id":"external_commands:SKILL.md:481:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `capsule.parameters.length` → `capsule.parameters.height`: the CapsuleGeometry parameter was renam","category":"external_commands","line_end":481,"severity":"medium","line_start":481},{"id":"external_commands:SKILL.md:482:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `{ font: font, size: 1, height: 0.2 }` → `{ font: font, size: 1, depth: 0.2 }`: the TextGeometry e","category":"external_commands","line_end":482,"severity":"medium","line_start":482},{"id":"external_commands:SKILL.md:483:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `new THREE.Points(cloud, new THREE.PointsMaterial({ size: 10 }))` → `new THREE.Sprite(new THREE.Po","category":"external_commands","line_end":483,"severity":"medium","line_start":483},{"id":"external_commands:SKILL.md:484:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `new THREE.ShaderMaterial({ vertexShader: offsetVertexShader })` → `material.positionNode = positi","category":"external_commands","line_end":484,"severity":"medium","line_start":484},{"id":"external_commands:SKILL.md:485:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `material.positionNode = positionGeometry.add(offset)` → `material.positionNode = positionLocal.ad","category":"external_commands","line_end":485,"severity":"medium","line_start":485},{"id":"external_commands:SKILL.md:486:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `mesh.morphTargetInfluences[0] = 0.5` → `mesh.updateMorphTargets(); mesh.morphTargetInfluences[0] ","category":"external_commands","line_end":486,"severity":"medium","line_start":486},{"id":"external_commands:SKILL.md:487:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `gltf.scene.dispose()` → `gltf.scene.traverse((child) => { child.geometry?.dispose(); for (const m","category":"external_commands","line_end":487,"severity":"medium","line_start":487},{"id":"external_commands:SKILL.md:488:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `new THREE.BoxBufferGeometry(1, 1, 1)` → `new THREE.BoxGeometry(1, 1, 1)`: the `*BufferGeometry` a","category":"external_commands","line_end":488,"severity":"medium","line_start":488},{"id":"external_commands:SKILL.md:489:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `BufferGeometryUtils.mergeBufferGeometries([geo1, geo2])` → `BufferGeometryUtils.mergeGeometries([","category":"external_commands","line_end":489,"severity":"medium","line_start":489},{"id":"external_commands:SKILL.md:490:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `geometry.setAttribute(\"uv2\", geometry.attributes.uv)` → `material.aoMap = aoTexture;`: an aoMap r","category":"external_commands","line_end":490,"severity":"medium","line_start":490},{"id":"external_commands:SKILL.md:491:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `new THREE.LineBasicMaterial({ linewidth: 4 })` → `new Line2(new LineGeometry().setPositions(xyzAr","category":"external_commands","line_end":491,"severity":"medium","line_start":491},{"id":"external_commands:SKILL.md:495:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `threejs-fundamentals` - scene setup, the render loop, Object3D transforms and disposal.","category":"external_commands","line_end":496,"severity":"medium","line_start":495},{"id":"external_commands:SKILL.md:496:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `threejs-materials` - material types and settings for the meshes built here.","category":"external_commands","line_end":497,"severity":"medium","line_start":496},{"id":"external_commands:SKILL.md:497:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `threejs-shaders` - ShaderMaterial vertex and fragment code for WebGLRenderer.","category":"external_commands","line_end":498,"severity":"medium","line_start":497},{"id":"external_commands:SKILL.md:498:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `threejs-animation` - animating morph target influences and transforms over time.","category":"external_commands","line_end":499,"severity":"medium","line_start":498},{"id":"external_commands:SKILL.md:499:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `threejs-loaders` - glTF and other formats that bring their own geometry.","category":"external_commands","line_end":500,"severity":"medium","line_start":499}],"finding_verdicts":[{"id":"external_commands:SKILL.md:12:ruby-shell-backtick-execution","reason":"Line 12 opens a Markdown JavaScript fence containing a browser rendering example. The backticks delimit documentation, not shell execution.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:35:ruby-shell-backtick-execution","reason":"Line 35 closes the quick-start JavaScript fence before the built-in geometries section. These Markdown delimiters do not execute commands.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:41:ruby-shell-backtick-execution","reason":"Line 41 opens a Markdown fence showing Three.js shape constructors. There is no shell interpreter or command invocation.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:55:ruby-shell-backtick-execution","reason":"Line 55 closes the basic-shape code fence before the advanced-shapes heading. The match is Markdown syntax, not executable backticks.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:59:ruby-shell-backtick-execution","reason":"Line 59 opens JavaScript examples for capsule and polyhedron geometry. Markdown fencing does not launch external commands.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:72:ruby-shell-backtick-execution","reason":"Line 72 closes the advanced-shape code fence before the path-based shapes heading. The backticks are documentation delimiters.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:76:ruby-shell-backtick-execution","reason":"Line 76 opens a JavaScript fence for lathe, extrusion, and tube geometry examples. No shell commands appear in this block.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:99:ruby-shell-backtick-execution","reason":"Line 99 closes the path-based geometry code fence. The following text geometry heading is documentation, not shell input.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:103:ruby-shell-backtick-execution","reason":"Line 103 opens a Markdown example that loads a relative font asset and constructs text geometry. It contains no shell execution.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:122:ruby-shell-backtick-execution","reason":"Line 122 closes the text geometry example before the BufferGeometry section. Its backticks are Markdown delimiters.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:126:ruby-shell-backtick-execution","reason":"Line 126 uses inline Markdown code for itemSize and vertex attribute names. These identifiers are explanatory text, not shell substitutions.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:130:ruby-shell-backtick-execution","reason":"Line 130 opens a JavaScript fence demonstrating typed vertex arrays and mesh creation. Markdown fencing is not command execution.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:151:ruby-shell-backtick-execution","reason":"Line 151 closes the custom BufferGeometry example before the attribute types heading. No executable shell context exists.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:155:ruby-shell-backtick-execution","reason":"Line 155 opens a JavaScript fence explaining floating-point attributes, indices, and normalized byte colors. No external process is invoked.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:164:ruby-shell-backtick-execution","reason":"Line 164 closes the attribute types code fence before the geometry update section. This is Markdown syntax only.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:168:ruby-shell-backtick-execution","reason":"Line 168 opens a JavaScript fence for updating vertices, normals, and bounding volumes. These Three.js operations do not execute shell commands.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:177:ruby-shell-backtick-execution","reason":"Line 177 closes the geometry update example before the interleaved buffers heading. The backticks delimit documentation.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:181:ruby-shell-backtick-execution","reason":"Line 181 opens a Markdown JavaScript fence demonstrating interleaved vertex data. No shell interpreter or command string is present.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:194:ruby-shell-backtick-execution","reason":"Line 194 closes the interleaved buffers code fence before the edges and wireframes section. This is not executable backtick syntax.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:198:ruby-shell-backtick-execution","reason":"Line 198 opens a JavaScript fence for edge and wireframe rendering. The example invokes Three.js APIs, not external commands.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:207:ruby-shell-backtick-execution","reason":"Line 207 closes the edge rendering code fence before the points section. The matched backticks are Markdown delimiters.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:211:ruby-shell-backtick-execution","reason":"Line 211 opens a JavaScript fence creating a point cloud from random positions. No shell command execution occurs.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:220:ruby-shell-backtick-execution","reason":"Line 220 closes the point cloud code fence before renderer compatibility guidance. The syntax belongs to Markdown, not a shell.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:226:ruby-shell-backtick-execution","reason":"Line 226 opens JavaScript examples for connected lines, loops, and independent segments. The fence does not execute external commands.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:242:ruby-shell-backtick-execution","reason":"Line 242 closes the line rendering code fence before a WebGPU compatibility note. These backticks are documentation syntax.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:250:ruby-shell-backtick-execution","reason":"Line 250 opens a JavaScript fence demonstrating instance transforms and colors. The code performs graphics operations without shell execution.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:272:ruby-shell-backtick-execution","reason":"Line 272 closes the InstancedMesh creation example before runtime update guidance. The match is a Markdown fence.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:276:ruby-shell-backtick-execution","reason":"Line 276 opens a JavaScript fence for instance updates and raycasting. These Three.js APIs do not invoke shell commands.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:292:ruby-shell-backtick-execution","reason":"Line 292 closes the instance update code fence before the InstancedBufferGeometry section. There is no executable shell context.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:298:ruby-shell-backtick-execution","reason":"Line 298 opens a JavaScript fence constructing geometry with per-instance offsets. The backticks format documentation and do not run commands.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:307:ruby-shell-backtick-execution","reason":"Line 307 quotes a GLSL attribute declaration inside a JavaScript comment. The inline backticks and closing Markdown fence are not shell execution.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:310:ruby-shell-backtick-execution","reason":"Line 310 closes the instanced attribute code fence before the BatchedMesh section. This is Markdown formatting only.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:316:ruby-shell-backtick-execution","reason":"Line 316 opens a JavaScript fence registering geometries and instances in a BatchedMesh. No shell process is created.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:332:ruby-shell-backtick-execution","reason":"Line 332 closes the BatchedMesh code fence before the geometry utilities section. The matched syntax is not executable.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:336:ruby-shell-backtick-execution","reason":"Line 336 opens a JavaScript fence for merging vertices and generating tangents with Three.js addons. No shell command is present.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:355:ruby-shell-backtick-execution","reason":"Line 355 closes the geometry utilities code fence before geometry transformation guidance. The backticks are Markdown delimiters.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:359:ruby-shell-backtick-execution","reason":"Line 359 opens a JavaScript fence demonstrating geometry centering, scaling, cloning, and rotation. These graphics operations do not execute shell commands.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:372:ruby-shell-backtick-execution","reason":"Line 372 closes the transformation example before pivot guidance. The match is a Markdown delimiter, not command substitution.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:376:ruby-shell-backtick-execution","reason":"Line 376 opens a JavaScript fence showing object pivot and rotation properties. No external command is invoked.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:380:ruby-shell-backtick-execution","reason":"Line 380 closes the pivot code fence before the morph targets heading. These backticks format documentation only.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:384:ruby-shell-backtick-execution","reason":"Line 384 opens a JavaScript fence constructing morph attributes and setting their blend influence. No shell execution exists in this example.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:397:ruby-shell-backtick-execution","reason":"Line 397 closes the morph target code fence before performance guidance. This is Markdown syntax rather than executable backticks.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:404:ruby-shell-backtick-execution","reason":"Line 404 opens a JavaScript fence showing scene removal and graphics resource disposal. These API calls are not shell commands.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:409:ruby-shell-backtick-execution","reason":"Line 409 closes the disposal example before further renderer guidance. The backticks delimit Markdown content.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:417:ruby-shell-backtick-execution","reason":"Line 417 opens a JavaScript fence initializing a WebGPU renderer and render loop. No external process or shell invocation appears.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:435:ruby-shell-backtick-execution","reason":"Line 435 closes the WebGPU setup code fence before point rendering guidance. The match is Markdown formatting.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:439:ruby-shell-backtick-execution","reason":"Line 439 opens a JavaScript fence demonstrating instanced sprites for larger WebGPU points. The fence does not execute shell commands.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:453:ruby-shell-backtick-execution","reason":"Line 453 closes the sprite example before custom attribute guidance. These backticks are Markdown delimiters only.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:457:ruby-shell-backtick-execution","reason":"Line 457 opens a JavaScript fence using TSL nodes for instance displacement. It contains graphics logic, not shell commands.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:471:ruby-shell-backtick-execution","reason":"Line 471 closes the TSL example before the common mistakes section. The backticks do not have executable semantics here.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:475:ruby-shell-backtick-execution","reason":"Line 475 uses inline Markdown code to contrast tangent generation APIs. These documented JavaScript expressions are not shell substitutions.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:476:ruby-shell-backtick-execution","reason":"Line 476 formats BufferAttribute constructor examples with inline Markdown backticks. The guidance concerns color normalization, not command execution.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:477:ruby-shell-backtick-execution","reason":"Line 477 quotes geometry copying and instanceCount assignment as inline code. These graphics API examples are not shell commands.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:478:ruby-shell-backtick-execution","reason":"Line 478 compares BatchedMesh geometry registration and instance creation using inline Markdown. No shell interpreter is involved.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:479:ruby-shell-backtick-execution","reason":"Line 479 quotes a LineLoop replacement using repeated endpoints. Inline code formatting does not execute the illustrated JavaScript as shell input.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:480:ruby-shell-backtick-execution","reason":"Line 480 quotes JavaScript import specifiers to explain addon resolution. Markdown backticks do not turn these imports into shell commands.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:481:ruby-shell-backtick-execution","reason":"Line 481 uses inline code for renamed CapsuleGeometry parameter properties. Property names in documentation are not executable backtick expressions.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:482:ruby-shell-backtick-execution","reason":"Line 482 contrasts TextGeometry option objects using inline Markdown code. The match is documentation formatting, not shell execution.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:483:ruby-shell-backtick-execution","reason":"Line 483 quotes point and sprite constructors to explain WebGPU point sizing. No external command or shell evaluation is present.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:484:ruby-shell-backtick-execution","reason":"Line 484 compares ShaderMaterial with TSL node assignment in inline code. These are renderer compatibility examples, not shell commands.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:485:ruby-shell-backtick-execution","reason":"Line 485 quotes TSL position node expressions using Markdown backticks. There is no shell execution context.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:486:ruby-shell-backtick-execution","reason":"Line 486 uses inline code for morph influence updates and target initialization. These Three.js calls do not invoke external processes.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:487:ruby-shell-backtick-execution","reason":"Line 487 documents scene traversal and graphics resource disposal inside inline Markdown code. The backticks do not execute shell commands.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:488:ruby-shell-backtick-execution","reason":"Line 488 compares obsolete and current geometry constructor names using inline code. This is API migration documentation, not command execution.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:489:ruby-shell-backtick-execution","reason":"Line 489 quotes old and current geometry merging API names. Markdown formatting around JavaScript calls does not invoke a shell.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:490:ruby-shell-backtick-execution","reason":"Line 490 quotes UV attributes and texture channel settings as inline code. The line documents material configuration without shell execution.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:491:ruby-shell-backtick-execution","reason":"Line 491 uses inline code to explain thick-line rendering APIs and addon imports. These Markdown spans are not executable command substitutions.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:495:ruby-shell-backtick-execution","reason":"Line 495 formats the related threejs-fundamentals skill name as inline code. The surrounding list is cross-reference text, not shell input.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:496:ruby-shell-backtick-execution","reason":"Line 496 formats the related threejs-materials skill name with Markdown backticks. It does not instruct command execution.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:497:ruby-shell-backtick-execution","reason":"Line 497 quotes the threejs-shaders skill name in a reference list. These inline Markdown delimiters are not executable.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:498:ruby-shell-backtick-execution","reason":"Line 498 formats the threejs-animation skill name as a documentation cross-reference. No shell command is supplied.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:499:ruby-shell-backtick-execution","reason":"Line 499 quotes the threejs-loaders skill name before another related skill reference. The backticks mark names, not command substitutions.","verdict":"false_positive","confidence":1}],"semantic_findings":[],"subject_marketplace_commit_sha":"c993c6abcbffafea2683d7748b53b3dfaf438415","subject_content_hash":"c29c1568cb56e902999b6a50316cd5079c53ee620138148897d269e9716e8da7","subject_tree_hash":"3a2d42ea30e99ca98c4001b359b218bb3dc0e6412ebace0e7babdaa20a56811f","subject_plugin_path":"skills/cloudai-x/threejs-geometry","audit_payload_hash":"867cbd8d93c1fec624d118c293fd1a1b","confirmed_risk_level":"safe","scanner_version":"3.0.0","policy_version":"skillstore-security-audit-policy-v1","subject":{"marketplaceCommitSha":"c993c6abcbffafea2683d7748b53b3dfaf438415","contentHash":"c29c1568cb56e902999b6a50316cd5079c53ee620138148897d269e9716e8da7","treeHash":"3a2d42ea30e99ca98c4001b359b218bb3dc0e6412ebace0e7babdaa20a56811f","pluginPath":"skills/cloudai-x/threejs-geometry","auditPayloadHash":"867cbd8d93c1fec624d118c293fd1a1b"},"scannerVersion":"3.0.0","policyVersion":"skillstore-security-audit-policy-v1"},"auditTranslation":null,"localization":{"requestedLocale":"en","contentLocale":"en","availableLocales":["en"],"fallbackToEnglish":false},"attestation":{"availability":"issued","url":"/api/skills/cloudai-x-threejs-geometry/audits/1/attestation","status":"active"},"trust":{"publicState":"public","auditState":"complete","auditCurrentness":null,"confirmedRiskLevel":"safe","confirmedFindingCount":0,"capabilityReviewCount":0,"needsReviewCount":0,"falsePositiveCount":0,"agentAutoInstallPolicy":"allowed","manualInstallPolicy":"allowed","artifactSignatureState":"available","attestationState":"active","verificationState":"not_verified"},"isLatest":true}}