14. License compliance
# deny.toml
[graph]
all-features = true
[licenses]
version = 2
allow = ["MIT", "Apache-2.0", "Apache-2.0 WITH LLVM-exception", "BSD-2-Clause", "BSD-3-Clause",
"ISC", "Unicode-3.0", "Zlib", "CC0-1.0", "MIT-0", "0BSD", "BSL-1.0"]
confidence-threshold = 0.9
exceptions = [
# { allow = ["MPL-2.0"], crate = "webpki-roots" }, # file-level copyleft; add only after review
]
[bans]
multiple-versions = "warn" # watch for a second rig-core or sqlx version appearing
[advisories]
yanked = "deny"
[sources]
unknown-registry = "deny"
unknown-git = "deny"
- Rust:
cargo deny check licenses bans advisories sourcesis the first CI job. Some crates (for examplering) need a[[licenses.clarify]]entry; add them as cargo-deny reports them. - npm:
license-checker-rseidelsohn --onlyAllow …frompackage.json(§7.15), with a reviewed override file for packages that lack alicensefield. - Containers: generate an SBOM with
syftand check it withgrant(both Apache-2.0), denying AGPL, SSPL, Elastic, BUSL and RSAL, with a reviewed allow-list for base-image packages. - Models:
config/agents/models.yamlrecords each model's license and revision. Boot fails if a license is not inallowed_licenses(§6.5). - Pinning: exact
=pins for pre-1.0 crates and for Loco, committed lock files, images pinned by digest, and monthly dependency updates that rerun the license gate and evals. - Drift watch: a quarterly job diffs the LICENSE files of Loco, graph-flow, Activepieces, Langfuse, SeaweedFS, Valkey, vLLM and Docling, and the model cards.
This is engineering guidance, not legal advice. Have counsel review the final matrix, especially the CDLA-licensed model weights, MySQL's GPL in the optional Opik profile, and any redistribution of container images.