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. # # Post-merge on main: full-pytest.yml runs the FAST lane # (-m "not quarantine and not slow"). Soak / proof / register-matrix coverage # is nightly-full-pytest.yml (not on the PR critical path). # See docs/testing-lanes.md. on: pull_request: branches: [main] # Hybrid mirror CI (docs: Agent Workflow Guide — Hybrid Forgejo & GitHub # Actions): PR metadata lives on Forgejo only, so GitHub never sees # pull_request events. Mirrored feature-branch pushes run this same gate on # GitHub-hosted runners instead. The job guard below keeps the Forgejo Act # host from running each branch twice (push + pull_request). push: branches-ignore: [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 # Push events are the GitHub-mirror stand-in for Forgejo PRs; skip them on # the Forgejo Act host, which already covers branches via pull_request # (avoids double-running the 4GB host — the run #167 OOM class). if: github.event_name == 'pull_request' || github.server_url == 'https://github.com' 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.12.13' 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