version: 2

secret:
  # Exclude files and paths by globbing
  ignored_paths:
    - "**/*.whl"
    - "**/*.pyc"
    - "**/__pycache__/**"
    - "**/node_modules/**"
    - "**/dist/**"
    - "**/build/**"
    - "**/.git/**"
    - "**/venv/**"
    - "**/.venv/**"
    
    # Large data/metadata files that don't need scanning
    - "**/model_prices_and_context_window*.json"
    - "**/*_metadata/*.txt"
    - "**/tokenizers/*.json"
    - "**/tokenizers/*"
    - "miniconda.sh"
    
    # Build outputs and static assets
    - "litellm/proxy/_experimental/out/**"
    - "ui/litellm-dashboard/public/**"
    - "**/swagger/*.js"
    - "**/*.woff"
    - "**/*.woff2"
    - "**/*.avif"
    - "**/*.webp"
    
    # Test data files
    - "**/tests/**/data_map.txt"
    - "tests/**/*.txt"
    
    # Documentation and other non-code files
    - "docs/**"
    - "**/*.md"
    - "**/*.lock"
    - "poetry.lock"
    - "package-lock.json"

  # Ignore security incidents with the SHA256 of the occurrence (false positives)
  ignored_matches:
    # === Current detected false positives (SHA-based) ===
    
    # gcs_pub_sub_body - folder name, not a password
    - name: GCS pub/sub test folder name
      match: 75f377c456eede69e5f6e47399ccee6016a2a93cc5dd11db09cc5b1359ae569a
    
    # os.environ/APORIA_API_KEY_1 - environment variable reference
    - name: Environment variable reference APORIA_API_KEY_1
      match: e2ddeb8b88eca97a402559a2be2117764e11c074d86159ef9ad2375dea188094
    
    # os.environ/APORIA_API_KEY_2 - environment variable reference
    - name: Environment variable reference APORIA_API_KEY_2
      match: 09aa39a29e050b86603aa55138af1ff08fb86a4582aa965c1bd0672e1575e052
    
    # oidc/circleci_v2/ - test authentication path, not a secret
    - name: OIDC CircleCI test path
      match: feb3475e1f89a65b7b7815ac4ec597e18a9ec1847742ad445c36ca617b536e15
    
    # text-davinci-003 - OpenAI model identifier, not a secret
    - name: OpenAI model identifier text-davinci-003
      match: c489000cf6c7600cee0eefb80ad0965f82921cfb47ece880930eb7e7635cf1f1
    
    # Base64 Basic Auth in test_pass_through_endpoints.py - test fixture, not a real secret
    - name: Test Base64 Basic Auth header in pass_through_endpoints test
      match: 61bac0491f395040617df7ef6d06029eac4d92a4457ac784978db80d97be1ae0
    
    # PostgreSQL password "postgres" in CI configs - standard test database password
    - name: Test PostgreSQL password in CI configurations
      match: 6e0d657eb1f0fbc40cf0b8f3c3873ef627cc9cb7c4108d1c07d979c04bc8a4bb
    
    # Bearer token in locustfile.py - test/example API key for load testing
    - name: Test Bearer token in locustfile load test
      match: 2a0abc2b0c3c1760a51ffcdf8d6b1d384cef69af740504b1cfa82dd70cdc7ff9
    
    # Inkeep API key in docusaurus.config.js - public documentation site key
    - name: Inkeep API key in documentation config
      match: c366657791bfb5fc69045ec11d49452f09a0aebbc8648f94e2469b4025e29a75
    
    # Langfuse credentials in test_completion.py - test credentials for integration test
    - name: Langfuse test credentials in test_completion
      match: c39310f68cc3d3e22f7b298bb6353c4f45759adcc37080d8b7f4e535d3cfd7f4
    
    # Test password "sk-1234" in e2e test fixtures - test fixture, not a real secret
    - name: Test password in e2e test fixtures
      match: ce32b547202e209ec1dd50107b64be4cfcf2eb15c3b4f8e9dc611ef747af634f
    
    # === Preventive patterns for test keys (pattern-based) ===
    
    # Test API keys (124 instances across 45 files)
    - name: Test API keys with sk-test prefix
      match: sk-test-
    
    # Mock API keys
    - name: Mock API keys with sk-mock prefix
      match: sk-mock-
    
    # Fake API keys
    - name: Fake API keys with sk-fake prefix
      match: sk-fake-
    
    # Generic test API key patterns
    - name: Test API key patterns
      match: test-api-key

    - name: Short fake sk keys (1–9 digits only)
      match: \bsk-\d{1,9}\b

