{"version": "2.1.0", "$schema": "https://json.schemastore.org/sarif-2.1.0.json", "runs": [{"tool": {"driver": {"name": "Repobility", "informationUri": "https://repobility.com", "rules": [{"id": "scanner-eae6edcecb60e292", "name": "Agent authority lacks a verifier contract: skills/hallmark/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: skills/hallmark/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7254c3855466e9ac", "name": "SkillSpector E1 (data-exfil) in skills/hallmark/references/assets.md", "shortDescription": {"text": "SkillSpector E1 (data-exfil) in skills/hallmark/references/assets.md"}, "fullDescription": {"text": "https://api.svgl.app/\n\nData is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.\n\nSkill: hallmark\nRule: E1  Category: data-exfil\nSeverity: MEDIUM  Confidence: 0.50\n\nRemediation: Verify the destination URL is trusted and necessary. Remove or replace with documented APIs. Ensure no secrets, tokens, or PII are transmitted."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 0.5}}, {"id": "scanner-8bda4ceb84db99ef", "name": "SkillSpector E1 (data-exfil) in skills/hallmark/references/typography.md", "shortDescription": {"text": "SkillSpector E1 (data-exfil) in skills/hallmark/references/typography.md"}, "fullDescription": {"text": "https://api.fontshare.com/\n\nData is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.\n\nSkill: hallmark\nRule: E1  Category: data-exfil\nSeverity: MEDIUM  Confidence: 0.50\n\nRemediation: Verify the destination URL is trusted and necessary. Remove or replace with documented APIs. Ensure no secrets, tokens, or PII are transmitted."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 0.5}}, {"id": "scanner-54946ec5c93d206d", "name": "SkillSpector EA2 (excessive-agency) in skills/hallmark/SKILL.md", "shortDescription": {"text": "SkillSpector EA2 (excessive-agency) in skills/hallmark/SKILL.md"}, "fullDescription": {"text": "without asking\n\nSkill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.\n\nSkill: hallmark\nRule: EA2  Category: excessive-agency\nSeverity: MEDIUM  Confidence: 0.75\n\nRemediation: Add human-in-the-loop confirmation for destructive, irreversible, or high-impact operations. Never auto-execute commands that modify files, send data, or alter system state."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 0.75}}, {"id": "scanner-61efb8dc059f3eae", "name": "SkillSpector EA2 (excessive-agency) in skills/hallmark/references/study.md", "shortDescription": {"text": "SkillSpector EA2 (excessive-agency) in skills/hallmark/references/study.md"}, "fullDescription": {"text": "without asking\n\nSkill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.\n\nSkill: hallmark\nRule: EA2  Category: excessive-agency\nSeverity: MEDIUM  Confidence: 0.75\n\nRemediation: Add human-in-the-loop confirmation for destructive, irreversible, or high-impact operations. Never auto-execute commands that modify files, send data, or alter system state."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 0.75}}, {"id": "scanner-67c8aed722210b95", "name": "SkillSpector EA2 (excessive-agency) in skills/hallmark/references/verbs/redesign.md", "shortDescription": {"text": "SkillSpector EA2 (excessive-agency) in skills/hallmark/references/verbs/redesign.md"}, "fullDescription": {"text": "without confirmation\n\nSkill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.\n\nSkill: hallmark\nRule: EA2  Category: excessive-agency\nSeverity: MEDIUM  Confidence: 0.75\n\nRemediation: Add human-in-the-loop confirmation for destructive, irreversible, or high-impact operations. Never auto-execute commands that modify files, send data, or alter system state."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 0.75}}, {"id": "scanner-fa39217bbe5381cc", "name": "SkillSpector P1 (prompt-injection) in skills/hallmark/SKILL.md", "shortDescription": {"text": "SkillSpector P1 (prompt-injection) in skills/hallmark/SKILL.md"}, "fullDescription": {"text": "override system\n\nThis pattern attempts to override system instructions or ignore safety constraints. Without LLM analysis, manual review is recommended.\n\nSkill: hallmark\nRule: P1  Category: prompt-injection\nSeverity: HIGH  Confidence: 0.90\n\nRemediation: Remove or rewrite any text that instructs the agent to ignore prompts, override safety rules, or trust unverified content. Ensure skill content cannot be injected to alter agent behavior."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 0.9}}, {"id": "scanner-85d5ae0cb93f1e27", "name": "SkillSpector P2 (prompt-injection) in skills/hallmark/references/assets.md", "shortDescription": {"text": "SkillSpector P2 (prompt-injection) in skills/hallmark/references/assets.md"}, "fullDescription": {"text": "<!-- TODO: Replace with real <thing>, target size: <WxH> -->\n\nHidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.\n\nSkill: hallmark\nRule: P2  Category: prompt-injection\nSeverity: HIGH  Confidence: 0.70\n\nRemediation: Audit all comments and invisible characters. Remove any instructions that direct the agent to perform unauthorized actions. Use plain, reviewable content."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 0.7}}, {"id": "scanner-f0e371df695bdf7f", "name": "SkillSpector P2 (prompt-injection) in skills/hallmark/references/imagery-kit.md", "shortDescription": {"text": "SkillSpector P2 (prompt-injection) in skills/hallmark/references/imagery-kit.md"}, "fullDescription": {"text": "<!-- TODO: Replace with real product photo, target size: 600\u00d7900 -->\n\nHidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.\n\nSkill: hallmark\nRule: P2  Category: prompt-injection\nSeverity: HIGH  Confidence: 0.70\n\nRemediation: Audit all comments and invisible characters. Remove any instructions that direct the agent to perform unauthorized actions. Use plain, reviewable content."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 0.7}}, {"id": "scanner-29f507470cc8d606", "name": "SkillSpector P6 (prompt-injection) in skills/hallmark/references/export-formats.md", "shortDescription": {"text": "SkillSpector P6 (prompt-injection) in skills/hallmark/references/export-formats.md"}, "fullDescription": {"text": "output rule\n\nSkill contains instructions that could directly expose system prompts, internal rules, or hidden instructions to users or external parties.\n\nSkill: hallmark\nRule: P6  Category: prompt-injection\nSeverity: HIGH  Confidence: 0.85\n\nRemediation: Remove any instructions that reveal, print, or output system prompts or internal rules. System instructions should never be exposed to end users."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 0.85}}, {"id": "scanner-f8d483452bab2906", "name": "SkillSpector P6 (prompt-injection) in skills/hallmark/references/hero-enrichment.md", "shortDescription": {"text": "SkillSpector P6 (prompt-injection) in skills/hallmark/references/hero-enrichment.md"}, "fullDescription": {"text": "print rule\n\nSkill contains instructions that could directly expose system prompts, internal rules, or hidden instructions to users or external parties.\n\nSkill: hallmark\nRule: P6  Category: prompt-injection\nSeverity: HIGH  Confidence: 0.85\n\nRemediation: Remove any instructions that reveal, print, or output system prompts or internal rules. System instructions should never be exposed to end users."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 0.85}}, {"id": "scanner-e637c415447867e4", "name": "Run SkillSpector's LLM-backed analysis in your own pipeline", "shortDescription": {"text": "Run SkillSpector's LLM-backed analysis in your own pipeline"}, "fullDescription": {"text": "Repobility ran SkillSpector's static rules server-side. The deeper LLM-backed analyzers \u2014 tool-poisoning (TP*), semantic security discovery (SSD*), developer-intent mismatch (SDI*) \u2014 are meant to run on YOUR machine with YOUR model; repobility never sends your code to an LLM. Recipe:\n\n# 1. Install SkillSpector in your own isolated env\npipx install \"skillspector @ git+https://github.com/NVIDIA/SkillSpector.git\"\n\n# 2. Point it at YOUR LLM pipeline (pick one) - your code stays on your machine\nexport SKILLSPECTOR_PROVIDER=anthropic && export ANTHROPIC_API_KEY=sk-ant-...\n# export SKILLSPECTOR_PROVIDER=openai   && export OPENAI_API_KEY=sk-...\n# export SKILLSPECTOR_PROVIDER=openai OPENAI_API_KEY=ollama OPENAI_BASE_URL=http://localhost:11434/v1 SKILLSPECTOR_MODEL=llama3.1:8b\n# export SKILLSPECTOR_PROVIDER=nv_build && export NVIDIA_INFERENCE_KEY=nvapi-...\n\n# 3. Run the LLM-backed scan per skill (omit --no-llm to enable the LLM analyzers)\nskillspector scan skills/hallmark --format sarif --output"}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6372cebde0220094", "name": "No auth library detected", "shortDescription": {"text": "No auth library detected"}, "fullDescription": {"text": "The scanner did not find any standard auth library (JWT, OAuth, NextAuth, Auth0, etc.). The repo has auth/admin/session surface indicators, so auth may live in custom code, in a separate service, or be missing."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "0 test file(s) for 13 source file(s) (ratio 0.00). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: ci, tests. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4a66add6f05cc6a5", "name": "Fire-and-forget `fetch()` has no rejection handler \u2014 site/js/main.js:712", "shortDescription": {"text": "Fire-and-forget `fetch()` has no rejection handler \u2014 site/js/main.js:712"}, "fullDescription": {"text": "This fetch result is neither awaited, returned, assigned, nor followed by `.catch(...)`. A network failure can therefore become an unhandled promise rejection. Await/return the promise or attach an explicit rejection handler."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 0.9}}, {"id": "scanner-48bec3c28ed3a76d", "name": "Legacy-named symbol `hero__copy` in site/examples/riso-01/script.js:15", "shortDescription": {"text": "Legacy-named symbol `hero__copy` in site/examples/riso-01/script.js:15"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c133c26e481ea64d", "name": "Legacy-named symbol `strip__copy` in site/examples/cobalt-01/script.js:24", "shortDescription": {"text": "Legacy-named symbol `strip__copy` in site/examples/cobalt-01/script.js:24"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/30764"}, "properties": {"repository": "Nutlope/hallmark", "repoUrl": "https://github.com/Nutlope/hallmark", "branch": "main"}, "results": [{"ruleId": "scanner-eae6edcecb60e292", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: skills/hallmark/SKILL.md"}, "properties": {"repobilityId": "feef8b80bca50b51", "scanner": "scanner-primary", "fingerprint": "eae6edcecb60e292", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "skills/hallmark/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7254c3855466e9ac", "level": "warning", "message": {"text": "SkillSpector E1 (data-exfil) in skills/hallmark/references/assets.md"}, "properties": {"repobilityId": "133521350cc85a36", "scanner": "scanner-primary", "fingerprint": "7254c3855466e9ac", "layer": "security", "severity": "medium", "confidence": 0.5, "tags": ["skillspector", "mcp-skill", "data-exfil", "E1"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "skills/hallmark/references/assets.md"}, "region": {"startLine": 122}}}]}, {"ruleId": "scanner-8bda4ceb84db99ef", "level": "warning", "message": {"text": "SkillSpector E1 (data-exfil) in skills/hallmark/references/typography.md"}, "properties": {"repobilityId": "8183e4c9b376e8f7", "scanner": "scanner-primary", "fingerprint": "8bda4ceb84db99ef", "layer": "security", "severity": "medium", "confidence": 0.5, "tags": ["skillspector", "mcp-skill", "data-exfil", "E1"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "skills/hallmark/references/typography.md"}, "region": {"startLine": 51}}}]}, {"ruleId": "scanner-54946ec5c93d206d", "level": "warning", "message": {"text": "SkillSpector EA2 (excessive-agency) in skills/hallmark/SKILL.md"}, "properties": {"repobilityId": "9ecb4baf0d3fd8e5", "scanner": "scanner-primary", "fingerprint": "54946ec5c93d206d", "layer": "security", "severity": "medium", "confidence": 0.75, "tags": ["skillspector", "mcp-skill", "excessive-agency", "EA2"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "skills/hallmark/SKILL.md"}, "region": {"startLine": 518}}}]}, {"ruleId": "scanner-61efb8dc059f3eae", "level": "warning", "message": {"text": "SkillSpector EA2 (excessive-agency) in skills/hallmark/references/study.md"}, "properties": {"repobilityId": "ea000ed523881951", "scanner": "scanner-primary", "fingerprint": "61efb8dc059f3eae", "layer": "security", "severity": "medium", "confidence": 0.75, "tags": ["skillspector", "mcp-skill", "excessive-agency", "EA2"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "skills/hallmark/references/study.md"}, "region": {"startLine": 455}}}]}, {"ruleId": "scanner-67c8aed722210b95", "level": "warning", "message": {"text": "SkillSpector EA2 (excessive-agency) in skills/hallmark/references/verbs/redesign.md"}, "properties": {"repobilityId": "3d930679f6d17c1a", "scanner": "scanner-primary", "fingerprint": "67c8aed722210b95", "layer": "security", "severity": "medium", "confidence": 0.75, "tags": ["skillspector", "mcp-skill", "excessive-agency", "EA2"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "skills/hallmark/references/verbs/redesign.md"}, "region": {"startLine": 249}}}]}, {"ruleId": "scanner-fa39217bbe5381cc", "level": "error", "message": {"text": "SkillSpector P1 (prompt-injection) in skills/hallmark/SKILL.md"}, "properties": {"repobilityId": "145b24a4ffeaab94", "scanner": "scanner-primary", "fingerprint": "fa39217bbe5381cc", "layer": "security", "severity": "high", "confidence": 0.9, "tags": ["skillspector", "mcp-skill", "prompt-injection", "P1"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "skills/hallmark/SKILL.md"}, "region": {"startLine": 186}}}]}, {"ruleId": "scanner-85d5ae0cb93f1e27", "level": "error", "message": {"text": "SkillSpector P2 (prompt-injection) in skills/hallmark/references/assets.md"}, "properties": {"repobilityId": "c7bb285f2dca86ce", "scanner": "scanner-primary", "fingerprint": "85d5ae0cb93f1e27", "layer": "security", "severity": "high", "confidence": 0.7, "tags": ["skillspector", "mcp-skill", "prompt-injection", "P2"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "skills/hallmark/references/assets.md"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-f0e371df695bdf7f", "level": "error", "message": {"text": "SkillSpector P2 (prompt-injection) in skills/hallmark/references/imagery-kit.md"}, "properties": {"repobilityId": "d0614e82a7ac0ffd", "scanner": "scanner-primary", "fingerprint": "f0e371df695bdf7f", "layer": "security", "severity": "high", "confidence": 0.7, "tags": ["skillspector", "mcp-skill", "prompt-injection", "P2"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "skills/hallmark/references/imagery-kit.md"}, "region": {"startLine": 131}}}]}, {"ruleId": "scanner-29f507470cc8d606", "level": "error", "message": {"text": "SkillSpector P6 (prompt-injection) in skills/hallmark/references/export-formats.md"}, "properties": {"repobilityId": "efe39c26362c8d4a", "scanner": "scanner-primary", "fingerprint": "29f507470cc8d606", "layer": "security", "severity": "high", "confidence": 0.85, "tags": ["skillspector", "mcp-skill", "prompt-injection", "P6"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "skills/hallmark/references/export-formats.md"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-f8d483452bab2906", "level": "error", "message": {"text": "SkillSpector P6 (prompt-injection) in skills/hallmark/references/hero-enrichment.md"}, "properties": {"repobilityId": "704bd69674b2e41a", "scanner": "scanner-primary", "fingerprint": "f8d483452bab2906", "layer": "security", "severity": "high", "confidence": 0.85, "tags": ["skillspector", "mcp-skill", "prompt-injection", "P6"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "skills/hallmark/references/hero-enrichment.md"}, "region": {"startLine": 389}}}]}, {"ruleId": "scanner-e637c415447867e4", "level": "none", "message": {"text": "Run SkillSpector's LLM-backed analysis in your own pipeline"}, "properties": {"repobilityId": "1936f198ff5212bf", "scanner": "scanner-primary", "fingerprint": "e637c415447867e4", "layer": "security", "severity": "info", "confidence": 1.0, "tags": ["skillspector", "mcp-skill", "llm-advisory", "ai-coder"]}}, {"ruleId": "scanner-6372cebde0220094", "level": "warning", "message": {"text": "No auth library detected"}, "properties": {"repobilityId": "a5b6035a5bbf8054", "scanner": "scanner-primary", "fingerprint": "6372cebde0220094", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["coverage", "auth"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "7ea31b80d16ad2f8", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "0096636710b2aeaa", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-4a66add6f05cc6a5", "level": "warning", "message": {"text": "Fire-and-forget `fetch()` has no rejection handler \u2014 site/js/main.js:712"}, "properties": {"repobilityId": "e4f77c46b1f02a0e", "scanner": "scanner-primary", "fingerprint": "4a66add6f05cc6a5", "layer": "quality", "severity": "medium", "confidence": 0.9, "tags": ["integrity", "fragile-runtime", "robustness", "unhandled-promise"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "site/js/main.js"}, "region": {"startLine": 712}}}]}, {"ruleId": "scanner-48bec3c28ed3a76d", "level": "note", "message": {"text": "Legacy-named symbol `hero__copy` in site/examples/riso-01/script.js:15"}, "properties": {"repobilityId": "2f0e6d9559e94364", "scanner": "scanner-primary", "fingerprint": "48bec3c28ed3a76d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c133c26e481ea64d", "level": "note", "message": {"text": "Legacy-named symbol `strip__copy` in site/examples/cobalt-01/script.js:24"}, "properties": {"repobilityId": "3ec160d0bebe6d5b", "scanner": "scanner-primary", "fingerprint": "c133c26e481ea64d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}]}]}