# 样例账本的八行表

账本：`agent_events-sample.csv`，300 行合成数据，列名与我们的库完全不同。
契约：`mapping-contract.json`。
命令：`python3 scripts/evidence_ledger.py --ledger ./agent_events-sample.csv --adapter ./mapping-contract.json --markdown`
快照：2026-10-27 12:3x。判据：每格分母只算该字段适用的行，非空率阈值 90%。

前三列是判定，第四列是每格的适用行非空率（分子/分母）——这就是可以复算的那部分。
「先补哪一格」那一列不在样例里，因为它按你账本的实际情况排，套模板没有意义。

| # | 国标技术项 | 判定 | 字段（表.列，适用行非空率） |
|---|---|---|---|
| 1 | 身份标识 | **有字段可出示** | `audit_log.agent_id` 100% 300/300；`audit_log.subject_principal` 100% 300/300；`audit_log.authority_commitment` 100% 300/300；`audit_log.model_artifact_source` 100% 300/300；`audit_log.model_artifact_revision` 100% 300/300；`audit_log.model_artifact_digest` 不适用 |
| 2 | 系统权限调用 | **无字段** | `audit_log.decision` 100% 300/300；`audit_log.scope_grant_id` 缺；`scope_grants.id` 缺 |
| 3 | 工具调用 | **有字段可出示** | `audit_log.tool_name` 100% 300/300；`audit_log.input_hash` 100% 300/300；`audit_log.output_hash` 99% 257/260 |
| 4 | 数据收集使用 | **有字段出示不了** | `audit_log.data_class` 40% 120/300；`audit_log.data_purpose` 100% 300/300 |
| 5 | 高风险操作人工介入 | **无字段** | `audit_log.approval_id` 缺；`approval_bindings.approver` 缺；`approval_bindings.consumed_at` 缺 |
| 6 | 输入输出安全防护 | **无字段** | `audit_log.input_guard` 缺；`audit_log.output_guard` 缺；`audit_log.anomaly_flags` 缺 |
| 7 | 日志留存与动态监测 | **无字段** | `audit_log.timestamp` 100% 300/300；`audit_log.current_hash` 缺；`audit_log.retention_until` 缺；`anomalies.rule` 缺 |
| 8 | 异常阻断与紧急关停 | **无字段** | `audit_log.enforcement_action` 缺；`kill_switch_events.id` 缺 |

合计：有字段可出示 **2** 项 / 有字段出示不了 **1** 项 / 无字段 **5** 项。判据：账本 `csv:sample-agent-ledger-csv [audit_log←agent_events-sample.csv(300)]` 窗口 最近 5000 行，非空率阈值 90%（空值含 `''`/`[]`/`{}` 默认值）；每格分母只算**该字段适用的行**（见契约表），不是全部行。

三个状态的含义：`有字段可出示` = 字段存在且适用行非空率过 90%；`有字段出示不了` = 字段在，但适用行上的非空率没过线；`无字段` = 契约里映射不上，或字段/表根本不存在。映射不上一律判无字段，不按列名相似度猜、不用默认值填。

补齐顺序不在本文件里。它取决于你账本里哪些格是零 schema 变更就能补的、哪些必须动写入端，属于交付件的一部分。
