| 剧本步骤 | 工具 | 命令 | 判据 | 证据位 |
| 配置(品牌) | miniapp.sh | bash scripts/tenant_hooks/miniapp.sh <tenant> docs/white-label/tenants/<t>.yaml | 退出 0;zip 产出;输出含 appid/模块数 | dist/tenants/<t>/;stdout 存 evidence |
| 配置→M1 衔接 | miniapp.sh(内部链) | 同上(一条命令全自动:复制排除→品牌注入→post-inject 主题/app.json/域名→打包) | 输出可见「→ 已调用 inject.mjs --post-inject」与「域名替换:N 文件/M 处」 | stdout |
| M1(本地演练) | m1-drill.sh | cd miniprogram-v2 && bash scripts/m1-drill.sh | 全绿(双租户注入×2+残留零命中+页面校验+P2 25/25+registry 15/15);set -e 任一步失败即中断退非 0 | stdout 存档 |
| M1(残留判据) | residue-scan v4 | node scripts/residue-scan.mjs ../dist/tenants/A/miniprogram ../dist/tenants/B/miniprogram --scope=m1 | exit 0 = 零命中;exit 1 = 命中(列清单);exit 2 = 用法错 | stdout 存档 |
| M1(残留·全树加固) | residue-scan v4 | 同上 --scope=full | 同上(full 含全部运行时文件) | stdout |
| M1(页面/注册表回归) | check-page / check-registry-sync | node miniprogram-v2/scripts/check-page.mjs fixtures/pages/demo-home.json / node …check-registry-sync.mjs | 均 exit 0 | stdout |
| G7(两闸门) | gate_check.py | python3 scripts/gate_check.py release / replication / selftest | release/replication:exit 0=PASS;exit 1=FAIL(拦截=正确行为,记录);exit 2=BLOCKED(输入缺失);selftest 须 4/4 | docs/plans/gate-data/ 状态 + stdout |
| 回退(参考) | (332 的 staging-l3 脚本范式) | 见 332 evidence | 版本回退核对 | — |