P0-008 把版本固定、依赖扫描、秘密扫描和 Schema 验证接入仓库唯一质量命令。它不增加 运行时服务、浏览器代码、存储、Analytics 或 AI 调用。
本地和 GitHub Actions 都执行:
npm ci
npm run validatevalidate 依次检查格式、仓库安全、依赖漏洞、lint、类型、测试、构建和静态产物。Workflow
不得复制另一套安全规则;具体实现位于
scripts/security/repository-security.mjs。
.nvmrc和所有 workspace 的engines.node固定为同一个完整 Node.js 版本;- 根
packageManager与engines.npm固定同一个完整 npm 版本; - 直接依赖必须使用完整版本,传递依赖由唯一根
package-lock.json固定; actions/checkout与actions/setup-node使用完整 40 位提交 SHA,而不是可漂移标签;- Checkout 获取 PR 历史,但不把 GitHub 凭据留给后续 npm 脚本。
版本更新必须通过独立 PR,重新执行完整质量门,不能用放宽扫描或跳过测试的方式升级。
npm run security:dependencies 对完整生产与开发依赖树执行
npm audit --audit-level=high。High 或 Critical 漏洞阻断 PR;较低等级仍会显示在输出中,
应建立后续修复任务。
P0-008 同时把 ESLint 更新到不再引入已知 brace-expansion High 风险的依赖链。安全更新
仍需要通过现有 lint、类型、测试和构建,不能只依赖审计结果。
扫描器检查:
- Git 已跟踪及未忽略的新文本文件;
- 相对
origin/main新增的最多 100 个提交补丁;无法解析基线时检查HEAD; - 私钥头、GitHub Token、常见 Provider
sk-Key、AWS Access Key、JWT、Bearer Token 和常见 Secret 赋值。
报告只输出规则和文件/行列位置,不回显疑似秘密。synthetic、example、placeholder
等明确测试标记允许用于合成 fixture;真实值不能通过路径或注释豁免。二进制文件和超过
5 MiB 的单个文本文件不做内容扫描,因此大文件引入必须单独评审;该规则扫描是 CI 防线,
不能替代 Provider 轮换、GitHub Secret Scanning 或泄露后的密钥吊销。
仓库安全命令使用 AJV 2020-12 strict 模式:
- 编译
schemas/的所有公开 Schema 和 Lab 的内部 Schema; - 拒绝缺少 Draft 2020-12 声明、缺少
$id或$id重复; - 校验登记的有效 fixture、canonical 文档和四个
lab.json; - 错误只报告合同路径,不输出 Provider Secret。
新增 Schema fixture 时必须登记到脚本的 fixtureContracts。公共 Schema 破坏性修改仍须
创建新版本、同步消费者测试与迁移说明。
Quality 在每个 Pull Request 和 main Push 上以只读权限执行完整 npm run validate,
且没有任何部署步骤。Deploy Cloudflare Workers 也先通过同一质量门:
mainPush 和手动preview只允许部署 Preview;- Production 的 dry-run、部署、smoke 和 URL 记录均要求仓库所有者显式选择
workflow_dispatch: production; - 自动 Preview 失败不会进入 Production。
仓库合并策略必须把 Validate 作为必过检查;P0-008 的 PR 本身也必须在检查成功后才能
合并。