Custom packs are your organization’s own DRAFT interpretation — always surfaced as
such (
source: tenant), never as the counsel-reviewed baseline. Mappings are draft,
pending your own counsel’s review; Wardin doesn’t certify them, and nothing here makes you
“compliant.” Scope is gateway-routed traffic only.Framework opt-in
By default every baseline framework shows on your EVIDENCE coverage surfaces. In Console → Organization → Compliance Frameworks, a manager can narrow that to just the frameworks your organization is audited against — a view filter only; the pack mappings themselves stay in-repo. Selecting all frameworks (the default) means a newly-added pack appears automatically.Custom packs (BYO mappings)
When the built-in frameworks don’t cover a framework you need — an internal standard, or a regulation we haven’t shipped a pack for yet — you can author your own in Console → Compliance Packs. A custom pack is a YAML file that maps your framework’s controls to the gateway’s in-path receipt checks. On save it is validated fail-closed — the same schema + referential-integrity rules the baseline packs pass at boot run on your pack, and a malformed pack is rejected with an error, so it never persists and can never mis-cite at query time. The full format is below.The pack YAML format
A pack has two halves:controls (what each control is, and how much of it Wardin’s
evidence covers) and checks (which signed receipt check proves which controls). Here
is a complete, minimal pack:
Top-level fields
Control fields
Available receipt checks
checks keys and proven_by entries must be one of these — the exact checks the gateway
signs onto a receipt (source of truth: the gateway’s buildChecks). A pack citing any
other name is rejected.
There is no
AUTH or PII check — authentication is implicit (no receipt without it),
and PII redaction surfaces as a GUARDRAIL check with result REDACTED.
Coverage levels
The mirror rule (the one that trips people up)
checks and proven_by are two views of the same relationship and must agree exactly.
For every control, the set of checks that list its id under checks must equal that
control’s proven_by. If ALLOWLIST: [acme:model-governance] appears under checks, then
acme:model-governance must have proven_by: [ALLOWLIST] — no more, no less. A mismatch
is rejected on save.
What gets rejected (fail-closed)
Your pack never persists unless all of these hold — the same rules the baseline packs pass at boot:- Valid schema +
effective_datematchesYYYY-MM-DD. - Every control id cited in
checksis defined incontrols(no dangling references). - Control ids are unique.
- Every
checkskey and everyproven_byentry is a known check. - The mirror rule holds for every control.
- No other active custom pack already exists for the same
framework+effective_date(archive the old one first, or use a new date).
Honesty requirements
A pack is evidence tooling, not a certification. Keep the language defensible:- Say a pack “produces evidence for” a control — never that it makes you “compliant” or “certified”.
- Scope claims to gateway-routed traffic — Wardin doesn’t see AI that bypasses the gateway.
- Name the
gaphonestly, especially where a check only runs in a particular mode (e.g.tool_allowlistis fail-closed only inenforcedagentic-governance mode). - Only cite a control with
enforced/partialcoverage when a real receipt check backs it. Don’t map a control to a check that doesn’t actually run for that request type.
How packs merge and resolve
Once saved, your pack is merged behind the baseline: it overrides a baseline framework at the same effective date, or adds a new framework/version. Everything downstream — the coverage map, per-control receipt queries, the attestation, and the Evidence Bundle — resolves against your merged set, with tenant-authored packs always marked distinctly from the baseline.How it stays trustworthy
- Content-hashed. Every pack is
sha256-hashed over its exact bytes; that hash is verified each time the pack loads (a silent database edit of a pack is detected and the pack is skipped, never served as the audited one). - Reproducible offline. Unlike baseline packs (reproducible from git), a custom pack
has no external copy — so its exact bytes are snapshotted into every Evidence Bundle
(active and archived), and its
packHashtravels with any citation. An auditor can reproduce a tenant-authored mapping without trusting us. - Audited. Every create / edit / archive / restore is recorded with who, what, and the content hash — visible as change history and carried in the bundle.
- Archive, don’t delete. Disabling a pack archives it (kept for reproducibility); restoring it re-merges it.
A custom pack is always stored and rendered as DRAFT, regardless of what its YAML
declares — a tenant-authored mapping can never present itself with counsel-reviewed
authority.