Skip to content

docs(federation): ratify graph-complete v0.29 scope #213

docs(federation): ratify graph-complete v0.29 scope

docs(federation): ratify graph-complete v0.29 scope #213

Workflow file for this run

# Native Rust CI. Contract bytes are owned by asdecided-spec; the evolving RAC
# repository corpus is exercised through invariants rather than snapshots.
name: rust-spike
permissions:
contents: read
on:
workflow_call:
inputs:
ref:
description: "Revision to test when called from a release workflow."
type: string
required: false
default: ""
pull_request:
paths:
- "rust/**"
- "decisions/**"
- "deny.toml"
- ".github/dependabot.yml"
- ".github/workflows/rust-spike.yml"
push:
branches: [main]
paths:
- "rust/**"
- "decisions/**"
- "deny.toml"
- ".github/dependabot.yml"
- ".github/workflows/rust-spike.yml"
jobs:
windows-runtime:
name: Windows native runtime smoke
runs-on: windows-latest
timeout-minutes: 25
steps:
- uses: actions/checkout@v4
with:
ref: ${{ inputs.ref || github.ref }}
- name: Install rust toolchain (pinned by rust/rust-toolchain.toml)
run: rustup show
- uses: Swatinem/rust-cache@v2
with:
workspaces: rust
- name: Build native release binaries
working-directory: rust
run: cargo build --release --locked
# Keep this bounded: Linux owns the full workspace and inotify matrix;
# Windows proves that the shipped CLI, cache/store, rename transaction,
# and MCP wire contracts execute on the native filesystem.
- name: Native CLI and cache/store smoke
working-directory: rust
run: |
cargo test -p decided --test cli --release
cargo test -p asdecided-core --test index_store_vectors --release
cargo test -p asdecided-core --lib --release rename::tests::successful_transaction_replaces_all_files_and_cleans_backups
- name: MCP contract smoke
working-directory: rust
run: |
cargo test -p decided-mcp --test protocol_legacy --release
cargo test -p decided-mcp --test protocol_2026 --release
cargo test -p decided-mcp --test response_budget --release
cargo test -p decided-mcp --test docs_contract --release
macos-runtime:
name: macOS native runtime smoke
runs-on: macos-15
timeout-minutes: 25
steps:
- uses: actions/checkout@v4
with:
ref: ${{ inputs.ref || github.ref }}
- name: Install rust toolchain (pinned by rust/rust-toolchain.toml)
run: rustup show
- uses: Swatinem/rust-cache@v2
with:
workspaces: rust
- name: Build native release binaries
working-directory: rust
run: cargo build --release --locked
# Keep this bounded: macOS proves the shipped CLI, cache/store, rename
# transaction, and MCP contracts without duplicating Linux's watcher
# correctness gate.
- name: Native CLI and cache/store smoke
working-directory: rust
run: |
cargo test -p decided --test cli --release
cargo test -p asdecided-core --test index_store_vectors --release
cargo test -p asdecided-core --lib --release rename::tests::successful_transaction_replaces_all_files_and_cleans_backups
- name: MCP contract smoke
working-directory: rust
run: |
cargo test -p decided-mcp --test protocol_legacy --release
cargo test -p decided-mcp --test protocol_2026 --release
cargo test -p decided-mcp --test response_budget --release
cargo test -p decided-mcp --test docs_contract --release
rust-contract:
name: Rust contract + live-corpus invariants
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v4
with:
ref: ${{ inputs.ref || github.ref }}
- uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: Install rust toolchain (pinned by rust/rust-toolchain.toml)
run: rustup show
- uses: Swatinem/rust-cache@v2
with:
workspaces: rust
- name: Build native release binaries
working-directory: rust
run: cargo build --release --locked
- name: Install export-schema test dependency
run: python -m pip install --disable-pip-version-check -r rust/tools/export-schema-requirements.txt
- name: Export-schema contracts
run: python rust/tools/export_schema_contracts.py --engine rust/target/release/decided
# Keep the Linux-only event-watch correctness gate independently visible
# before the broader workspace suite.
- name: Freshness tracker (Linux inotify + stat fallback)
working-directory: rust
run: cargo test -p asdecided-core --test freshness_tracker --release
- name: Rust workspace unit and bounded regression suites
working-directory: rust
run: cargo test --workspace --release
- name: Clippy (strict across native targets)
working-directory: rust
run: cargo clippy --release --no-deps -- -D warnings
- name: Checkout authoritative asdecided-spec fixtures
uses: actions/checkout@v4
with:
repository: asdecided/spec
path: asdecided-spec
- name: Guard 1 — vendored registry matches asdecided-spec
env:
DECIDED_SPEC_DIR: ${{ github.workspace }}/asdecided-spec
run: python rust/spec/sync_spec.py
- name: Guard 2 — Rust reproduces asdecided-spec contract bytes
run: |
python rust/tools/conformance_certify.py \
--spec-dir "${{ github.workspace }}/asdecided-spec" \
--engine "rust=${{ github.workspace }}/rust/target/release/decided"
- name: MCP compatibility vectors (Rust consumer)
working-directory: rust
env:
ASDECIDED_MCP_SPEC_DIR: ${{ github.workspace }}/asdecided-spec
run: cargo test -p decided-mcp --test spec_vectors --release -- --nocapture
- name: Live RAC corpus invariants
run: |
python rust/tools/live_corpus_invariants.py \
--engine rust/target/release/decided \
--corpus decisions
dependency-policy:
name: dependency policy (cargo-deny)
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- uses: actions/checkout@v4
with:
ref: ${{ inputs.ref || github.ref }}
# deny.toml bans outbound HTTP/TLS/async stacks, restricts sources to
# crates.io, and checks the RustSec advisory and license databases.
- uses: EmbarkStudios/cargo-deny-action@v2
with:
manifest-path: rust/Cargo.toml
arguments: --all-features --locked