Evidence packs
A claim pack is a declarative rule set that turns the CGF graph into a verdict. Each pack is small, versioned and shipped under src/lib/cgf/claim-packs/. v1.0 ships four packs.
EU AI Act — high-risk
The flagship pack. Covers the three articles that matter to high-risk AI providers:
| Article | What CGF checks |
|---|---|
| Art. 9 — Risk management | Every Model has at least one Risk covered by a Control implementing a Policy. |
| Art. 13 — Transparency | Every public Endpoint exposes a Disclosure node. |
| Art. 15 — Accuracy, robustness, cybersecurity | Models have Evidence of evaluation and a Deploy approval gating production. |
Violations include both a structured machine field and a human-readable narrative so auditors and engineers can read the same report.
Example structured violation:
{
"pack": "eu-ai-act-high-risk",
"rule": "art-9.risk-coverage",
"severity": "error",
"subject": { "type": "Model", "id": "models/triage-v3" },
"missing": { "edge": "Risk → applies_to → Model" },
"narrative": "Model `triage-v3` has no Risk node covering it. EU AI Act Art. 9 requires a documented risk management system for every high-risk model."
}
GDPR Article 30
Records of processing activities, generated automatically from
Endpoint → reads → Dataset edges where the dataset carries a personal-data
tag. The pack emits:
- legal basis (
lawful_basis), - retention period,
- recipients and cross-border transfers,
- a per-endpoint Article 30 table.
SOC 2 — Common Criteria
Coverage of CC1–CC9 mapped to controls in your graph. Gaps surface as
missing Control → mitigates → Risk edges. The same Control node can
satisfy SOC 2 CC and EU AI Act Art. 9 simultaneously — the graph is the
single source of truth.
CGF-JP — Japan regional profile
A strict superset of CGF v1.0. Adds four node types
(JP.Ringi, JP.Hanko, JP.NemawashiTrace, JP.HankoCert), five edge
types (stamps, precedes, escalates_to, ratifies, attested_by),
and four packs (jp-meti-aibg, jp-appi-art27, jp-fsa-mrm,
jp-aisi-eval). The bridge synthesizer turns completed ringi into core
Approval nodes so the EU AI Act gating works on Japanese workflows
unchanged.
See the CGF-JP launch post.
Writing your own pack
A pack is a TypeScript module exporting a ClaimPack:
import type { ClaimPack } from '@/lib/cgf';
export const myPack: ClaimPack = {
id: 'acme-internal-v1',
rules: [
{
id: 'every-endpoint-has-owner',
severity: 'error',
run: (g) =>
g.nodes('Endpoint')
.filter((e) => !g.edges(e, 'owned_by').length)
.map((e) => ({
subject: e,
missing: { edge: 'Endpoint → owned_by → Actor' },
narrative: `Endpoint ${e.id} has no owner.`,
})),
},
],
};
Rules are pure functions over the graph. No IO. The pack is deterministic by construction.