{
  "schema_version": 1,
  "review_type": "local Codex raw-artifact review",
  "reviewed_at": "2026-09-30",
  "repository": "https://github.com/inclusionAI/ling-cookbook",
  "commit": "c4a519f51bc238acefef009f957540d91ddd41fd",
  "scope": [
    "resources/recommended-skills/ling-ui-design",
    "resources/recommended-skills/image-to-editable-ppt"
  ],
  "recommendation": {
    "decision": "Do not install or execute either package unchanged; hold adoption pending hardening and a project-scoped pilot.",
    "rationale": "The raw source contains useful defensive checks and ordinary explanations for several scanner flags, but still trusts configurable network destinations, remote image URLs, local plans and output paths. The PPT workflow can upload arbitrary local file bytes selected by a plan before checking that the source is an image. No malicious intent was established; absence of a demonstrated exploit is not a safety clearance.",
    "per_skill": {
      "ling-ui-design": "Read workflow ideas as reference. Before execution, constrain endpoint and returned URL destinations, disable ambient network credentials, limit image and response sizes, contain manifest inputs and all outputs, and enforce host tool permissions.",
      "image-to-editable-ppt": "Read workflow ideas as reference. Before execution, add source containment and image validation before upload, harden network and output scope, validate scene and ledger inputs, use a safe OOXML serializer, and preserve existing decks atomically."
    }
  },
  "provenance": {
    "reviewer": "Codex assistant in the current session",
    "method": "Read every raw file in the two exact directories, trace data and control flow manually, and adjudicate every reported static issue instance. Read-only inspection; no imports, tests, installer, helper, API call, browser, or renderer from these packages was executed.",
    "skillspector_llm_scan": false,
    "external_inference_provider_used": false,
    "openrouter_transmission": "None: no raw artifact, excerpts, or findings were sent to an external inference provider.",
    "reviewer_model": "Not separately recorded by the review tooling",
    "reviewer_reasoning_setting": "Not separately recorded by the review tooling",
    "reviewer_tokens": null,
    "reviewer_cost": null,
    "static_baseline": "NVIDIA SkillSpector 2.12.0, --no-llm, upstream revision 2226747e4ca97198bb82faf5085b8a75f2e1dc02. Both exact-directory reports score 100 / CRITICAL / DO_NOT_INSTALL. Those scanner results remain unchanged.",
    "static_llm_provenance_note": "Configured model names present in static metadata are configuration receipts. llm_requested=false, llm_available=false and inference_usage=[] establish that no SkillSpector LLM analysis ran."
  },
  "coverage": {
    "raw_files_read": 47,
    "raw_bytes_read": 313856,
    "raw_file_accounting": "Complete for the two exact directories; this is reading coverage, not execution coverage or proof of complete semantic understanding.",
    "skills": [
      {
        "name": "ling-ui-design",
        "files_read": 27,
        "bytes_read": 153810,
        "static_fully_inspected_components": 25,
        "static_total_components": 27,
        "static_coverage_percent": 92.6,
        "static_status": "partial"
      },
      {
        "name": "image-to-editable-ppt",
        "files_read": 20,
        "bytes_read": 160046,
        "static_fully_inspected_components": 18,
        "static_total_components": 20,
        "static_coverage_percent": 90.0,
        "static_status": "partial"
      }
    ],
    "static_limits": "Each static report records a bounded parser limit in SKILL.md and dependency inspection output limits. Runtime-generated path references also produce missing-reference notices. Local reading supplements these gaps but does not rerun or reclassify the scanner score."
  },
  "findings": [
    {
      "id": "LOCAL-01",
      "severity": "HIGH",
      "skills": [
        "ling-ui-design",
        "image-to-editable-ppt"
      ],
      "title": "Configurable API destinations receive credentials and source data",
      "observation": "UI helpers accept an arbitrary API base and POST the bearer key plus generation prompt or selected image. PPT configuration rejects placeholder domains and query/fragment strings but allows arbitrary HTTP or HTTPS hosts, including private destinations. There is no required HTTPS policy, approved-host binding, or validation of redirect destinations. Normal bearer authentication to an agreed provider is intended; a mistaken or attacker-influenced destination changes who receives the key and input.",
      "conditions": "A caller, modified configuration, or agent acting on untrusted directions chooses an unauthorized base URL. Redirect authorization behavior was not executed or proven to leak this bearer key; the absence of a destination policy remains material.",
      "remediation": "Bind each run to an explicitly authorized HTTPS origin; reject credentials in URLs and private/loopback/link-local addresses; restrict and revalidate redirects. Keep provider credentials separate from download clients and make the exact image and endpoint reviewable before upload.",
      "sources": [
        {
          "skill": "ling-ui-design",
          "file": "scripts/generate_image.py",
          "lines": [
            39,
            56
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/scripts/generate_image.py#L39-L56"
        },
        {
          "skill": "ling-ui-design",
          "file": "scripts/decompose_layers.py",
          "lines": [
            184,
            205
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/scripts/decompose_layers.py#L184-L205"
        },
        {
          "skill": "ling-ui-design",
          "file": "scripts/_common.py",
          "lines": [
            270,
            295
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/scripts/_common.py#L270-L295"
        },
        {
          "skill": "image-to-editable-ppt",
          "file": "scripts/api_services/image_decomposer.py",
          "lines": [
            102,
            143
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/api_services/image_decomposer.py#L102-L143"
        },
        {
          "skill": "image-to-editable-ppt",
          "file": "scripts/api_services/image_decomposer.py",
          "lines": [
            296,
            307
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/api_services/image_decomposer.py#L296-L307"
        }
      ]
    },
    {
      "id": "LOCAL-02",
      "severity": "HIGH",
      "skills": [
        "ling-ui-design",
        "image-to-editable-ppt"
      ],
      "title": "Source and model-returned URLs use ambient Requests networking",
      "observation": "Both download helpers retrieve URLs chosen by a remote response without scheme, hostname, IP, or redirect constraints. PPT also retrieves a caller-supplied source URL and then uploads its bytes. Requests is used through its default top-level functions, without an isolated Session or trust_env=False. Host-matched netrc credentials can therefore be applied, and environment proxy configuration can affect routing. The API bearer header is not explicitly copied into layer GET calls; that does not disable Requests' ambient authentication.",
      "conditions": "An untrusted source or model reply supplies a URL reachable from the reviewer's machine. Netrc credential disclosure is conditional on matching ambient credentials or applicable defaults; private-network requests are conditional on local reachability. No private endpoint or real credential was tested.",
      "remediation": "Use dedicated Sessions with trust_env=False and explicit authentication only for the approved API origin. Permit only approved HTTPS asset hosts, reject private IP ranges after DNS resolution, and recheck every redirect. Apply controls to both initial source downloads and returned layer downloads.",
      "sources": [
        {
          "skill": "ling-ui-design",
          "file": "scripts/_common.py",
          "lines": [
            328,
            346
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/scripts/_common.py#L328-L346"
        },
        {
          "skill": "image-to-editable-ppt",
          "file": "scripts/api_services/image_decomposer.py",
          "lines": [
            248,
            264
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/api_services/image_decomposer.py#L248-L264"
        },
        {
          "skill": "image-to-editable-ppt",
          "file": "scripts/api_services/image_decomposer.py",
          "lines": [
            383,
            397
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/api_services/image_decomposer.py#L383-L397"
        }
      ],
      "supporting_documentation": [
        "https://requests.readthedocs.io/en/latest/user/authentication/#netrc-authentication"
      ]
    },
    {
      "id": "LOCAL-03",
      "severity": "HIGH",
      "skills": [
        "image-to-editable-ppt"
      ],
      "title": "A local plan can select arbitrary file bytes for upload before image validation",
      "observation": "When --src is omitted, reuse_source accepts an existing plan.src or plan.source path without containment or image validation. run_node passes that source into the API call immediately. _read_image_bytes reads any existing file and assigns image/png to unrecognized extensions; the multipart POST sends those bytes. Checking returned layers as images happens after the source upload. A MIME label does not establish that the input is an image.",
      "conditions": "An attacker-controlled case plan points at a readable local file, and the user or agent runs decomposition on that case with valid API configuration. This is a source-level data movement path, not a claim that a particular provider accepts or renders non-image content: the bytes have already been transmitted when server validation occurs.",
      "remediation": "Treat plans as untrusted data. Require explicit approved source selection, resolve it inside the authorized input directory, block symlink escapes, limit bytes and dimensions, and decode/verify the image before any network action. Never let a remembered plan path enlarge the input permission scope.",
      "sources": [
        {
          "skill": "image-to-editable-ppt",
          "file": "scripts/decompose_iterative.py",
          "lines": [
            526,
            539
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/decompose_iterative.py#L526-L539"
        },
        {
          "skill": "image-to-editable-ppt",
          "file": "scripts/decompose_iterative.py",
          "lines": [
            565,
            574
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/decompose_iterative.py#L565-L574"
        },
        {
          "skill": "image-to-editable-ppt",
          "file": "scripts/decompose_iterative.py",
          "lines": [
            975,
            979
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/decompose_iterative.py#L975-L979"
        },
        {
          "skill": "image-to-editable-ppt",
          "file": "scripts/api_services/image_decomposer.py",
          "lines": [
            241,
            264
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/api_services/image_decomposer.py#L241-L264"
        },
        {
          "skill": "image-to-editable-ppt",
          "file": "scripts/api_services/image_decomposer.py",
          "lines": [
            296,
            307
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/api_services/image_decomposer.py#L296-L307"
        }
      ]
    },
    {
      "id": "LOCAL-04",
      "severity": "MEDIUM",
      "skills": [
        "ling-ui-design",
        "image-to-editable-ppt"
      ],
      "title": "Output selection can overwrite or remove files outside the authorized project",
      "observation": "UI artifact_path resolves symlinks and rejects paths inside the installed skill, but accepts any other filesystem location. Decomposition and cropping remove selected prior layer/crop files and manifests in the chosen output directory. PPT scene/output/compiled-spec paths are resolved without case containment; crop prefixes and UI viewport names are not restricted to safe basename tokens. PPT's native builder removes an existing output before writing its replacement ZIP, so a later write failure can destroy the previous deck. These are selected-file operations, not an indiscriminate recursive deletion routine.",
      "conditions": "An unsafe caller argument, path-bearing untrusted input, symlink change, or permission mistake selects another writable location. Ordinary CLI use in an isolated case can be safe, but natural-language instructions alone do not enforce that boundary.",
      "remediation": "Contain all outputs in an approved project/case root, reject absolute and traversal-bearing names, and validate after resolution. Use unique staging files and atomic replacement only after validation; require an intentional replacement policy and preserve recoverable prior outputs.",
      "sources": [
        {
          "skill": "ling-ui-design",
          "file": "scripts/_common.py",
          "lines": [
            21,
            29
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/scripts/_common.py#L21-L29"
        },
        {
          "skill": "ling-ui-design",
          "file": "scripts/decompose_layers.py",
          "lines": [
            86,
            92
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/scripts/decompose_layers.py#L86-L92"
        },
        {
          "skill": "ling-ui-design",
          "file": "scripts/crop_elements.py",
          "lines": [
            228,
            231
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/scripts/crop_elements.py#L228-L231"
        },
        {
          "skill": "ling-ui-design",
          "file": "scripts/capture_page.py",
          "lines": [
            15,
            24
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/scripts/capture_page.py#L15-L24"
        },
        {
          "skill": "ling-ui-design",
          "file": "scripts/capture_page.py",
          "lines": [
            148,
            149
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/scripts/capture_page.py#L148-L149"
        },
        {
          "skill": "image-to-editable-ppt",
          "file": "scripts/scene_to_pptx.py",
          "lines": [
            25,
            44
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/scene_to_pptx.py#L25-L44"
        },
        {
          "skill": "image-to-editable-ppt",
          "file": "scripts/crop_alpha_assets.py",
          "lines": [
            123,
            147
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/crop_alpha_assets.py#L123-L147"
        },
        {
          "skill": "image-to-editable-ppt",
          "file": "scripts/pptx_native.py",
          "lines": [
            390,
            411
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/pptx_native.py#L390-L411"
        }
      ]
    },
    {
      "id": "LOCAL-05",
      "severity": "HIGH",
      "skills": [
        "ling-ui-design",
        "image-to-editable-ppt"
      ],
      "title": "Not every local asset input receives the scene compiler's containment check",
      "observation": "UI crop manifests supply layer filenames joined directly to the layer directory and an optional source path loaded directly. An absolute or traversal path can select a different local image. PPT scene_dom._safe_asset correctly resolves assets inside the case, including symlink containment. Direct use of pptx_native.build or its CLI bypasses that compiler: add_img joins arbitrary spec paths and later embeds raw file bytes, even assigning a PNG extension to an unrecognized source type. A deck can therefore contain unintended local file content when the direct builder consumes an untrusted spec.",
      "conditions": "The manifest or direct native spec is untrusted and the selected file is readable. The documented scene_to_pptx path contains asset references; the direct-builder risk is explicitly scoped to the bypass path. UI image loading narrows its risk to image-compatible inputs and is not itself a general byte-upload primitive.",
      "remediation": "Apply the same resolved-case containment and image verification at the final reader/builder boundary, regardless of which wrapper calls it. Validate manifests, restrict names to bundled approved assets, and do not share generated decks before checking their embedded media.",
      "sources": [
        {
          "skill": "ling-ui-design",
          "file": "scripts/crop_elements.py",
          "lines": [
            164,
            175
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/scripts/crop_elements.py#L164-L175"
        },
        {
          "skill": "ling-ui-design",
          "file": "scripts/crop_elements.py",
          "lines": [
            212,
            219
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/scripts/crop_elements.py#L212-L219"
        },
        {
          "skill": "ling-ui-design",
          "file": "scripts/crop_elements.py",
          "lines": [
            287,
            292
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/scripts/crop_elements.py#L287-L292"
        },
        {
          "skill": "image-to-editable-ppt",
          "file": "scripts/scene_dom.py",
          "lines": [
            69,
            79
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/scene_dom.py#L69-L79"
        },
        {
          "skill": "image-to-editable-ppt",
          "file": "scripts/pptx_native.py",
          "lines": [
            270,
            287
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/pptx_native.py#L270-L287"
        },
        {
          "skill": "image-to-editable-ppt",
          "file": "scripts/pptx_native.py",
          "lines": [
            377,
            379
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/pptx_native.py#L377-L379"
        }
      ]
    },
    {
      "id": "LOCAL-06",
      "severity": "MEDIUM",
      "skills": [
        "image-to-editable-ppt"
      ],
      "title": "Scene strings are interpolated into OOXML without complete attribute validation",
      "observation": "The scene compiler passes arbitrary shape strings into the native spec. The native XML writer interpolates preset geometry directly, and esc escapes ampersands and angle brackets but leaves quotes unchanged while also being used in attribute values for fonts and names. Untrusted strings can produce malformed XML or inject attributes/markup. The pre-write parser catches malformed XML, but well-formedness alone does not prove DrawingML schema validity or reject all unwanted markup.",
      "conditions": "An untrusted scene/spec supplies hostile shape, font or name strings. No generated payload was executed, no Office exploit was demonstrated, and this finding does not claim macros or remote code execution.",
      "remediation": "Build XML with an XML library that distinguishes text and attributes, allowlist supported preset geometry and enum fields, validate font/name lengths, and enforce the intended OOXML schema before publishing or opening a deck.",
      "sources": [
        {
          "skill": "image-to-editable-ppt",
          "file": "scripts/scene_dom.py",
          "lines": [
            249,
            258
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/scene_dom.py#L249-L258"
        },
        {
          "skill": "image-to-editable-ppt",
          "file": "scripts/pptx_native.py",
          "lines": [
            51,
            52
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/pptx_native.py#L51-L52"
        },
        {
          "skill": "image-to-editable-ppt",
          "file": "scripts/pptx_native.py",
          "lines": [
            83,
            90
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/pptx_native.py#L83-L90"
        },
        {
          "skill": "image-to-editable-ppt",
          "file": "scripts/pptx_native.py",
          "lines": [
            155,
            178
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/pptx_native.py#L155-L178"
        },
        {
          "skill": "image-to-editable-ppt",
          "file": "scripts/pptx_native.py",
          "lines": [
            184,
            199
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/pptx_native.py#L184-L199"
        },
        {
          "skill": "image-to-editable-ppt",
          "file": "scripts/pptx_native.py",
          "lines": [
            381,
            388
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/pptx_native.py#L381-L388"
        }
      ]
    },
    {
      "id": "LOCAL-07",
      "severity": "MEDIUM",
      "skills": [
        "ling-ui-design",
        "image-to-editable-ppt"
      ],
      "title": "Network, image and structured-input resource budgets are incomplete",
      "observation": "HTTP JSON/content and base64 images are buffered without byte caps. Returned layer counts are not consistently rejected when they exceed the requested plan, and image verification does not impose an explicit application pixel budget. PPT ledger traversal recurses through unvalidated child/parent references without cycle/depth limits; scene groups also recurse without depth limits. ZIP validation reads parts without package count or decompressed-size limits. Network timeout settings and renderer time budgets are useful controls, but do not impose a complete end-to-end memory, byte, call, retry, or cost budget.",
      "conditions": "Large or adversarial responses, image dimensions, ledger/scene structures, or decks can consume excessive memory/time or trigger repeated API work. Pillow or installed parser defaults may offer some protection; no dependency-specific effective runtime limit was measured.",
      "remediation": "Stream downloads with strict byte and redirect limits; enforce supported image dimensions, response layer counts, JSON depth/string sizes, ZIP expansion limits, and a total runtime/call budget. Validate ledger schemas and acyclic bounded refinement graphs before traversal.",
      "sources": [
        {
          "skill": "ling-ui-design",
          "file": "scripts/_common.py",
          "lines": [
            293,
            314
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/scripts/_common.py#L293-L314"
        },
        {
          "skill": "ling-ui-design",
          "file": "scripts/_common.py",
          "lines": [
            328,
            357
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/scripts/_common.py#L328-L357"
        },
        {
          "skill": "image-to-editable-ppt",
          "file": "scripts/api_services/image_decomposer.py",
          "lines": [
            241,
            264
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/api_services/image_decomposer.py#L241-L264"
        },
        {
          "skill": "image-to-editable-ppt",
          "file": "scripts/api_services/image_decomposer.py",
          "lines": [
            309,
            378
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/api_services/image_decomposer.py#L309-L378"
        },
        {
          "skill": "image-to-editable-ppt",
          "file": "scripts/decompose_iterative.py",
          "lines": [
            812,
            861
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/decompose_iterative.py#L812-L861"
        },
        {
          "skill": "image-to-editable-ppt",
          "file": "scripts/scene_dom.py",
          "lines": [
            95,
            113
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/scene_dom.py#L95-L113"
        },
        {
          "skill": "image-to-editable-ppt",
          "file": "scripts/validate_pptx.py",
          "lines": [
            29,
            63
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/validate_pptx.py#L29-L63"
        }
      ]
    },
    {
      "id": "LOCAL-08",
      "severity": "MEDIUM",
      "skills": [
        "ling-ui-design",
        "image-to-editable-ppt"
      ],
      "title": "Open dependency constraints leave the resolved environment unverified",
      "observation": "UI optional helpers/dev dependencies and build requirements use lower bounds; PPT requirements use Pillow>=10.0, numpy>=1.26 and requests>=2.31. No locked, hashed resolved environment is bundled in these exact folders. The scanner's historical advisory matches cannot establish which version would be installed or whether that version is vulnerable. Browser and native rendering binaries are additional external runtime dependencies.",
      "conditions": "An installation resolves a vulnerable, changed, or otherwise unintended package/binary. Nothing was installed, so dependency state is unknown rather than confirmed vulnerable.",
      "remediation": "Resolve in an isolated environment, lock exact versions and hashes, audit the resolved set and renderer/browser versions against current primary advisories, and rerun checks after updates. Do not treat an aggregate advisory list as proof of an installed vulnerability.",
      "sources": [
        {
          "skill": "ling-ui-design",
          "file": "pyproject.toml",
          "lines": [
            1,
            18
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/pyproject.toml#L1-L18"
        },
        {
          "skill": "image-to-editable-ppt",
          "file": "requirements.txt",
          "lines": [
            1,
            3
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/requirements.txt#L1-L3"
        },
        {
          "skill": "image-to-editable-ppt",
          "file": "scripts/render_pptx.py",
          "lines": [
            131,
            190
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/render_pptx.py#L131-L190"
        }
      ]
    },
    {
      "id": "LOCAL-09",
      "severity": "MEDIUM",
      "skills": [
        "ling-ui-design",
        "image-to-editable-ppt"
      ],
      "title": "Images, plans, model replies and source files need an explicit data/authority boundary",
      "observation": "UI instructions use the user's brief as the authority for copy and behavior, which is useful. Both workflows nevertheless consume visual references, plans, source files and model metadata that may include attacker-controlled text. PPT automatically discovers a decomposition plan, incorporates its prompt and paths, and places remote revised_prompt content into reports. Neither skill clearly states that such material cannot change host permissions, reveal hidden instructions, approve network use, or authorize new tool actions. Ordinary prompt construction is not hidden-prompt extraction, but untrusted input still needs isolation.",
      "conditions": "An agent promotes text found in an image, plan, page, repository file or model reply into operational authority. No actual attack response was generated or evaluated; this is a workflow and permission-boundary gap.",
      "remediation": "Label these inputs as untrusted data, bind file/network/tool permissions outside the content, and use validated schemas and explicit user intent for actions. Ignore embedded requests to change policy, disclose secrets or execute unrelated tools. Preserve the brief hierarchy and verify outputs independently.",
      "sources": [
        {
          "skill": "ling-ui-design",
          "file": "SKILL.md",
          "lines": [
            15,
            27
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/SKILL.md#L15-L27"
        },
        {
          "skill": "ling-ui-design",
          "file": "SKILL.md",
          "lines": [
            105,
            124
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/SKILL.md#L105-L124"
        },
        {
          "skill": "image-to-editable-ppt",
          "file": "scripts/decompose_iterative.py",
          "lines": [
            549,
            560
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/decompose_iterative.py#L549-L560"
        },
        {
          "skill": "image-to-editable-ppt",
          "file": "scripts/api_services/image_decomposer.py",
          "lines": [
            423,
            457
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/api_services/image_decomposer.py#L423-L457"
        },
        {
          "skill": "image-to-editable-ppt",
          "file": "scripts/api_services/image_decomposer.py",
          "lines": [
            541,
            548
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/api_services/image_decomposer.py#L541-L548"
        }
      ],
      "supporting_documentation": [
        "https://cheatsheetseries.owasp.org/cheatsheets/LLM_Prompt_Injection_Prevention_Cheat_Sheet.html"
      ]
    },
    {
      "id": "LOCAL-10",
      "severity": "MEDIUM",
      "skills": [
        "ling-ui-design",
        "image-to-editable-ppt"
      ],
      "title": "Browser and native renderer actions require host-enforced tool scope",
      "observation": "Neither skill declares an allowed-tools/permission boundary. UI capture_page accepts arbitrary remote or file URLs and launches a new headless browser. PPT render_pptx launches qlmanage, LibreOffice and pdftoppm using argument lists, shell=False by default, isolated staging/profile state and bounded waits. These are intended rendering operations, not a demonstrated shell-injection path, but can access input files, contact remote page assets, and invoke native parsers. A skill's instruction to screenshot or render cannot grant the host user's authorization.",
      "conditions": "The host runs a capture/renderer outside its approved project/tool scope or opens attacker-supplied content with unverified binaries. Existing user/browser approval must be determined by the host, not by the skill or a plan.",
      "remediation": "Enforce per-run tool and URL scope in the host; restrict capture to authorized development origins and contained artifacts. Use isolated browsers/renderers with verified versions and explicit native-app approval where required. Retain the subprocess argument-list and timeout protections.",
      "sources": [
        {
          "skill": "ling-ui-design",
          "file": "SKILL.md",
          "lines": [
            1,
            9
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/SKILL.md#L1-L9"
        },
        {
          "skill": "ling-ui-design",
          "file": "scripts/capture_page.py",
          "lines": [
            27,
            51
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/scripts/capture_page.py#L27-L51"
        },
        {
          "skill": "ling-ui-design",
          "file": "scripts/capture_page.py",
          "lines": [
            116,
            127
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/scripts/capture_page.py#L116-L127"
        },
        {
          "skill": "image-to-editable-ppt",
          "file": "SKILL.md",
          "lines": [
            1,
            9
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/SKILL.md#L1-L9"
        },
        {
          "skill": "image-to-editable-ppt",
          "file": "scripts/render_pptx.py",
          "lines": [
            91,
            107
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/render_pptx.py#L91-L107"
        },
        {
          "skill": "image-to-editable-ppt",
          "file": "scripts/render_pptx.py",
          "lines": [
            146,
            220
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/render_pptx.py#L146-L220"
        }
      ]
    },
    {
      "id": "LOCAL-11",
      "severity": "LOW",
      "skills": [
        "ling-ui-design",
        "image-to-editable-ppt"
      ],
      "title": "Local credential and run-artifact privacy needs operational controls",
      "observation": "The .env references are intended local credential configuration, not commands to search unrelated credential stores. UI setup uses exclusive creation/private permissions and the installer excludes .env from copy mode. PPT reads one known skill-root .env without creating or validating its permissions. Run manifests/logs retain prompts, source/output paths and server-supplied messages; these may be sensitive even when the API key is not intentionally printed. A symlink-based installation remains tied to mutable source content.",
      "conditions": "An installed skill directory is served/shared, has overly broad permissions, is modified after review, or run artifacts are published without inspection. No real secret or public leak was observed.",
      "remediation": "Keep credential files outside served/shared trees with restricted permissions, preserve the installer's exclusion rules, inspect/redact artifacts before publication, and record/recheck installed content hashes. Avoid treating a mutable symlink as a permanently pinned installation.",
      "sources": [
        {
          "skill": "ling-ui-design",
          "file": "scripts/_common.py",
          "lines": [
            73,
            95
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/scripts/_common.py#L73-L95"
        },
        {
          "skill": "ling-ui-design",
          "file": "scripts/install.py",
          "lines": [
            55,
            106
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/scripts/install.py#L55-L106"
        },
        {
          "skill": "image-to-editable-ppt",
          "file": "scripts/api_services/image_decomposer.py",
          "lines": [
            119,
            143
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/api_services/image_decomposer.py#L119-L143"
        },
        {
          "skill": "image-to-editable-ppt",
          "file": "scripts/api_services/image_decomposer.py",
          "lines": [
            460,
            506
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/api_services/image_decomposer.py#L460-L506"
        }
      ]
    }
  ],
  "positive_controls": [
    {
      "description": "UI validates selected input images before constructing upload data and checks returned image bytes; it rejects output paths inside the skill, including resolved symlink aliases. These checks do not impose full input/output project containment or byte limits.",
      "sources": [
        {
          "skill": "ling-ui-design",
          "file": "scripts/_common.py",
          "lines": [
            21,
            29
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/scripts/_common.py#L21-L29"
        },
        {
          "skill": "ling-ui-design",
          "file": "scripts/_common.py",
          "lines": [
            230,
            254
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/scripts/_common.py#L230-L254"
        },
        {
          "skill": "ling-ui-design",
          "file": "scripts/_common.py",
          "lines": [
            350,
            359
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/scripts/_common.py#L350-L359"
        }
      ]
    },
    {
      "description": "PPT's layer publisher verifies and loads all staged PNGs before touching existing selected outputs, preserves unrelated files, and attempts rollback on ordinary replacement exceptions. Its own documentation excludes process termination and concurrent readers.",
      "sources": [
        {
          "skill": "image-to-editable-ppt",
          "file": "scripts/api_services/artifact_store.py",
          "lines": [
            10,
            54
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/api_services/artifact_store.py#L10-L54"
        }
      ]
    },
    {
      "description": "The normal PPT scene compiler contains resolved asset paths inside the case, validates finite positive canvas/bboxes, and rejects unsupported node types. This is a real protection that the direct native builder does not inherit automatically.",
      "sources": [
        {
          "skill": "image-to-editable-ppt",
          "file": "scripts/scene_dom.py",
          "lines": [
            35,
            113
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/scene_dom.py#L35-L113"
        }
      ]
    },
    {
      "description": "Render subprocesses use argument lists, new process sessions and timed artifact polling; LibreOffice uses an isolated temporary profile. No shell=True, eval/exec, hidden system-prompt extraction, broad credential-store sweep, or persistence installation was identified in the reviewed files. This is an observation about the inspected source, not proof against all attacks.",
      "sources": [
        {
          "skill": "image-to-editable-ppt",
          "file": "scripts/render_pptx.py",
          "lines": [
            48,
            107
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/render_pptx.py#L48-L107"
        },
        {
          "skill": "image-to-editable-ppt",
          "file": "scripts/render_pptx.py",
          "lines": [
            163,
            190
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/render_pptx.py#L163-L190"
        }
      ]
    },
    {
      "description": "UI tests explicitly cover credential-file exclusion/private creation, key-safe output, image validation and skill-directory output protection. They were read but not run. There are no bundled tests in the exact PPT skill directory.",
      "sources": [
        {
          "skill": "ling-ui-design",
          "file": "tests/test_helpers.py",
          "lines": [
            482,
            596
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/tests/test_helpers.py#L482-L596"
        },
        {
          "skill": "ling-ui-design",
          "file": "tests/test_output_paths.py",
          "lines": [
            1,
            108
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/tests/test_output_paths.py#L1-L108"
        },
        {
          "skill": "ling-ui-design",
          "file": "tests/test_shared_config.py",
          "lines": [
            211,
            234
          ],
          "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/tests/test_shared_config.py#L211-L234"
        }
      ]
    }
  ],
  "static_issue_classes": {
    "PE3": {
      "classification": "Expected local credential configuration or benign test/documentation match; not evidence of credential theft by itself",
      "rationale": "Read one documented skill-local .env, configure its creation, omit it from copy installation, or exercise fake test fixtures/ignore rules. Runtime credential forwarding to an untrusted base is separately material in LOCAL-01 and LOCAL-02."
    },
    "P6": {
      "classification": "False positive for hidden-prompt extraction",
      "rationale": "UI returns the supplied decomposition prompt or its public DEFAULT_PROMPT; PPT builds a layer prompt from a plan. Neither matched function retrieves the agent's hidden system/developer instructions. Untrusted plan/prompt authority is assessed in LOCAL-09."
    },
    "E2": {
      "classification": "Benign test-fixture environment handling; no matched network exfiltration",
      "rationale": "Both instances are UI tests: one clears LING_UI_DESIGN_ variables, the other copies environment state for a local Python fixture subprocess. Actual runtime Requests ambient credential risk is assessed separately in LOCAL-02."
    },
    "E1": {
      "classification": "Documented default API domain or fixture, with destination trust unresolved",
      "rationale": "The Novita base URL is an intended provider configuration, not proof of a malicious sink. It does not make arbitrary configured hosts or returned URLs safe; see LOCAL-01 and LOCAL-02. No identity, privacy or provider-compatibility audit was performed."
    },
    "LP3": {
      "classification": "Material host permission-scope gap",
      "rationale": "No allowed-tools/permission declaration accompanies network, local file, browser or native renderer work. Such declarations are not a universal skill format requirement, but the host still needs enforced authorization; see LOCAL-09 and LOCAL-10."
    },
    "AS3": {
      "classification": "False positive for skill enumeration",
      "rationale": "The installer chooses a destination under .claude/skills or .agents/skills; the matched code does not enumerate installed skills or export them. Installation is a user-authorized local mutation, and source mutability remains relevant in LOCAL-11."
    },
    "AST4": {
      "classification": "Intended subprocess operation; no demonstrated shell injection",
      "rationale": "UI's instance runs a local Python test fixture; PPT's instance launches known render tools. Both use argv lists, with shell=False by default. Tool permission and binary/content trust still need controls; see LOCAL-10."
    },
    "SC1": {
      "classification": "Genuine open dependency constraints",
      "rationale": "Lower bounds alone do not lock resolution or provide hashes. Audit the actual isolated installed set; see LOCAL-08."
    },
    "SC4": {
      "classification": "Unresolved package-version advisory evidence",
      "rationale": "A package name and open version constraint are not proof of an installed affected version. Nothing was installed or resolved; exact vulnerability status remains unknown. See LOCAL-08."
    },
    "TT2": {
      "classification": "Intended but insufficiently constrained remote-source download and upload flow",
      "rationale": "The returned/caller-selected image bytes are intentionally uploaded as multipart data. That is not shell command injection, but input provenance, network reachability and arbitrary file selection are real data-boundary risks; see LOCAL-02 and LOCAL-03."
    },
    "TT3": {
      "classification": "False positive for environment-derived timeout secret transmission",
      "rationale": "The tainted values are numeric HTTP timeout options, not serialized environment secrets. The same calls do have actual intended bearer authentication and source upload, and ambient Requests authentication/destination risks; see LOCAL-01 through LOCAL-03. This does not clear the calls for unrestricted use."
    }
  },
  "owasp_scope": {
    "method": "Manual semantic inspection alongside the separately published text-triage receipt, following OWASP prompt-injection guidance. Regex results were leads rather than verdicts.",
    "direct_injection": "No hidden-instruction extraction or instruction-hierarchy override was established in the inspected matches. Public API prompt construction is ordinary workflow code.",
    "indirect_and_multimodal_injection": "Images/OCR, generated replies, source pages/files and local plans can carry hostile instructions. None was passed through a model during this review; robust image/OCR attack detection was not established.",
    "persistence_and_state": "Auto-discovered plans, manifests, refinement ledgers and mutable installed source can retain attacker-controlled state between runs; they require schema, path and authority validation.",
    "tool_and_data_boundaries": "Highest-impact observed boundary is unvalidated plan-selected file upload. Network origin policy, ambient auth, output scope and browser/renderer permissions are additional unresolved boundaries.",
    "guidance_url": "https://cheatsheetseries.owasp.org/cheatsheets/LLM_Prompt_Injection_Prevention_Cheat_Sheet.html"
  },
  "limits_and_exclusions": [
    "No package installation, helper import/execution, bundled test execution, renderer/browser use, API/inference call, image upload, real credential access, or paid operation was performed for this source review.",
    "Only the two exact pinned skill directories were fully read. The rest of the cookbook, unrelated skills, upstream services/models, and runtime-generated artifacts are excluded.",
    "Dependencies and renderer/browser binaries were not installed, resolved, version-audited or sandbox-tested. Historical advisory matches remain unresolved until a concrete environment is reviewed.",
    "No dynamic exploit, endpoint/redirect/DNS behavior, race/symlink attack, parser exploit, privilege boundary, provider interoperability, image quality, reconstruction fidelity or PowerPoint editability was tested.",
    "No benchmark or security clearance follows from reading all files, clean text patterns, well-formed XML, a passing renderer, or absence of demonstrated malicious intent.",
    "skills.sh registry evidence is separate and does not establish correspondence to these bytes, publisher identity, runtime safety or installed dependency state.",
    "The local Codex interpretation is not a SkillSpector LLM scan or an externally independent/comprehensive dynamic audit. The original static scores and partial-coverage qualifications remain intact.",
    "No blanket permission to run these skills follows from the guide or review. Execution would require the user's task-relevant data, network, file and tool scope to be honored by the host."
  ],
  "raw_file_inventory": [
    {
      "skill": "ling-ui-design",
      "file": ".env.example",
      "bytes": 510,
      "lines": 13,
      "sha256": "3218f147383a0f5bda9850c86c9a3af684c9652f04888ef5727699c76137335b",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/.env.example"
    },
    {
      "skill": "ling-ui-design",
      "file": ".gitignore",
      "bytes": 131,
      "lines": 13,
      "sha256": "21467bae0b89091af0bd53e6efbad201f15848c2ee50022c6a2eb5aa9065bf09",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/.gitignore"
    },
    {
      "skill": "ling-ui-design",
      "file": "LICENSE",
      "bytes": 1066,
      "lines": 21,
      "sha256": "be3e61e3c7fbd53a16f5dd40c802f088c318c23f051080cff776764f815fe262",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/LICENSE"
    },
    {
      "skill": "ling-ui-design",
      "file": "README.md",
      "bytes": 5119,
      "lines": 127,
      "sha256": "9966ae420edec398d2427af5779868dda506dd2011713e160bf3a42ddc07a39d",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/README.md"
    },
    {
      "skill": "ling-ui-design",
      "file": "SKILL.md",
      "bytes": 8437,
      "lines": 143,
      "sha256": "3fb897e20bd28059ccbe03baa44d3759c39fd04abb0e702398dd4fa8a5587465",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/SKILL.md"
    },
    {
      "skill": "ling-ui-design",
      "file": "pyproject.toml",
      "bytes": 505,
      "lines": 25,
      "sha256": "a54f7a99308de4f602bf97502878fdb19607bf855b0971d60e25b591a4284fc4",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/pyproject.toml"
    },
    {
      "skill": "ling-ui-design",
      "file": "pyrightconfig.json",
      "bytes": 249,
      "lines": 9,
      "sha256": "8193045423ae105f87bb1cccb0a0bc5f6c9b1a15c81192a3c759385bc22e767f",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/pyrightconfig.json"
    },
    {
      "skill": "ling-ui-design",
      "file": "references/asset-placement.md",
      "bytes": 2852,
      "lines": 60,
      "sha256": "5299f82f5553a192d02ce05637d9dcc5376be729f8a56be1baa2e10e7acf3a2a",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/references/asset-placement.md"
    },
    {
      "skill": "ling-ui-design",
      "file": "references/engineering-taste.md",
      "bytes": 3318,
      "lines": 56,
      "sha256": "d5cd772c84e919b713708e2e4392a3468f39fa6fbf04c74a744713976a47ab2b",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/references/engineering-taste.md"
    },
    {
      "skill": "ling-ui-design",
      "file": "references/image-generation.md",
      "bytes": 2486,
      "lines": 53,
      "sha256": "4b16b54c7506612c91aafaa22d6c9280c6c27242e355bee766266e5b4f82ab72",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/references/image-generation.md"
    },
    {
      "skill": "ling-ui-design",
      "file": "references/layer-decomposition.md",
      "bytes": 5659,
      "lines": 111,
      "sha256": "065bd8f53772537ed24bada6bf5377e180f9dfc673dd34add31dba7f01f7b215",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/references/layer-decomposition.md"
    },
    {
      "skill": "ling-ui-design",
      "file": "references/pre-implementation-analysis.md",
      "bytes": 1396,
      "lines": 24,
      "sha256": "a5f60813db07f9b10ee375da4179f1e24686511ddbab7bfc7bd7459484882cc5",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/references/pre-implementation-analysis.md"
    },
    {
      "skill": "ling-ui-design",
      "file": "references/visual-direction.md",
      "bytes": 2628,
      "lines": 50,
      "sha256": "05a9bf86bf091750671b0ed752085cad034073cd34413d72cb7fad5a3b3dda79",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/references/visual-direction.md"
    },
    {
      "skill": "ling-ui-design",
      "file": "references/visual-validation.md",
      "bytes": 4735,
      "lines": 109,
      "sha256": "1257de4d34eacdcc824a3ea526d3caf79df96e2c736940572b2a3b06b8db4ead",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/references/visual-validation.md"
    },
    {
      "skill": "ling-ui-design",
      "file": "scripts/_asset_regions.py",
      "bytes": 2199,
      "lines": 61,
      "sha256": "1aacb222e7a3a1ca31183a9587ba141bf58a9f57cd93c2055944c37a5ebe3d66",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/scripts/_asset_regions.py"
    },
    {
      "skill": "ling-ui-design",
      "file": "scripts/_common.py",
      "bytes": 13332,
      "lines": 359,
      "sha256": "ff46127607b2360ca438805ff3c44383fd1463e820be7f1e40e815c54250537c",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/scripts/_common.py"
    },
    {
      "skill": "ling-ui-design",
      "file": "scripts/capture_page.py",
      "bytes": 6350,
      "lines": 159,
      "sha256": "baa627c48c849a5fc548401288da8b286ab1ef0239bf16bc288689072a64e725",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/scripts/capture_page.py"
    },
    {
      "skill": "ling-ui-design",
      "file": "scripts/configure.py",
      "bytes": 1432,
      "lines": 45,
      "sha256": "be9049a93a69af3c02d063fb2591bb35a36578d284ad2d613f8b790bc4d31b2e",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/scripts/configure.py"
    },
    {
      "skill": "ling-ui-design",
      "file": "scripts/crop_elements.py",
      "bytes": 17830,
      "lines": 462,
      "sha256": "1bd8bdc6f3028d052f003f3128c4789398e3ea5f4706b9b25f33107831e9a54c",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/scripts/crop_elements.py"
    },
    {
      "skill": "ling-ui-design",
      "file": "scripts/decompose_layers.py",
      "bytes": 8939,
      "lines": 247,
      "sha256": "407728a6f079ad9d68cda1b650c62e78378fc4f2468cadb2e40eb810728320d2",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/scripts/decompose_layers.py"
    },
    {
      "skill": "ling-ui-design",
      "file": "scripts/generate_image.py",
      "bytes": 2081,
      "lines": 67,
      "sha256": "1dff6d71c4f327bf286a4020517edc362c4927afc750338cd070fe38c5e43c94",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/scripts/generate_image.py"
    },
    {
      "skill": "ling-ui-design",
      "file": "scripts/install.py",
      "bytes": 4624,
      "lines": 146,
      "sha256": "9714f0c6e0dda4f3107230c28977221fd34cc78d01d2cc482221d299e29fa3c5",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/scripts/install.py"
    },
    {
      "skill": "ling-ui-design",
      "file": "scripts/refine_crop.py",
      "bytes": 8212,
      "lines": 240,
      "sha256": "1c141d620f821fbb006947a8f1a2783dd9c758bd00d589f277f661a28964dd5c",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/scripts/refine_crop.py"
    },
    {
      "skill": "ling-ui-design",
      "file": "tests/test_asset_regions.py",
      "bytes": 13051,
      "lines": 276,
      "sha256": "495600bc214a4a757479ee8eaf30098c8a359f21adf8c890b52d2d04abd71404",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/tests/test_asset_regions.py"
    },
    {
      "skill": "ling-ui-design",
      "file": "tests/test_helpers.py",
      "bytes": 21128,
      "lines": 596,
      "sha256": "9ca8017e594fdf8b6d550688bb478d8347cd6ea81c99325e0da369bb31f6e7da",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/tests/test_helpers.py"
    },
    {
      "skill": "ling-ui-design",
      "file": "tests/test_output_paths.py",
      "bytes": 4724,
      "lines": 108,
      "sha256": "4b8b449b3fbda6f78fa4912cf174943b6cfd9ad5c59da04ad88912b4a75348ae",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/tests/test_output_paths.py"
    },
    {
      "skill": "ling-ui-design",
      "file": "tests/test_shared_config.py",
      "bytes": 10817,
      "lines": 234,
      "sha256": "08fe41f96b2b2406e763f1d381b8f36c236810b7cf67edf220a5ff91e27970ae",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/tests/test_shared_config.py"
    },
    {
      "skill": "image-to-editable-ppt",
      "file": ".env.example",
      "bytes": 163,
      "lines": 4,
      "sha256": "7ad4de4c3fc1534f07482983c6cb66a151f921c8c0b97f0fba11f8f394c81b89",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/.env.example"
    },
    {
      "skill": "image-to-editable-ppt",
      "file": ".gitignore",
      "bytes": 38,
      "lines": 4,
      "sha256": "8ec4ab95fd04f289980a5ddf65fd5169a5a5e8ad4c4c95ffcd05285633c8b9f2",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/.gitignore"
    },
    {
      "skill": "image-to-editable-ppt",
      "file": "LICENSE",
      "bytes": 1066,
      "lines": 21,
      "sha256": "be3e61e3c7fbd53a16f5dd40c802f088c318c23f051080cff776764f815fe262",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/LICENSE"
    },
    {
      "skill": "image-to-editable-ppt",
      "file": "README-zh.md",
      "bytes": 2236,
      "lines": 50,
      "sha256": "abd2bafbd150d35b3da08a96a9bfc301ebf5df5e1d5c739cb43253baf2c067e7",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/README-zh.md"
    },
    {
      "skill": "image-to-editable-ppt",
      "file": "README.md",
      "bytes": 1946,
      "lines": 51,
      "sha256": "82b38dbf5dbe5537cb06bb5eb4065df1d07b5303932f350a875df409b35a0b44",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/README.md"
    },
    {
      "skill": "image-to-editable-ppt",
      "file": "SKILL.md",
      "bytes": 11878,
      "lines": 209,
      "sha256": "891f187386744ff302c66e8104c7e66695901aee3697b6c90d4563430290bd09",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/SKILL.md"
    },
    {
      "skill": "image-to-editable-ppt",
      "file": "agents/openai.yaml",
      "bytes": 227,
      "lines": 4,
      "sha256": "1d23cc66b65c0106e0a2128655f1996ae275ee656c66dcf48dc50f845e794252",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/agents/openai.yaml"
    },
    {
      "skill": "image-to-editable-ppt",
      "file": "references/iterative-decomposition.md",
      "bytes": 5188,
      "lines": 101,
      "sha256": "fbe68c92f7e5cf1ebb2fd8781ac23b336026113bcb0207b3acffee807e481828",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/references/iterative-decomposition.md"
    },
    {
      "skill": "image-to-editable-ppt",
      "file": "references/scene-schema.md",
      "bytes": 5499,
      "lines": 158,
      "sha256": "a5bf20c551216522cb6428813cbb6c5ea3f234d01f222d19f462438beb89a73f",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/references/scene-schema.md"
    },
    {
      "skill": "image-to-editable-ppt",
      "file": "requirements.txt",
      "bytes": 40,
      "lines": 3,
      "sha256": "a15cc49155ea0e1ffb244519b8b8a110efc8fb8d450707192138972b50cc91c7",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/requirements.txt"
    },
    {
      "skill": "image-to-editable-ppt",
      "file": "scripts/api_services/__init__.py",
      "bytes": 483,
      "lines": 26,
      "sha256": "d04cf3bab85b5dff1a2375238512e822335321a00b6cca3241d98c03a782494c",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/api_services/__init__.py"
    },
    {
      "skill": "image-to-editable-ppt",
      "file": "scripts/api_services/artifact_store.py",
      "bytes": 2012,
      "lines": 54,
      "sha256": "f30660e06367a4263ac9301cc6e685c24d5658f4237743b9f04f7591cd6566f5",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/api_services/artifact_store.py"
    },
    {
      "skill": "image-to-editable-ppt",
      "file": "scripts/api_services/image_decomposer.py",
      "bytes": 24189,
      "lines": 583,
      "sha256": "efdb19bd41a78d462f6b2ede0224875baa06e037ef34edbcb377725b9ed94a3c",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/api_services/image_decomposer.py"
    },
    {
      "skill": "image-to-editable-ppt",
      "file": "scripts/crop_alpha_assets.py",
      "bytes": 5549,
      "lines": 152,
      "sha256": "c6fc21e415c9eaa7f655d935771d01a95da77ee9157870772b8fdc8112e98206",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/crop_alpha_assets.py"
    },
    {
      "skill": "image-to-editable-ppt",
      "file": "scripts/decompose_iterative.py",
      "bytes": 45375,
      "lines": 996,
      "sha256": "fb5dce79aad080b7f14d788bb0b78ff67d2171368caea746ee1fce79410d10a4",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/decompose_iterative.py"
    },
    {
      "skill": "image-to-editable-ppt",
      "file": "scripts/pptx_native.py",
      "bytes": 22879,
      "lines": 415,
      "sha256": "ab616dc1e52f2756f601edf7bba9095270a1c70ce0a5d80a75ffb843273e8016",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/pptx_native.py"
    },
    {
      "skill": "image-to-editable-ppt",
      "file": "scripts/render_pptx.py",
      "bytes": 10586,
      "lines": 330,
      "sha256": "d4ad51999fff319bd265ed71d6d08ad3d65f61b6ce8e0200895f393f410c48af",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/render_pptx.py"
    },
    {
      "skill": "image-to-editable-ppt",
      "file": "scripts/scene_dom.py",
      "bytes": 12948,
      "lines": 306,
      "sha256": "bd32d1fc0943e432a53238207dc34f04445ad567a98bac786b2a0844357cc991",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/scene_dom.py"
    },
    {
      "skill": "image-to-editable-ppt",
      "file": "scripts/scene_to_pptx.py",
      "bytes": 2044,
      "lines": 57,
      "sha256": "76156b4d7da17c527c81fc023c810044cbc597c87d2c36167ab20c3f4e2c0163",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/scene_to_pptx.py"
    },
    {
      "skill": "image-to-editable-ppt",
      "file": "scripts/validate_pptx.py",
      "bytes": 5700,
      "lines": 139,
      "sha256": "f865e6da53eb18ae6bdd3a1c07138db3b5b995182bf28d456d0edbe8aff0f1c4",
      "read_status": "entire raw file read",
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/validate_pptx.py"
    }
  ],
  "static_issue_instance_count": 53,
  "static_issue_counts_by_skill": {
    "ling-ui-design": {
      "PE3": 19,
      "P6": 1,
      "E2": 2,
      "LP3": 1,
      "E1": 6,
      "AS3": 1,
      "AST4": 1,
      "SC4": 4
    },
    "image-to-editable-ppt": {
      "TT3": 3,
      "PE3": 3,
      "P6": 1,
      "E1": 2,
      "LP3": 1,
      "TT2": 1,
      "AST4": 1,
      "SC1": 3,
      "SC4": 3
    }
  },
  "static_issue_adjudications": [
    {
      "skill": "ling-ui-design",
      "instance": 1,
      "scanner_issue_id": "PE3",
      "scanner_finding_id": "finding-7501a1f83b564c5c917d36df48a853ad",
      "scanner_severity": "HIGH",
      "scanner_category": "Privilege Escalation",
      "file": ".env.example",
      "start_line": 1,
      "end_line": 1,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/.env.example#L1",
      "adjudication": "Expected local credential configuration or benign test/documentation match; not evidence of credential theft by itself",
      "rationale": "Read one documented skill-local .env, configure its creation, omit it from copy installation, or exercise fake test fixtures/ignore rules. Runtime credential forwarding to an untrusted base is separately material in LOCAL-01 and LOCAL-02."
    },
    {
      "skill": "ling-ui-design",
      "instance": 2,
      "scanner_issue_id": "PE3",
      "scanner_finding_id": "finding-7501a1f83b564c5c917d36df48a853ad",
      "scanner_severity": "HIGH",
      "scanner_category": "Privilege Escalation",
      "file": ".env.example",
      "start_line": 1,
      "end_line": 1,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/.env.example#L1",
      "adjudication": "Expected local credential configuration or benign test/documentation match; not evidence of credential theft by itself",
      "rationale": "Read one documented skill-local .env, configure its creation, omit it from copy installation, or exercise fake test fixtures/ignore rules. Runtime credential forwarding to an untrusted base is separately material in LOCAL-01 and LOCAL-02."
    },
    {
      "skill": "ling-ui-design",
      "instance": 3,
      "scanner_issue_id": "PE3",
      "scanner_finding_id": "finding-7501a1f83b564c5c917d36df48a853ad",
      "scanner_severity": "HIGH",
      "scanner_category": "Privilege Escalation",
      "file": ".gitignore",
      "start_line": 1,
      "end_line": 1,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/.gitignore#L1",
      "adjudication": "Expected local credential configuration or benign test/documentation match; not evidence of credential theft by itself",
      "rationale": "Read one documented skill-local .env, configure its creation, omit it from copy installation, or exercise fake test fixtures/ignore rules. Runtime credential forwarding to an untrusted base is separately material in LOCAL-01 and LOCAL-02."
    },
    {
      "skill": "ling-ui-design",
      "instance": 4,
      "scanner_issue_id": "PE3",
      "scanner_finding_id": "finding-7501a1f83b564c5c917d36df48a853ad",
      "scanner_severity": "HIGH",
      "scanner_category": "Privilege Escalation",
      "file": "scripts/configure.py",
      "start_line": 18,
      "end_line": 18,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/scripts/configure.py#L18",
      "adjudication": "Expected local credential configuration or benign test/documentation match; not evidence of credential theft by itself",
      "rationale": "Read one documented skill-local .env, configure its creation, omit it from copy installation, or exercise fake test fixtures/ignore rules. Runtime credential forwarding to an untrusted base is separately material in LOCAL-01 and LOCAL-02."
    },
    {
      "skill": "ling-ui-design",
      "instance": 5,
      "scanner_issue_id": "PE3",
      "scanner_finding_id": "finding-40e866777c20401ea5aba5e9d1baf42e",
      "scanner_severity": "HIGH",
      "scanner_category": "Privilege Escalation",
      "file": "scripts/_common.py",
      "start_line": 14,
      "end_line": 14,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/scripts/_common.py#L14",
      "adjudication": "Expected local credential configuration or benign test/documentation match; not evidence of credential theft by itself",
      "rationale": "Read one documented skill-local .env, configure its creation, omit it from copy installation, or exercise fake test fixtures/ignore rules. Runtime credential forwarding to an untrusted base is separately material in LOCAL-01 and LOCAL-02."
    },
    {
      "skill": "ling-ui-design",
      "instance": 6,
      "scanner_issue_id": "PE3",
      "scanner_finding_id": "finding-40e866777c20401ea5aba5e9d1baf42e",
      "scanner_severity": "HIGH",
      "scanner_category": "Privilege Escalation",
      "file": "scripts/install.py",
      "start_line": 57,
      "end_line": 57,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/scripts/install.py#L57",
      "adjudication": "Expected local credential configuration or benign test/documentation match; not evidence of credential theft by itself",
      "rationale": "Read one documented skill-local .env, configure its creation, omit it from copy installation, or exercise fake test fixtures/ignore rules. Runtime credential forwarding to an untrusted base is separately material in LOCAL-01 and LOCAL-02."
    },
    {
      "skill": "ling-ui-design",
      "instance": 7,
      "scanner_issue_id": "PE3",
      "scanner_finding_id": "finding-40e866777c20401ea5aba5e9d1baf42e",
      "scanner_severity": "HIGH",
      "scanner_category": "Privilege Escalation",
      "file": "scripts/install.py",
      "start_line": 62,
      "end_line": 62,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/scripts/install.py#L62",
      "adjudication": "Expected local credential configuration or benign test/documentation match; not evidence of credential theft by itself",
      "rationale": "Read one documented skill-local .env, configure its creation, omit it from copy installation, or exercise fake test fixtures/ignore rules. Runtime credential forwarding to an untrusted base is separately material in LOCAL-01 and LOCAL-02."
    },
    {
      "skill": "ling-ui-design",
      "instance": 8,
      "scanner_issue_id": "PE3",
      "scanner_finding_id": "finding-40e866777c20401ea5aba5e9d1baf42e",
      "scanner_severity": "HIGH",
      "scanner_category": "Privilege Escalation",
      "file": "tests/test_helpers.py",
      "start_line": 482,
      "end_line": 482,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/tests/test_helpers.py#L482",
      "adjudication": "Expected local credential configuration or benign test/documentation match; not evidence of credential theft by itself",
      "rationale": "Read one documented skill-local .env, configure its creation, omit it from copy installation, or exercise fake test fixtures/ignore rules. Runtime credential forwarding to an untrusted base is separately material in LOCAL-01 and LOCAL-02."
    },
    {
      "skill": "ling-ui-design",
      "instance": 9,
      "scanner_issue_id": "PE3",
      "scanner_finding_id": "finding-40e866777c20401ea5aba5e9d1baf42e",
      "scanner_severity": "HIGH",
      "scanner_category": "Privilege Escalation",
      "file": "tests/test_helpers.py",
      "start_line": 494,
      "end_line": 494,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/tests/test_helpers.py#L494",
      "adjudication": "Expected local credential configuration or benign test/documentation match; not evidence of credential theft by itself",
      "rationale": "Read one documented skill-local .env, configure its creation, omit it from copy installation, or exercise fake test fixtures/ignore rules. Runtime credential forwarding to an untrusted base is separately material in LOCAL-01 and LOCAL-02."
    },
    {
      "skill": "ling-ui-design",
      "instance": 10,
      "scanner_issue_id": "PE3",
      "scanner_finding_id": "finding-40e866777c20401ea5aba5e9d1baf42e",
      "scanner_severity": "HIGH",
      "scanner_category": "Privilege Escalation",
      "file": "tests/test_helpers.py",
      "start_line": 511,
      "end_line": 511,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/tests/test_helpers.py#L511",
      "adjudication": "Expected local credential configuration or benign test/documentation match; not evidence of credential theft by itself",
      "rationale": "Read one documented skill-local .env, configure its creation, omit it from copy installation, or exercise fake test fixtures/ignore rules. Runtime credential forwarding to an untrusted base is separately material in LOCAL-01 and LOCAL-02."
    },
    {
      "skill": "ling-ui-design",
      "instance": 11,
      "scanner_issue_id": "PE3",
      "scanner_finding_id": "finding-40e866777c20401ea5aba5e9d1baf42e",
      "scanner_severity": "HIGH",
      "scanner_category": "Privilege Escalation",
      "file": "tests/test_helpers.py",
      "start_line": 530,
      "end_line": 530,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/tests/test_helpers.py#L530",
      "adjudication": "Expected local credential configuration or benign test/documentation match; not evidence of credential theft by itself",
      "rationale": "Read one documented skill-local .env, configure its creation, omit it from copy installation, or exercise fake test fixtures/ignore rules. Runtime credential forwarding to an untrusted base is separately material in LOCAL-01 and LOCAL-02."
    },
    {
      "skill": "ling-ui-design",
      "instance": 12,
      "scanner_issue_id": "PE3",
      "scanner_finding_id": "finding-40e866777c20401ea5aba5e9d1baf42e",
      "scanner_severity": "HIGH",
      "scanner_category": "Privilege Escalation",
      "file": "tests/test_helpers.py",
      "start_line": 564,
      "end_line": 564,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/tests/test_helpers.py#L564",
      "adjudication": "Expected local credential configuration or benign test/documentation match; not evidence of credential theft by itself",
      "rationale": "Read one documented skill-local .env, configure its creation, omit it from copy installation, or exercise fake test fixtures/ignore rules. Runtime credential forwarding to an untrusted base is separately material in LOCAL-01 and LOCAL-02."
    },
    {
      "skill": "ling-ui-design",
      "instance": 13,
      "scanner_issue_id": "PE3",
      "scanner_finding_id": "finding-40e866777c20401ea5aba5e9d1baf42e",
      "scanner_severity": "HIGH",
      "scanner_category": "Privilege Escalation",
      "file": "tests/test_helpers.py",
      "start_line": 576,
      "end_line": 576,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/tests/test_helpers.py#L576",
      "adjudication": "Expected local credential configuration or benign test/documentation match; not evidence of credential theft by itself",
      "rationale": "Read one documented skill-local .env, configure its creation, omit it from copy installation, or exercise fake test fixtures/ignore rules. Runtime credential forwarding to an untrusted base is separately material in LOCAL-01 and LOCAL-02."
    },
    {
      "skill": "ling-ui-design",
      "instance": 14,
      "scanner_issue_id": "PE3",
      "scanner_finding_id": "finding-40e866777c20401ea5aba5e9d1baf42e",
      "scanner_severity": "HIGH",
      "scanner_category": "Privilege Escalation",
      "file": "tests/test_helpers.py",
      "start_line": 583,
      "end_line": 583,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/tests/test_helpers.py#L583",
      "adjudication": "Expected local credential configuration or benign test/documentation match; not evidence of credential theft by itself",
      "rationale": "Read one documented skill-local .env, configure its creation, omit it from copy installation, or exercise fake test fixtures/ignore rules. Runtime credential forwarding to an untrusted base is separately material in LOCAL-01 and LOCAL-02."
    },
    {
      "skill": "ling-ui-design",
      "instance": 15,
      "scanner_issue_id": "PE3",
      "scanner_finding_id": "finding-40e866777c20401ea5aba5e9d1baf42e",
      "scanner_severity": "HIGH",
      "scanner_category": "Privilege Escalation",
      "file": "tests/test_shared_config.py",
      "start_line": 84,
      "end_line": 84,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/tests/test_shared_config.py#L84",
      "adjudication": "Expected local credential configuration or benign test/documentation match; not evidence of credential theft by itself",
      "rationale": "Read one documented skill-local .env, configure its creation, omit it from copy installation, or exercise fake test fixtures/ignore rules. Runtime credential forwarding to an untrusted base is separately material in LOCAL-01 and LOCAL-02."
    },
    {
      "skill": "ling-ui-design",
      "instance": 16,
      "scanner_issue_id": "PE3",
      "scanner_finding_id": "finding-40e866777c20401ea5aba5e9d1baf42e",
      "scanner_severity": "HIGH",
      "scanner_category": "Privilege Escalation",
      "file": "tests/test_shared_config.py",
      "start_line": 112,
      "end_line": 112,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/tests/test_shared_config.py#L112",
      "adjudication": "Expected local credential configuration or benign test/documentation match; not evidence of credential theft by itself",
      "rationale": "Read one documented skill-local .env, configure its creation, omit it from copy installation, or exercise fake test fixtures/ignore rules. Runtime credential forwarding to an untrusted base is separately material in LOCAL-01 and LOCAL-02."
    },
    {
      "skill": "ling-ui-design",
      "instance": 17,
      "scanner_issue_id": "PE3",
      "scanner_finding_id": "finding-40e866777c20401ea5aba5e9d1baf42e",
      "scanner_severity": "HIGH",
      "scanner_category": "Privilege Escalation",
      "file": "tests/test_shared_config.py",
      "start_line": 179,
      "end_line": 179,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/tests/test_shared_config.py#L179",
      "adjudication": "Expected local credential configuration or benign test/documentation match; not evidence of credential theft by itself",
      "rationale": "Read one documented skill-local .env, configure its creation, omit it from copy installation, or exercise fake test fixtures/ignore rules. Runtime credential forwarding to an untrusted base is separately material in LOCAL-01 and LOCAL-02."
    },
    {
      "skill": "ling-ui-design",
      "instance": 18,
      "scanner_issue_id": "PE3",
      "scanner_finding_id": "finding-40e866777c20401ea5aba5e9d1baf42e",
      "scanner_severity": "HIGH",
      "scanner_category": "Privilege Escalation",
      "file": "tests/test_shared_config.py",
      "start_line": 211,
      "end_line": 211,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/tests/test_shared_config.py#L211",
      "adjudication": "Expected local credential configuration or benign test/documentation match; not evidence of credential theft by itself",
      "rationale": "Read one documented skill-local .env, configure its creation, omit it from copy installation, or exercise fake test fixtures/ignore rules. Runtime credential forwarding to an untrusted base is separately material in LOCAL-01 and LOCAL-02."
    },
    {
      "skill": "ling-ui-design",
      "instance": 19,
      "scanner_issue_id": "PE3",
      "scanner_finding_id": "finding-40e866777c20401ea5aba5e9d1baf42e",
      "scanner_severity": "HIGH",
      "scanner_category": "Privilege Escalation",
      "file": "tests/test_shared_config.py",
      "start_line": 233,
      "end_line": 233,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/tests/test_shared_config.py#L233",
      "adjudication": "Expected local credential configuration or benign test/documentation match; not evidence of credential theft by itself",
      "rationale": "Read one documented skill-local .env, configure its creation, omit it from copy installation, or exercise fake test fixtures/ignore rules. Runtime credential forwarding to an untrusted base is separately material in LOCAL-01 and LOCAL-02."
    },
    {
      "skill": "ling-ui-design",
      "instance": 20,
      "scanner_issue_id": "P6",
      "scanner_finding_id": "finding-31abf796151c4707870c1e734b144f16",
      "scanner_severity": "HIGH",
      "scanner_category": "System Prompt Leakage",
      "file": "scripts/decompose_layers.py",
      "start_line": 45,
      "end_line": 45,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/scripts/decompose_layers.py#L45",
      "adjudication": "False positive for hidden-prompt extraction",
      "rationale": "UI returns the supplied decomposition prompt or its public DEFAULT_PROMPT; PPT builds a layer prompt from a plan. Neither matched function retrieves the agent's hidden system/developer instructions. Untrusted plan/prompt authority is assessed in LOCAL-09."
    },
    {
      "skill": "ling-ui-design",
      "instance": 21,
      "scanner_issue_id": "E2",
      "scanner_finding_id": "finding-c11722380c9349dfb3b3e07d0f1fae4c",
      "scanner_severity": "HIGH",
      "scanner_category": "Data Exfiltration",
      "file": "tests/test_shared_config.py",
      "start_line": 109,
      "end_line": 109,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/tests/test_shared_config.py#L109",
      "adjudication": "Benign test-fixture environment handling; no matched network exfiltration",
      "rationale": "Both instances are UI tests: one clears LING_UI_DESIGN_ variables, the other copies environment state for a local Python fixture subprocess. Actual runtime Requests ambient credential risk is assessed separately in LOCAL-02."
    },
    {
      "skill": "ling-ui-design",
      "instance": 22,
      "scanner_issue_id": "E2",
      "scanner_finding_id": "finding-1ee82d7075a3492ba58e4f339acde479",
      "scanner_severity": "HIGH",
      "scanner_category": "Data Exfiltration",
      "file": "tests/test_shared_config.py",
      "start_line": 214,
      "end_line": 214,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/tests/test_shared_config.py#L214",
      "adjudication": "Benign test-fixture environment handling; no matched network exfiltration",
      "rationale": "Both instances are UI tests: one clears LING_UI_DESIGN_ variables, the other copies environment state for a local Python fixture subprocess. Actual runtime Requests ambient credential risk is assessed separately in LOCAL-02."
    },
    {
      "skill": "ling-ui-design",
      "instance": 23,
      "scanner_issue_id": "LP3",
      "scanner_finding_id": "finding-4c3887d878644b45b39966dea48278e6",
      "scanner_severity": "MEDIUM",
      "scanner_category": "MCP Least Privilege",
      "file": "SKILL.md",
      "start_line": 1,
      "end_line": 1,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/SKILL.md#L1",
      "adjudication": "Material host permission-scope gap",
      "rationale": "No allowed-tools/permission declaration accompanies network, local file, browser or native renderer work. Such declarations are not a universal skill format requirement, but the host still needs enforced authorization; see LOCAL-09 and LOCAL-10."
    },
    {
      "skill": "ling-ui-design",
      "instance": 24,
      "scanner_issue_id": "E1",
      "scanner_finding_id": "finding-893f437680d546e0ad1a1b2838ca303a",
      "scanner_severity": "MEDIUM",
      "scanner_category": "Data Exfiltration",
      "file": ".env.example",
      "start_line": 4,
      "end_line": 4,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/.env.example#L4",
      "adjudication": "Documented default API domain or fixture, with destination trust unresolved",
      "rationale": "The Novita base URL is an intended provider configuration, not proof of a malicious sink. It does not make arbitrary configured hosts or returned URLs safe; see LOCAL-01 and LOCAL-02. No identity, privacy or provider-compatibility audit was performed."
    },
    {
      "skill": "ling-ui-design",
      "instance": 25,
      "scanner_issue_id": "E1",
      "scanner_finding_id": "finding-893f437680d546e0ad1a1b2838ca303a",
      "scanner_severity": "MEDIUM",
      "scanner_category": "Data Exfiltration",
      "file": "README.md",
      "start_line": 81,
      "end_line": 81,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/README.md#L81",
      "adjudication": "Documented default API domain or fixture, with destination trust unresolved",
      "rationale": "The Novita base URL is an intended provider configuration, not proof of a malicious sink. It does not make arbitrary configured hosts or returned URLs safe; see LOCAL-01 and LOCAL-02. No identity, privacy or provider-compatibility audit was performed."
    },
    {
      "skill": "ling-ui-design",
      "instance": 26,
      "scanner_issue_id": "E1",
      "scanner_finding_id": "finding-893f437680d546e0ad1a1b2838ca303a",
      "scanner_severity": "MEDIUM",
      "scanner_category": "Data Exfiltration",
      "file": "references/image-generation.md",
      "start_line": 10,
      "end_line": 10,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/references/image-generation.md#L10",
      "adjudication": "Documented default API domain or fixture, with destination trust unresolved",
      "rationale": "The Novita base URL is an intended provider configuration, not proof of a malicious sink. It does not make arbitrary configured hosts or returned URLs safe; see LOCAL-01 and LOCAL-02. No identity, privacy or provider-compatibility audit was performed."
    },
    {
      "skill": "ling-ui-design",
      "instance": 27,
      "scanner_issue_id": "E1",
      "scanner_finding_id": "finding-893f437680d546e0ad1a1b2838ca303a",
      "scanner_severity": "MEDIUM",
      "scanner_category": "Data Exfiltration",
      "file": "references/layer-decomposition.md",
      "start_line": 12,
      "end_line": 12,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/references/layer-decomposition.md#L12",
      "adjudication": "Documented default API domain or fixture, with destination trust unresolved",
      "rationale": "The Novita base URL is an intended provider configuration, not proof of a malicious sink. It does not make arbitrary configured hosts or returned URLs safe; see LOCAL-01 and LOCAL-02. No identity, privacy or provider-compatibility audit was performed."
    },
    {
      "skill": "ling-ui-design",
      "instance": 28,
      "scanner_issue_id": "E1",
      "scanner_finding_id": "finding-893f437680d546e0ad1a1b2838ca303a",
      "scanner_severity": "MEDIUM",
      "scanner_category": "Data Exfiltration",
      "file": "scripts/_common.py",
      "start_line": 16,
      "end_line": 16,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/scripts/_common.py#L16",
      "adjudication": "Documented default API domain or fixture, with destination trust unresolved",
      "rationale": "The Novita base URL is an intended provider configuration, not proof of a malicious sink. It does not make arbitrary configured hosts or returned URLs safe; see LOCAL-01 and LOCAL-02. No identity, privacy or provider-compatibility audit was performed."
    },
    {
      "skill": "ling-ui-design",
      "instance": 29,
      "scanner_issue_id": "E1",
      "scanner_finding_id": "finding-893f437680d546e0ad1a1b2838ca303a",
      "scanner_severity": "MEDIUM",
      "scanner_category": "Data Exfiltration",
      "file": "tests/test_shared_config.py",
      "start_line": 91,
      "end_line": 91,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/tests/test_shared_config.py#L91",
      "adjudication": "Documented default API domain or fixture, with destination trust unresolved",
      "rationale": "The Novita base URL is an intended provider configuration, not proof of a malicious sink. It does not make arbitrary configured hosts or returned URLs safe; see LOCAL-01 and LOCAL-02. No identity, privacy or provider-compatibility audit was performed."
    },
    {
      "skill": "ling-ui-design",
      "instance": 30,
      "scanner_issue_id": "AS3",
      "scanner_finding_id": "finding-8210bd7909fc421fbc93be95c335b6d2",
      "scanner_severity": "MEDIUM",
      "scanner_category": "Agent Snooping",
      "file": "scripts/install.py",
      "start_line": 47,
      "end_line": 47,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/scripts/install.py#L47",
      "adjudication": "False positive for skill enumeration",
      "rationale": "The installer chooses a destination under .claude/skills or .agents/skills; the matched code does not enumerate installed skills or export them. Installation is a user-authorized local mutation, and source mutability remains relevant in LOCAL-11."
    },
    {
      "skill": "ling-ui-design",
      "instance": 31,
      "scanner_issue_id": "AST4",
      "scanner_finding_id": "finding-d88c7fd1b1ed45609d7121e27d2a578f",
      "scanner_severity": "MEDIUM",
      "scanner_category": "Dangerous Code Execution",
      "file": "tests/test_shared_config.py",
      "start_line": 219,
      "end_line": 222,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/tests/test_shared_config.py#L219-L222",
      "adjudication": "Intended subprocess operation; no demonstrated shell injection",
      "rationale": "UI's instance runs a local Python test fixture; PPT's instance launches known render tools. Both use argv lists, with shell=False by default. Tool permission and binary/content trust still need controls; see LOCAL-10."
    },
    {
      "skill": "ling-ui-design",
      "instance": 32,
      "scanner_issue_id": "SC4",
      "scanner_finding_id": "finding-abf6f12fce584f3fb146f72cf6c151eb",
      "scanner_severity": "LOW",
      "scanner_category": "Supply Chain",
      "file": "pyproject.toml",
      "start_line": 2,
      "end_line": 2,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/pyproject.toml#L2",
      "adjudication": "Unresolved package-version advisory evidence",
      "rationale": "A package name and open version constraint are not proof of an installed affected version. Nothing was installed or resolved; exact vulnerability status remains unknown. See LOCAL-08."
    },
    {
      "skill": "ling-ui-design",
      "instance": 33,
      "scanner_issue_id": "SC4",
      "scanner_finding_id": "finding-372e6911cf504c2185838d9e5f87db24",
      "scanner_severity": "LOW",
      "scanner_category": "Supply Chain",
      "file": "pyproject.toml",
      "start_line": 12,
      "end_line": 12,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/pyproject.toml#L12",
      "adjudication": "Unresolved package-version advisory evidence",
      "rationale": "A package name and open version constraint are not proof of an installed affected version. Nothing was installed or resolved; exact vulnerability status remains unknown. See LOCAL-08."
    },
    {
      "skill": "ling-ui-design",
      "instance": 34,
      "scanner_issue_id": "SC4",
      "scanner_finding_id": "finding-45c1e0ba1b9249cc887f3f1df4d2a5c1",
      "scanner_severity": "LOW",
      "scanner_category": "Supply Chain",
      "file": "pyproject.toml",
      "start_line": 13,
      "end_line": 13,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/pyproject.toml#L13",
      "adjudication": "Unresolved package-version advisory evidence",
      "rationale": "A package name and open version constraint are not proof of an installed affected version. Nothing was installed or resolved; exact vulnerability status remains unknown. See LOCAL-08."
    },
    {
      "skill": "ling-ui-design",
      "instance": 35,
      "scanner_issue_id": "SC4",
      "scanner_finding_id": "finding-a7f550c0cc924595aadbd3cd7bb36844",
      "scanner_severity": "LOW",
      "scanner_category": "Supply Chain",
      "file": "pyproject.toml",
      "start_line": 18,
      "end_line": 18,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/ling-ui-design/pyproject.toml#L18",
      "adjudication": "Unresolved package-version advisory evidence",
      "rationale": "A package name and open version constraint are not proof of an installed affected version. Nothing was installed or resolved; exact vulnerability status remains unknown. See LOCAL-08."
    },
    {
      "skill": "image-to-editable-ppt",
      "instance": 1,
      "scanner_issue_id": "TT3",
      "scanner_finding_id": "finding-f42b8c75ccb94fd4b34d40a9fecacc02",
      "scanner_severity": "CRITICAL",
      "scanner_category": "Data Flow",
      "file": "scripts/api_services/image_decomposer.py",
      "start_line": 253,
      "end_line": 253,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/api_services/image_decomposer.py#L253",
      "adjudication": "False positive for environment-derived timeout secret transmission",
      "rationale": "The tainted values are numeric HTTP timeout options, not serialized environment secrets. The same calls do have actual intended bearer authentication and source upload, and ambient Requests authentication/destination risks; see LOCAL-01 through LOCAL-03. This does not clear the calls for unrestricted use."
    },
    {
      "skill": "image-to-editable-ppt",
      "instance": 2,
      "scanner_issue_id": "TT3",
      "scanner_finding_id": "finding-d0d4ab015e554a29a30c676fe0b67286",
      "scanner_severity": "CRITICAL",
      "scanner_category": "Data Flow",
      "file": "scripts/api_services/image_decomposer.py",
      "start_line": 298,
      "end_line": 307,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/api_services/image_decomposer.py#L298-L307",
      "adjudication": "False positive for environment-derived timeout secret transmission",
      "rationale": "The tainted values are numeric HTTP timeout options, not serialized environment secrets. The same calls do have actual intended bearer authentication and source upload, and ambient Requests authentication/destination risks; see LOCAL-01 through LOCAL-03. This does not clear the calls for unrestricted use."
    },
    {
      "skill": "image-to-editable-ppt",
      "instance": 3,
      "scanner_issue_id": "TT3",
      "scanner_finding_id": "finding-f435075ab07942b38490151f29686840",
      "scanner_severity": "CRITICAL",
      "scanner_category": "Data Flow",
      "file": "scripts/api_services/image_decomposer.py",
      "start_line": 392,
      "end_line": 392,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/api_services/image_decomposer.py#L392",
      "adjudication": "False positive for environment-derived timeout secret transmission",
      "rationale": "The tainted values are numeric HTTP timeout options, not serialized environment secrets. The same calls do have actual intended bearer authentication and source upload, and ambient Requests authentication/destination risks; see LOCAL-01 through LOCAL-03. This does not clear the calls for unrestricted use."
    },
    {
      "skill": "image-to-editable-ppt",
      "instance": 4,
      "scanner_issue_id": "PE3",
      "scanner_finding_id": "finding-c0660d08b2414a96a6c3afea525e1dd0",
      "scanner_severity": "HIGH",
      "scanner_category": "Privilege Escalation",
      "file": ".env.example",
      "start_line": 1,
      "end_line": 1,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/.env.example#L1",
      "adjudication": "Expected local credential configuration or benign test/documentation match; not evidence of credential theft by itself",
      "rationale": "Read one documented skill-local .env, configure its creation, omit it from copy installation, or exercise fake test fixtures/ignore rules. Runtime credential forwarding to an untrusted base is separately material in LOCAL-01 and LOCAL-02."
    },
    {
      "skill": "image-to-editable-ppt",
      "instance": 5,
      "scanner_issue_id": "PE3",
      "scanner_finding_id": "finding-c0660d08b2414a96a6c3afea525e1dd0",
      "scanner_severity": "HIGH",
      "scanner_category": "Privilege Escalation",
      "file": ".gitignore",
      "start_line": 4,
      "end_line": 4,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/.gitignore#L4",
      "adjudication": "Expected local credential configuration or benign test/documentation match; not evidence of credential theft by itself",
      "rationale": "Read one documented skill-local .env, configure its creation, omit it from copy installation, or exercise fake test fixtures/ignore rules. Runtime credential forwarding to an untrusted base is separately material in LOCAL-01 and LOCAL-02."
    },
    {
      "skill": "image-to-editable-ppt",
      "instance": 6,
      "scanner_issue_id": "PE3",
      "scanner_finding_id": "finding-fbf8dd055ea34e62bf76d27122ff3e0f",
      "scanner_severity": "HIGH",
      "scanner_category": "Privilege Escalation",
      "file": "scripts/api_services/image_decomposer.py",
      "start_line": 52,
      "end_line": 52,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/api_services/image_decomposer.py#L52",
      "adjudication": "Expected local credential configuration or benign test/documentation match; not evidence of credential theft by itself",
      "rationale": "Read one documented skill-local .env, configure its creation, omit it from copy installation, or exercise fake test fixtures/ignore rules. Runtime credential forwarding to an untrusted base is separately material in LOCAL-01 and LOCAL-02."
    },
    {
      "skill": "image-to-editable-ppt",
      "instance": 7,
      "scanner_issue_id": "P6",
      "scanner_finding_id": "finding-2b40ed6370bd4c04b0b8797f7cdb5d8f",
      "scanner_severity": "HIGH",
      "scanner_category": "System Prompt Leakage",
      "file": "scripts/decompose_iterative.py",
      "start_line": 555,
      "end_line": 555,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/decompose_iterative.py#L555",
      "adjudication": "False positive for hidden-prompt extraction",
      "rationale": "UI returns the supplied decomposition prompt or its public DEFAULT_PROMPT; PPT builds a layer prompt from a plan. Neither matched function retrieves the agent's hidden system/developer instructions. Untrusted plan/prompt authority is assessed in LOCAL-09."
    },
    {
      "skill": "image-to-editable-ppt",
      "instance": 8,
      "scanner_issue_id": "E1",
      "scanner_finding_id": "finding-53647b7d833c49ebbfa67e0f81a9a2c2",
      "scanner_severity": "MEDIUM",
      "scanner_category": "Data Exfiltration",
      "file": ".env.example",
      "start_line": 2,
      "end_line": 2,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/.env.example#L2",
      "adjudication": "Documented default API domain or fixture, with destination trust unresolved",
      "rationale": "The Novita base URL is an intended provider configuration, not proof of a malicious sink. It does not make arbitrary configured hosts or returned URLs safe; see LOCAL-01 and LOCAL-02. No identity, privacy or provider-compatibility audit was performed."
    },
    {
      "skill": "image-to-editable-ppt",
      "instance": 9,
      "scanner_issue_id": "E1",
      "scanner_finding_id": "finding-53647b7d833c49ebbfa67e0f81a9a2c2",
      "scanner_severity": "MEDIUM",
      "scanner_category": "Data Exfiltration",
      "file": "README.md",
      "start_line": 32,
      "end_line": 32,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/README.md#L32",
      "adjudication": "Documented default API domain or fixture, with destination trust unresolved",
      "rationale": "The Novita base URL is an intended provider configuration, not proof of a malicious sink. It does not make arbitrary configured hosts or returned URLs safe; see LOCAL-01 and LOCAL-02. No identity, privacy or provider-compatibility audit was performed."
    },
    {
      "skill": "image-to-editable-ppt",
      "instance": 10,
      "scanner_issue_id": "LP3",
      "scanner_finding_id": "finding-29e05de356764efda9ac4a844d8175b8",
      "scanner_severity": "MEDIUM",
      "scanner_category": "MCP Least Privilege",
      "file": "SKILL.md",
      "start_line": 1,
      "end_line": 1,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/SKILL.md#L1",
      "adjudication": "Material host permission-scope gap",
      "rationale": "No allowed-tools/permission declaration accompanies network, local file, browser or native renderer work. Such declarations are not a universal skill format requirement, but the host still needs enforced authorization; see LOCAL-09 and LOCAL-10."
    },
    {
      "skill": "image-to-editable-ppt",
      "instance": 11,
      "scanner_issue_id": "TT2",
      "scanner_finding_id": "finding-25423303140440bf85671234d64855a8",
      "scanner_severity": "MEDIUM",
      "scanner_category": "Data Flow",
      "file": "scripts/api_services/image_decomposer.py",
      "start_line": 298,
      "end_line": 307,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/api_services/image_decomposer.py#L298-L307",
      "adjudication": "Intended but insufficiently constrained remote-source download and upload flow",
      "rationale": "The returned/caller-selected image bytes are intentionally uploaded as multipart data. That is not shell command injection, but input provenance, network reachability and arbitrary file selection are real data-boundary risks; see LOCAL-02 and LOCAL-03."
    },
    {
      "skill": "image-to-editable-ppt",
      "instance": 12,
      "scanner_issue_id": "AST4",
      "scanner_finding_id": "finding-3e2a48360c4240b3ae53df04d05521da",
      "scanner_severity": "MEDIUM",
      "scanner_category": "Dangerous Code Execution",
      "file": "scripts/render_pptx.py",
      "start_line": 91,
      "end_line": 96,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/scripts/render_pptx.py#L91-L96",
      "adjudication": "Intended subprocess operation; no demonstrated shell injection",
      "rationale": "UI's instance runs a local Python test fixture; PPT's instance launches known render tools. Both use argv lists, with shell=False by default. Tool permission and binary/content trust still need controls; see LOCAL-10."
    },
    {
      "skill": "image-to-editable-ppt",
      "instance": 13,
      "scanner_issue_id": "SC1",
      "scanner_finding_id": "finding-d7ad7e101b2f409fbb02c2e408182a48",
      "scanner_severity": "LOW",
      "scanner_category": "Supply Chain",
      "file": "requirements.txt",
      "start_line": 1,
      "end_line": 1,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/requirements.txt#L1",
      "adjudication": "Genuine open dependency constraints",
      "rationale": "Lower bounds alone do not lock resolution or provide hashes. Audit the actual isolated installed set; see LOCAL-08."
    },
    {
      "skill": "image-to-editable-ppt",
      "instance": 14,
      "scanner_issue_id": "SC4",
      "scanner_finding_id": "finding-7a5edf5e0e094b778b7b72e06a9f56b3",
      "scanner_severity": "LOW",
      "scanner_category": "Supply Chain",
      "file": "requirements.txt",
      "start_line": 1,
      "end_line": 1,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/requirements.txt#L1",
      "adjudication": "Unresolved package-version advisory evidence",
      "rationale": "A package name and open version constraint are not proof of an installed affected version. Nothing was installed or resolved; exact vulnerability status remains unknown. See LOCAL-08."
    },
    {
      "skill": "image-to-editable-ppt",
      "instance": 15,
      "scanner_issue_id": "SC1",
      "scanner_finding_id": "finding-24231099918d4fd4ab33dc5558bddb04",
      "scanner_severity": "LOW",
      "scanner_category": "Supply Chain",
      "file": "requirements.txt",
      "start_line": 2,
      "end_line": 2,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/requirements.txt#L2",
      "adjudication": "Genuine open dependency constraints",
      "rationale": "Lower bounds alone do not lock resolution or provide hashes. Audit the actual isolated installed set; see LOCAL-08."
    },
    {
      "skill": "image-to-editable-ppt",
      "instance": 16,
      "scanner_issue_id": "SC4",
      "scanner_finding_id": "finding-fa018354bfef4ee9884a1517bbc0706d",
      "scanner_severity": "LOW",
      "scanner_category": "Supply Chain",
      "file": "requirements.txt",
      "start_line": 2,
      "end_line": 2,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/requirements.txt#L2",
      "adjudication": "Unresolved package-version advisory evidence",
      "rationale": "A package name and open version constraint are not proof of an installed affected version. Nothing was installed or resolved; exact vulnerability status remains unknown. See LOCAL-08."
    },
    {
      "skill": "image-to-editable-ppt",
      "instance": 17,
      "scanner_issue_id": "SC1",
      "scanner_finding_id": "finding-f4b4f9149a384bad9af272bb80f29385",
      "scanner_severity": "LOW",
      "scanner_category": "Supply Chain",
      "file": "requirements.txt",
      "start_line": 3,
      "end_line": 3,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/requirements.txt#L3",
      "adjudication": "Genuine open dependency constraints",
      "rationale": "Lower bounds alone do not lock resolution or provide hashes. Audit the actual isolated installed set; see LOCAL-08."
    },
    {
      "skill": "image-to-editable-ppt",
      "instance": 18,
      "scanner_issue_id": "SC4",
      "scanner_finding_id": "finding-4f70dad5557348c3a12600853418729c",
      "scanner_severity": "LOW",
      "scanner_category": "Supply Chain",
      "file": "requirements.txt",
      "start_line": 3,
      "end_line": 3,
      "url": "https://github.com/inclusionAI/ling-cookbook/blob/c4a519f51bc238acefef009f957540d91ddd41fd/resources/recommended-skills/image-to-editable-ppt/requirements.txt#L3",
      "adjudication": "Unresolved package-version advisory evidence",
      "rationale": "A package name and open version constraint are not proof of an installed affected version. Nothing was installed or resolved; exact vulnerability status remains unknown. See LOCAL-08."
    }
  ]
}
