{
  "checker": {
    "claims": [
      {
        "claim": "Human-readable evidence report on stdout",
        "command": "<guest-path> scan <guest-path>",
        "evidence": "# DeepSeek Exposure Scan - Evidence Report\n\nGenerated by `deepseek-scan` (tool v0.1.0, rules v2026.10.22.1).\n\n| Field | Value |\n|---|---|\n| Scan target | `<guest-path> |\n| Timestamp (UTC) | 2026-10-26T13:02:10Z |\n| Files scanned | 9 |\n| Total findings | 26 |\n\nThis report lists indicators of DeepSeek components found in the scanned tree, with file-and-line evidence, so the results can be handed to an engineering, security or contracts team for review and remediation. Read the **Detection limits** section before drawing conclusions from it.\n\n## Summary by seve",
        "expected": "Markdown evidence report header printed",
        "input": "tests/fixtures/positive",
        "kind": "claim",
        "outcome": "Real input produced the expected result: # DeepSeek Exposure Scan - Evidence Report",
        "returncode": 0,
        "source": "# Human-readable evidence report on stdout",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "yes"
      },
      {
        "claim": "CI gate exits 1 on high or critical findings",
        "command": "<guest-path> scan <guest-path> --fail-on high",
        "evidence": "| Total findings | 26 |\n\nThis report lists indicators of DeepSeek components found in the scanned tree, with file-and-line evidence, so the results can be handed to an engineering, security or contracts team for review and remediation. Read the **Detection limits** section before drawing conclusions from it.\n\n## Summary by severity\n\n| Severity | Findings |\n|---|---|\n| critical | 2 |\n| high | 22 |\n| medium | 2 |\n\n## Findings\n\n### Critical\n\n#### DeepSeek hosted API endpoint (DS-001)\n\n- Location: `app.py:8`\n- Component: api.deepseek.com (hosted-api-endpoint)\n- Evidence type: api_endpoint\n\n```\nbas",
        "expected": "exit code 1 and report total 26",
        "input": "tests/fixtures/positive with --fail-on high",
        "kind": "claim",
        "outcome": "Real input produced the expected result: | Total findings | 26 |",
        "returncode": 1,
        "source": "# CI gate: exit 1 if any critical or high finding exists",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "yes"
      }
    ],
    "cycle_checks": [
      {
        "claim": "Scheduled or looping main behavior",
        "command": "",
        "evidence": "Inspected README, pyproject.toml, src/deepseek_scan/cli.py, action.yml, examples/ and .github/: deepseek-scan is a one-shot CLI (scan <path>) with no cron, scheduler, loop, webhook or --once/--now trigger. Only CI workflow/action runs exist, which are not product cycles.",
        "expected": "identify the product trigger",
        "input": "source inspection",
        "kind": "cycle",
        "outcome": "Inspected README, pyproject.toml, src/deepseek_scan/cli.py, action.yml, examples/ and .github/: deepseek-scan is a one-shot CLI (scan <path>) with no cron, scheduler, loop, webhook or --once/--now trigger. Only CI workflow/action runs exist, which are not product cycles.",
        "source": "repository entry points",
        "verdict": "yes"
      }
    ],
    "details": {
      "argv": [
        "<guest-path>",
        "scan",
        "<guest-path>",
        "--format",
        "json",
        "--out",
        "<guest-path>"
      ],
      "expected_file": "<guest-path>",
      "file_checked": true,
      "file_excerpt": "\"total_findings\": 26,\n    \"by_severity\": {\n      \"critical\": 2,\n      \"high\": 22,\n      \"medium\": 2\n    }\n  },\n  \"findings\": [\n    {\n      \"rule_id\": \"DS-001\",\n      \"rule_name\": \"DeepSeek hosted API endpoint\",\n      \"severity\": \"critical\",\n      \"component\": {\n        \"name\": \"api.deepseek.com\",\n        \"type\": \"hosted-api-endpoint\",\n        \"vendor\": \"DeepSeek\"\n      },\n      \"evidence\": {\n        \"type\": \"api_endpoint\",\n        \"source_file\": \"app.py\",\n        \"line\": 8,\n        \"snippet\": \"base_url=\\\"https://api.deepseek.com\\\",\"\n      },\n      \"regulatory_context\": \"Direct calls to DeepSeek-hosted API endpoints mean prompts and data are sent to infrastructure operated by the excluded vendor. References DHS Exclusion and Removal Order #2026-01 (procurement exclusion of DeepSeek products and services).\",\n      \"remediation\": \"Replace the endpoint with an approved model provider. If the endpoint is only in a comment or dead code, remove it and record the removal in your evidence file.\"\n    },\n    {\n      \"rule_id\": \"DS-009\",\n      \"rule_name\": \"DeepSeek model weight file (by filename)\",\n      \"severity\": \"critical\",\n      \"component\": {\n        \"name\": \"deepseek-r1-distill-qwen-7b.gguf\",\n        \"type\": \"ai-model-weights\",\n        \"vendor\": \"DeepSeek\"\n      },\n      \"evidence\": {\n        \"type\": \"artifact_filename\",\n        \"source_file\": \"models/deepseek-r1-distill-qwen-7b.gguf\",\n        \"line\": null,\n        \"snippet\": \"model artifact file named 'deepseek-r1-distill-qwen-7b.gguf'\"\n      },\n      \"regulatory_context\": \"A first-party DeepSeek weight file inside the product directory is a DeepSeek implementation artifact in the most literal sense covered by Order #2026-01.\",\n      \"remediation\": \"Remove the weight file from the product and from any image or bundle that embeds it. If weights were renamed, verify provenance with metadata or fingerprint tooling (see the project roadmap) rather than filenames.\"\n    },\n    {\n      \"rule_id\": \"DS-002\",\n      \"rule_name\": \"DeepSeek API credential / configuration variable\",\n      \"severity\": \"high\",\n      \"component\": {\n        \"name\": \"DEEPSEEK_API_KEY\",\n        \"type\": \"vendor-configuration\",\n        \"vendor\": \"DeepSeek\"\n      },\n      \"evidence\": {\n        \"type\": \"env_var\",\n        \"source_file\": \".env.example\",\n        \"line\": 2,\n        \"snippet\": \"DEEPSEEK_API_KEY=sk--***REDACTED***\"\n      },\n      \"regulatory_context\": \"Configuration for the excluded vendor's API indicates an integration point, even if the key itself is not present in the repository.\",\n      \"remediation\": \"Remove the variable from code, examples and deployment configuration. Rotate any real key that was ever committed, then record the change in your evidence file.\"\n    },\n    {\n      \"rule_id\": \"DS-002\",\n      \"rule_name\": \"DeepSeek API credential / configuration variable\",\n      \"severity\": \"high\",\n      \"component\": {\n        \"name\": \"DEEPSEEK_MODEL\",\n        \"type\": \"vendor-configuration\",\n        \"vendor\": \"DeepSeek\"\n      },\n      \"evidence\": {\n        \"type\": \"env_var\",\n        \"source_file\": \".env.example\",\n        \"line\": 3,\n        \"snippet\": \"DEEPSEEK_MODEL=deepseek-chat\"\n      },\n      \"regulatory_context\": \"Configuration for the excluded vendor's API indicates an integration point, even if the key itself is not present in the repository.\",\n      \"remediation\": \"Remove the variable from code, examples and deployment configuration. Rotate any real key that was ever committed, then record the change in your evidence file.\"\n    },\n    {\n      \"rule_id\": \"DS-003\",\n      \"rule_name\": \"DeepSeek model identifier string\",\n      \"severity\": \"high\",\n      \"component\": {\n        \"name\": \"deepseek-chat\",\n        \"type\": \"ai-model\",\n        \"vendor\": \"DeepSeek\"\n      },\n      \"evidence\": {\n        \"type\": \"model_name\",\n        \"source_file\": \".env.example\",\n        \"line\": 3,\n        \"snippet\": \"DEEPSEEK_MODEL=deepseek-chat\"\n      },\n      \"regulatory_context\": \"A DeepSeek model identifier in code or configuration indicates the product requests, loads or routes to a DeepSeek model, directly or through a gateway.\",\n      \"remediation\": \"Identify the call path that uses this model id, swap it for an approved model, and re-run this scan to confirm the identifier is gone.\"\n    },\n    {\n      \"rule_id\": \"DS-003\",\n      \"rule_name\": \"DeepSeek model identifier string\",\n      \"severity\": \"high\",\n      \"component\": {\n        \"name\": \"deepseek-r1\",\n        \"type\": \"ai-model\",\n        \"vendor\": \"DeepSeek\"\n      },\n      \"evidence\": {\n        \"type\": \"model_name\",\n        \"source_file\": \"Dockerfile\",\n        \"line\": 5,\n        \"snippet\": \"RUN ollama pull deepseek-r1:7b\"\n      },\n      \"regulatory_context\": \"A DeepSeek model identifier in code or configuration indicates the product requests, loads or routes to a DeepSeek model, directly or through a gateway.\",\n      \"remediation\": \"Identify the call path that uses this model id, swap it for an approved model, and re-run this scan to confirm the identifier is gone.\"\n    },\n    {\n      \"rule_id\": \"DS-008\",\n      \"rule_name\": \"DeepSeek reference in container / deployment definition\",\n      \"severity\": \"high\",\n      \"component\": {\n        \"name\": \"deepseek\",\n        \"type\": \"deployment-artifact\",\n        \"vendor\": \"DeepSeek\"\n      },\n      \"evidence\": {\n        \"type\": \"container\",\n        \"source_file\": \"Dockerfile\",\n        \"line\": 5,\n        \"snippet\": \"RUN ollama pull deepseek-r1:7b\"\n      },\n      \"regulatory_context\": \"Container definitions that pull DeepSeek images or models (for example via ollama pull deepseek-*) bake the excluded vendor's models into the deployed artifact.\",\n      \"remediation\": \"Swap the image or model pull for an approved model, rebuild the image, and re-scan the rebuilt definitions.\"\n    },\n    {\n      \"rule_id\": \"DS-005\",\n      \"rule_name\": \"DeepSeek SDK import\",\n      \"severity\": \"high\",\n      \"component\": {\n        \"name\": \"import deepseek\",\n        \"type\": \"vendor-sdk\",\n        \"vendor\": \"DeepSeek\"\n      },\n      \"evidence\": {\n        \"type\": \"sdk_import\",\n        \"source_file\": \"app.py\",\n        \"line\": 3,\n        \"snippet\": \"import deepseek\"\n      },\n      \"regulatory_context\": \"Importing a DeepSeek SDK (first-party or a client wrapper for the DeepSeek API) is direct evidence of a code-level integration with the excluded vendor's service.\",\n      \"remediation\": \"Remove the SDK usage and route the affected feature through an approved provider's SDK. Check dependency manifests too (rule DS-006).\"\n    },\n    {\n      \"rule_id\": \"DS-002\",\n      \"rule_name\": \"DeepSeek API credential / configuration variable\",\n      \"severity\": \"high\",\n      \"component\": {\n        \"name\": \"DEEPSEEK_API_KEY\",\n        \"type\": \"vendor-configuration\",\n        \"vendor\": \"DeepSeek\"\n      },\n      \"evidence\": {\n        \"type\": \"env_var\",\n        \"source_file\": \"app.py\",\n        \"line\": 7,\n        \"snippet\": \"api_key=<secret>\\\"DEEPSEEK_API_KEY\\\"],\"\n      },\n      \"regulatory_context\": \"Configuration for the excluded vendor's API indicates an integration point, even if the key itself is not present in the repository.\",\n      \"remediation\": \"Remove the variable from code, examples and deployment configuration. Rotate any real key that was ever committed, then record the change in your evidence file.\"\n    },\n    {\n      \"rule_id\": \"DS-003\",\n      \"rule_name\": \"DeepSeek model identifier string\",\n      \"severity\": \"high\",\n      \"component\": {\n        \"name\": \"deepseek-chat\",\n        \"type\": \"ai-model\",\n        \"vendor\": \"DeepSeek\"\n      },\n      \"evidence\": {\n        \"type\": \"model_name\",\n        \"source_file\": \"app.py\",\n        \"line\": 13,\n        \"snippet\": \"model=\\\"deepseek-chat\\\",\"\n      },\n      \"regulatory_context\": \"A DeepSeek model identifier in code or configuration indicates the product requests, loads or routes to a DeepSeek model, directly or through a gateway.\",\n      \"remediation\": \"Identify the call path that uses this model id, swap it for an approved model, and re-run this scan to confirm the identifier is gone.\"\n    },\n    {\n      \"rule_id\": \"DS-003\",\n      \"rule_name\": \"DeepSeek model identifier string\",\n      \"severity\": \"high\",\n      \"component\": {\n        \"name\": \"deepseek-reasoner\",\n        \"type\": \"ai-model\",\n        \"vendor\": \"DeepSeek\"\n      },\n      \"evidence\": {\n        \"type\": \"model_name\",\n        \"source_file\": \"app.py\",\n        \"line\": 20,\n        \"snippet\": \"model=\\\"deepseek-reasoner\\\",\"\n      },\n      \"regulatory_context\": \"A DeepSeek model identifier in code or configuration indicates the product requests, loads or routes to a DeepSeek model, directly or through a gateway.\",\n      \"remediation\": \"Identify the call path that uses this model id, swap it for an approved model, and re-run this scan to confirm the identifier is gone.\"\n    },\n    {\n      \"rule_id\": \"DS-002\",\n      \"rule_name\": \"DeepSeek API credential / configuration variable\",\n      \"severity\": \"high\",\n      \"component\": {\n        \"name\": \"DEEPSEEK_API_KEY\",\n        \"type\": \"vendor-configuration\",\n        \"vendor\": \"DeepSeek\"\n      },\n      \"evidence\": {\n        \"type\": \"env_var\",\n        \"source_file\": \"docker-compose.yml\",\n        \"line\": 5,\n        \"snippet\": \"- DEEPSEEK_API_KEY=sk--***REDACTED***\"\n      },\n      \"regulatory_context\": \"Configuration for the excluded vendor's API indicates an integration point, even if the key itself is not present in the repository.\",\n      \"remediation\": \"Remove the variable from code, examples and deployment configuration. Rotate any real key that was ever committed, then record the change in your evidence file.\"\n    },\n    {\n      \"rule_id\": \"DS-008\",\n      \"rule_name\": \"DeepSeek reference in container / deployment definition\",\n      \"severity\": \"high\",\n      \"component\": {\n        \"name\": \"DEEPSEEK\",\n        \"type\": \"deployment-artifact\",\n        \"vendor\": \"DeepSeek\"\n      },\n      \"evidence\": {\n        \"type\": \"container\",\n        \"source_file\": \"docker-compose.yml\",\n        \"line\": 5,\n        \"snippet\": \"- DEEPSEEK_API_KEY=sk--***REDACTED***\"\n      },\n      \"regulatory_context\": \"Container definitions that pull DeepSeek images or models (for example via ollama pull deepseek-*) bake the excluded vendor's models into the deployed artifact.\",\n      \"remediation\": \"Swap the image or model pull for an approved model, rebuild the image, and re-scan the rebuilt definitions.\"\n    },\n    {\n      \"rule_id\": \"DS-003\",\n      \"rule_name\": \"DeepSeek model identifier string\",\n      \"severity\": \"high\",\n      \"component\": {\n        \"name\": \"deepseek-r1\",\n        \"type\": \"ai-model\",\n        \"vendor\": \"DeepSeek\"\n      },\n      \"evidence\": {\n        \"type\": \"model_name\",\n        \"source_file\": \"docker-compose.yml\",\n        \"line\": 7,\n        \"snippet\": \"image: registry.example.invalid/deepseek-r1:latest\"\n      },\n      \"regulatory_context\": \"A DeepSeek model identifier in code or configuration indicates the product requests, loads or routes to a DeepSeek model, directly or through a gateway.\",\n      \"remediation\": \"Identify the call path that uses this model id, swap it for an approved model, and re-run this scan to confirm the identifier is gone.\"\n    },\n    {\n      \"rule_id\": \"DS-008\",\n      \"rule_name\": \"DeepSeek reference in container / deployment definition\",\n      \"severity\": \"high\",\n      \"component\": {\n        \"name\": \"deepseek\",\n        \"type\": \"deployment-artifact\",\n        \"vendor\": \"DeepSeek\"\n      },\n      \"evidence\": {\n        \"type\": \"container\",\n        \"source_file\": \"docker-compose.yml\",\n        \"line\": 7,\n        \"snippet\": \"image: registry.example.invalid/deepseek-r1:latest\"\n      },\n      \"regulatory_context\": \"Container definitions that pull DeepSeek images or models (for example via ollama pull deepseek-*) bake the excluded vendor's models into the deployed artifact.\",\n      \"remediation\": \"Swap the image or model pull for an approved model, rebuild the image, and re-scan the rebuilt definitions.\"\n    },\n    {\n      \"rule_id\": \"DS-010\",\n      \"rule_name\": \"DeepSeek architecture",
      "kind": "cli",
      "needs_browser": false,
      "needs_credentials": false,
      "returncode": 0,
      "scope": "product operation",
      "stderr": "deepseek-scan: 26 finding(s) in 9 file(s); report written to <guest-path>",
      "stdout": "",
      "working": true
    },
    "evidence_strength": "readme_checked",
    "example_checks": [
      {
        "claim": "Scan the sample project and write a markdown evidence report",
        "command": "<guest-path> scan <guest-path> --out <guest-path>",
        "deferred": false,
        "evidence": "t gateway's own domains and model names; or any use that leaves no artifact in the scanned tree.\n\nA report with findings is evidence that the listed indicators are present at the listed locations. A report without findings means only that none of the indicators in the current rule set were found in the scanned tree; it is not proof that no DeepSeek-derived component exists in a product. Determinations about obligations under DHS Exclusion and Removal Order #2026-01 or FAR 52.204-30 rest with each organization and its counsel. This tool is an evidence-collection aid, not a legal determination.\n",
        "expected": "markdown report with 26 findings",
        "input": "tests/fixtures/positive",
        "kind": "example",
        "outcome": "command completed successfully",
        "returncode": 0,
        "source": "README.md Quick start / Example output",
        "verdict": "yes"
      },
      {
        "claim": "Project test suite (README Contributing: run pytest)",
        "command": "<guest-path> -q",
        "deferred": false,
        "evidence": ".................                                                        [100%]\n17 passed in 0.44s",
        "expected": "17 passed",
        "input": "tests/",
        "kind": "example",
        "outcome": "command completed successfully",
        "returncode": 0,
        "source": "README.md ## Contributing",
        "verdict": "yes"
      },
      {
        "claim": "Lint check (README Contributing: ruff check src tests)",
        "command": "<guest-path> check src tests",
        "deferred": false,
        "evidence": "All checks passed!",
        "expected": "All checks passed!",
        "input": "src tests",
        "kind": "example",
        "outcome": "command completed successfully",
        "returncode": 0,
        "source": "README.md ## Contributing",
        "verdict": "yes"
      }
    ],
    "status": "PASS"
  },
  "deviations": [
    "Used a venv at <guest-path> with absolute binary paths instead of a global pip install, so the guest's system Python was not modified.",
    "Installed pytest and ruff into the venv because README Contributing documents them as dev tools.",
    "Checker path: <guest-path> was used; /inputs/coldpass-preflight.py does not exist in this guest."
  ],
  "fault_owner": null,
  "main_blocker": null,
  "operation": "Scan a source tree for DeepSeek exposure indicators and write an evidence report (deepseek-scan scan <path>, markdown to stdout or --format json --out FILE, --fail-on CI gate)",
  "operation_scope": "Local, read-only static scan of a directory; no network calls. Requires Python 3.10+ (ran on 3.12.3) in a venv; no third-party runtime dependencies. Tested on the bundled tests/fixtures/positive sample project. Browser endpoint CDP_URL was reachable (HTTP 200) but not used, since the product is a CLI.",
  "outcome": "working",
  "plain_failure": null,
  "steps": [
    "python3 -m venv <guest-path>",
    "<guest-path> install <guest-path>  (README 'Install', from a checkout)",
    "<guest-path> scan <guest-path>  (README Quick start: stdout report, 26 findings)",
    "<guest-path> scan .../tests/fixtures/positive --format json --out <guest-path>  (README Quick start JSON output)",
    "<guest-path> scan .../tests/fixtures/positive --fail-on high  (README CI gate: exit 1 observed)",
    "<guest-path> install pytest ruff; pytest -q (17 passed); ruff check src tests (clean)"
  ],
  "stuck_step": null,
  "suggested_fix": null
}
