Skip to content

Security posture

AsDecided is local-first and deterministic. The native decided CLI reads repository Markdown and emits local files, stdout, and exit codes. Core validation and retrieval require no hosted index, model call, account, or Python runtime.

No-egress boundary

Validation, relationships, review, gate, search, and export operate on the local filesystem. The native MCP server emits no usage telemetry and has no network side channel. decided telemetry records a local compatibility preference only; the native build has no outbound sender (ADR-131). Regulated installations can also record an explicit hard-lock with:

decided telemetry off --enterprise

Optional read-access audit records are local files. Shipping them elsewhere is the operator's separate responsibility.

Dependency surface

The shipped implementation is the Cargo workspace under rust/. Review rust/Cargo.lock for its resolved dependency graph. The Python package, Python dependency manifest, and Python engine were retired from this repository; the final snapshot is preserved at python-engine-final. CI enforces deny.toml with cargo-deny for RustSec advisories, accepted licenses, crates.io-only sources, and the no-egress dependency ban list.

Verification

cd rust
cargo test --workspace --release
cargo clippy --workspace --all-targets -- -D warnings

CI also runs contract certification against asdecided-spec and live-corpus invariants. This is a self-attested open-source security posture, not a third-party certification.

Vulnerability handling

Report suspected vulnerabilities through the private-advisory flow described in the repository's SECURITY.md. We target acknowledgment within five business days, support the current stable release on a latest-release basis, and do not promise a fix-time SLA. Confirmed material issues may receive a GitHub Security Advisory and a CVE request when eligible. The policy also includes a good-faith research safe harbor and coordinated-disclosure guidance.

Release verification

Each native release carries a SHA256SUMS file, a CycloneDX SBOM, and GitHub artifact-build attestations. Archives include LICENSE, NOTICE, and THIRD-PARTY-NOTICES; the same notices are present in the published container image at /usr/share/doc/asdecided/. The release workflow runs the full native Rust battery before building or publishing any archive, crate, image, or MCP Registry entry.

After downloading an archive and the SHA256SUMS asset from the release, verify the bytes and provenance from a trusted checkout of this repository:

sha256sum -c SHA256SUMS
gh attestation verify asdecided-x86_64-unknown-linux-gnu.tar.gz \
  --repo asdecided/core

The SBOM is the asdecided-<tag>-sbom.cdx.json release asset. Verify a GHCR image's keyless signature with the GitHub Actions OIDC issuer and the exact release workflow identity:

cosign verify \
  --certificate-oidc-issuer https://token.actions.githubusercontent.com \
  --certificate-identity-regexp \
    'https://github.com/asdecided/core/.github/workflows/native-publish.yml@refs/tags/v.*' \
  ghcr.io/asdecided/core:mcp-v<version>

The checksum, SBOM, and signature cover the published artifact; the source repository and locked Cargo graph remain the reviewable build inputs.