{"data":{"skill":{"slug":"cloudai-x-threejs-shaders","name":"threejs-shaders","icon":"📦","repo":"https://github.com/cloudai-x/threejs-skills/tree/0e181866f095b5f06d005133876e926515390d95/skills/threejs-shaders","status":"approved","author":"cloudai-x","authorVersion":null,"skillstoreRevision":1,"license":null},"licenseCorrection":null,"audit":{"id":"05bae7c8-7228-4111-84a0-60e2d5738371","skill_id":"80e925e5-10fc-4c62-8bb5-e971468401af","version":1,"content_hash":"v3:c993c6abcbffafea2683d7748b53b3dfaf438415:8dc55ed6cc348abaad60851ae9f3f5ebcc6e3027dd7f7a55acc1832c73f11bca:a7b6bd0724e32aed53ffdf1c7b114a9e9432595463bba44460054a15edfe920b:736b696c6c732f636c6f756461692d782f74687265656a732d73686164657273:a4dd38201b66b4450e4062742960a24e","risk_level":"safe","is_blocked":false,"safe_to_publish":true,"analysis_status":"ok","agent_auto_install_policy":"allowed","manual_install_policy":"allowed","summary":"All 118 static findings are false positives from Markdown formatting, JavaScript shader strings, GLSL entry points, and shader chunk keys. The reviewed documentation contains rendering examples and relative texture loads, with no evidence of shell execution, credential access, reconnaissance, or prompt injection. No evidence found of malicious intent or additional semantic security risks.","remediation":[],"risk_factor_evidence":[{"factor":"external_commands","evidence":[{"file":"SKILL.md","line_end":29,"line_start":12},{"file":"SKILL.md","line_end":37,"line_start":36},{"file":"SKILL.md","line_end":64,"line_start":48},{"file":"SKILL.md","line_end":68,"line_start":64},{"file":"SKILL.md","line_end":68,"line_start":68},{"file":"SKILL.md","line_end":72,"line_start":70},{"file":"SKILL.md","line_end":84,"line_start":83},{"file":"SKILL.md","line_end":94,"line_start":92},{"file":"SKILL.md","line_end":96,"line_start":94},{"file":"SKILL.md","line_end":96,"line_start":96},{"file":"SKILL.md","line_end":101,"line_start":98},{"file":"SKILL.md","line_end":113,"line_start":112},{"file":"SKILL.md","line_end":123,"line_start":121},{"file":"SKILL.md","line_end":127,"line_start":123},{"file":"SKILL.md","line_end":141,"line_start":127},{"file":"SKILL.md","line_end":143,"line_start":141},{"file":"SKILL.md","line_end":145,"line_start":143},{"file":"SKILL.md","line_end":151,"line_start":145},{"file":"SKILL.md","line_end":153,"line_start":151},{"file":"SKILL.md","line_end":153,"line_start":153},{"file":"SKILL.md","line_end":159,"line_start":157},{"file":"SKILL.md","line_end":163,"line_start":159},{"file":"SKILL.md","line_end":165,"line_start":163},{"file":"SKILL.md","line_end":165,"line_start":165},{"file":"SKILL.md","line_end":177,"line_start":171},{"file":"SKILL.md","line_end":187,"line_start":186},{"file":"SKILL.md","line_end":197,"line_start":193},{"file":"SKILL.md","line_end":201,"line_start":197},{"file":"SKILL.md","line_end":203,"line_start":201},{"file":"SKILL.md","line_end":205,"line_start":203},{"file":"SKILL.md","line_end":215,"line_start":214},{"file":"SKILL.md","line_end":229,"line_start":227},{"file":"SKILL.md","line_end":231,"line_start":229},{"file":"SKILL.md","line_end":231,"line_start":231},{"file":"SKILL.md","line_end":249,"line_start":235},{"file":"SKILL.md","line_end":253,"line_start":249},{"file":"SKILL.md","line_end":253,"line_start":253},{"file":"SKILL.md","line_end":263,"line_start":255},{"file":"SKILL.md","line_end":271,"line_start":270},{"file":"SKILL.md","line_end":280,"line_start":275},{"file":"SKILL.md","line_end":282,"line_start":280},{"file":"SKILL.md","line_end":286,"line_start":282},{"file":"SKILL.md","line_end":288,"line_start":286},{"file":"SKILL.md","line_end":298,"line_start":288},{"file":"SKILL.md","line_end":307,"line_start":301},{"file":"SKILL.md","line_end":309,"line_start":307},{"file":"SKILL.md","line_end":309,"line_start":309},{"file":"SKILL.md","line_end":311,"line_start":311},{"file":"SKILL.md","line_end":315,"line_start":315},{"file":"SKILL.md","line_end":318,"line_start":317}]}],"critical_findings":[],"high_findings":[],"medium_findings":[],"low_findings":[],"dangerous_patterns":[],"files_scanned":1,"total_lines":498,"audit_model":"codex","audited_at":"2026-11-07T14:36:45.334+00:00","created_at":"2026-11-09T15:33:48.754393+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":29,"severity":"medium","line_start":12},{"id":"external_commands:SKILL.md:36:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"`,","category":"external_commands","line_end":37,"severity":"medium","line_start":36},{"id":"external_commands:SKILL.md:48:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"`,","category":"external_commands","line_end":64,"severity":"medium","line_start":48},{"id":"external_commands:SKILL.md:64:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":68,"severity":"medium","line_start":64},{"id":"external_commands:SKILL.md:68:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Every `ShaderMaterial` compiles as GLSL ES 3.00 — three.js always prepends `#version 300 es` (WebGL ","category":"external_commands","line_end":68,"severity":"medium","line_start":68},{"id":"external_commands:SKILL.md:70:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":72,"severity":"medium","line_start":70},{"id":"external_commands:SKILL.md:83:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"`,","category":"external_commands","line_end":84,"severity":"medium","line_start":83},{"id":"external_commands:SKILL.md:92:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"`,","category":"external_commands","line_end":94,"severity":"medium","line_start":92},{"id":"external_commands:SKILL.md:94:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":96,"severity":"medium","line_start":94},{"id":"external_commands:SKILL.md:96:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"RawShaderMaterial gets only `#define SHADER_TYPE`, `#define SHADER_NAME` and your `defines` (plus `#","category":"external_commands","line_end":96,"severity":"medium","line_start":96},{"id":"external_commands:SKILL.md:98:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":101,"severity":"medium","line_start":98},{"id":"external_commands:SKILL.md:112:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"`,","category":"external_commands","line_end":113,"severity":"medium","line_start":112},{"id":"external_commands:SKILL.md:121:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"`,","category":"external_commands","line_end":123,"severity":"medium","line_start":121},{"id":"external_commands:SKILL.md:123:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":127,"severity":"medium","line_start":123},{"id":"external_commands:SKILL.md:127:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":141,"severity":"medium","line_start":127},{"id":"external_commands:SKILL.md:141:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":143,"severity":"medium","line_start":141},{"id":"external_commands:SKILL.md:143:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"The matching GLSL declarations — sample the texture with `texture(mapValue, vUv)`:","category":"external_commands","line_end":145,"severity":"medium","line_start":143},{"id":"external_commands:SKILL.md:145:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```glsl","category":"external_commands","line_end":151,"severity":"medium","line_start":145},{"id":"external_commands:SKILL.md:151:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":153,"severity":"medium","line_start":151},{"id":"external_commands:SKILL.md:153:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Update a uniform by assigning `.value` from the frame loop (`material.uniforms.floatValue.value = 2.","category":"external_commands","line_end":153,"severity":"medium","line_start":153},{"id":"external_commands:SKILL.md:157:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"`THREE.Color` converts hex input from sRGB to the linear working color space, so a color uniform hol","category":"external_commands","line_end":159,"severity":"medium","line_start":157},{"id":"external_commands:SKILL.md:159:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```glsl","category":"external_commands","line_end":163,"severity":"medium","line_start":159},{"id":"external_commands:SKILL.md:163:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":165,"severity":"medium","line_start":163},{"id":"external_commands:SKILL.md:165:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"`tonemapping_fragment` applies `renderer.toneMapping` (a no-op with `NoToneMapping`); `colorspace_fr","category":"external_commands","line_end":165,"severity":"medium","line_start":165},{"id":"external_commands:SKILL.md:171:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":177,"severity":"medium","line_start":171},{"id":"external_commands:SKILL.md:186:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"`,","category":"external_commands","line_end":187,"severity":"medium","line_start":186},{"id":"external_commands:SKILL.md:193:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"`,","category":"external_commands","line_end":197,"severity":"medium","line_start":193},{"id":"external_commands:SKILL.md:197:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":201,"severity":"medium","line_start":197},{"id":"external_commands:SKILL.md:201:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Use one space consistently. World space with `cameraPosition`:","category":"external_commands","line_end":203,"severity":"medium","line_start":201},{"id":"external_commands:SKILL.md:203:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":205,"severity":"medium","line_start":203},{"id":"external_commands:SKILL.md:214:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"`,","category":"external_commands","line_end":215,"severity":"medium","line_start":214},{"id":"external_commands:SKILL.md:227:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"`,","category":"external_commands","line_end":229,"severity":"medium","line_start":227},{"id":"external_commands:SKILL.md:229:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":231,"severity":"medium","line_start":229},{"id":"external_commands:SKILL.md:231:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"`normalMatrix * normal` is view space — pair it with the view-space direction to the camera, never w","category":"external_commands","line_end":231,"severity":"medium","line_start":231},{"id":"external_commands:SKILL.md:235:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```glsl","category":"external_commands","line_end":249,"severity":"medium","line_start":235},{"id":"external_commands:SKILL.md:249:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":253,"severity":"medium","line_start":249},{"id":"external_commands:SKILL.md:253:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Three.js declares `position`, `normal`, `uv`, `instanceMatrix` (for an InstancedMesh), `instanceColo","category":"external_commands","line_end":253,"severity":"medium","line_start":253},{"id":"external_commands:SKILL.md:255:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":263,"severity":"medium","line_start":255},{"id":"external_commands:SKILL.md:270:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"`,","category":"external_commands","line_end":271,"severity":"medium","line_start":270},{"id":"external_commands:SKILL.md:275:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"`,","category":"external_commands","line_end":280,"severity":"medium","line_start":275},{"id":"external_commands:SKILL.md:280:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":282,"severity":"medium","line_start":280},{"id":"external_commands:SKILL.md:282:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"For a per-vertex attribute use `geometry.setAttribute(\"aOffset\", new THREE.BufferAttribute(new Float","category":"external_commands","line_end":286,"severity":"medium","line_start":282},{"id":"external_commands:SKILL.md:286:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"`onBeforeCompile` rewrites the shader strings of a built-in material. It runs once per program, befo","category":"external_commands","line_end":288,"severity":"medium","line_start":286},{"id":"external_commands:SKILL.md:288:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":298,"severity":"medium","line_start":288},{"id":"external_commands:SKILL.md:301:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"`,","category":"external_commands","line_end":307,"severity":"medium","line_start":301},{"id":"external_commands:SKILL.md:307:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":309,"severity":"medium","line_start":307},{"id":"external_commands:SKILL.md:309:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Injection points in the built-in shaders: vertex `#include <begin_vertex>` (declares `vec3 transform","category":"external_commands","line_end":309,"severity":"medium","line_start":309},{"id":"external_commands:SKILL.md:311:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"If `onBeforeCompile` produces different shaders for different materials (for example depending on `m","category":"external_commands","line_end":311,"severity":"medium","line_start":311},{"id":"external_commands:SKILL.md:315:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"`#include <chunk>` works in ShaderMaterial and RawShaderMaterial source and reuses three.js helper f","category":"external_commands","line_end":315,"severity":"medium","line_start":315},{"id":"external_commands:SKILL.md:317:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":318,"severity":"medium","line_start":317},{"id":"external_commands:SKILL.md:330:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"`;","category":"external_commands","line_end":331,"severity":"medium","line_start":330},{"id":"external_commands:SKILL.md:331:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":333,"severity":"medium","line_start":331},{"id":"external_commands:SKILL.md:333:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Only use chunk keys that exist in this release (log `Object.keys(THREE.ShaderChunk)` to check): ther","category":"external_commands","line_end":333,"severity":"medium","line_start":333},{"id":"external_commands:SKILL.md:337:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":347,"severity":"medium","line_start":337},{"id":"external_commands:SKILL.md:347:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":349,"severity":"medium","line_start":347},{"id":"external_commands:SKILL.md:349:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Debug visually by writing the value under test to the output: `gl_FragColor = vec4(vUv, 0.0, 1.0);` ","category":"external_commands","line_end":349,"severity":"medium","line_start":349},{"id":"external_commands:SKILL.md:353:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"`ShaderMaterial`, `RawShaderMaterial` and `onBeforeCompile` run only under WebGLRenderer. Under WebG","category":"external_commands","line_end":353,"severity":"medium","line_start":353},{"id":"external_commands:SKILL.md:357:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"An unlit effect uses `MeshBasicNodeMaterial`; `MeshStandardNodeMaterial` is lit and renders black wi","category":"external_commands","line_end":357,"severity":"medium","line_start":357},{"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":384,"severity":"medium","line_start":359},{"id":"external_commands:SKILL.md:384:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":388,"severity":"medium","line_start":384},{"id":"external_commands:SKILL.md:388:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"`uniform(value)` creates an updatable uniform; `time` is a built-in node that updates itself every f","category":"external_commands","line_end":388,"severity":"medium","line_start":388},{"id":"external_commands:SKILL.md:390:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":401,"severity":"medium","line_start":390},{"id":"external_commands:SKILL.md:401:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":405,"severity":"medium","line_start":401},{"id":"external_commands:SKILL.md:405:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"`texture(map, uvNode)` samples a texture (`texture(map)` uses the mesh UVs); `.discard()` on a condi","category":"external_commands","line_end":405,"severity":"medium","line_start":405},{"id":"external_commands:SKILL.md:407:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":420,"severity":"medium","line_start":407},{"id":"external_commands:SKILL.md:420:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":424,"severity":"medium","line_start":420},{"id":"external_commands:SKILL.md:424:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"`positionNode` replaces the transformed local position. Build it on `positionLocal`, which already c","category":"external_commands","line_end":424,"severity":"medium","line_start":424},{"id":"external_commands:SKILL.md:426:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":440,"severity":"medium","line_start":426},{"id":"external_commands:SKILL.md:440:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":444,"severity":"medium","line_start":440},{"id":"external_commands:SKILL.md:444:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Write reusable logic as a TSL `Fn`; it compiles to both GLSL and WGSL. `varying(node, \"name\")` passe","category":"external_commands","line_end":444,"severity":"medium","line_start":444},{"id":"external_commands:SKILL.md:446:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":455,"severity":"medium","line_start":446},{"id":"external_commands:SKILL.md:455:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":459,"severity":"medium","line_start":455},{"id":"external_commands:SKILL.md:459:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Rewrite GLSL functions as `Fn`s instead of pasting shader strings: `glslFn` runs only on the WebGL 2","category":"external_commands","line_end":459,"severity":"medium","line_start":459},{"id":"external_commands:SKILL.md:463:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"`await renderer.debug.getShaderAsync(scene, camera, mesh)` returns the generated `{ vertexShader, fr","category":"external_commands","line_end":463,"severity":"medium","line_start":463},{"id":"external_commands:SKILL.md:467:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `const clock = new THREE.Clock();` → `const timer = new THREE.Timer(); timer.connect(document);`: ","category":"external_commands","line_end":467,"severity":"medium","line_start":467},{"id":"external_commands:SKILL.md:468:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `\"#include <output_fragment>\"` → `\"#include <opaque_fragment>\"`: output_fragment does not exist, s","category":"external_commands","line_end":468,"severity":"medium","line_start":468},{"id":"external_commands:SKILL.md:469:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `fragmentShader: \"uniform vec3 color;\\nvoid main() {\\n  gl_FragColor = vec4(color, 1.0);\\n}\"` → `f","category":"external_commands","line_end":469,"severity":"medium","line_start":469},{"id":"external_commands:SKILL.md:470:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `const renderer = new THREE.WebGPURenderer(); const material = new THREE.ShaderMaterial({ vertexSh","category":"external_commands","line_end":470,"severity":"medium","line_start":470},{"id":"external_commands:SKILL.md:471: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":471,"severity":"medium","line_start":471},{"id":"external_commands:SKILL.md:472:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `import { time } from \"three/nodes\"` → `import { time } from \"three/tsl\"`: the three/nodes module ","category":"external_commands","line_end":472,"severity":"medium","line_start":472},{"id":"external_commands:SKILL.md:473:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `import { toVarying } from \"three/tsl\"` → `varying(node, \"vName\")`: the exported function is varyi","category":"external_commands","line_end":473,"severity":"medium","line_start":473},{"id":"external_commands:SKILL.md:474:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `import { uniforms, PI2 } from \"three/tsl\"` → `import { uniformArray, TWO_PI } from \"three/tsl\"`: ","category":"external_commands","line_end":474,"severity":"medium","line_start":474},{"id":"external_commands:SKILL.md:475:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `amplitude.label(\"amp\")` → `amplitude.setName(\"amp\")`: setName() was renamed from label() in r179;","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":"- `texture(map).uv(uvNode)` → `texture(map).sample(uvNode)`: TextureNode.sample() was renamed from u","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":"- `import { screen, viewportTopLeft, directionToColor } from \"three/tsl\"` → `import { blendScreen, v","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":"- `rangeFog(color, near, far)` → `fog(color, rangeFogFactor(near, far))`: three/tsl no longer export","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":"- `const t = uniform(0); t.value = timer.getElapsed();` → `time`: the built-in time node updates its","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":"- `const n = glslFn(glslSource);` → `const n = Fn(([p]) => mx_noise_float(p));`: glslFn runs only on","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":"- `uniforms: { modelViewMatrix: { value: new THREE.Matrix4() } }` → `uniform mat4 modelViewMatrix;`:","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":"- `new THREE.ShaderMaterial({ transparent: true, opacity: 0.5 })` → `new THREE.ShaderMaterial({ tran","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":"- `uniforms: { position: { value: new THREE.Vector3() } }` → `uniforms: { offset: { value: new THREE","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({ glslVersion: THREE.GLSL3, vertexShader, fragmentShader })` → `new THRE","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":"- `new THREE.RawShaderMaterial({ vertexShader, fragmentShader })` → `new THREE.RawShaderMaterial({ v","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":"- `new THREE.ShaderMaterial({ vertexShader, fragmentShader, extensions: { derivatives: true, fragDep","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":"- `blending: THREE.MultiplyBlending` → `blending: THREE.MultiplyBlending, premultipliedAlpha: true`:","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":"- `gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);` → `gl_Position = project","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":"- `varying vec2 vUv1; void main() { vUv1 = uv1; }` → `attribute vec2 uv1; varying vec2 vUv1; void ma","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":"- `dot(normalize(cameraPosition - vWorldPosition), normalize(normalMatrix * normal))` → `dot(normali","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":"- `material.onBeforeCompile = (shader) => console.log(shader.fragmentShader);` → `renderer.debug.onS","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-materials` — built-in materials and their texture maps, when a standard material already ","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-textures` — loading textures, color spaces and UV channels for maps sampled in shaders","category":"external_commands","line_end":497,"severity":"medium","line_start":496},{"id":"sensitive:SKILL.md:333:certificate-key-files","file":"SKILL.md","pattern":"Certificate/key files","snippet":"Only use chunk keys that exist in this release (log `Object.keys(THREE.ShaderChunk)` to check): ther","category":"sensitive","line_end":333,"severity":"high","line_start":333},{"id":"blocker:SKILL.md:32:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"void main() {","category":"blocker","line_end":32,"severity":"low","line_start":32},{"id":"blocker:SKILL.md:42:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"void main() {","category":"blocker","line_end":42,"severity":"low","line_start":42},{"id":"blocker:SKILL.md:79:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"void main() {","category":"blocker","line_end":79,"severity":"low","line_start":79},{"id":"blocker:SKILL.md:87:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"void main() {","category":"blocker","line_end":87,"severity":"low","line_start":87},{"id":"blocker:SKILL.md:109:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"void main() {","category":"blocker","line_end":109,"severity":"low","line_start":109},{"id":"blocker:SKILL.md:118:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"void main() {","category":"blocker","line_end":118,"severity":"low","line_start":118},{"id":"blocker:SKILL.md:181:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"void main() {","category":"blocker","line_end":181,"severity":"low","line_start":181},{"id":"blocker:SKILL.md:188:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"void main() {","category":"blocker","line_end":188,"severity":"low","line_start":188},{"id":"blocker:SKILL.md:209:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"void main() {","category":"blocker","line_end":209,"severity":"low","line_start":209},{"id":"blocker:SKILL.md:219:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"void main() {","category":"blocker","line_end":219,"severity":"low","line_start":219},{"id":"blocker:SKILL.md:240:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"void main() {","category":"blocker","line_end":240,"severity":"low","line_start":240},{"id":"blocker:SKILL.md:266:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"void main() {","category":"blocker","line_end":266,"severity":"low","line_start":266},{"id":"blocker:SKILL.md:272:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"void main() {","category":"blocker","line_end":272,"severity":"low","line_start":272},{"id":"blocker:SKILL.md:326:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"void main() {","category":"blocker","line_end":326,"severity":"low","line_start":326},{"id":"blocker:SKILL.md:469:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"- `fragmentShader: \"uniform vec3 color;\\nvoid main() {\\n  gl_FragColor = vec4(color, 1.0);\\n}\"` → `f","category":"blocker","line_end":469,"severity":"low","line_start":469},{"id":"blocker:SKILL.md:489:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"- `varying vec2 vUv1; void main() { vUv1 = uv1; }` → `attribute vec2 uv1; varying vec2 vUv1; void ma","category":"blocker","line_end":489,"severity":"low","line_start":489}],"finding_verdicts":[{"id":"external_commands:SKILL.md:12:ruby-shell-backtick-execution","reason":"The backticks delimit a Markdown JavaScript example and a GLSL template literal, not a Ruby or shell command.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:36:ruby-shell-backtick-execution","reason":"These backticks close the vertex shader string and open the fragment shader string within a ShaderMaterial example, without invoking a shell.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:48:ruby-shell-backtick-execution","reason":"The backticks end the fragment shader string and Markdown example; the remaining JavaScript updates a timer and renders the scene.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:64:ruby-shell-backtick-execution","reason":"This Markdown closing fence precedes inline formatting for ShaderMaterial documentation; neither construct executes external commands.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:68:ruby-shell-backtick-execution","reason":"Inline backticks format GLSL versions, aliases, and material options in explanatory prose; no shell evaluation occurs.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:70:ruby-shell-backtick-execution","reason":"The detected backticks introduce a Markdown JavaScript example and a shader source string, not command execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:83:ruby-shell-backtick-execution","reason":"The backticks separate JavaScript template literals containing vertex and fragment GLSL code, not shell commands.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:92:ruby-shell-backtick-execution","reason":"The matched delimiters close the fragment shader string and its Markdown code block; no external process is started.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:94:ruby-shell-backtick-execution","reason":"The closing Markdown fence and following inline code describe RawShaderMaterial declarations, not executable shell syntax.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:96:ruby-shell-backtick-execution","reason":"Backticks format RawShaderMaterial options and matrix names in documentation; the text contains no shell invocation.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:98:ruby-shell-backtick-execution","reason":"The Markdown fence and template literal introduce a RawShaderMaterial GLSL example, without external command execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:112:ruby-shell-backtick-execution","reason":"These delimiters separate vertex and fragment shader strings in JavaScript; they are not Ruby or shell execution operators.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:121:ruby-shell-backtick-execution","reason":"The backticks close a fragment shader template literal and its Markdown code block; no process execution is present.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:123:ruby-shell-backtick-execution","reason":"The matched backticks are Markdown fences around adjacent material and uniform examples, not commands.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:127:ruby-shell-backtick-execution","reason":"This Markdown example loads a relative texture and configures uniform values; its backticks do not invoke a shell.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:141:ruby-shell-backtick-execution","reason":"A closing Markdown fence and inline texture sampling expression are documentation formatting, not external command execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:143:ruby-shell-backtick-execution","reason":"Backticks format a GLSL texture sampling expression and introduce a declaration example; no shell command is requested.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:145:ruby-shell-backtick-execution","reason":"The matched backticks fence GLSL uniform declarations in Markdown, not a Ruby or shell program.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:151:ruby-shell-backtick-execution","reason":"The closing code fence and following inline uniform update are Markdown formatting and JavaScript property access, not shell execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:153:ruby-shell-backtick-execution","reason":"Inline code demonstrates uniform value assignments and warns about name collisions; it contains no external command invocation.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:157:ruby-shell-backtick-execution","reason":"Backticks format THREE.Color and introduce a GLSL example explaining color conversion; no shell commands are executed.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:159:ruby-shell-backtick-execution","reason":"The backticks fence GLSL fragment output and shader includes in Markdown; these are rendering operations, not system commands.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:163:ruby-shell-backtick-execution","reason":"The matched delimiters close a GLSL code block and format chunk names in explanatory prose, without shell execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:165:ruby-shell-backtick-execution","reason":"Inline backticks identify tone mapping, color spaces, and texture decoding APIs; the paragraph does not invoke external commands.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:171:ruby-shell-backtick-execution","reason":"The backticks introduce a Markdown JavaScript example and vertex displacement shader string, not executable shell input.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:186:ruby-shell-backtick-execution","reason":"The delimiters separate GLSL vertex and fragment template literals in a material definition; no shell is involved.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:193:ruby-shell-backtick-execution","reason":"The matched delimiters close the fragment shader string and Markdown example; the example creates subdivided plane geometry.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:197:ruby-shell-backtick-execution","reason":"These backticks close a Markdown example and format cameraPosition in the Fresnel explanation; no command execution occurs.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:201:ruby-shell-backtick-execution","reason":"The paragraph formats cameraPosition and introduces a shader example using Markdown backticks, without shell commands.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:203:ruby-shell-backtick-execution","reason":"The detected delimiters introduce JavaScript documentation and a GLSL vertex shader template literal for a Fresnel effect.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:214:ruby-shell-backtick-execution","reason":"The backticks separate vertex and fragment shader source strings, not shell commands or Ruby expressions.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:227:ruby-shell-backtick-execution","reason":"These delimiters close a Fresnel fragment shader literal and its Markdown example; no external process is started.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:229:ruby-shell-backtick-execution","reason":"The closing Markdown fence and inline coordinate expressions document normal spaces, without invoking a shell.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:231:ruby-shell-backtick-execution","reason":"Backticks format GLSL vector operations explaining consistent coordinate spaces; they are not command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:235:ruby-shell-backtick-execution","reason":"The Markdown code fence contains a GLSL dissolve shader with texture sampling and fragment discard, not external commands.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:249:ruby-shell-backtick-execution","reason":"The closing code fence precedes inline formatting for mesh attributes; these backticks do not execute commands.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:253:ruby-shell-backtick-execution","reason":"Backticks format shader attribute identifiers and configuration options in prose, not shell commands.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:255:ruby-shell-backtick-execution","reason":"The delimiters introduce an instanced mesh JavaScript example and GLSL source literal; neither invokes an external process.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:270:ruby-shell-backtick-execution","reason":"These backticks separate GLSL shader strings inside a ShaderMaterial definition, not Ruby or shell commands.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:275:ruby-shell-backtick-execution","reason":"The delimiters end a fragment shader literal and Markdown example configuring an instanced mesh, without shell execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:280:ruby-shell-backtick-execution","reason":"The matched text closes a Markdown example and formats a BufferAttribute expression, not a shell command.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:282:ruby-shell-backtick-execution","reason":"Inline backticks format geometry attribute setup and the onBeforeCompile API in explanatory prose; no external commands are present.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:286:ruby-shell-backtick-execution","reason":"The text describes a material shader compilation callback using inline formatting and a code fence, not shell execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:288:ruby-shell-backtick-execution","reason":"The example rewrites a built-in vertex shader using JavaScript string replacement; its backticks delimit GLSL source, not shell commands.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:301:ruby-shell-backtick-execution","reason":"The matched delimiters close a GLSL replacement string and a Markdown example; the surrounding callback changes rendering code only.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:307:ruby-shell-backtick-execution","reason":"A closing Markdown fence precedes formatted shader include locations; neither construct invokes system commands.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:309:ruby-shell-backtick-execution","reason":"The documented injection points are shader chunk extension locations, not instruction overrides or shell command injection.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:311:ruby-shell-backtick-execution","reason":"Inline code names material callbacks and program cache keys for shader variants; no shell execution is requested.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:315:ruby-shell-backtick-execution","reason":"Backticks format shader include syntax and depth helper names in documentation; these are not external commands.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:317:ruby-shell-backtick-execution","reason":"The matched backticks introduce a Markdown JavaScript example and a GLSL depth visualization source string.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:330:ruby-shell-backtick-execution","reason":"The backticks close a JavaScript GLSL template literal and its Markdown code fence, not a shell command.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:331:ruby-shell-backtick-execution","reason":"A closing Markdown fence and inline ShaderChunk inspection expression are documentation formatting, not shell evaluation.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:333:ruby-shell-backtick-execution","reason":"Inline code inspects THREE.ShaderChunk property names to verify supported includes; it does not run external commands.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:337:ruby-shell-backtick-execution","reason":"The backticks fence JavaScript that logs shader compilation errors locally; the example never invokes a shell.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:347:ruby-shell-backtick-execution","reason":"The closing Markdown fence precedes inline GLSL debugging expressions, not executable shell commands.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:349:ruby-shell-backtick-execution","reason":"Backticks format fragment output assignments for visualizing UVs and normals; these are GPU shader expressions, not shell execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:353:ruby-shell-backtick-execution","reason":"The paragraph formats renderer and material API names while explaining backend compatibility; it contains no external command invocation.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:357:ruby-shell-backtick-execution","reason":"Inline backticks identify node material types and properties in explanatory prose, not shell commands.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:359:ruby-shell-backtick-execution","reason":"The Markdown example initializes a WebGPURenderer and a TSL material for browser rendering; its fence does not execute shell commands.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:384:ruby-shell-backtick-execution","reason":"The code fence closes a rendering example and precedes inline uniform documentation; no shell execution occurs.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:388:ruby-shell-backtick-execution","reason":"Backticks format the uniform factory and built-in time node in documentation, not external command syntax.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:390:ruby-shell-backtick-execution","reason":"The Markdown fence contains JavaScript configuring procedural noise and a TSL uniform, with no shell or subprocess invocation.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:401:ruby-shell-backtick-execution","reason":"The closing Markdown fence and following inline texture operations describe shader sampling, not shell execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:405:ruby-shell-backtick-execution","reason":"Inline backticks explain texture sampling and fragment discard in TSL; no external commands are requested.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:407:ruby-shell-backtick-execution","reason":"The fenced JavaScript loads a relative noise texture and builds a TSL dissolve material, without invoking a shell.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:420:ruby-shell-backtick-execution","reason":"The matched delimiters close a Markdown example and format position node names in explanatory prose, not shell commands.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:424:ruby-shell-backtick-execution","reason":"Backticks format TSL position properties while explaining vertex transforms; there is no shell execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:426:ruby-shell-backtick-execution","reason":"The Markdown fence contains JavaScript configuring lights, geometry, and node-based vertex displacement, not an external command.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:440:ruby-shell-backtick-execution","reason":"The closing Markdown fence and following inline Fn identifier are documentation formatting, not command evaluation.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:444:ruby-shell-backtick-execution","reason":"Inline backticks format TSL function and varying APIs for reusable shader logic, without shell invocation.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:446:ruby-shell-backtick-execution","reason":"The Markdown example defines a reusable TSL height fade and varying node; its fence does not execute system commands.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:455:ruby-shell-backtick-execution","reason":"The matched backticks close a Markdown example and format shader translation APIs in prose, not executable shell input.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:459:ruby-shell-backtick-execution","reason":"Backticks format TSL conversion and renderer compute APIs; these are rendering instructions, not external process execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:463:ruby-shell-backtick-execution","reason":"Inline code retrieves generated shader source through renderer debugging APIs; it does not invoke a shell or transmit data.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:467:ruby-shell-backtick-execution","reason":"Backticks format a documented migration from Clock to Timer, not Ruby or shell execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:468:ruby-shell-backtick-execution","reason":"Inline code compares obsolete and current shader chunk names; no shell command is executed.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:469:ruby-shell-backtick-execution","reason":"Backticks format before-and-after fragment shader strings illustrating color conversion includes, not shell command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:470:ruby-shell-backtick-execution","reason":"The inline examples contrast incompatible ShaderMaterial usage with a node material under WebGPURenderer; neither invokes a shell.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:471:ruby-shell-backtick-execution","reason":"Backticks format a positionNode correction preserving transformed geometry; these are JavaScript shader expressions, not system commands.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:472:ruby-shell-backtick-execution","reason":"Inline code compares JavaScript import paths for TSL modules; no shell command or runtime download instruction is present.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:473:ruby-shell-backtick-execution","reason":"Backticks format a TSL varying API correction, not Ruby or shell execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:474:ruby-shell-backtick-execution","reason":"Inline imports document renamed TSL exports; the backticks are Markdown formatting, not command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:475:ruby-shell-backtick-execution","reason":"Backticks format a node naming API migration from label to setName; no external commands are invoked.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:476:ruby-shell-backtick-execution","reason":"Inline expressions compare TextureNode sampling method names in migration guidance; they do not execute shell commands.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:477:ruby-shell-backtick-execution","reason":"Backticks format renamed TSL imports for blending, viewport coordinates, and normals, not system commands.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:478:ruby-shell-backtick-execution","reason":"Inline code demonstrates a fog API migration for shader nodes; no shell invocation occurs.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:479:ruby-shell-backtick-execution","reason":"The inline example replaces manual time uniform updates with a built-in node; its backticks do not execute external commands.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:480:ruby-shell-backtick-execution","reason":"Backticks format a GLSL-to-TSL function rewrite for backend portability, not Ruby or shell execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:481:ruby-shell-backtick-execution","reason":"Inline code explains built-in matrix uniforms and their renderer ownership; the backticks are documentation formatting, not shell commands.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:482:ruby-shell-backtick-execution","reason":"The before-and-after examples configure opacity as a shader uniform; no external command is present.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:483:ruby-shell-backtick-execution","reason":"Inline code renames a uniform to avoid a shader attribute collision; it does not invoke a shell.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:484:ruby-shell-backtick-execution","reason":"Backticks format ShaderMaterial version options and fragment output compatibility guidance, not external command execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:485:ruby-shell-backtick-execution","reason":"Inline code configures the GLSL version for RawShaderMaterial; the backticks are not shell operators.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:486:ruby-shell-backtick-execution","reason":"The inline examples remove obsolete WebGL extension options from material configuration; no external process is invoked.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:487:ruby-shell-backtick-execution","reason":"Backticks format blending options and explain premultiplied shader output; these are rendering settings, not shell commands.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:488:ruby-shell-backtick-execution","reason":"Inline GLSL expressions compare vertex transforms with and without instanceMatrix; they do not execute system commands.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:489:ruby-shell-backtick-execution","reason":"Backticks format GLSL examples adding an explicit UV attribute declaration, not Ruby or shell commands.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:490:ruby-shell-backtick-execution","reason":"Inline GLSL expressions correct a coordinate-space mismatch in lighting calculations; no shell invocation occurs.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:491:ruby-shell-backtick-execution","reason":"Backticks format JavaScript shader debugging callbacks that log locally, without external command execution or data transmission.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:495:ruby-shell-backtick-execution","reason":"The backticks format related skill names in a reference list; the text does not request command execution or installation.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:496:ruby-shell-backtick-execution","reason":"Inline backticks identify related texture and postprocessing skills as references, not executable commands.","verdict":"false_positive","confidence":0.99},{"id":"sensitive:SKILL.md:333:certificate-key-files","reason":"Object.keys(THREE.ShaderChunk) lists shader chunk property names; the word keys does not refer to certificates, credentials, or file access.","verdict":"false_positive","confidence":0.99},{"id":"blocker:SKILL.md:32:system-reconnaissance","reason":"void main() is the GLSL vertex shader entry point for UV assignment and vertex projection, not a system reconnaissance command.","verdict":"false_positive","confidence":0.99},{"id":"blocker:SKILL.md:42:system-reconnaissance","reason":"void main() is the GLSL fragment shader entry point computing animated color, not host or system enumeration.","verdict":"false_positive","confidence":0.99},{"id":"blocker:SKILL.md:79:system-reconnaissance","reason":"void main() is a GLSL vertex entry point transforming normals and positions, with no system inspection.","verdict":"false_positive","confidence":0.99},{"id":"blocker:SKILL.md:87:system-reconnaissance","reason":"void main() is a GLSL fragment entry point visualizing surface normals, not system reconnaissance.","verdict":"false_positive","confidence":0.99},{"id":"blocker:SKILL.md:109:system-reconnaissance","reason":"void main() is a RawShaderMaterial GLSL vertex entry point projecting geometry, not a host inspection command.","verdict":"false_positive","confidence":0.99},{"id":"blocker:SKILL.md:118:system-reconnaissance","reason":"void main() assigns a constant fragment color in GLSL; it performs no system reconnaissance.","verdict":"false_positive","confidence":0.99},{"id":"blocker:SKILL.md:181:system-reconnaissance","reason":"void main() displaces vertices using a sine wave in GLSL, without inspecting the host system.","verdict":"false_positive","confidence":0.99},{"id":"blocker:SKILL.md:188:system-reconnaissance","reason":"void main() writes a fragment color and applies color conversion chunks, not reconnaissance operations.","verdict":"false_positive","confidence":0.99},{"id":"blocker:SKILL.md:209:system-reconnaissance","reason":"void main() computes world-space normals and positions for a Fresnel shader; it does not enumerate system information.","verdict":"false_positive","confidence":0.99},{"id":"blocker:SKILL.md:219:system-reconnaissance","reason":"void main() calculates a view-dependent Fresnel color using shader inputs, not system reconnaissance.","verdict":"false_positive","confidence":0.99},{"id":"blocker:SKILL.md:240:system-reconnaissance","reason":"void main() samples noise and discards fragments for a dissolve effect; it does not inspect the host.","verdict":"false_positive","confidence":0.99},{"id":"blocker:SKILL.md:266:system-reconnaissance","reason":"void main() applies instance transforms and projects vertices in GLSL, not a system command.","verdict":"false_positive","confidence":0.99},{"id":"blocker:SKILL.md:272:system-reconnaissance","reason":"void main() writes a constant fragment color in an instanced mesh example; no system enumeration occurs.","verdict":"false_positive","confidence":0.99},{"id":"blocker:SKILL.md:326:system-reconnaissance","reason":"void main() visualizes a sampled depth texture using a shader helper, not host reconnaissance.","verdict":"false_positive","confidence":0.99},{"id":"blocker:SKILL.md:469:system-reconnaissance","reason":"The embedded void main() functions are GLSL fragment examples explaining color conversion, not system reconnaissance commands.","verdict":"false_positive","confidence":0.99},{"id":"blocker:SKILL.md:489:system-reconnaissance","reason":"The embedded void main() functions assign UV varyings in GLSL examples, without accessing system information.","verdict":"false_positive","confidence":0.99}],"semantic_findings":[],"subject_marketplace_commit_sha":"c993c6abcbffafea2683d7748b53b3dfaf438415","subject_content_hash":"8dc55ed6cc348abaad60851ae9f3f5ebcc6e3027dd7f7a55acc1832c73f11bca","subject_tree_hash":"a7b6bd0724e32aed53ffdf1c7b114a9e9432595463bba44460054a15edfe920b","subject_plugin_path":"skills/cloudai-x/threejs-shaders","audit_payload_hash":"a4dd38201b66b4450e4062742960a24e","confirmed_risk_level":"safe","scanner_version":"3.0.0","policy_version":"skillstore-security-audit-policy-v1","subject":{"marketplaceCommitSha":"c993c6abcbffafea2683d7748b53b3dfaf438415","contentHash":"8dc55ed6cc348abaad60851ae9f3f5ebcc6e3027dd7f7a55acc1832c73f11bca","treeHash":"a7b6bd0724e32aed53ffdf1c7b114a9e9432595463bba44460054a15edfe920b","pluginPath":"skills/cloudai-x/threejs-shaders","auditPayloadHash":"a4dd38201b66b4450e4062742960a24e"},"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-shaders/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}}