失败证据格式与 AUD 码登记表¶
审计发现必须以机器可读的证据文档记录。证据文档由 runner/run-audit.mjs 输出到 stdout,格式由 schemas/audit-evidence.schema.json 冻结,并通过被消费 Contracts 的 validateDocument(2020-12 方言、strict 策略)自校验——证据文档本身不合格是机制错误(退出码 2)。
证据文档形状¶
{
"schemaVersion": 1,
"kind": "skill-family.audit.evidence",
"auditId": "fnd-060-independent-audit",
"generatedAt": "RFC 3339 date-time",
"consumer": {
"contractsVersion": "1.0.0",
"auditSurfaceVersion": 1,
"surfaceDigest": { "algorithm": "sha256", "value": "64 位十六进制" }
},
"verdict": "pass | fail",
"classCoverage": {
"<class>": { "fixtures": 0, "detected": 0, "required": 3, "satisfied": false }
},
"fixtureResults": [
{ "fixtureId": "AUD-M1-01", "mutationClass": "structure", "expectedAuditCode": "AUD-M1-STRUCT", "detected": true, "observed": {} }
],
"findings": [
{
"findingId": "F-0001",
"auditCode": "AUD-BASE-001",
"severity": "mandatory",
"mutationClass": null,
"fixtureId": null,
"detected": true,
"summary": "人类可读摘要",
"details": {}
}
]
}
要点:
consumer用版本坐标 + surface 摘要钉死被消费的 Contracts 包,证据因此可回溯到精确字节;fixtureResults是全部 fixture 的重放记录(含通过项),findings只收违规项;- v1 冻结单一严重级
mandatory:任何发现都使verdict为fail; classCoverage五类齐全;satisfied = fixtures ≥ 3 且 detected ≥ 1。
裁决规则¶
findings为空 →verdict = pass,退出码 0;- 任一发现存在 →
verdict = fail,退出码 1; - 用法或机制错误(含证据自校验失败)→ 退出码 2,不产生证据或产生作废证据;
- 漏报律:任一类
satisfied = false必须产生 AUD-MISS-001 发现,整体 verdict 必为 fail。
AUD 码登记表(append-only)¶
审计码属于审计自有命名空间 AUD-,不进入 Contracts 的 SFC 登记;审计对 SFC 码只读消费。机器可读副本见 baseline/audit-codes.json。
| 码 | 名称 | 含义 |
|---|---|---|
| AUD-M1-STRUCT | STRUCTURE_MUTATION_DETECTED | 结构类变异被检出(观察码等于预期稳定码) |
| AUD-M2-SEM | SEMANTIC_MUTATION_DETECTED | 语义类变异被检出 |
| AUD-M3-DIGEST | DIGEST_MISMATCH_DETECTED | 摘要类变异被检出(规范化摘要与 pin 不一致) |
| AUD-M4-OMIT | OMISSION_DETECTED | 遗漏类变异被检出(缺失清单与预期一致) |
| AUD-M5-ENGINE | ENGINE_WEAKENING_DETECTED | 引擎削弱类变异被检出(被削弱字段与预期一致) |
| AUD-MISS-001 | MUTATION_CLASS_MISSED | 某类 fixture 数低于冻结下限或零检出;漏报即整体失败 |
| AUD-BASE-001 | BASELINE_DRIFT | 消费的 Contracts 活跃 surface 与冻结基线 pin 不一致 |
| AUD-FMT-001 | EVIDENCE_OR_FIXTURE_FORMAT_INVALID | fixture 信封或证据文档格式非法 |
| AUD-LOCK-001 | LOCK_VERIFICATION_FAILED | 消费包的身份、依赖闭包或 pin 对比失败 |
| AUD-IND-001 | INDEPENDENCE_VIOLATION | 审计读取或导入越出允许集合 |
登记纪律:码只增不改不复用;新增码必须同步更新本表与 baseline/audit-codes.json,且不得与 SFC 命名空间产生任何交叉拥有。