{
  "skill": {
    "name": "brainstorming",
    "source": "skills/brainstorming",
    "scanned_at": "2026-08-28T03:35:09.815473+00:00"
  },
  "risk_assessment": {
    "score": 80,
    "severity": "HIGH",
    "recommendation": "DO_NOT_INSTALL",
    "max_issue_severity": "HIGH"
  },
  "components": [
    {
      "path": "SKILL.md",
      "type": "markdown",
      "lines": 250,
      "executable": false,
      "size_bytes": 15456,
      "source_url": null,
      "source_identity": null,
      "source_digest": null
    },
    {
      "path": "scripts/frame-template.html",
      "type": "other",
      "lines": 213,
      "executable": false,
      "size_bytes": 8094,
      "source_url": null,
      "source_identity": null,
      "source_digest": null
    },
    {
      "path": "scripts/helper.js",
      "type": "javascript",
      "lines": 167,
      "executable": true,
      "size_bytes": 5615,
      "source_url": null,
      "source_identity": null,
      "source_digest": null
    },
    {
      "path": "scripts/server.cjs",
      "type": "other",
      "lines": 723,
      "executable": false,
      "size_bytes": 25693,
      "source_url": null,
      "source_identity": null,
      "source_digest": null
    },
    {
      "path": "scripts/start-server.sh",
      "type": "shell",
      "lines": 209,
      "executable": true,
      "size_bytes": 6908,
      "source_url": null,
      "source_identity": null,
      "source_digest": null
    },
    {
      "path": "scripts/stop-server.sh",
      "type": "shell",
      "lines": 120,
      "executable": true,
      "size_bytes": 3263,
      "source_url": null,
      "source_identity": null,
      "source_digest": null
    },
    {
      "path": "spec-document-reviewer-prompt.md",
      "type": "markdown",
      "lines": 49,
      "executable": false,
      "size_bytes": 1747,
      "source_url": null,
      "source_identity": null,
      "source_digest": null
    },
    {
      "path": "visual-companion.md",
      "type": "markdown",
      "lines": 299,
      "executable": false,
      "size_bytes": 13383,
      "source_url": null,
      "source_identity": null,
      "source_digest": null
    }
  ],
  "structured_summaries": [],
  "issues": [
    {
      "id": "P2",
      "finding_id": "finding-2d6347652175402aa75c5150d8766e5f",
      "category": "Prompt Injection",
      "pattern": "Hidden Instructions",
      "severity": "HIGH",
      "confidence": 0.7,
      "location": {
        "file": "scripts/server.cjs",
        "start_line": 174,
        "end_line": null
      },
      "finding": "<!-- BRANDING --><h1>Brainstorm Companion</h1>\n<p>Waiting for the agent to push a screen...</p></body></html>`);\n}\n\nconst FORBIDDEN_PAGE = `<!DOCTYPE html>\n<html>\n<head><meta charset=\"utf-8\"><title>Se",
      "explanation": "Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.",
      "remediation": "Audit all comments and invisible characters. Remove any instructions that direct the agent to perform unauthorized actions. Use plain, reviewable content.",
      "code_snippet": ".brand-logo { display: block; height: 1em; width: auto; max-width: 180px; filter: invert(1); }\n</style>\n</head>\n<body><!-- BRANDING --><h1>Brainstorm Companion</h1>\n<p>Waiting for the agent to push a screen...</p></body></html>`);\n}\n",
      "intent": null,
      "tags": [
        "Prompt Injection"
      ],
      "evidence": {},
      "match_fingerprint": "c76112664abe3a326aa3b8f8c50afa464fecf94f9e4f939408e56cf09b8fa6b3",
      "occurrences": [
        {
          "file": "scripts/server.cjs",
          "start_line": 174,
          "end_line": null
        }
      ]
    },
    {
      "id": "TM1",
      "finding_id": "finding-968cf45e656042a08c7bb9fac1a8012d",
      "category": "Tool Misuse",
      "pattern": "Tool Parameter Abuse",
      "severity": "HIGH",
      "confidence": 0.95,
      "location": {
        "file": "scripts/stop-server.sh",
        "start_line": 22,
        "end_line": null
      },
      "finding": "rm -f \"${STATE_DIR}/server-info\"",
      "explanation": "Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).",
      "remediation": "Validate all tool parameters against an allowlist. Reject dangerous parameter values (shell=True, --force, -rf /) and use safe defaults.",
      "code_snippet": "\nmark_stopped() {\n  local reason=\"$1\"\n  rm -f \"${STATE_DIR}/server-info\"\n  printf '{\"reason\":\"%s\",\"timestamp\":%s}\\n' \"$reason\" \"$(date +%s)\" > \"${STATE_DIR}/server-stopped\"\n}\n",
      "intent": null,
      "tags": [
        "Tool Misuse"
      ],
      "evidence": {},
      "match_fingerprint": "cfcff570082293a2f0d8ff84580726582b1114dc18f308571e4f18927f3dbc46",
      "occurrences": [
        {
          "file": "scripts/stop-server.sh",
          "start_line": 22,
          "end_line": null
        }
      ]
    },
    {
      "id": "LP3",
      "finding_id": "finding-fbba2dc1dad741f9aecf9c67e7f5bbcf",
      "category": "MCP Least Privilege",
      "pattern": null,
      "severity": "MEDIUM",
      "confidence": 0.7,
      "location": {
        "file": "SKILL.md",
        "start_line": 1,
        "end_line": null
      },
      "finding": null,
      "explanation": "Without declared permissions the skill's intent is opaque and cannot be validated.",
      "remediation": "Declare the skill's tool scope: for Claude Code / Agent Skills SKILL.md, list the tools the skill may invoke in the 'allowed-tools' frontmatter field; for MCP server manifests, add a 'permissions' list naming the required capabilities.",
      "code_snippet": null,
      "intent": null,
      "tags": [
        "ASI02"
      ],
      "evidence": {},
      "match_fingerprint": null,
      "occurrences": [
        {
          "file": "SKILL.md",
          "start_line": 1,
          "end_line": null
        }
      ]
    },
    {
      "id": "RA2",
      "finding_id": "finding-1a4547af9b164c52a26a7e5c54e99a9d",
      "category": "Rogue Agent",
      "pattern": "Session Persistence",
      "severity": "MEDIUM",
      "confidence": 0.8,
      "location": {
        "file": "SKILL.md",
        "start_line": 77,
        "end_line": null
      },
      "finding": "create a task for",
      "explanation": "Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.",
      "remediation": "Remove any persistence mechanisms (cron jobs, startup scripts, state files). Skills should not maintain state across sessions without explicit user consent.",
      "code_snippet": "\n## Checklist\n\nClassify first, announce the path, then create a task for each item on\nyour path and complete them in order.\n\n**Spike:**",
      "intent": null,
      "tags": [
        "Rogue Agent"
      ],
      "evidence": {},
      "match_fingerprint": "680dc4a9eeb18f3ef1b2c96700cc547de6e1be0208d714705eec5b450022b40b",
      "occurrences": [
        {
          "file": "SKILL.md",
          "start_line": 77,
          "end_line": null
        }
      ]
    },
    {
      "id": "RA2",
      "finding_id": "finding-3876c77443b84b34a3d71d1642e2866d",
      "category": "Rogue Agent",
      "pattern": "Session Persistence",
      "severity": "MEDIUM",
      "confidence": 0.65,
      "location": {
        "file": "scripts/start-server.sh",
        "start_line": 102,
        "end_line": null
      },
      "finding": "nohup ",
      "explanation": "Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.",
      "remediation": "Remove any persistence mechanisms (cron jobs, startup scripts, state files). Skills should not maintain state across sessions without explicit user consent.",
      "code_snippet": "  FOREGROUND=\"true\"\nfi\n\n# Windows/Git Bash reaps nohup background processes. Auto-foreground when detected.\nif [[ \"$FOREGROUND\" != \"true\" && \"$FORCE_BACKGROUND\" != \"true\" ]]; then\n  if is_windows_like_shell; then\n    FOREGROUND=\"true\"",
      "intent": null,
      "tags": [
        "Rogue Agent"
      ],
      "evidence": {},
      "match_fingerprint": "a3b2c30e52b72d9ed99fed84c020ce072453b04697f4f184c9268de970914edb",
      "occurrences": [
        {
          "file": "scripts/start-server.sh",
          "start_line": 102,
          "end_line": null
        }
      ]
    },
    {
      "id": "RA2",
      "finding_id": "finding-3876c77443b84b34a3d71d1642e2866d",
      "category": "Rogue Agent",
      "pattern": "Session Persistence",
      "severity": "MEDIUM",
      "confidence": 0.65,
      "location": {
        "file": "scripts/start-server.sh",
        "start_line": 179,
        "end_line": null
      },
      "finding": "nohup ",
      "explanation": "Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.",
      "remediation": "Remove any persistence mechanisms (cron jobs, startup scripts, state files). Skills should not maintain state across sessions without explicit user consent.",
      "code_snippet": "  FOREGROUND=\"true\"\nfi\n\n# Windows/Git Bash reaps nohup background processes. Auto-foreground when detected.\nif [[ \"$FOREGROUND\" != \"true\" && \"$FORCE_BACKGROUND\" != \"true\" ]]; then\n  if is_windows_like_shell; then\n    FOREGROUND=\"true\"",
      "intent": null,
      "tags": [
        "Rogue Agent"
      ],
      "evidence": {},
      "match_fingerprint": "a3b2c30e52b72d9ed99fed84c020ce072453b04697f4f184c9268de970914edb",
      "occurrences": [
        {
          "file": "scripts/start-server.sh",
          "start_line": 179,
          "end_line": null
        }
      ]
    },
    {
      "id": "RA2",
      "finding_id": "finding-3876c77443b84b34a3d71d1642e2866d",
      "category": "Rogue Agent",
      "pattern": "Session Persistence",
      "severity": "MEDIUM",
      "confidence": 0.65,
      "location": {
        "file": "scripts/start-server.sh",
        "start_line": 180,
        "end_line": null
      },
      "finding": "nohup ",
      "explanation": "Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.",
      "remediation": "Remove any persistence mechanisms (cron jobs, startup scripts, state files). Skills should not maintain state across sessions without explicit user consent.",
      "code_snippet": "  FOREGROUND=\"true\"\nfi\n\n# Windows/Git Bash reaps nohup background processes. Auto-foreground when detected.\nif [[ \"$FOREGROUND\" != \"true\" && \"$FORCE_BACKGROUND\" != \"true\" ]]; then\n  if is_windows_like_shell; then\n    FOREGROUND=\"true\"",
      "intent": null,
      "tags": [
        "Rogue Agent"
      ],
      "evidence": {},
      "match_fingerprint": "a3b2c30e52b72d9ed99fed84c020ce072453b04697f4f184c9268de970914edb",
      "occurrences": [
        {
          "file": "scripts/start-server.sh",
          "start_line": 180,
          "end_line": null
        }
      ]
    },
    {
      "id": "PE2",
      "finding_id": "finding-f0d043984fa94c9aa0c0abeca3e75158",
      "category": "Privilege Escalation",
      "pattern": "Sudo/Root Execution",
      "severity": "MEDIUM",
      "confidence": 0.8,
      "location": {
        "file": "scripts/start-server.sh",
        "start_line": 142,
        "end_line": null
      },
      "finding": "chmod 600",
      "explanation": "Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.",
      "remediation": "Avoid sudo/root unless strictly required. Prefer least-privilege patterns. If elevation is needed, document the justification and scope.",
      "code_snippet": "  SERVER_ID=\"$(printf '%08x%08x%08x%08x' \"$$\" \"$(date +%s)\" \"${RANDOM:-0}\" \"${RANDOM:-0}\")\"\nfi\nprintf '%s\\n' \"$SERVER_ID\" > \"$SERVER_ID_FILE\"\nchmod 600 \"$SERVER_ID_FILE\" 2>/dev/null || true\n\n# Kill any existing server\nif [[ -f \"$PID_FILE\" ]]; then",
      "intent": null,
      "tags": [
        "Privilege Escalation"
      ],
      "evidence": {},
      "match_fingerprint": "fac387638fbcbc4ed94acb702b3cf68cbc839ee694afdddde6d97a39a3523b73",
      "occurrences": [
        {
          "file": "scripts/start-server.sh",
          "start_line": 142,
          "end_line": null
        }
      ]
    },
    {
      "id": "RA2",
      "finding_id": "finding-3094c5507d084a3f967666139567fe8c",
      "category": "Rogue Agent",
      "pattern": "Session Persistence",
      "severity": "MEDIUM",
      "confidence": 0.65,
      "location": {
        "file": "scripts/start-server.sh",
        "start_line": 179,
        "end_line": null
      },
      "finding": "disown ",
      "explanation": "Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.",
      "remediation": "Remove any persistence mechanisms (cron jobs, startup scripts, state files). Skills should not maintain state across sessions without explicit user consent.",
      "code_snippet": "fi\n\n# Start server, capturing output to log file\n# Use nohup to survive shell exit; disown to remove from job table\nnohup env BRAINSTORM_DIR=\"$SESSION_DIR\" BRAINSTORM_HOST=\"$BIND_HOST\" BRAINSTORM_URL_HOST=\"$URL_HOST\" BRAINSTORM_OWNER_PID=\"$OWNER_PID\" node server.cjs \"--brainstorm-server-id=$SERVER_ID\" > \"$LOG_FILE\" 2>&1 &\nSERVER_PID=$!\ndisown \"$SERVER_PID\" 2>/dev/null",
      "intent": null,
      "tags": [
        "Rogue Agent"
      ],
      "evidence": {},
      "match_fingerprint": "72c100fe5d6d3128aaece0be49962c029cb95703b6df45da1f736801c627186b",
      "occurrences": [
        {
          "file": "scripts/start-server.sh",
          "start_line": 179,
          "end_line": null
        }
      ]
    },
    {
      "id": "RA2",
      "finding_id": "finding-3094c5507d084a3f967666139567fe8c",
      "category": "Rogue Agent",
      "pattern": "Session Persistence",
      "severity": "MEDIUM",
      "confidence": 0.65,
      "location": {
        "file": "scripts/start-server.sh",
        "start_line": 182,
        "end_line": null
      },
      "finding": "disown ",
      "explanation": "Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.",
      "remediation": "Remove any persistence mechanisms (cron jobs, startup scripts, state files). Skills should not maintain state across sessions without explicit user consent.",
      "code_snippet": "fi\n\n# Start server, capturing output to log file\n# Use nohup to survive shell exit; disown to remove from job table\nnohup env BRAINSTORM_DIR=\"$SESSION_DIR\" BRAINSTORM_HOST=\"$BIND_HOST\" BRAINSTORM_URL_HOST=\"$URL_HOST\" BRAINSTORM_OWNER_PID=\"$OWNER_PID\" node server.cjs \"--brainstorm-server-id=$SERVER_ID\" > \"$LOG_FILE\" 2>&1 &\nSERVER_PID=$!\ndisown \"$SERVER_PID\" 2>/dev/null",
      "intent": null,
      "tags": [
        "Rogue Agent"
      ],
      "evidence": {},
      "match_fingerprint": "72c100fe5d6d3128aaece0be49962c029cb95703b6df45da1f736801c627186b",
      "occurrences": [
        {
          "file": "scripts/start-server.sh",
          "start_line": 182,
          "end_line": null
        }
      ]
    }
  ],
  "suppressed_count": 0,
  "suppressed": [],
  "metadata": {
    "has_executable_scripts": true,
    "skillspector_version": "2.10.0",
    "llm_requested": false,
    "llm_available": false,
    "meta_analysis_applied": false,
    "inference_usage": [],
    "filtering_mode": "heuristic"
  },
  "execution_successful": true,
  "analysis_completeness": {
    "total_components": 8,
    "scanned_components": 8,
    "coverage_percent": 100.0,
    "is_complete": false,
    "status": "partial",
    "execution_successful": true,
    "fully_inspected_files": 8,
    "partially_inspected_files": 0,
    "entirely_uninspected_files": 0,
    "ledger_exceptions": [
      {
        "outcome": "partial",
        "phase": "reference_resolution",
        "reason_code": "reference_unresolved",
        "message": "A local path-like reference could not be resolved unambiguously.",
        "path": "SKILL.md",
        "start_line": 97,
        "end_line": 97,
        "fatal": false
      },
      {
        "outcome": "partial",
        "phase": "reference_resolution",
        "reason_code": "reference_unresolved",
        "message": "A local path-like reference could not be resolved unambiguously.",
        "path": "SKILL.md",
        "start_line": 100,
        "end_line": 100,
        "fatal": false
      },
      {
        "outcome": "partial",
        "phase": "reference_resolution",
        "reason_code": "reference_unresolved",
        "message": "A local path-like reference could not be resolved unambiguously.",
        "path": "SKILL.md",
        "start_line": 206,
        "end_line": 206,
        "fatal": false
      },
      {
        "outcome": "partial",
        "phase": "reference_resolution",
        "reason_code": "reference_unresolved",
        "message": "A local path-like reference could not be resolved unambiguously.",
        "path": "SKILL.md",
        "start_line": 245,
        "end_line": 245,
        "fatal": false
      },
      {
        "outcome": "partial",
        "phase": "reference_resolution",
        "reason_code": "reference_unresolved",
        "message": "A local path-like reference could not be resolved unambiguously.",
        "path": "SKILL.md",
        "start_line": 250,
        "end_line": 250,
        "fatal": false
      }
    ],
    "scope_exclusions": [],
    "analyzer_statuses": [
      {
        "analyzer_id": "artifact_integrity",
        "status": "completed",
        "planned_work": 8,
        "completed": 8,
        "partial": 0,
        "skipped": 0,
        "failed": 0,
        "unaccounted": 0
      },
      {
        "analyzer_id": "behavioral_ast",
        "status": "not_applicable",
        "planned_work": 0,
        "completed": 0,
        "partial": 0,
        "skipped": 0,
        "failed": 0,
        "unaccounted": 0,
        "reason_code": "no_applicable_files",
        "message": "No files matched this analyzer's applicability contract."
      },
      {
        "analyzer_id": "behavioral_taint_tracking",
        "status": "not_applicable",
        "planned_work": 0,
        "completed": 0,
        "partial": 0,
        "skipped": 0,
        "failed": 0,
        "unaccounted": 0,
        "reason_code": "no_applicable_files",
        "message": "No files matched this analyzer's applicability contract."
      },
      {
        "analyzer_id": "mcp_least_privilege",
        "status": "completed",
        "planned_work": 4,
        "completed": 4,
        "partial": 0,
        "skipped": 0,
        "failed": 0,
        "unaccounted": 0
      },
      {
        "analyzer_id": "mcp_rug_pull",
        "status": "completed",
        "planned_work": 8,
        "completed": 8,
        "partial": 0,
        "skipped": 0,
        "failed": 0,
        "unaccounted": 0
      },
      {
        "analyzer_id": "mcp_tool_poisoning",
        "status": "completed",
        "planned_work": 1,
        "completed": 1,
        "partial": 0,
        "skipped": 0,
        "failed": 0,
        "unaccounted": 0
      },
      {
        "analyzer_id": "meta_analyzer",
        "status": "disabled",
        "planned_work": 0,
        "completed": 0,
        "partial": 0,
        "skipped": 0,
        "failed": 0,
        "unaccounted": 0,
        "reason_code": "disabled_by_configuration",
        "message": "Analyzer was disabled by the requested configuration."
      },
      {
        "analyzer_id": "static_patterns_agent_snooping",
        "status": "completed",
        "planned_work": 8,
        "completed": 8,
        "partial": 0,
        "skipped": 0,
        "failed": 0,
        "unaccounted": 0
      },
      {
        "analyzer_id": "static_patterns_anti_refusal",
        "status": "completed",
        "planned_work": 8,
        "completed": 8,
        "partial": 0,
        "skipped": 0,
        "failed": 0,
        "unaccounted": 0
      },
      {
        "analyzer_id": "static_patterns_data_exfiltration",
        "status": "completed",
        "planned_work": 8,
        "completed": 8,
        "partial": 0,
        "skipped": 0,
        "failed": 0,
        "unaccounted": 0
      },
      {
        "analyzer_id": "static_patterns_deserialization",
        "status": "completed",
        "planned_work": 8,
        "completed": 8,
        "partial": 0,
        "skipped": 0,
        "failed": 0,
        "unaccounted": 0
      },
      {
        "analyzer_id": "static_patterns_excessive_agency",
        "status": "completed",
        "planned_work": 8,
        "completed": 8,
        "partial": 0,
        "skipped": 0,
        "failed": 0,
        "unaccounted": 0
      },
      {
        "analyzer_id": "static_patterns_harmful_content",
        "status": "completed",
        "planned_work": 8,
        "completed": 8,
        "partial": 0,
        "skipped": 0,
        "failed": 0,
        "unaccounted": 0
      },
      {
        "analyzer_id": "static_patterns_memory_poisoning",
        "status": "completed",
        "planned_work": 8,
        "completed": 8,
        "partial": 0,
        "skipped": 0,
        "failed": 0,
        "unaccounted": 0
      },
      {
        "analyzer_id": "static_patterns_output_handling",
        "status": "completed",
        "planned_work": 8,
        "completed": 8,
        "partial": 0,
        "skipped": 0,
        "failed": 0,
        "unaccounted": 0
      },
      {
        "analyzer_id": "static_patterns_privilege_escalation",
        "status": "completed",
        "planned_work": 8,
        "completed": 8,
        "partial": 0,
        "skipped": 0,
        "failed": 0,
        "unaccounted": 0
      },
      {
        "analyzer_id": "static_patterns_prompt_injection",
        "status": "completed",
        "planned_work": 8,
        "completed": 8,
        "partial": 0,
        "skipped": 0,
        "failed": 0,
        "unaccounted": 0
      },
      {
        "analyzer_id": "static_patterns_rogue_agent",
        "status": "completed",
        "planned_work": 8,
        "completed": 8,
        "partial": 0,
        "skipped": 0,
        "failed": 0,
        "unaccounted": 0
      },
      {
        "analyzer_id": "static_patterns_ssrf",
        "status": "completed",
        "planned_work": 8,
        "completed": 8,
        "partial": 0,
        "skipped": 0,
        "failed": 0,
        "unaccounted": 0
      },
      {
        "analyzer_id": "static_patterns_supply_chain",
        "status": "completed",
        "planned_work": 8,
        "completed": 8,
        "partial": 0,
        "skipped": 0,
        "failed": 0,
        "unaccounted": 0
      },
      {
        "analyzer_id": "static_patterns_system_prompt_leakage",
        "status": "completed",
        "planned_work": 8,
        "completed": 8,
        "partial": 0,
        "skipped": 0,
        "failed": 0,
        "unaccounted": 0
      },
      {
        "analyzer_id": "static_patterns_tool_misuse",
        "status": "completed",
        "planned_work": 8,
        "completed": 8,
        "partial": 0,
        "skipped": 0,
        "failed": 0,
        "unaccounted": 0
      },
      {
        "analyzer_id": "static_yara",
        "status": "completed",
        "planned_work": 8,
        "completed": 8,
        "partial": 0,
        "skipped": 0,
        "failed": 0,
        "unaccounted": 0
      }
    ],
    "references": [
      {
        "source_path": "SKILL.md",
        "line": 97,
        "column": 61,
        "evidence": "3. **Ask clarifying questions** — one at a time, understand purpose/constraints/success criteria",
        "target_path": null,
        "status": "missing",
        "disposition": "partial"
      },
      {
        "source_path": "SKILL.md",
        "line": 100,
        "column": 36,
        "evidence": "6. **Write design doc** — save to `docs/superpowers/specs/YYYY-MM-DD-<topic>-design.md` and commit",
        "target_path": null,
        "status": "missing",
        "disposition": "partial"
      },
      {
        "source_path": "SKILL.md",
        "line": 206,
        "column": 41,
        "evidence": "- Write the validated design (spec) to `docs/superpowers/specs/YYYY-MM-DD-<topic>-design.md`",
        "target_path": null,
        "status": "missing",
        "disposition": "partial"
      },
      {
        "source_path": "SKILL.md",
        "line": 245,
        "column": 111,
        "evidence": "- **Use the terminal** for content that is text — requirements questions, conceptual choices, tradeoff lists, A/B/C/D text options, scope decisions",
        "target_path": null,
        "status": "missing",
        "disposition": "partial"
      },
      {
        "source_path": "SKILL.md",
        "line": 250,
        "column": 2,
        "evidence": "`skills/brainstorming/visual-companion.md`",
        "target_path": null,
        "status": "missing",
        "disposition": "partial"
      }
    ],
    "limitations": [],
    "findings_before_filtering": 10,
    "findings_after_filtering": 10
  }
}
