CGF を 5 分で
Compliance Graph Format は、コードベースを署名済みの検証可能なコンプライアンス・グラフに変えます。動詞は四つ、バンドルは一つ、スプレッドシートはなし。
パイプライン
┌──────────┐ ┌───────────┐ ┌───────────┐ ┌───────────┐
│ Ingest │ ───► │ Check │ ───► │ Bundle │ ───► │ Verify │
│ (graph) │ │ (claims) │ │ (sign) │ │ (policy) │
└──────────┘ └───────────┘ └───────────┘ └───────────┘
│ │ │ │
▼ ▼ ▼ ▼
graph.json check.{md,txt} dossier.cgfevidence pass / fail
SARIF レポート (Ed25519 + TSA) + 違反一覧
四つの動詞
cgf ingest # → .cgf/graph.json
cgf check # → .cgf/check.{txt,md}
cgf bundle --out dossier.cgfevidence # 署名済みバンドル
cgf verify dossier.cgfevidence # 暗号 + ポリシー
- ingest はリポジトリを走査し、決定論的なグラフを出力します。コードファイル、シンボル、モデル、プロンプト、データセット、エンドポイント、ポリシー、コントロール、リスク、エビデンス、承認、デプロイ、関係者、開示が対象です。
- check はクレーム・パック(EU AI Act、GDPR Art. 30、SOC 2 CC、CGF-JP)をグラフに対して実行し、構造化された違反を書き出します。
- bundle はグラフ + クレーム + ナラティブを、一つ以上の Ed25519 署名と任意の RFC 3161 タイムスタンプを伴う単一の
.cgfevidenceファイルに封印します。 - verify は任意のバンドルをどこでも、オンラインでもオフラインでも読み、署名・タイムスタンプ・信頼ポリシーがすべて成立するかを報告します。
語彙
| 概念 | 何か | 場所 |
|---|---|---|
| グラフ | 型付きノード + 型付きエッジ | .cgf/graph.json |
| クレーム・パック | ある体系のためのルール集合 | src/lib/cgf/claim-packs/ |
| ナラティブ | 人間可読のドシエ | cgf narrative |
| バンドル | 署名済み .cgfevidence | cgf bundle / inspectBundle() |
| トラスト・ストア | 信頼鍵と TSA | .dpw/compliance/trust-store.json |
| 信頼ポリシー | 最少署名者、要信頼、… | TrustPolicy |
| ポリシー・プリセット | 保存された TrustPolicy | .dpw/compliance/policy-presets.json |
なぜグラフか?
コンプライアンスの問いはグラフの問いだからです:
- 「どのエンドポイントが個人データに触れるか?」 —
Endpoint → reads → Datasetを辿る。 - 「どのモデルにリスク評価が欠けているか?」 — 入力辺
Risk → applies_toのないModelノードを探す。 - 「どのデプロイを誰が承認したか?」 —
Approval → gates → Deploy → shipped → Endpoint。
グラフがひとたび署名されれば、答えは意見ではなくエビデンスになります。ナラティブはグラフからレンダリングされるのであって、その逆ではありません — だから根拠の事実と食い違うことができません。
TypeScript API
import {
ingest, runClaims, renderNarrative,
BundleBuilder, verifyWithPolicy, TrustStore,
} from '@/lib/cgf';
const graph = await ingest(root);
const claims = await runClaims(graph);
const narrative = renderNarrative({ graph, claims }, { format: 'md' });
const bytes = await new BundleBuilder()
.withGraph(graph)
.withClaims(claims)
.withNarrative(narrative)
.signEd25519(privateKey)
.timestamp('https://freetsa.org/tsr')
.build();
const result = await verifyWithPolicy(bytes, trustStore, {
minSigners: 2,
requireAllTrusted: true,
requireTimestamp: true,
});
次に読むもの
- .cgfevidence バンドル形式 — ファイル構成、署名スキーマ、RFC 3161 トークン。
- エビデンス・パック — EU AI Act、GDPR、SOC 2、CGF-JP。
- トラスト・ストアとポリシー・プリセット — 鍵、TSA、マシン間連携。
- CLI リファレンス — 全コマンドと全フラグ。
- ホワイトペーパー: Alignment by Construction。