cxpak 1.1.0

Spends CPU cycles so you don't spend tokens. The LLM gets a briefing packet instead of a flashlight in a dark room.
Documentation
name: CI

on:
  push:
    branches: [main]
    paths-ignore:
      - '*.md'
      - 'docs/**'
      - 'LICENSE'
  pull_request:
    branches: [main]
    paths-ignore:
      - '*.md'
      - 'docs/**'
      - 'LICENSE'

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

env:
  CARGO_TERM_COLOR: always

jobs:
  fmt:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6.0.2
      - uses: dtolnay/rust-toolchain@stable
        with:
          components: rustfmt
      - run: cargo fmt -- --check

  clippy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6.0.2
      - uses: dtolnay/rust-toolchain@stable
        with:
          components: clippy
      - uses: Swatinem/rust-cache@v2.9.1
      - run: cargo clippy --all-targets -- -D warnings

  test:
    runs-on: ubuntu-latest
    needs: [fmt, clippy]
    steps:
      - uses: actions/checkout@v6.0.2
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2.9.1
      - run: cargo test --verbose

  coverage:
    runs-on: ubuntu-latest
    needs: [test]
    steps:
      - uses: actions/checkout@v6.0.2
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2.9.1
      - name: Install tarpaulin
        run: cargo install cargo-tarpaulin
      - name: Check coverage (90% minimum)
        run: |
          OUTPUT=$(cargo tarpaulin --skip-clean --no-default-features --features "daemon,lang-rust,lang-typescript,lang-javascript,lang-java,lang-python,lang-go,lang-c,lang-cpp,lang-ruby,lang-csharp,lang-swift,lang-kotlin,lang-bash,lang-css,lang-scss,lang-php,lang-markdown,lang-json,lang-yaml,lang-toml,lang-dockerfile,lang-hcl,lang-dart,lang-scala,lang-lua,lang-elixir,lang-zig,lang-haskell,lang-groovy,lang-objc,lang-r,lang-julia,lang-ocaml,lang-matlab,lang-proto,lang-svelte,lang-makefile,lang-html,lang-graphql,lang-xml,lang-sql,lang-prisma" --lib --test cli_test --test diff_test --test overview_test --test scanner_test --test trace_test --timeout 300 2>&1) || true
          echo "$OUTPUT"
          COVERAGE=$(echo "$OUTPUT" | grep -oP '[\d.]+(?=% coverage)' | tail -1)
          echo "Coverage: ${COVERAGE}%"
          if [ -z "$COVERAGE" ]; then
            echo "❌ Could not determine coverage from tarpaulin output"
            exit 1
          fi
          if [ "$(echo "$COVERAGE < 90" | bc -l)" -eq 1 ]; then
            echo "❌ Coverage ${COVERAGE}% is below 90% threshold"
            exit 1
          fi
          echo "✅ Coverage ${COVERAGE}% meets 90% threshold"