审计状态计数的闭合不变量

lesson method 审计收口账本 大表产物审计的摘要优先原则 投稿系统手填字段的非改动交接

修改:20260515032748000

凡是把表格行、文件条目或投稿字段汇总为状态计数的审计产物,都应显式校验 sum(status_counts) == row_count,或把 excluded/unknown/NA 桶单独列出;否则 read-back audit 可能在未分类行存在时仍显得“通过”。这可作为 审计收口账本 的机器可复核不变量,并补强 投稿系统手填字段的非改动交接 的验收门槛。

多表文件不能混用总行数与字段行数


当一个 handoff Markdown 同时包含输入文件表、手填字段表、上传清单表时,row_count 必须绑定到明确 section/table(例如只统计 ## Manual field table 的 data rows),而不能把多个表的行数混合为一个总数再与某一列的 status_counts 比较。一次只读复核显示:同一文件的手填字段表为 23 行且状态计数和为 23,但旧 readback audit 把其它表行混入后声明 37 行、状态计数和 29,导致内部不闭合;后续应优先信任 section-scoped 独立重算和后续 editor audit 的闭合计数。

证据包应同时报告 blocker 扫描作用域


从源 Markdown 表格重算一行证据包时,forbidden_hits 应声明扫描作用域是“解析出的目标数据行”还是“整份文件”。例如手填字段表的第 23 行在 no-submit guard 里故意保留 MACHINE_FILL_AFTER_FINAL_FILESTODO 作为禁止提交条件;若审计目标是“字段表中是否仍出现禁止代填信息”,这些命中应被报告而不是静默归零。若审计目标是“可提交正文 blocker”,则必须另用 审计元文本的扫描隔离 分桶解释这些 guardrail 命中。