# OpenNexus 生产验收 Runner `scripts/phase3-production-acceptance.py` 是第三阶段 A/B/C/D/S/E 验收 ID 的统一入口。它只把仓库登记的逐 ID driver 结果计为生产验收;普通单元测试、隔离冒烟和历史人工汇总不会自动换算成通过。 查看固定的 30 项清单: ```powershell python scripts/phase3-production-acceptance.py --list-cases --json ``` 复制 `scripts/phase3-acceptance-config.example.json` 到仓库外,将占位值改成唯一 `run_id` 并设置平台 profile。`data_root` 可直接使用绝对路径,也可像模板一样通过环境变量引用。第一次运行只接受不存在或空目录并写入与 `run_id` 绑定的隔离标记;后续只能由同一 run 复用。个人 Vault、仓库或 `.git` 的父目录/子目录、符号链接、含明文密码/令牌的配置均会被拒绝。除用户 Vault 内容外存在未提交源码时也拒绝运行,使 summary 的 commit 可以唯一还原被测代码。HTTP 服务只允许在配置中明确标记为测试服务,URL 不得包含用户信息、query 或 fragment。 执行单例时应使用新的空报告目录: ```powershell $env:OPENNEXUS_ACCEPTANCE_DATA_ROOT = 'D:\opennexus-acceptance\run-001' python scripts/phase3-production-acceptance.py ` --suite sync-service --case S-04 ` --config D:\opennexus-acceptance\run-001.json ` --report-dir D:\opennexus-acceptance\reports\run-001-s04 ``` 每个 driver 由仓库内 `CASE_DRIVERS` 固定登记,接收 `--config` 与 `--output`,并通过环境获得 case ID、数据根和报告根。结果必须是 schema 1 JSON,包含匹配的 `case_id`、`PASSED/FAILED/SKIPPED/NOT_APPLICABLE` 状态、至少一项独立断言、该 ID 要求的非负整数指标,以及 `files` 和 `revisions` 清单。只有 driver 退出 0、结果为 `PASSED`、所有必填指标齐全且结果不含配置引用的秘密值时,该 ID 才通过。缺 driver、必测 skip、非零退出、超时、缺安装包/权限/秘密环境引用、坏 schema 或秘密命中都会让 suite 非零退出。 报告目录包含 `summary.json`、`case-manifest.json`、`junit.xml`、`cases/.json` 和脱敏的 `logs/.log`。摘要记录 commit、各锁文件 SHA-256、配置摘要与已提供安装产物摘要。日志将仓库、数据根、报告根、用户主目录和配置声明的秘密值替换为占位符,并限制为 10 MiB。报告目录必须为空,避免单例复跑覆盖原始证据。 当前 runner 与失败闭合行为已实现,B-02 Fernet 迁移 driver 已登记;其余 29 个生产验收 ID 尚未登记,运行时会生成 `NOT_IMPLEMENTED` 证据并退出 1。这用于阻止误报,不是这些用例的验收通过。