{"data":{"skill":{"slug":"sickn33-fp-ts-pragmatic","name":"fp-ts-pragmatic","icon":"📦","repo":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/fp-ts-pragmatic","status":"approved","author":"sickn33","authorVersion":null,"skillstoreRevision":2},"audit":{"id":"89d8fb58-3e8b-4fcc-bfb2-7e046adf5c78","skill_id":"1f716b06-4950-4d05-8d1e-6e658378c9c5","version":5,"content_hash":"v3:88a8e9a07f4c54ab105c1c41b6267c287146b07b:5e6a734a8cea767525f143ae1f651aec4ef58d312d66cc79ad35ca4166c45932:1c901c7019ba45d8b4fa7d001917b704585da23d28bc03a163552c8b9d69052a:736b696c6c732f7369636b6e33332f66702d74732d707261676d61746963:63c5e820f1c9796453cf88e68c2b609b","risk_level":"safe","is_blocked":false,"safe_to_publish":true,"analysis_status":"ok","agent_auto_install_policy":"allowed","manual_install_policy":"allowed","summary":"All 81 static findings are false positives caused by Markdown backticks, TypeScript template literals, illustrative same-origin fetch calls, metadata, and ordinary validation methods. The skill contains documentation only, with no executable scripts, command invocation, external data transfer, reconnaissance behavior, or prompt injection.","remediation":[],"risk_factor_evidence":[{"factor":"external_commands","evidence":[{"file":"SKILL.md","line_end":54,"line_start":36},{"file":"SKILL.md","line_end":67,"line_start":54},{"file":"SKILL.md","line_end":69,"line_start":67},{"file":"SKILL.md","line_end":89,"line_start":69},{"file":"SKILL.md","line_end":92,"line_start":89},{"file":"SKILL.md","line_end":93,"line_start":92},{"file":"SKILL.md","line_end":94,"line_start":93},{"file":"SKILL.md","line_end":100,"line_start":94},{"file":"SKILL.md","line_end":123,"line_start":100},{"file":"SKILL.md","line_end":125,"line_start":123},{"file":"SKILL.md","line_end":127,"line_start":125},{"file":"SKILL.md","line_end":130,"line_start":127},{"file":"SKILL.md","line_end":131,"line_start":130},{"file":"SKILL.md","line_end":132,"line_start":131},{"file":"SKILL.md","line_end":138,"line_start":132},{"file":"SKILL.md","line_end":164,"line_start":138},{"file":"SKILL.md","line_end":170,"line_start":164},{"file":"SKILL.md","line_end":197,"line_start":170},{"file":"SKILL.md","line_end":199,"line_start":197},{"file":"SKILL.md","line_end":209,"line_start":199},{"file":"SKILL.md","line_end":220,"line_start":209},{"file":"SKILL.md","line_end":224,"line_start":220},{"file":"SKILL.md","line_end":239,"line_start":224},{"file":"SKILL.md","line_end":243,"line_start":239},{"file":"SKILL.md","line_end":255,"line_start":243},{"file":"SKILL.md","line_end":261,"line_start":255},{"file":"SKILL.md","line_end":265,"line_start":261},{"file":"SKILL.md","line_end":276,"line_start":265},{"file":"SKILL.md","line_end":280,"line_start":276},{"file":"SKILL.md","line_end":288,"line_start":280},{"file":"SKILL.md","line_end":293,"line_start":288},{"file":"SKILL.md","line_end":294,"line_start":293},{"file":"SKILL.md","line_end":301,"line_start":294},{"file":"SKILL.md","line_end":301,"line_start":301},{"file":"SKILL.md","line_end":308,"line_start":304},{"file":"SKILL.md","line_end":322,"line_start":308},{"file":"SKILL.md","line_end":326,"line_start":322},{"file":"SKILL.md","line_end":336,"line_start":326},{"file":"SKILL.md","line_end":340,"line_start":336},{"file":"SKILL.md","line_end":357,"line_start":340},{"file":"SKILL.md","line_end":361,"line_start":357},{"file":"SKILL.md","line_end":376,"line_start":361},{"file":"SKILL.md","line_end":381,"line_start":376},{"file":"SKILL.md","line_end":389,"line_start":381},{"file":"SKILL.md","line_end":423,"line_start":389},{"file":"SKILL.md","line_end":427,"line_start":423},{"file":"SKILL.md","line_end":452,"line_start":427},{"file":"SKILL.md","line_end":456,"line_start":452},{"file":"SKILL.md","line_end":489,"line_start":456},{"file":"SKILL.md","line_end":493,"line_start":489}]},{"factor":"network","evidence":[{"file":"SKILL.md","line_end":265,"line_start":265},{"file":"SKILL.md","line_end":276,"line_start":276},{"file":"SKILL.md","line_end":5,"line_start":5}]}],"critical_findings":[],"high_findings":[],"medium_findings":[],"low_findings":[],"dangerous_patterns":[],"files_scanned":1,"total_lines":605,"audit_model":"codex","audited_at":"2026-07-23T22:30:58.801+00:00","created_at":"2026-07-26T12:22:54.001245+00:00","static_findings":[{"id":"external_commands:SKILL.md:36:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```typescript","category":"external_commands","line_end":54,"severity":"medium","line_start":36},{"id":"external_commands:SKILL.md:54:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":67,"severity":"medium","line_start":54},{"id":"external_commands:SKILL.md:67:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Stop writing `if (x !== null && x !== undefined)` everywhere.","category":"external_commands","line_end":69,"severity":"medium","line_start":67},{"id":"external_commands:SKILL.md:69:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```typescript","category":"external_commands","line_end":89,"severity":"medium","line_start":69},{"id":"external_commands:SKILL.md:89:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":92,"severity":"medium","line_start":89},{"id":"external_commands:SKILL.md:92:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `O.fromNullable(x)` = \"wrap this value, treating null/undefined as 'nothing'\"","category":"external_commands","line_end":93,"severity":"medium","line_start":92},{"id":"external_commands:SKILL.md:93:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `O.flatMap(fn)` = \"if we have something, apply this function\"","category":"external_commands","line_end":94,"severity":"medium","line_start":93},{"id":"external_commands:SKILL.md:94:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `O.getOrElse(() => default)` = \"unwrap, or use this default if nothing\"","category":"external_commands","line_end":100,"severity":"medium","line_start":94},{"id":"external_commands:SKILL.md:100:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```typescript","category":"external_commands","line_end":123,"severity":"medium","line_start":100},{"id":"external_commands:SKILL.md:123:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"console.log(`Age is ${result.right}`)","category":"external_commands","line_end":125,"severity":"medium","line_start":123},{"id":"external_commands:SKILL.md:125:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"console.log(`Error: ${result.left}`)","category":"external_commands","line_end":127,"severity":"medium","line_start":125},{"id":"external_commands:SKILL.md:127:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":130,"severity":"medium","line_start":127},{"id":"external_commands:SKILL.md:130:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `E.right(value)` = \"success with this value\"","category":"external_commands","line_end":131,"severity":"medium","line_start":130},{"id":"external_commands:SKILL.md:131:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `E.left(error)` = \"failure with this error\"","category":"external_commands","line_end":132,"severity":"medium","line_start":131},{"id":"external_commands:SKILL.md:132:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `E.isRight(x)` = \"did it succeed?\"","category":"external_commands","line_end":138,"severity":"medium","line_start":132},{"id":"external_commands:SKILL.md:138:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```typescript","category":"external_commands","line_end":164,"severity":"medium","line_start":138},{"id":"external_commands:SKILL.md:164:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":170,"severity":"medium","line_start":164},{"id":"external_commands:SKILL.md:170:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```typescript","category":"external_commands","line_end":197,"severity":"medium","line_start":170},{"id":"external_commands:SKILL.md:197:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":199,"severity":"medium","line_start":197},{"id":"external_commands:SKILL.md:199:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"**Plain language:** `flatMap` means \"if this succeeded, try the next thing\"","category":"external_commands","line_end":209,"severity":"medium","line_start":199},{"id":"external_commands:SKILL.md:209:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```typescript","category":"external_commands","line_end":220,"severity":"medium","line_start":209},{"id":"external_commands:SKILL.md:220:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":224,"severity":"medium","line_start":220},{"id":"external_commands:SKILL.md:224:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```typescript","category":"external_commands","line_end":239,"severity":"medium","line_start":224},{"id":"external_commands:SKILL.md:239:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":243,"severity":"medium","line_start":239},{"id":"external_commands:SKILL.md:243:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```typescript","category":"external_commands","line_end":255,"severity":"medium","line_start":243},{"id":"external_commands:SKILL.md:255:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":261,"severity":"medium","line_start":255},{"id":"external_commands:SKILL.md:261:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```typescript","category":"external_commands","line_end":265,"severity":"medium","line_start":261},{"id":"external_commands:SKILL.md:265:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"const response = await fetch(`/api/users/${id}`)","category":"external_commands","line_end":276,"severity":"medium","line_start":265},{"id":"external_commands:SKILL.md:276:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"TE.tryCatch(() => fetch(`/api/users/${id}`), E.toError),","category":"external_commands","line_end":280,"severity":"medium","line_start":276},{"id":"external_commands:SKILL.md:280:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":288,"severity":"medium","line_start":280},{"id":"external_commands:SKILL.md:288:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```typescript","category":"external_commands","line_end":293,"severity":"medium","line_start":288},{"id":"external_commands:SKILL.md:293:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"? `Admin: ${user.name}`","category":"external_commands","line_end":294,"severity":"medium","line_start":293},{"id":"external_commands:SKILL.md:294:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":": `User: ${user.name}`","category":"external_commands","line_end":301,"severity":"medium","line_start":294},{"id":"external_commands:SKILL.md:301:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"(u) => u.isAdmin ? `Admin: ${u.name}` : `User: ${u.name}`","category":"external_commands","line_end":301,"severity":"medium","line_start":301},{"id":"external_commands:SKILL.md:304:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":308,"severity":"medium","line_start":304},{"id":"external_commands:SKILL.md:308:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```typescript","category":"external_commands","line_end":322,"severity":"medium","line_start":308},{"id":"external_commands:SKILL.md:322:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":326,"severity":"medium","line_start":322},{"id":"external_commands:SKILL.md:326:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```typescript","category":"external_commands","line_end":336,"severity":"medium","line_start":326},{"id":"external_commands:SKILL.md:336:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":340,"severity":"medium","line_start":336},{"id":"external_commands:SKILL.md:340:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```typescript","category":"external_commands","line_end":357,"severity":"medium","line_start":340},{"id":"external_commands:SKILL.md:357:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":361,"severity":"medium","line_start":357},{"id":"external_commands:SKILL.md:361:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```typescript","category":"external_commands","line_end":376,"severity":"medium","line_start":361},{"id":"external_commands:SKILL.md:376:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"case 'NotFound': return `Item ${error.id} not found`","category":"external_commands","line_end":381,"severity":"medium","line_start":376},{"id":"external_commands:SKILL.md:381:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":389,"severity":"medium","line_start":381},{"id":"external_commands:SKILL.md:389:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```typescript","category":"external_commands","line_end":423,"severity":"medium","line_start":389},{"id":"external_commands:SKILL.md:423:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":427,"severity":"medium","line_start":423},{"id":"external_commands:SKILL.md:427:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```typescript","category":"external_commands","line_end":452,"severity":"medium","line_start":427},{"id":"external_commands:SKILL.md:452:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":456,"severity":"medium","line_start":452},{"id":"external_commands:SKILL.md:456:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```typescript","category":"external_commands","line_end":489,"severity":"medium","line_start":456},{"id":"external_commands:SKILL.md:489:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":493,"severity":"medium","line_start":489},{"id":"external_commands:SKILL.md:493:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```typescript","category":"external_commands","line_end":519,"severity":"medium","line_start":493},{"id":"external_commands:SKILL.md:519:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":529,"severity":"medium","line_start":519},{"id":"external_commands:SKILL.md:529:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```typescript","category":"external_commands","line_end":537,"severity":"medium","line_start":529},{"id":"external_commands:SKILL.md:537:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":541,"severity":"medium","line_start":537},{"id":"external_commands:SKILL.md:541:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```typescript","category":"external_commands","line_end":546,"severity":"medium","line_start":541},{"id":"external_commands:SKILL.md:546:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":550,"severity":"medium","line_start":546},{"id":"external_commands:SKILL.md:550:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```typescript","category":"external_commands","line_end":558,"severity":"medium","line_start":550},{"id":"external_commands:SKILL.md:558:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":566,"severity":"medium","line_start":558},{"id":"external_commands:SKILL.md:566:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| Handle null/undefined | \"Wrap this nullable\" | `O.fromNullable(x)` |","category":"external_commands","line_end":567,"severity":"medium","line_start":566},{"id":"external_commands:SKILL.md:567:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| Default for missing | \"Use this if nothing\" | `O.getOrElse(() => default)` |","category":"external_commands","line_end":568,"severity":"medium","line_start":567},{"id":"external_commands:SKILL.md:568:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| Transform if present | \"If something, change it\" | `O.map(fn)` |","category":"external_commands","line_end":569,"severity":"medium","line_start":568},{"id":"external_commands:SKILL.md:569:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| Chain nullable operations | \"If something, try this\" | `O.flatMap(fn)` |","category":"external_commands","line_end":570,"severity":"medium","line_start":569},{"id":"external_commands:SKILL.md:570:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| Return success | \"Worked, here's the value\" | `E.right(value)` |","category":"external_commands","line_end":571,"severity":"medium","line_start":570},{"id":"external_commands:SKILL.md:571:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| Return failure | \"Failed, here's why\" | `E.left(error)` |","category":"external_commands","line_end":572,"severity":"medium","line_start":571},{"id":"external_commands:SKILL.md:572:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| Wrap throwing function | \"Try this, catch errors\" | `E.tryCatch(fn, onError)` |","category":"external_commands","line_end":573,"severity":"medium","line_start":572},{"id":"external_commands:SKILL.md:573:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| Handle both cases | \"Do this for error, that for success\" | `E.fold(onLeft, onRight)` |","category":"external_commands","line_end":574,"severity":"medium","line_start":573},{"id":"network:SKILL.md:265:fetch-api-call","file":"SKILL.md","pattern":"Fetch API call","snippet":"const response = await fetch(`/api/users/${id}`)","category":"network","line_end":265,"severity":"low","line_start":265},{"id":"network:SKILL.md:276:fetch-api-call","file":"SKILL.md","pattern":"Fetch API call","snippet":"TE.tryCatch(() => fetch(`/api/users/${id}`), E.toError),","category":"network","line_end":276,"severity":"low","line_start":276},{"id":"network:SKILL.md:5:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"source: \"https://github.com/whatiskadudoing/fp-ts-skills\"","category":"network","line_end":5,"severity":"low","line_start":5},{"id":"blocker:SKILL.md:107:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"if (isNaN(age)) throw new Error('Invalid age')","category":"blocker","line_end":107,"severity":"low","line_start":107},{"id":"blocker:SKILL.md:115:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"if (isNaN(age)) return E.left('Invalid age')","category":"blocker","line_end":115,"severity":"low","line_start":115},{"id":"blocker:SKILL.md:132:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"- `E.isRight(x)` = \"did it succeed?\"","category":"blocker","line_end":132,"severity":"low","line_start":132},{"id":"blocker:SKILL.md:175:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"E.tryCatch(() => JSON.parse(s), () => 'Invalid JSON')","category":"blocker","line_end":175,"severity":"low","line_start":175},{"id":"blocker:SKILL.md:185:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"email.includes('@') ? E.right(email) : E.left('Invalid email format')","category":"blocker","line_end":185,"severity":"low","line_start":185},{"id":"blocker:SKILL.md:329:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"return users.find(u => u.id === id)","category":"blocker","line_end":329,"severity":"low","line_start":329},{"id":"blocker:SKILL.md:334:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"return O.fromNullable(users.find(u => u.id === id))","category":"blocker","line_end":334,"severity":"low","line_start":334},{"id":"blocker:SKILL.md:355:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"return E.left({ field: 'email', message: 'Invalid format' })","category":"blocker","line_end":355,"severity":"low","line_start":355},{"id":"blocker:SKILL.md:363:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"const NotFound = (id: string) => ({ _tag: 'NotFound' as const, id })","category":"blocker","line_end":363,"severity":"low","line_start":363},{"id":"blocker:SKILL.md:462:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"if (!obj.email.includes('@')) throw new Error('Invalid email')","category":"blocker","line_end":462,"severity":"low","line_start":462},{"id":"blocker:SKILL.md:480:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":": E.left('Valid email required')","category":"blocker","line_end":480,"severity":"low","line_start":480},{"id":"blocker:SKILL.md:485:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":": E.left('Valid age required')","category":"blocker","line_end":485,"severity":"low","line_start":485}],"finding_verdicts":[{"id":"external_commands:SKILL.md:36:ruby-shell-backtick-execution","reason":"The matched backticks are Markdown code-fence delimiters in a documentation file. They do not invoke Ruby, a shell, or any subprocess.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:54:ruby-shell-backtick-execution","reason":"The matched backticks are Markdown code-fence delimiters in a documentation file. They do not invoke Ruby, a shell, or any subprocess.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:67:ruby-shell-backtick-execution","reason":"The matched backticks delimit inline Markdown code or a documented TypeScript expression. They are not shell execution syntax in this context.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:69:ruby-shell-backtick-execution","reason":"The matched backticks are Markdown code-fence delimiters in a documentation file. They do not invoke Ruby, a shell, or any subprocess.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:89:ruby-shell-backtick-execution","reason":"The matched backticks are Markdown code-fence delimiters in a documentation file. They do not invoke Ruby, a shell, or any subprocess.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:92:ruby-shell-backtick-execution","reason":"The matched backticks delimit inline Markdown code or a documented TypeScript expression. They are not shell execution syntax in this context.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:93:ruby-shell-backtick-execution","reason":"The matched backticks delimit inline Markdown code or a documented TypeScript expression. They are not shell execution syntax in this context.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:94:ruby-shell-backtick-execution","reason":"The matched backticks delimit inline Markdown code or a documented TypeScript expression. They are not shell execution syntax in this context.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:100:ruby-shell-backtick-execution","reason":"The matched backticks are Markdown code-fence delimiters in a documentation file. They do not invoke Ruby, a shell, or any subprocess.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:123:ruby-shell-backtick-execution","reason":"The matched backticks delimit a TypeScript template literal used for display text. No shell, subprocess API, or command execution is present.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:125:ruby-shell-backtick-execution","reason":"The matched backticks delimit a TypeScript template literal used for display text. No shell, subprocess API, or command execution is present.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:127:ruby-shell-backtick-execution","reason":"The matched backticks are Markdown code-fence delimiters in a documentation file. They do not invoke Ruby, a shell, or any subprocess.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:130:ruby-shell-backtick-execution","reason":"The matched backticks delimit inline Markdown code or a documented TypeScript expression. They are not shell execution syntax in this context.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:131:ruby-shell-backtick-execution","reason":"The matched backticks delimit inline Markdown code or a documented TypeScript expression. They are not shell execution syntax in this context.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:132:ruby-shell-backtick-execution","reason":"The matched backticks delimit inline Markdown code or a documented TypeScript expression. They are not shell execution syntax in this context.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:138:ruby-shell-backtick-execution","reason":"The matched backticks are Markdown code-fence delimiters in a documentation file. They do not invoke Ruby, a shell, or any subprocess.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:164:ruby-shell-backtick-execution","reason":"The matched backticks are Markdown code-fence delimiters in a documentation file. They do not invoke Ruby, a shell, or any subprocess.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:170:ruby-shell-backtick-execution","reason":"The matched backticks are Markdown code-fence delimiters in a documentation file. They do not invoke Ruby, a shell, or any subprocess.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:197:ruby-shell-backtick-execution","reason":"The matched backticks are Markdown code-fence delimiters in a documentation file. They do not invoke Ruby, a shell, or any subprocess.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:199:ruby-shell-backtick-execution","reason":"The matched backticks delimit inline Markdown code or a documented TypeScript expression. They are not shell execution syntax in this context.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:209:ruby-shell-backtick-execution","reason":"The matched backticks are Markdown code-fence delimiters in a documentation file. They do not invoke Ruby, a shell, or any subprocess.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:220:ruby-shell-backtick-execution","reason":"The matched backticks are Markdown code-fence delimiters in a documentation file. They do not invoke Ruby, a shell, or any subprocess.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:224:ruby-shell-backtick-execution","reason":"The matched backticks are Markdown code-fence delimiters in a documentation file. They do not invoke Ruby, a shell, or any subprocess.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:239:ruby-shell-backtick-execution","reason":"The matched backticks are Markdown code-fence delimiters in a documentation file. They do not invoke Ruby, a shell, or any subprocess.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:243:ruby-shell-backtick-execution","reason":"The matched backticks are Markdown code-fence delimiters in a documentation file. They do not invoke Ruby, a shell, or any subprocess.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:255:ruby-shell-backtick-execution","reason":"The matched backticks are Markdown code-fence delimiters in a documentation file. They do not invoke Ruby, a shell, or any subprocess.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:261:ruby-shell-backtick-execution","reason":"The matched backticks are Markdown code-fence delimiters in a documentation file. They do not invoke Ruby, a shell, or any subprocess.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:265:ruby-shell-backtick-execution","reason":"The backticks form a TypeScript template literal for a relative API path in an illustrative fetch example. No shell or command runner receives the value.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:276:ruby-shell-backtick-execution","reason":"The backticks form a TypeScript template literal for a relative API path in an illustrative fetch example. No shell or command runner receives the value.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:280:ruby-shell-backtick-execution","reason":"The matched backticks are Markdown code-fence delimiters in a documentation file. They do not invoke Ruby, a shell, or any subprocess.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:288:ruby-shell-backtick-execution","reason":"The matched backticks are Markdown code-fence delimiters in a documentation file. They do not invoke Ruby, a shell, or any subprocess.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:293:ruby-shell-backtick-execution","reason":"The matched backticks delimit a TypeScript template literal used for display text. No shell, subprocess API, or command execution is present.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:294:ruby-shell-backtick-execution","reason":"The matched backticks delimit a TypeScript template literal used for display text. No shell, subprocess API, or command execution is present.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:301:ruby-shell-backtick-execution","reason":"The matched backticks delimit a TypeScript template literal used for display text. No shell, subprocess API, or command execution is present.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:304:ruby-shell-backtick-execution","reason":"The matched backticks are Markdown code-fence delimiters in a documentation file. They do not invoke Ruby, a shell, or any subprocess.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:308:ruby-shell-backtick-execution","reason":"The matched backticks are Markdown code-fence delimiters in a documentation file. They do not invoke Ruby, a shell, or any subprocess.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:322:ruby-shell-backtick-execution","reason":"The matched backticks are Markdown code-fence delimiters in a documentation file. They do not invoke Ruby, a shell, or any subprocess.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:326:ruby-shell-backtick-execution","reason":"The matched backticks are Markdown code-fence delimiters in a documentation file. They do not invoke Ruby, a shell, or any subprocess.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:336:ruby-shell-backtick-execution","reason":"The matched backticks are Markdown code-fence delimiters in a documentation file. They do not invoke Ruby, a shell, or any subprocess.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:340:ruby-shell-backtick-execution","reason":"The matched backticks are Markdown code-fence delimiters in a documentation file. They do not invoke Ruby, a shell, or any subprocess.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:357:ruby-shell-backtick-execution","reason":"The matched backticks are Markdown code-fence delimiters in a documentation file. They do not invoke Ruby, a shell, or any subprocess.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:361:ruby-shell-backtick-execution","reason":"The matched backticks are Markdown code-fence delimiters in a documentation file. They do not invoke Ruby, a shell, or any subprocess.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:376:ruby-shell-backtick-execution","reason":"The matched backticks delimit a TypeScript template literal used for display text. No shell, subprocess API, or command execution is present.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:381:ruby-shell-backtick-execution","reason":"The matched backticks are Markdown code-fence delimiters in a documentation file. They do not invoke Ruby, a shell, or any subprocess.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:389:ruby-shell-backtick-execution","reason":"The matched backticks are Markdown code-fence delimiters in a documentation file. They do not invoke Ruby, a shell, or any subprocess.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:423:ruby-shell-backtick-execution","reason":"The matched backticks are Markdown code-fence delimiters in a documentation file. They do not invoke Ruby, a shell, or any subprocess.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:427:ruby-shell-backtick-execution","reason":"The matched backticks are Markdown code-fence delimiters in a documentation file. They do not invoke Ruby, a shell, or any subprocess.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:452:ruby-shell-backtick-execution","reason":"The matched backticks are Markdown code-fence delimiters in a documentation file. They do not invoke Ruby, a shell, or any subprocess.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:456:ruby-shell-backtick-execution","reason":"The matched backticks are Markdown code-fence delimiters in a documentation file. They do not invoke Ruby, a shell, or any subprocess.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:489:ruby-shell-backtick-execution","reason":"The matched backticks are Markdown code-fence delimiters in a documentation file. They do not invoke Ruby, a shell, or any subprocess.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:493:ruby-shell-backtick-execution","reason":"The matched backticks are Markdown code-fence delimiters in a documentation file. They do not invoke Ruby, a shell, or any subprocess.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:519:ruby-shell-backtick-execution","reason":"The matched backticks are Markdown code-fence delimiters in a documentation file. They do not invoke Ruby, a shell, or any subprocess.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:529:ruby-shell-backtick-execution","reason":"The matched backticks are Markdown code-fence delimiters in a documentation file. They do not invoke Ruby, a shell, or any subprocess.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:537:ruby-shell-backtick-execution","reason":"The matched backticks are Markdown code-fence delimiters in a documentation file. They do not invoke Ruby, a shell, or any subprocess.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:541:ruby-shell-backtick-execution","reason":"The matched backticks are Markdown code-fence delimiters in a documentation file. They do not invoke Ruby, a shell, or any subprocess.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:546:ruby-shell-backtick-execution","reason":"The matched backticks are Markdown code-fence delimiters in a documentation file. They do not invoke Ruby, a shell, or any subprocess.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:550:ruby-shell-backtick-execution","reason":"The matched backticks are Markdown code-fence delimiters in a documentation file. They do not invoke Ruby, a shell, or any subprocess.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:558:ruby-shell-backtick-execution","reason":"The matched backticks are Markdown code-fence delimiters in a documentation file. They do not invoke Ruby, a shell, or any subprocess.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:566:ruby-shell-backtick-execution","reason":"The matched backticks delimit inline Markdown code or a documented TypeScript expression. They are not shell execution syntax in this context.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:567:ruby-shell-backtick-execution","reason":"The matched backticks delimit inline Markdown code or a documented TypeScript expression. They are not shell execution syntax in this context.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:568:ruby-shell-backtick-execution","reason":"The matched backticks delimit inline Markdown code or a documented TypeScript expression. They are not shell execution syntax in this context.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:569:ruby-shell-backtick-execution","reason":"The matched backticks delimit inline Markdown code or a documented TypeScript expression. They are not shell execution syntax in this context.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:570:ruby-shell-backtick-execution","reason":"The matched backticks delimit inline Markdown code or a documented TypeScript expression. They are not shell execution syntax in this context.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:571:ruby-shell-backtick-execution","reason":"The matched backticks delimit inline Markdown code or a documented TypeScript expression. They are not shell execution syntax in this context.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:572:ruby-shell-backtick-execution","reason":"The matched backticks delimit inline Markdown code or a documented TypeScript expression. They are not shell execution syntax in this context.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:573:ruby-shell-backtick-execution","reason":"The matched backticks delimit inline Markdown code or a documented TypeScript expression. They are not shell execution syntax in this context.","verdict":"false_positive","confidence":0.99},{"id":"network:SKILL.md:265:fetch-api-call","reason":"This is an illustrative TypeScript fetch using a relative same-origin API path. The skill does not execute it or transmit data to an external host.","verdict":"false_positive","confidence":0.99},{"id":"network:SKILL.md:276:fetch-api-call","reason":"This is an illustrative TypeScript fetch using a relative same-origin API path. The skill does not execute it or transmit data to an external host.","verdict":"false_positive","confidence":0.99},{"id":"network:SKILL.md:5:hardcoded-url","reason":"The URL is source metadata identifying a GitHub repository. It is not used by executable code and does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"blocker:SKILL.md:107:system-reconnaissance","reason":"The snippet performs local TypeScript validation, parsing, result checking, or array lookup. It does not inspect system files, processes, environment data, or host metadata.","verdict":"false_positive","confidence":0.99},{"id":"blocker:SKILL.md:115:system-reconnaissance","reason":"The snippet performs local TypeScript validation, parsing, result checking, or array lookup. It does not inspect system files, processes, environment data, or host metadata.","verdict":"false_positive","confidence":0.99},{"id":"blocker:SKILL.md:132:system-reconnaissance","reason":"The snippet performs local TypeScript validation, parsing, result checking, or array lookup. It does not inspect system files, processes, environment data, or host metadata.","verdict":"false_positive","confidence":0.99},{"id":"blocker:SKILL.md:175:system-reconnaissance","reason":"The snippet performs local TypeScript validation, parsing, result checking, or array lookup. It does not inspect system files, processes, environment data, or host metadata.","verdict":"false_positive","confidence":0.99},{"id":"blocker:SKILL.md:185:system-reconnaissance","reason":"The snippet performs local TypeScript validation, parsing, result checking, or array lookup. It does not inspect system files, processes, environment data, or host metadata.","verdict":"false_positive","confidence":0.99},{"id":"blocker:SKILL.md:329:system-reconnaissance","reason":"The snippet performs local TypeScript validation, parsing, result checking, or array lookup. It does not inspect system files, processes, environment data, or host metadata.","verdict":"false_positive","confidence":0.99},{"id":"blocker:SKILL.md:334:system-reconnaissance","reason":"The snippet performs local TypeScript validation, parsing, result checking, or array lookup. It does not inspect system files, processes, environment data, or host metadata.","verdict":"false_positive","confidence":0.99},{"id":"blocker:SKILL.md:355:system-reconnaissance","reason":"The snippet performs local TypeScript validation, parsing, result checking, or array lookup. It does not inspect system files, processes, environment data, or host metadata.","verdict":"false_positive","confidence":0.99},{"id":"blocker:SKILL.md:363:system-reconnaissance","reason":"The snippet performs local TypeScript validation, parsing, result checking, or array lookup. It does not inspect system files, processes, environment data, or host metadata.","verdict":"false_positive","confidence":0.99},{"id":"blocker:SKILL.md:462:system-reconnaissance","reason":"The snippet performs local TypeScript validation, parsing, result checking, or array lookup. It does not inspect system files, processes, environment data, or host metadata.","verdict":"false_positive","confidence":0.99},{"id":"blocker:SKILL.md:480:system-reconnaissance","reason":"The snippet performs local TypeScript validation, parsing, result checking, or array lookup. It does not inspect system files, processes, environment data, or host metadata.","verdict":"false_positive","confidence":0.99},{"id":"blocker:SKILL.md:485:system-reconnaissance","reason":"The snippet performs local TypeScript validation, parsing, result checking, or array lookup. It does not inspect system files, processes, environment data, or host metadata.","verdict":"false_positive","confidence":0.99}],"semantic_findings":[],"subject_marketplace_commit_sha":"88a8e9a07f4c54ab105c1c41b6267c287146b07b","subject_content_hash":"5e6a734a8cea767525f143ae1f651aec4ef58d312d66cc79ad35ca4166c45932","subject_tree_hash":"1c901c7019ba45d8b4fa7d001917b704585da23d28bc03a163552c8b9d69052a","subject_plugin_path":"skills/sickn33/fp-ts-pragmatic","audit_payload_hash":"63c5e820f1c9796453cf88e68c2b609b","confirmed_risk_level":"safe","scanner_version":"3.0.0","policy_version":"skillstore-security-audit-policy-v1","subject":{"marketplaceCommitSha":"88a8e9a07f4c54ab105c1c41b6267c287146b07b","contentHash":"5e6a734a8cea767525f143ae1f651aec4ef58d312d66cc79ad35ca4166c45932","treeHash":"1c901c7019ba45d8b4fa7d001917b704585da23d28bc03a163552c8b9d69052a","pluginPath":"skills/sickn33/fp-ts-pragmatic","auditPayloadHash":"63c5e820f1c9796453cf88e68c2b609b"},"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/sickn33-fp-ts-pragmatic/audits/5/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}}