{"data":{"skill":{"slug":"aaron-he-zhu-email-render-builder","name":"email-render-builder","icon":"📦","repo":"https://github.com/aaron-he-zhu/aaron-marketing-skills/tree/main/email/engage/email-render-builder","status":"approved","author":"aaron-he-zhu","authorVersion":"19.0.0","skillstoreRevision":2},"audit":{"id":"994c5f42-0af1-4b0c-b06e-518d87da3fb2","skill_id":"a5ca782b-c420-49a7-9bf7-7a2ac06081d1","version":9,"content_hash":"v3:bcc45d822b2fa0c81cb9bc97b710631e1d8f0c0c:6691ea41eb4c8be469761a7c68bbc78a900ab519231ec2a61500e7e4b07ec135:54686c8bfd4fd09dbf774299498db66425b452222537e8d1a85c5eb1b943aa7b:736b696c6c732f6161726f6e2d68652d7a68752f656d61696c2d72656e6465722d6275696c646572:d5dfa3772906202d26fd666616b31add","risk_level":"safe","is_blocked":false,"safe_to_publish":true,"analysis_status":"ok","agent_auto_install_policy":"allowed","manual_install_policy":"allowed","summary":"Most static matches are false positives caused by Markdown fences, relative documentation links, and email-client terminology. Two operational behaviors remain: an optional live render-test email command and a user-confirmed local result save; neither shows malicious intent, but both require confirmation and path validation.","remediation":[{"issue":"Optional live render-test sends can create an external side effect.","severity":"medium","suggestion":"Require explicit confirmation immediately before any command using --live, display the sender and recipient inboxes, and enforce an allowlist of user-owned test recipients."},{"issue":"The save path includes a subject-derived filename.","severity":"high","suggestion":"Normalize the subject to a safe slug, reject path separators and traversal sequences, and resolve the final path within the designated memory directory before writing."}],"risk_factor_evidence":[{"factor":"filesystem","evidence":[{"file":"references/email-render-specs.md","line_end":3,"line_start":3},{"file":"references/email-render-specs.md","line_end":56,"line_start":56},{"file":"SKILL.md","line_end":20,"line_start":20},{"file":"SKILL.md","line_end":40,"line_start":40},{"file":"SKILL.md","line_end":44,"line_start":44},{"file":"SKILL.md","line_end":48,"line_start":48},{"file":"SKILL.md","line_end":52,"line_start":52},{"file":"SKILL.md","line_end":54,"line_start":54},{"file":"SKILL.md","line_end":58,"line_start":58},{"file":"SKILL.md","line_end":68,"line_start":68},{"file":"SKILL.md","line_end":69,"line_start":69},{"file":"SKILL.md","line_end":82,"line_start":82},{"file":"SKILL.md","line_end":88,"line_start":88},{"file":"SKILL.md","line_end":89,"line_start":89},{"file":"SKILL.md","line_end":93,"line_start":93},{"file":"SKILL.md","line_end":94,"line_start":94},{"file":"SKILL.md","line_end":95,"line_start":95},{"file":"SKILL.md","line_end":96,"line_start":96},{"file":"SKILL.md","line_end":97,"line_start":97}]},{"factor":"external_commands","evidence":[{"file":"SKILL.md","line_end":18,"line_start":18},{"file":"SKILL.md","line_end":26,"line_start":24},{"file":"SKILL.md","line_end":28,"line_start":26},{"file":"SKILL.md","line_end":30,"line_start":28},{"file":"SKILL.md","line_end":32,"line_start":30},{"file":"SKILL.md","line_end":34,"line_start":32},{"file":"SKILL.md","line_end":38,"line_start":34},{"file":"SKILL.md","line_end":42,"line_start":38},{"file":"SKILL.md","line_end":42,"line_start":42},{"file":"SKILL.md","line_end":52,"line_start":52},{"file":"SKILL.md","line_end":54,"line_start":54},{"file":"SKILL.md","line_end":64,"line_start":64},{"file":"SKILL.md","line_end":66,"line_start":66},{"file":"SKILL.md","line_end":82,"line_start":67},{"file":"SKILL.md","line_end":87,"line_start":82},{"file":"SKILL.md","line_end":97,"line_start":87}]},{"factor":"network","evidence":[{"file":"SKILL.md","line_end":10,"line_start":10},{"file":"SKILL.md","line_end":13,"line_start":13}]}],"critical_findings":[],"high_findings":[{"title":"Path traversal sequence","locations":[{"file":"SKILL.md","line_end":82,"line_start":82}],"confidence":0.52,"description":"On user confirmation, save to `memory/email/email-render-builder/YYYY-MM-DD-<subject-slug>.md` — see","review_kind":"capability","source_category":"filesystem","source_severity":"high","confidence_reasoning":"The skill instructs an agent to save a result under a memory path after user confirmation. The intended operation is bounded, but the subject-derived filename must be sanitized to prevent an unsafe path."}],"medium_findings":[{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":54,"line_start":54}],"confidence":0.78,"description":"**Zero-dependency render-test send (when Resend is the ESP)**: `python3 \"${CLAUDE_PLUGIN_ROOT}/scrip","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The documented Python command can deliver email when invoked with --live. It is limited to a verified sender and the user's own test inboxes, but it remains an external side effect that requires explicit confirmation."}],"low_findings":[],"dangerous_patterns":[],"files_scanned":3,"total_lines":192,"audit_model":"claude","audited_at":"2026-07-26T10:17:01.997+00:00","created_at":"2026-07-27T01:33:05.700398+00:00","static_findings":[{"id":"blocker:references/client-render-matrix.md:7:system-reconnaissance","file":"references/client-render-matrix.md","pattern":"System reconnaissance","snippet":"Gmail (app + web), Outlook (desktop Word-engine + web/new Outlook), Apple Mail, iOS Mail, Android (G","category":"blocker","line_end":7,"severity":"low","line_start":7},{"id":"blocker:references/client-render-matrix.md:16:system-reconnaissance","file":"references/client-render-matrix.md","pattern":"System reconnaissance","snippet":"| **Android (Gmail/Samsung)** | mixed dark-mode handling; smaller tap targets | reflow gaps, sub-44p","category":"blocker","line_end":16,"severity":"low","line_start":16},{"id":"blocker:references/client-render-matrix.md:29:system-reconnaissance","file":"references/client-render-matrix.md","pattern":"System reconnaissance","snippet":"| Android | | | | | |","category":"blocker","line_end":29,"severity":"low","line_start":29},{"id":"filesystem:references/email-render-specs.md:3:path-traversal-sequence","file":"references/email-render-specs.md","pattern":"Path traversal sequence","snippet":"Build patterns and QA checklists for `email-render-builder`. The layout carries the approved copy fr","category":"filesystem","line_end":3,"severity":"high","line_start":3},{"id":"filesystem:references/email-render-specs.md:56:path-traversal-sequence","file":"references/email-render-specs.md","pattern":"Path traversal sequence","snippet":"The `text/plain` alternate must carry the same core message, the same primary CTA, and the same dest","category":"filesystem","line_end":56,"severity":"high","line_start":56},{"id":"blocker:references/email-render-specs.md:16:system-reconnaissance","file":"references/email-render-specs.md","pattern":"System reconnaissance","snippet":"| **Fluid / hybrid** | percentage widths + `max-width` + `mso` ghost tables | widest — works even wh","category":"blocker","line_end":16,"severity":"low","line_start":16},{"id":"blocker:references/email-render-specs.md:19:system-reconnaissance","file":"references/email-render-specs.md","pattern":"System reconnaissance","snippet":"Default to fluid/hybrid for a broad target set; note the choice. Tap targets ≥44px; body font ≥14px ","category":"blocker","line_end":19,"severity":"low","line_start":19},{"id":"blocker:references/email-render-specs.md:26:system-reconnaissance","file":"references/email-render-specs.md","pattern":"System reconnaissance","snippet":"- [ ] Logos / dark-on-transparent images have a padded solid backing or a dark-mode variant.","category":"blocker","line_end":26,"severity":"low","line_start":26},{"id":"blocker:references/email-render-specs.md:43:system-reconnaissance","file":"references/email-render-specs.md","pattern":"System reconnaissance","snippet":"- Background images carry a solid `bgcolor` fallback.","category":"blocker","line_end":43,"severity":"low","line_start":43},{"id":"external_commands:SKILL.md:18:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Builds and QAs the coded HTML for a single email — a responsive table-based layout, a dark-mode + ac","category":"external_commands","line_end":18,"severity":"medium","line_start":18},{"id":"external_commands:SKILL.md:24:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":26,"severity":"medium","line_start":24},{"id":"external_commands:SKILL.md:26:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":28,"severity":"medium","line_start":26},{"id":"external_commands:SKILL.md:28:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":30,"severity":"medium","line_start":28},{"id":"external_commands:SKILL.md:30:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":32,"severity":"medium","line_start":30},{"id":"external_commands:SKILL.md:32:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":34,"severity":"medium","line_start":32},{"id":"external_commands:SKILL.md:34:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":38,"severity":"medium","line_start":34},{"id":"external_commands:SKILL.md:38:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"**Expected output**: one email HTML build plus a render-QA report — inline-styled table layout, dark","category":"external_commands","line_end":42,"severity":"medium","line_start":38},{"id":"external_commands:SKILL.md:42:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- **Promotes**: confirmed render blockers (a client that breaks the layout, an image-only block with","category":"external_commands","line_end":42,"severity":"medium","line_start":42},{"id":"external_commands:SKILL.md:52:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"This skill is build-and-QA, not analytics — its primary inputs are the approved creative and any raw","category":"external_commands","line_end":52,"severity":"medium","line_start":52},{"id":"external_commands:SKILL.md:54:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"**Zero-dependency render-test send (when Resend is the ESP)**: `python3 \"${CLAUDE_PLUGIN_ROOT}/scrip","category":"external_commands","line_end":54,"severity":"medium","line_start":54},{"id":"external_commands:SKILL.md:64:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"5. **Run the accessibility pass** — semantic reading order, a meaningful `alt` on every image (empty","category":"external_commands","line_end":64,"severity":"medium","line_start":64},{"id":"external_commands:SKILL.md:66:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"7. **Build the client-render matrix** — for each target (Gmail app + web, Outlook desktop Word-engin","category":"external_commands","line_end":66,"severity":"medium","line_start":66},{"id":"external_commands:SKILL.md:67:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"8. **Check plain-text parity** — the `text/plain` alternate must carry the same core message, the sa","category":"external_commands","line_end":82,"severity":"medium","line_start":67},{"id":"external_commands:SKILL.md:82:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"On user confirmation, save to `memory/email/email-render-builder/YYYY-MM-DD-<subject-slug>.md` — see","category":"external_commands","line_end":87,"severity":"medium","line_start":82},{"id":"external_commands:SKILL.md:87:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- [Client Render Matrix](references/client-render-matrix.md) — per-client support facts (Outlook Wor","category":"external_commands","line_end":97,"severity":"medium","line_start":87},{"id":"network:SKILL.md:10:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"homepage: \"https://github.com/aaron-he-zhu/aaron-marketing-skills\"","category":"network","line_end":10,"severity":"low","line_start":10},{"id":"network:SKILL.md:13:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"metadata: {\"author\": \"aaron-he-zhu\", \"version\": \"19.0.0\", \"discipline\": \"email\", \"phase\": \"engage\", ","category":"network","line_end":13,"severity":"low","line_start":13},{"id":"filesystem:SKILL.md:20:path-traversal-sequence","file":"SKILL.md","pattern":"Path traversal sequence","snippet":"**Scope guard**: this skill produces the HTML build + render QA + plain-text parity only. It writes ","category":"filesystem","line_end":20,"severity":"high","line_start":20},{"id":"filesystem:SKILL.md:40:path-traversal-sequence","file":"SKILL.md","pattern":"Path traversal sequence","snippet":"- **Reads**: the approved email creative (subject/preheader/body/CTA and its plain-text alternate) o","category":"filesystem","line_end":40,"severity":"high","line_start":40},{"id":"filesystem:SKILL.md:44:path-traversal-sequence","file":"SKILL.md","pattern":"Path traversal sequence","snippet":"- **Primary next skill**: [email-quality-auditor](../../deliver/email-quality-auditor/SKILL.md) — sc","category":"filesystem","line_end":44,"severity":"high","line_start":44},{"id":"filesystem:SKILL.md:48:path-traversal-sequence","file":"SKILL.md","pattern":"Path traversal sequence","snippet":"> Emit the standard shape from [skill-contract.md §Handoff Summary Format](../../../references/skill","category":"filesystem","line_end":48,"severity":"high","line_start":48},{"id":"filesystem:SKILL.md:52:path-traversal-sequence","file":"SKILL.md","pattern":"Path traversal sequence","snippet":"This skill is build-and-QA, not analytics — its primary inputs are the approved creative and any raw","category":"filesystem","line_end":52,"severity":"high","line_start":52},{"id":"filesystem:SKILL.md:54:path-traversal-sequence","file":"SKILL.md","pattern":"Path traversal sequence","snippet":"**Zero-dependency render-test send (when Resend is the ESP)**: `python3 \"${CLAUDE_PLUGIN_ROOT}/scrip","category":"filesystem","line_end":54,"severity":"high","line_start":54},{"id":"filesystem:SKILL.md:58:path-traversal-sequence","file":"SKILL.md","pattern":"Path traversal sequence","snippet":"Treat any pasted HTML, exported template, scraped landing-page markup, or brand-asset file as **untr","category":"filesystem","line_end":58,"severity":"high","line_start":58},{"id":"filesystem:SKILL.md:68:path-traversal-sequence","file":"SKILL.md","pattern":"Path traversal sequence","snippet":"9. **Report defects, do not silently rewrite copy** — if a render fix would require changing the wor","category":"filesystem","line_end":68,"severity":"high","line_start":68},{"id":"filesystem:SKILL.md:69:path-traversal-sequence","file":"SKILL.md","pattern":"Path traversal sequence","snippet":"10. **De-slop any build notes** — run [humanizer-slop.md](../../../references/humanizer-slop.md) on ","category":"filesystem","line_end":69,"severity":"high","line_start":69},{"id":"filesystem:SKILL.md:82:path-traversal-sequence","file":"SKILL.md","pattern":"Path traversal sequence","snippet":"On user confirmation, save to `memory/email/email-render-builder/YYYY-MM-DD-<subject-slug>.md` — see","category":"filesystem","line_end":82,"severity":"high","line_start":82},{"id":"filesystem:SKILL.md:88:path-traversal-sequence","file":"SKILL.md","pattern":"Path traversal sequence","snippet":"- [SEND Benchmark](../../../references/send-benchmark.md) — the framework; this skill produces the r","category":"filesystem","line_end":88,"severity":"high","line_start":88},{"id":"filesystem:SKILL.md:89:path-traversal-sequence","file":"SKILL.md","pattern":"Path traversal sequence","snippet":"- [Humanizer Slop Check](../../../references/humanizer-slop.md) — pre-handoff pass that strips AI-sl","category":"filesystem","line_end":89,"severity":"high","line_start":89},{"id":"filesystem:SKILL.md:93:path-traversal-sequence","file":"SKILL.md","pattern":"Path traversal sequence","snippet":"- **Primary**: [email-quality-auditor](../../deliver/email-quality-auditor/SKILL.md) — score the bui","category":"filesystem","line_end":93,"severity":"high","line_start":93},{"id":"filesystem:SKILL.md:94:path-traversal-sequence","file":"SKILL.md","pattern":"Path traversal sequence","snippet":"- **If a render fix needs the copy changed** (subject too long to render, CTA label overflows the bu","category":"filesystem","line_end":94,"severity":"high","line_start":94},{"id":"filesystem:SKILL.md:95:path-traversal-sequence","file":"SKILL.md","pattern":"Path traversal sequence","snippet":"- **If the build feeds a render/subject A/B test**: [send-experiment-designer](../../deliver/send-ex","category":"filesystem","line_end":95,"severity":"high","line_start":95},{"id":"filesystem:SKILL.md:96:path-traversal-sequence","file":"SKILL.md","pattern":"Path traversal sequence","snippet":"- **If image-off or dark-mode breakage traces to a broken destination page** (message-match fails po","category":"filesystem","line_end":96,"severity":"high","line_start":96},{"id":"filesystem:SKILL.md:97:path-traversal-sequence","file":"SKILL.md","pattern":"Path traversal sequence","snippet":"- Global visited-set / max-depth (`max-depth: 3`) termination contract from [skill-contract.md](../.","category":"filesystem","line_end":97,"severity":"high","line_start":97},{"id":"blocker:SKILL.md:52:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"This skill is build-and-QA, not analytics — its primary inputs are the approved creative and any raw","category":"blocker","line_end":52,"severity":"low","line_start":52},{"id":"blocker:SKILL.md:62:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"3. **Make it responsive** — the single column reflows on narrow viewports; tap targets stay ≥44px; f","category":"blocker","line_end":62,"severity":"low","line_start":62},{"id":"blocker:SKILL.md:65:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"6. **Specify image-off fallbacks** — the email must carry its message with images blocked (many clie","category":"blocker","line_end":65,"severity":"low","line_start":65},{"id":"blocker:SKILL.md:71:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"Never claim a client renders correctly without a basis — mark any render result you did not verify w","category":"blocker","line_end":71,"severity":"low","line_start":71},{"id":"blocker:SKILL.md:78:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"- **Continue silently** — target client list unspecified (default to the standard set: Gmail, Outloo","category":"blocker","line_end":78,"severity":"low","line_start":78}],"finding_verdicts":[{"id":"blocker:references/client-render-matrix.md:7:system-reconnaissance","reason":"This describes supported email clients, rendering behavior, or product defaults. It does not collect host information or perform system reconnaissance.","verdict":"false_positive","confidence":0.98},{"id":"blocker:references/client-render-matrix.md:16:system-reconnaissance","reason":"This describes supported email clients, rendering behavior, or product defaults. It does not collect host information or perform system reconnaissance.","verdict":"false_positive","confidence":0.98},{"id":"blocker:references/client-render-matrix.md:29:system-reconnaissance","reason":"This describes supported email clients, rendering behavior, or product defaults. It does not collect host information or perform system reconnaissance.","verdict":"false_positive","confidence":0.98},{"id":"filesystem:references/email-render-specs.md:3:path-traversal-sequence","reason":"This is documentation navigation or a scoped file reference, not a filesystem operation using attacker-controlled traversal. No evidence of arbitrary file access or path resolution outside the skill context was found.","verdict":"false_positive","confidence":0.95},{"id":"filesystem:references/email-render-specs.md:56:path-traversal-sequence","reason":"This is documentation navigation or a scoped file reference, not a filesystem operation using attacker-controlled traversal. No evidence of arbitrary file access or path resolution outside the skill context was found.","verdict":"false_positive","confidence":0.95},{"id":"blocker:references/email-render-specs.md:16:system-reconnaissance","reason":"This describes supported email clients, rendering behavior, or product defaults. It does not collect host information or perform system reconnaissance.","verdict":"false_positive","confidence":0.98},{"id":"blocker:references/email-render-specs.md:19:system-reconnaissance","reason":"This describes supported email clients, rendering behavior, or product defaults. It does not collect host information or perform system reconnaissance.","verdict":"false_positive","confidence":0.98},{"id":"blocker:references/email-render-specs.md:26:system-reconnaissance","reason":"This describes supported email clients, rendering behavior, or product defaults. It does not collect host information or perform system reconnaissance.","verdict":"false_positive","confidence":0.98},{"id":"blocker:references/email-render-specs.md:43:system-reconnaissance","reason":"This describes supported email clients, rendering behavior, or product defaults. It does not collect host information or perform system reconnaissance.","verdict":"false_positive","confidence":0.98},{"id":"external_commands:SKILL.md:18:ruby-shell-backtick-execution","reason":"The matched characters are Markdown code fences or inline code terminology, not Ruby or shell backtick execution. No executable shell or Ruby backtick expression appears at this location.","verdict":"false_positive","confidence":0.98},{"id":"external_commands:SKILL.md:24:ruby-shell-backtick-execution","reason":"The matched characters are Markdown code fences or inline code terminology, not Ruby or shell backtick execution. No executable shell or Ruby backtick expression appears at this location.","verdict":"false_positive","confidence":0.98},{"id":"external_commands:SKILL.md:26:ruby-shell-backtick-execution","reason":"The matched characters are Markdown code fences or inline code terminology, not Ruby or shell backtick execution. No executable shell or Ruby backtick expression appears at this location.","verdict":"false_positive","confidence":0.98},{"id":"external_commands:SKILL.md:28:ruby-shell-backtick-execution","reason":"The matched characters are Markdown code fences or inline code terminology, not Ruby or shell backtick execution. No executable shell or Ruby backtick expression appears at this location.","verdict":"false_positive","confidence":0.98},{"id":"external_commands:SKILL.md:30:ruby-shell-backtick-execution","reason":"The matched characters are Markdown code fences or inline code terminology, not Ruby or shell backtick execution. No executable shell or Ruby backtick expression appears at this location.","verdict":"false_positive","confidence":0.98},{"id":"external_commands:SKILL.md:32:ruby-shell-backtick-execution","reason":"The matched characters are Markdown code fences or inline code terminology, not Ruby or shell backtick execution. No executable shell or Ruby backtick expression appears at this location.","verdict":"false_positive","confidence":0.98},{"id":"external_commands:SKILL.md:34:ruby-shell-backtick-execution","reason":"The matched characters are Markdown code fences or inline code terminology, not Ruby or shell backtick execution. No executable shell or Ruby backtick expression appears at this location.","verdict":"false_positive","confidence":0.98},{"id":"external_commands:SKILL.md:38:ruby-shell-backtick-execution","reason":"The matched characters are Markdown code fences or inline code terminology, not Ruby or shell backtick execution. No executable shell or Ruby backtick expression appears at this location.","verdict":"false_positive","confidence":0.98},{"id":"external_commands:SKILL.md:42:ruby-shell-backtick-execution","reason":"The matched characters are Markdown code fences or inline code terminology, not Ruby or shell backtick execution. No executable shell or Ruby backtick expression appears at this location.","verdict":"false_positive","confidence":0.98},{"id":"external_commands:SKILL.md:52:ruby-shell-backtick-execution","reason":"The matched characters are Markdown code fences or inline code terminology, not Ruby or shell backtick execution. No executable shell or Ruby backtick expression appears at this location.","verdict":"false_positive","confidence":0.98},{"id":"external_commands:SKILL.md:54:ruby-shell-backtick-execution","reason":"The documented Python command can deliver email when invoked with --live. It is limited to a verified sender and the user's own test inboxes, but it remains an external side effect that requires explicit confirmation.","verdict":"confirmed","severity":"medium","confidence":0.78},{"id":"external_commands:SKILL.md:64:ruby-shell-backtick-execution","reason":"The matched characters are Markdown code fences or inline code terminology, not Ruby or shell backtick execution. No executable shell or Ruby backtick expression appears at this location.","verdict":"false_positive","confidence":0.98},{"id":"external_commands:SKILL.md:66:ruby-shell-backtick-execution","reason":"The matched characters are Markdown code fences or inline code terminology, not Ruby or shell backtick execution. No executable shell or Ruby backtick expression appears at this location.","verdict":"false_positive","confidence":0.98},{"id":"external_commands:SKILL.md:67:ruby-shell-backtick-execution","reason":"The matched characters are Markdown code fences or inline code terminology, not Ruby or shell backtick execution. No executable shell or Ruby backtick expression appears at this location.","verdict":"false_positive","confidence":0.98},{"id":"external_commands:SKILL.md:82:ruby-shell-backtick-execution","reason":"The matched characters are Markdown code fences or inline code terminology, not Ruby or shell backtick execution. No executable shell or Ruby backtick expression appears at this location.","verdict":"false_positive","confidence":0.98},{"id":"external_commands:SKILL.md:87:ruby-shell-backtick-execution","reason":"The matched characters are Markdown code fences or inline code terminology, not Ruby or shell backtick execution. No executable shell or Ruby backtick expression appears at this location.","verdict":"false_positive","confidence":0.98},{"id":"network:SKILL.md:10:hardcoded-url","reason":"This is a repository homepage or metadata URL, not a network request. No data transmission or automatic remote fetch is specified at this location.","verdict":"false_positive","confidence":0.99},{"id":"network:SKILL.md:13:hardcoded-url","reason":"This is a repository homepage or metadata URL, not a network request. No data transmission or automatic remote fetch is specified at this location.","verdict":"false_positive","confidence":0.99},{"id":"filesystem:SKILL.md:20:path-traversal-sequence","reason":"This is documentation navigation or a scoped file reference, not a filesystem operation using attacker-controlled traversal. No evidence of arbitrary file access or path resolution outside the skill context was found.","verdict":"false_positive","confidence":0.95},{"id":"filesystem:SKILL.md:40:path-traversal-sequence","reason":"This is documentation navigation or a scoped file reference, not a filesystem operation using attacker-controlled traversal. No evidence of arbitrary file access or path resolution outside the skill context was found.","verdict":"false_positive","confidence":0.95},{"id":"filesystem:SKILL.md:44:path-traversal-sequence","reason":"This is documentation navigation or a scoped file reference, not a filesystem operation using attacker-controlled traversal. No evidence of arbitrary file access or path resolution outside the skill context was found.","verdict":"false_positive","confidence":0.95},{"id":"filesystem:SKILL.md:48:path-traversal-sequence","reason":"This is documentation navigation or a scoped file reference, not a filesystem operation using attacker-controlled traversal. No evidence of arbitrary file access or path resolution outside the skill context was found.","verdict":"false_positive","confidence":0.95},{"id":"filesystem:SKILL.md:52:path-traversal-sequence","reason":"This is documentation navigation or a scoped file reference, not a filesystem operation using attacker-controlled traversal. No evidence of arbitrary file access or path resolution outside the skill context was found.","verdict":"false_positive","confidence":0.95},{"id":"filesystem:SKILL.md:54:path-traversal-sequence","reason":"This is documentation navigation or a scoped file reference, not a filesystem operation using attacker-controlled traversal. No evidence of arbitrary file access or path resolution outside the skill context was found.","verdict":"false_positive","confidence":0.95},{"id":"filesystem:SKILL.md:58:path-traversal-sequence","reason":"This is documentation navigation or a scoped file reference, not a filesystem operation using attacker-controlled traversal. No evidence of arbitrary file access or path resolution outside the skill context was found.","verdict":"false_positive","confidence":0.95},{"id":"filesystem:SKILL.md:68:path-traversal-sequence","reason":"This is documentation navigation or a scoped file reference, not a filesystem operation using attacker-controlled traversal. No evidence of arbitrary file access or path resolution outside the skill context was found.","verdict":"false_positive","confidence":0.95},{"id":"filesystem:SKILL.md:69:path-traversal-sequence","reason":"This is documentation navigation or a scoped file reference, not a filesystem operation using attacker-controlled traversal. No evidence of arbitrary file access or path resolution outside the skill context was found.","verdict":"false_positive","confidence":0.95},{"id":"filesystem:SKILL.md:82:path-traversal-sequence","reason":"The skill instructs an agent to save a result under a memory path after user confirmation. The intended operation is bounded, but the subject-derived filename must be sanitized to prevent an unsafe path.","verdict":"confirmed","severity":"high","confidence":0.52},{"id":"filesystem:SKILL.md:88:path-traversal-sequence","reason":"This is documentation navigation or a scoped file reference, not a filesystem operation using attacker-controlled traversal. No evidence of arbitrary file access or path resolution outside the skill context was found.","verdict":"false_positive","confidence":0.95},{"id":"filesystem:SKILL.md:89:path-traversal-sequence","reason":"This is documentation navigation or a scoped file reference, not a filesystem operation using attacker-controlled traversal. No evidence of arbitrary file access or path resolution outside the skill context was found.","verdict":"false_positive","confidence":0.95},{"id":"filesystem:SKILL.md:93:path-traversal-sequence","reason":"This is documentation navigation or a scoped file reference, not a filesystem operation using attacker-controlled traversal. No evidence of arbitrary file access or path resolution outside the skill context was found.","verdict":"false_positive","confidence":0.95},{"id":"filesystem:SKILL.md:94:path-traversal-sequence","reason":"This is documentation navigation or a scoped file reference, not a filesystem operation using attacker-controlled traversal. No evidence of arbitrary file access or path resolution outside the skill context was found.","verdict":"false_positive","confidence":0.95},{"id":"filesystem:SKILL.md:95:path-traversal-sequence","reason":"This is documentation navigation or a scoped file reference, not a filesystem operation using attacker-controlled traversal. No evidence of arbitrary file access or path resolution outside the skill context was found.","verdict":"false_positive","confidence":0.95},{"id":"filesystem:SKILL.md:96:path-traversal-sequence","reason":"This is documentation navigation or a scoped file reference, not a filesystem operation using attacker-controlled traversal. No evidence of arbitrary file access or path resolution outside the skill context was found.","verdict":"false_positive","confidence":0.95},{"id":"filesystem:SKILL.md:97:path-traversal-sequence","reason":"This is documentation navigation or a scoped file reference, not a filesystem operation using attacker-controlled traversal. No evidence of arbitrary file access or path resolution outside the skill context was found.","verdict":"false_positive","confidence":0.95},{"id":"blocker:SKILL.md:52:system-reconnaissance","reason":"This describes supported email clients, rendering behavior, or product defaults. It does not collect host information or perform system reconnaissance.","verdict":"false_positive","confidence":0.98},{"id":"blocker:SKILL.md:62:system-reconnaissance","reason":"This describes supported email clients, rendering behavior, or product defaults. It does not collect host information or perform system reconnaissance.","verdict":"false_positive","confidence":0.98},{"id":"blocker:SKILL.md:65:system-reconnaissance","reason":"This describes supported email clients, rendering behavior, or product defaults. It does not collect host information or perform system reconnaissance.","verdict":"false_positive","confidence":0.98},{"id":"blocker:SKILL.md:71:system-reconnaissance","reason":"This describes supported email clients, rendering behavior, or product defaults. It does not collect host information or perform system reconnaissance.","verdict":"false_positive","confidence":0.98},{"id":"blocker:SKILL.md:78:system-reconnaissance","reason":"This describes supported email clients, rendering behavior, or product defaults. It does not collect host information or perform system reconnaissance.","verdict":"false_positive","confidence":0.98}],"semantic_findings":[],"subject_marketplace_commit_sha":"bcc45d822b2fa0c81cb9bc97b710631e1d8f0c0c","subject_content_hash":"6691ea41eb4c8be469761a7c68bbc78a900ab519231ec2a61500e7e4b07ec135","subject_tree_hash":"54686c8bfd4fd09dbf774299498db66425b452222537e8d1a85c5eb1b943aa7b","subject_plugin_path":"skills/aaron-he-zhu/email-render-builder","audit_payload_hash":"d5dfa3772906202d26fd666616b31add","confirmed_risk_level":"safe","scanner_version":"3.0.0","policy_version":"skillstore-security-audit-policy-v1","subject":{"marketplaceCommitSha":"bcc45d822b2fa0c81cb9bc97b710631e1d8f0c0c","contentHash":"6691ea41eb4c8be469761a7c68bbc78a900ab519231ec2a61500e7e4b07ec135","treeHash":"54686c8bfd4fd09dbf774299498db66425b452222537e8d1a85c5eb1b943aa7b","pluginPath":"skills/aaron-he-zhu/email-render-builder","auditPayloadHash":"d5dfa3772906202d26fd666616b31add"},"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/aaron-he-zhu-email-render-builder/audits/9/attestation","status":"superseded"},"trust":{"publicState":"public","auditState":"complete","auditCurrentness":null,"confirmedRiskLevel":"safe","confirmedFindingCount":0,"capabilityReviewCount":2,"needsReviewCount":0,"falsePositiveCount":0,"agentAutoInstallPolicy":"allowed","manualInstallPolicy":"allowed","artifactSignatureState":"available","attestationState":"superseded","verificationState":"not_verified"},"isLatest":false}}