M40 #367 Graph Production 发布门禁

状态与边界

#367 strict evaluator 已完成:m40-graph-production-input-v2 只接受带 schema 的 dataset、environment、soak、journey 和 check/closed-gap 原始 artifact,独立重算 manifest 摘要,并校验 artifact SHA-256、真实 commit/HEAD、clean worktree 及结构化复现命令退出码。quick 会真实执行 8 个 reader worker、1 个 update worker、checkpoint、正常进程重开、一次独立子进程 kill/reopen、完整 invariant check 和 BackupService verify/restore,但它不是 1m vertex/10m edge、每日 kill matrix 或 168 小时运行,因此输出必须保持:

correctness_recovery: NOT_RUN
performance_capacity: NOT_RUN
release_decision: NOT_RUN

截至当前提交,evaluator 自身加固和防误报回归已经完成;M40 修复顺序步骤 37、LDBC SNB、Graphalytics、Neo4j/PostgreSQL 外部对拍、Couplet C2C4、Native AOT 发布 artifact 和 7 天固定硬件报告仍未完成或归档。M40 仍为进行中,产品定位继续是“八种数据模型,一套引擎”。

本项只增加 benchmark/evidence 工具和报告合同,不修改 Graph V1 key/record、WAL、checkpoint、backup format、Graph API 或 Server 权限。

运行入口

本地管线 smoke:

dotnet run --project tests/SonnetDB.Benchmarks/SonnetDB.Benchmarks.csproj -c Release -- --m40-production-gate --quick --output artifacts/m40-graph-production-gate

该命令生成:

候选 evidence 判定入口(只能在 M40 修复顺序步骤 1~7 全部通过后用于正式取证):

dotnet run --project tests/SonnetDB.Benchmarks/SonnetDB.Benchmarks.csproj -c Release -- --m40-production-gate --manifest artifacts/m40-graph-production-input.json --output artifacts/m40-graph-production-gate

清单中的相对 artifact 路径以清单所在目录为基准,artifact 路径不得越过该目录;复现工作目录相对于 Git 仓库根目录,且不得越过仓库。复现命令由 commandarguments[]working_directoryexpected_exit_codetimeout_seconds 组成,通过 ProcessStartInfo.ArgumentList 直接执行,不接受 shell command line;参数必须且只能包含一个独立的 {artifact} 占位符,回放时替换为已校验的绝对 artifact 路径,成功退出码固定为 0。v2 allowlist 只接受仓库内的 dotnet run --project ... harness,或当前 Benchmarks 程序的 dotnet exec ... --m40-verify-artifact {artifact} schema 验证入口;Neo4j/PostgreSQL、LDBC、Graphalytics 与 Couplet 必须经仓库内 .NET evidence harness 归档,manifest 不能直接启动任意程序。判定器要求 artifact 内记录的 commit、命令、参数、工作目录和退出码与 manifest 一致,在回放前后重复校验 SHA-256,并在所有回放完成后再次确认 worktree 干净。

原始 artifact schema 如下:

Schema 原始内容 evaluator 重算结果
m40-graph-dataset-evidence-v1 generator/seed、输入/输出 digest、vertex/edge 数 dataset 摘要与固定规模合同
m40-graph-environment-evidence-v1 OS/CPU/memory/disk/runtime/GC/power 快照 固定目标机合同
m40-graph-soak-evidence-v1 运行区间、checkpoint 时间戳、kill/reopen/invariant、cold-open、working-set/WAL 样本 时长、最大 checkpoint 间隔、恢复/冷开分位数和资源峰值
m40-graph-journey-evidence-v1 每轮逐样本 latency/allocation/GC/I/O/访问计数、access path 和 oracle assertion 最差轮 nearest-rank P50/P95/P99、吞吐、资源汇总和 oracle 状态
m40-graph-check-evidence-v1 具名 expected/actual assertion correctness/performance check 与 closed gap 状态

缺文件、未知/缺失 schema、仅含 { "status": "PASS" }、manifest 摘要不匹配、样本列长度不一致、重复 ID、占位摘要、NOT_RUN、无效/非 HEAD commit、脏工作树或任一复现失败都不能形成 Production PASS。

--quick--manifest 必须显式选择其一。quick 仅在本地 smoke 失败时返回非零退出码;manifest 仅在 release_decision=PASS 时返回零,因此 CI/长测调度器不能把 FAILNOT_RUN 当作成功发布。

严格判定

本节是 evaluator 已实现的判定合同;各项真实 Production artifact 仍为 NOT_RUN,不表示实际发布门禁已经通过。

Gate A correctness_recovery 要求以下检查全部 PASS:

Gate B performance_capacity 要求以下检查全部 PASS:

报告逐项要求 SOC-1~3TOP-1~3EVD-1~3CPL-1~4PGQ-1~3,并验证:

Soak 清单固定为 168 小时、8 reader + 1 update worker、m40-frozen-update-profile-v1、最多 30 分钟 checkpoint 间隔、至少 7 个每日 kill/reopen 周期,并保持 SyncWalOnEveryWrite=trueAutoCheckpointEnabled=trueMaxWalBytes=256 MiBMaxOverlayEntries=100,000。缩短时长、减少 worker、关闭 fsync/checkpoint 或放宽资源预算会直接失败。

Gap 与发布决定

报告必须带 M40-GAP-001M40-GAP-012 的完整 catalog 快照。阻塞 Production/Couplet C4 的 openin_progressnot_planned 项会使相应 gate 失败;closed 项必须附带可校验的关闭 artifact,只有代码提交不能作为关闭证据。

release_decision=PASS 只能由 Gate A 和 Gate B 同时 PASS 得出。quick 或尚未提交完整 evidence 时为 NOT_RUN;完整 Production 清单中任一缺失、失败、错误 access path 或 blocking gap 均为 FAIL,不能通过手工填写 release 字段绕过判定器。

当前待执行项