name: smoke

# Fast PR gate — runs the smoke suite on every PR push.
# Covers: chat runtime, pipeline, architectural invariants, audio sensorium
# (tests/test_audio_*.py — compiler/eval-gates/mount/CRDT-merge/teachers, ~3s),
# and identity falsifiability (tests/test_pack_measurements_phase2.py, ADR-0043
# — ratified packs diverge directionally; pack-invariant refusal floor; no
# fabrication).  The falsifiability lane adds ~4 min but blocks-on-regression.
#
# Full pytest runs post-merge to main (see full-pytest.yml).
# Regressions caught here block the PR; anything outside the smoke
# suite is caught on main within minutes of merge.

on:
  pull_request:
    branches: [main]

permissions:
  contents: read

concurrency:
  group: smoke-${{ github.ref }}
  cancel-in-progress: true

jobs:
  smoke:
    name: smoke (-m "not quarantine")
    runs-on: ubuntu-latest
    timeout-minutes: 10

    steps:
      - name: checkout
        uses: actions/checkout@v4
        with:
          fetch-depth: 1

      - name: set up uv
        uses: astral-sh/setup-uv@v5
        with:
          python-version: '3.11'
          enable-cache: true

      - name: install dependencies
        run: |
          uv pip install -e ".[dev]" pyyaml

      - name: pytest smoke suite
        env:
          PYTHONPATH: ${{ github.workspace }}
        run: |
          uv run pytest -m "not quarantine" --tb=short -q \
            tests/test_chat_runtime.py \
            tests/test_achat.py \
            tests/test_runtime_config.py \
            tests/test_cognitive_turn_pipeline.py \
            tests/test_architectural_invariants.py \
            tests/test_audio_*.py \
            tests/test_pack_measurements_phase2.py
