# Codecov configuration for physical-ai-toolchain.
#
# Flag → Workflow → cwd → uploaded coverage artifact → coverage scope
# -----------------------------------------------------------------------------------------------
# pytest-training      | pytest-training.yml            | repo root                       | logs/coverage-training.xml        | --cov=training
# pytest-dm-tools      | pytest-dm-tools.yml            | repo root                       | logs/coverage-dm-tools.xml        | --cov=data-management/tools
# pytest-data-pipeline | pytest-data-pipeline.yml       | repo root                       | logs/coverage-data-pipeline.xml   | --cov=data-pipeline/capture
# pytest-inference     | pytest-inference.yml           | repo root                       | logs/coverage-inference.xml       | --cov=fleet-deployment/inference
# pytest-shared-ci     | pytest-shared-ci.yml           | repo root                       | logs/coverage-shared-ci.xml       | --cov=shared/ci
# pytest-dataviewer    | dataviewer-backend-pytests.yml | data-management/viewer/backend  | logs/coverage.xml                 | --cov=src
# pytest-evaluation    | evaluation-pytests.yml         | evaluation                      | evaluation/logs/coverage.xml      | --cov=.
# pytest-fuzz          | fuzz-regression-tests.yml      | repo root                       | logs/coverage.xml                 | --cov=tests --cov=data-management/viewer/backend/src --cov=training
# vitest               | dataviewer-frontend-tests.yml  | data-management/viewer/frontend | coverage/lcov.info                | vitest --coverage
# vitest-components    | dataviewer-frontend-tests.yml  | data-management/viewer/frontend | coverage/lcov.info                | subset: src/components/
# vitest-features      | dataviewer-frontend-tests.yml  | data-management/viewer/frontend | coverage/lcov.info                | subset: src/components/{dashboard,annotation-panel,frame-editor,episode-viewer}/
# vitest-lib           | dataviewer-frontend-tests.yml  | data-management/viewer/frontend | coverage/lcov.info                | subset: src/lib/
# vitest-state         | dataviewer-frontend-tests.yml  | data-management/viewer/frontend | coverage/lcov.info                | subset: src/stores/, src/hooks/
# vitest-app           | dataviewer-frontend-tests.yml  | data-management/viewer/frontend | coverage/lcov.info                | subset: src/App.tsx
# go                   | go-tests.yml                   | infrastructure/terraform/e2e    | coverage.out                      | go test -cover
# terraform            | terraform-tests.yml            | infrastructure/terraform        | n/a                               | terraform test
# pester               | pester-tests.yml               | repo root                       | logs/pester-coverage.xml          | Invoke-Pester -CodeCoverage
#
# Flag overlaps (intentional):
#   pytest-fuzz overlaps pytest-training (training/) and pytest-dataviewer (viewer/backend/src/).
#   go ⊂ terraform (infrastructure/terraform/e2e/ ⊂ infrastructure/terraform/);
#     deduplicated at the component layer (infrastructure-terraform vs infrastructure-go-e2e).
#   vitest-* (components/features/lib/state/app) overlap the aggregate vitest flag and each
#     other (vitest-features ⊂ vitest-components since the feature directories
#     dashboard/, annotation-panel/, frame-editor/, episode-viewer/ all live under src/components/);
#     intentional to surface per-section coverage trends without losing the aggregate view.

codecov:
  notify:
    wait_for_ci: true

coverage:
  precision: 2
  round: down
  range: "80...100"
  status:
    project:
      default: false
      pester:
        flags:
          - pester
        target: 80%
      pytest-training:
        flags:
          - pytest-training
        target: 80%
      pytest-dm-tools:
        flags:
          - pytest-dm-tools
        target: 80%
      pytest-data-pipeline:
        flags:
          - pytest-data-pipeline
        target: 80%
      pytest-inference:
        flags:
          - pytest-inference
        target: 80%
      pytest-shared-ci:
        flags:
          - pytest-shared-ci
        target: 80%
      pytest-dataviewer:
        flags:
          - pytest-dataviewer
        target: 80%
      pytest-evaluation:
        flags:
          - pytest-evaluation
        target: 80%
      # pytest-fuzz, vitest-*, terraform, and go intentionally omitted from project status gating:
      # fuzzing coverage is always low by design, vitest improvements are tracked in a separate
      # workstream, terraform reports test results without a coverage XML, and go e2e tests do
      # not produce meaningful coverage signal at the PR granularity.
    # Disable the top-level aggregate patch status; component-level patch statuses still apply.
    patch: off

