Feature: Coverage threshold enforcement
  The project enforces a minimum 97% code coverage threshold.
  This feature validates that the coverage configuration and nox session
  are properly set up to enforce this requirement.

  @tdd_issue @tdd_issue_4227
  Scenario: Coverage threshold is configured at 97% in noxfile
    Given the noxfile.py exists
    When I parse the COVERAGE_THRESHOLD constant from noxfile.py
    Then the coverage threshold should be 97

  Scenario: Coverage report session uses fail-under flag
    Given the noxfile.py exists
    When I read the coverage_report session source from noxfile.py
    Then the session should contain a fail-under argument matching the threshold

  Scenario: Coverage run configuration has branch coverage enabled
    Given the pyproject.toml exists
    When I parse the coverage run configuration from pyproject.toml
    Then branch coverage should be enabled

  Scenario: Coverage run configuration measures src directory
    Given the pyproject.toml exists
    When I parse the coverage run configuration from pyproject.toml
    Then the source list should include "src"

  Scenario: Coverage data file is stored under build directory
    Given the pyproject.toml exists
    When I parse the coverage run configuration from pyproject.toml
    Then the data file should be under the build directory

  Scenario: Coverage HTML report directory is under build
    Given the pyproject.toml exists
    When I parse the coverage html configuration from pyproject.toml
    Then the html directory should be under the build directory

  Scenario: Coverage XML report path is under build
    Given the pyproject.toml exists
    When I parse the coverage xml configuration from pyproject.toml
    Then the xml output should be under the build directory

  Scenario: CI workflow coverage job references nox session
    Given the CI workflow file exists
    When I parse the coverage job from the CI workflow
    Then the coverage job should run nox -s coverage_report

  Scenario: CI workflow coverage job depends on lint and typecheck
    Given the CI workflow file exists
    When I parse the coverage job from the CI workflow
    Then the coverage job should depend on lint and typecheck

  Scenario: Coverage report session emits CI-parseable summary on success
    Given the noxfile.py exists
    When I read the coverage_report session source from noxfile.py
    Then the session should emit a COVERAGE OK summary line

  Scenario: Coverage report session emits CI-parseable summary on failure
    Given the noxfile.py exists
    When I read the coverage_report session source from noxfile.py
    Then the session should emit a COVERAGE FAILED summary line
