# Projet : AIR — Accounting Intermediate Representation # Auteur : Simon-Pierre Boucher # Contact : contact@spboucher.ai # CI: offline test suite (no API keys) + author-header gate on every push/PR. name: CI on: push: branches: [main] pull_request: jobs: test: runs-on: ubuntu-latest strategy: fail-fast: false matrix: python-version: ["3.11", "3.12", "3.13"] steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: Install run: pip install -e ".[dev]" - name: Author-header gate run: python scripts/check_headers.py - name: Offline test suite (99 tests — no network, no API keys) run: pytest tests/ -q --ignore=tests/test_llm_live.py golden-determinism: # compile the demo document twice on a fresh interpreter each time: # byte-identical CSV output or the build fails runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: "3.12" - name: Install run: pip install -e . - name: Determinism check run: | python -m sdk.cli compile tests/fixtures/demo_document.yaml \ --policies alsl/policies/ca-qc-2026.yaml --backend csv --out out_a python -m sdk.cli compile tests/fixtures/demo_document.yaml \ --policies alsl/policies/ca-qc-2026.yaml --backend csv --out out_b diff out_a/*.csv out_b/*.csv && echo "byte-identical: OK"