flags:
  pytest-training:
    paths:
      - training/
    carryforward: true
  pytest-dm-tools:
    paths:
      - data-management/tools/
    carryforward: true
  pytest-data-pipeline:
    paths:
      - data-pipeline/capture/
    carryforward: true
  pytest-inference:
    paths:
      - fleet-deployment/inference/
    carryforward: true
  pytest-shared-ci:
    paths:
      - shared/ci/
    carryforward: true
  pytest-dataviewer:
    paths:
      - data-management/viewer/backend/src/
    carryforward: true
  pytest-fuzz:
    paths:
      - tests/
      - data-management/viewer/backend/src/
      - training/
    carryforward: true
  pytest-evaluation:
    paths:
      - evaluation/
    carryforward: true
  vitest:
    paths:
      - data-management/viewer/frontend/src/
    carryforward: true
  vitest-components:
    paths:
      - data-management/viewer/frontend/src/components/
    carryforward: true
  vitest-features:
  # Most actively developed feature areas tracked individually; remaining components fall under vitest-components.
    paths:
      - data-management/viewer/frontend/src/components/dashboard/
      - data-management/viewer/frontend/src/components/annotation-panel/
      - data-management/viewer/frontend/src/components/frame-editor/
      - data-management/viewer/frontend/src/components/episode-viewer/
    carryforward: true
  vitest-lib:
    paths:
      - data-management/viewer/frontend/src/lib/
      - data-management/viewer/frontend/src/api/
      - data-management/viewer/frontend/src/types/
    carryforward: true
  vitest-state:
    paths:
      - data-management/viewer/frontend/src/stores/
      - data-management/viewer/frontend/src/hooks/
    carryforward: true
  vitest-app:
    paths:
      - data-management/viewer/frontend/src/App.tsx
    carryforward: true
  go:
    paths:
      - infrastructure/terraform/e2e/
    carryforward: true
  terraform:
    paths:
      - infrastructure/terraform/
    carryforward: true
  pester:
    paths:
      - scripts/
    carryforward: true

component_management:
  default_rules:
    statuses:
      - type: project
        target: 80%
        threshold: 0%
        if_not_found: success
      - type: patch
        target: 80%
        threshold: 0%
        only_pulls: true
        if_ci_failed: error
        if_not_found: success
  individual_components:
    - component_id: training
      name: Training
      paths:
        - training/*.py
        - training/rl/**
        - training/il/**
        - training/vla/**
        - training/pipelines/**
        - training/packaging/**
        - training/utils/**
    - component_id: evaluation
      name: Evaluation
      paths:
        - evaluation/sil/**
        - evaluation/metrics/**
    - component_id: data-pipeline-capture
      name: Data Pipeline / Capture
      paths:
        - data-pipeline/capture/**
        - "!data-pipeline/capture/tests/**"
    - component_id: fleet-deployment-inference
      name: Fleet Deployment / Inference
      paths:
        - fleet-deployment/inference/**
    - component_id: dataviewer-backend
      name: Dataviewer Backend
      paths:
        - data-management/viewer/backend/src/**
    - component_id: dataviewer-backend-routers
      name: Dataviewer Backend / Routers
      paths:
        - data-management/viewer/backend/src/api/routers/**
        - data-management/viewer/backend/src/api/routes/**
    - component_id: dataviewer-backend-services
      name: Dataviewer Backend / Services
      paths:
        - data-management/viewer/backend/src/api/services/**
    - component_id: dataviewer-backend-storage
      name: Dataviewer Backend / Storage
      paths:
        - data-management/viewer/backend/src/api/storage/**
        - data-management/viewer/backend/src/api/models/**
    - component_id: dataviewer-backend-security
      name: Dataviewer Backend / Security
      paths:
        - data-management/viewer/backend/src/api/auth.py
        - data-management/viewer/backend/src/api/csrf.py
        - data-management/viewer/backend/src/api/validation.py
        - data-management/viewer/backend/src/api/rate_limiter.py
        - data-management/viewer/backend/src/api/middleware.py
    - component_id: dataviewer-frontend
      name: Dataviewer Frontend
      paths:
        - data-management/viewer/frontend/src/**
    - component_id: dataviewer-frontend-components
      name: Dataviewer Frontend / Components
      paths:
        - data-management/viewer/frontend/src/components/**
    - component_id: dataviewer-frontend-lib
      name: Dataviewer Frontend / Lib
      paths:
        - data-management/viewer/frontend/src/lib/**
        - data-management/viewer/frontend/src/api/**
        - data-management/viewer/frontend/src/types/**
    - component_id: dataviewer-frontend-state
      name: Dataviewer Frontend / State
      paths:
        - data-management/viewer/frontend/src/stores/**
        - data-management/viewer/frontend/src/hooks/**
    - component_id: data-management-tools
      name: Data Management Tools
      paths:
        - data-management/tools/**
        - "!data-management/tools/tests/**"
    - component_id: shared-ci
      name: Shared CI
      paths:
        - shared/ci/**
        - "!shared/ci/tests/**"
    - component_id: infrastructure-terraform
      name: Infrastructure / Terraform
      paths:
        - infrastructure/terraform/**/*.tf
    - component_id: infrastructure-go-e2e
      name: Infrastructure / Go E2E
      paths:
        - infrastructure/terraform/e2e/**/*.go
    - component_id: scripts-pester
      name: Scripts / Pester
      paths:
        - scripts/**/*.ps1
        - scripts/**/*.psm1
    - component_id: fuzz-suite
      name: Fuzz Suite
      statuses: []
      paths:
        - tests/fuzz_harness.py
        - tests/fuzz-corpus/**

comment:
  layout: "header, diff, flags, files"
  behavior: default
  require_changes: false
  show_carryforward_flags: true

ignore:
  - "training/tests/**"
  - "data-management/viewer/backend/tests/**"
  - "data-management/tools/tests/**"
  - "shared/ci/tests/**"
  - "data-pipeline/capture/tests/**"
  - "evaluation/tests/**"
  - "scripts/tests/**"
  - "scripts/security/zap-to-sarif.py"
  - "tests/e2e/**"
  - "fleet-deployment/inference/tests/**"
  - "**/__pycache__/**"
  - "**/.venv/**"
  - "**/node_modules/**"
  - "**/*.test.ts"
  - "**/*.test.tsx"
  - "external/**"
  - "docs/**"
  - "workflows/**"
  - "config/**"
  - "logs/**"
