active-infinity 2.1.0

Active Infinity (Active ∞) — binary, zero-copy, content-addressable, graph-native, unit-aware and secret-safe data language for Active modules and AI agents
Documentation
name: CI

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  gates:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
        with:
          components: rustfmt, clippy
      - name: Format
        run: cargo fmt --all -- --check
      - name: Clippy (all targets, all features)
        run: cargo clippy --locked --all-targets --all-features -- -D warnings
      - name: Clippy (no default features)
        run: cargo clippy --locked --all-targets --no-default-features -- -D warnings
      - name: Tests
        run: cargo test --locked --all-features
      - name: Tests (no default features)
        run: cargo test --locked --no-default-features
      - name: Documentation
        env:
          # A broken intra-doc link is a documentation defect, not a warning.
          RUSTDOCFLAGS: -D warnings
        run: cargo doc --locked --no-deps --all-features
      - name: Benchmarks compile
        run: cargo bench --locked --bench codec --no-run

  msrv:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@1.85.0
      # The committed lockfile is the tested graph: time 0.3.44 and proptest
      # 1.9.0 are the newest releases that still build on 1.85.
      - name: MSRV check (every feature, every target)
        run: cargo check --locked --all-targets --all-features
      - name: MSRV check (no default features)
        run: cargo check --locked --no-default-features

  api-surface:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@nightly
      # The authoritative check: the resolved public API, not a text scan.
      - name: Generate rustdoc JSON
        run: cargo +nightly rustdoc --locked --lib --all-features -- -Zunstable-options --output-format json
      - name: No public secret accessor
        run: python3 scripts/api_surface.py target/doc/active_infinity.json

  hardening-status:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      # A stale row, a missing test, or a critical invariant without a
      # negative-control plan fails the build.
      - name: Validate the hardening matrix
        run: python3 scripts/hardening_status.py --check

  negative-controls:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      # A security test that still passes on a broken build proves nothing.
      - name: Every security-critical check must fail on a broken build
        run: python3 scripts/negative_controls.py --check

  package:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - name: Package (the tarball must build on its own)
        run: cargo package --locked

  fuzz:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@nightly
      - name: Install clang (libFuzzer runtime)
        run: sudo apt-get update && sudo apt-get install -y clang
      - name: Install cargo-fuzz
        run: cargo install cargo-fuzz --locked
      # The corpus is committed under fuzz/corpus/<target>/. A short campaign
      # per target on every push and pull request; main and nightly run longer.
      - name: Bounded fuzz campaign (every target)
        run: |

          for target in \
            fuzz_decode_infinity \
            fuzz_stream_reassembly \
            fuzz_canonical_roundtrip \
            fuzz_layout_sections \
            fuzz_graph_cycles \
            fuzz_secret_positions \
            fuzz_unit_discriminants \
            fuzz_projection_agreement; do
            echo "== $target =="
            cargo fuzz run "$target" -- -runs=2000
          done

  supply-chain:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - name: Install audit tools
        run: cargo install cargo-audit cargo-deny --locked
      - name: Advisory audit
        run: cargo audit
      - name: Dependency policy
        run: cargo deny check

  sbom:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      # Every release ships a CycloneDX inventory of the exact locked graph.
      - name: Generate and verify the SBOM
        run: |

          mkdir -p dist
          python3 scripts/sbom.py --output dist/active-infinity.cdx.json
          python3 scripts/sbom.py --check dist/active-infinity.cdx.json
      - uses: actions/upload-artifact@v4
        with:
          name: sbom
          path: dist/*.cdx.json