Files
lijiaoqiao/docs/supply_gate_command_playbook_v1_2026-03-25.md

711 lines
19 KiB
Markdown
Raw Normal View History

# SUP Gate 命令级执行清单SUP-004~SUP-007
- 版本v1.0
- 日期2026-03-25
- 目标:为测试团队提供可直接执行的命令清单,输出可回填证据
- 关联任务:`SUP-004``SUP-005``SUP-006``SUP-007`
- 关联报告模板:
- `tests/supply/ui_sup_acc_report_2026-03-28.md`
- `tests/supply/ui_sup_pkg_report_2026-03-29.md`
- `tests/supply/ui_sup_set_report_2026-03-29.md`
- `tests/supply/sec_sup_boundary_report_2026-03-30.md`
---
## 1. 执行前准备
## 1.1 环境变量
在项目根目录创建并编辑 `scripts/supply-gate/.env`
```bash
API_BASE_URL="https://staging.example.com"
OWNER_BEARER_TOKEN="replace-me-owner-token"
VIEWER_BEARER_TOKEN="replace-me-viewer-token"
ADMIN_BEARER_TOKEN="replace-me-admin-token"
# 测试数据(可按环境替换)
TEST_PROVIDER="openai"
TEST_MODEL="gpt-4o"
TEST_ACCOUNT_ALIAS="sup_acc_cmd"
TEST_CREDENTIAL_INPUT="sk-test-replace-me"
TEST_PAYMENT_METHOD="alipay"
TEST_PAYMENT_ACCOUNT="tester@example.com"
TEST_SMS_CODE="123456"
# 可选:绕过平台直连供应方探测目标
SUPPLIER_DIRECT_TEST_URL=""
```
## 1.2 依赖检查
```bash
command -v curl >/dev/null
command -v jq >/dev/null
```
## 1.3 执行入口
```bash
cd "/home/long/project/立交桥"
bash "scripts/supply-gate/run_all.sh"
```
真实 staging 推荐使用(含占位值与可达性预检):
```bash
cd "/home/long/project/立交桥"
bash "scripts/supply-gate/staging_precheck_and_run.sh" "scripts/supply-gate/.env"
```
说明:
1. `staging_precheck_and_run.sh` 默认会先执行 `M-021` 预检token runtime readiness
2. `staging_precheck_and_run.sh` 默认会再执行 `TOK-005 dry-run`
3. 如需临时跳过可设置:`ENABLE_M021_PRECHECK=0``ENABLE_TOK005_DRYRUN=0`
---
## 2. SUP-004 账号挂载链路UI-SUP-ACC-001~006
执行脚本:
```bash
cd "/home/long/project/立交桥"
bash "scripts/supply-gate/sup004_accounts.sh"
```
最低断言:
1. 验证接口返回 `verify_status=pass/review_required`
2. 创建账号成功并返回 `account_id`
3. 激活/暂停接口返回状态迁移成功。
4. 审计日志接口可查询并返回 `request_id`
证据输出:
1. `tests/supply/artifacts/sup004/*.json`
2. `tests/supply/artifacts/sup004/summary.txt`
---
## 3. SUP-005 套餐发布链路UI-SUP-PKG-001~006
执行脚本:
```bash
cd "/home/long/project/立交桥"
bash "scripts/supply-gate/sup005_packages.sh"
```
最低断言:
1. 草稿创建成功并返回 `package_id`
2. 上架后状态为 `active`
3. 暂停后状态为 `paused`
4. 下架返回成功(`expired/paused` 合法)。
5. 批量调价返回 `success_count + failed_count = total`
6. 复制成功并返回新的 `package_id`
证据输出:
1. `tests/supply/artifacts/sup005/*.json`
2. `tests/supply/artifacts/sup005/summary.txt`
---
## 4. SUP-006 结算提现链路UI-SUP-SET-001~005
执行脚本:
```bash
cd "/home/long/project/立交桥"
bash "scripts/supply-gate/sup006_settlements.sh"
```
最低断言:
1. 账单查询成功返回 `summary`
2. 提现申请成功返回 `settlement_id` 且状态 `pending`
3. 撤销申请接口返回状态变更。
4. 对账单下载接口返回 `download_url`
5. 收益流水接口返回分页与记录字段。
证据输出:
1. `tests/supply/artifacts/sup006/*.json`
2. `tests/supply/artifacts/sup006/summary.txt`
---
## 5. SUP-007 凭证边界专项SEC-SUP-001~002
执行脚本:
```bash
cd "/home/long/project/立交桥"
bash "scripts/supply-gate/sup007_boundary.sh"
```
最低断言:
1. 平台凭证访问主路径成功(映射 M-014
2. 外部 query key 请求被拒绝(映射 M-016
3. 响应/导出样本脱敏扫描无可复用凭证片段(映射 M-013
4. 若配置 `SUPPLIER_DIRECT_TEST_URL`,直连探测应失败或被阻断(映射 M-015
证据输出:
1. `tests/supply/artifacts/sup007/*.json`
2. `tests/supply/artifacts/sup007/summary.txt`
---
## 6. 回填要求
执行完成后,必须回填:
1. `tests/supply/ui_sup_acc_report_2026-03-28.md`
2. `tests/supply/ui_sup_pkg_report_2026-03-29.md`
3. `tests/supply/ui_sup_set_report_2026-03-29.md`
4. `tests/supply/sec_sup_boundary_report_2026-03-30.md`
5. `reports/supply_gate_review_2026-03-31.md`
所有回填项需要包含:
1. 结论PASS/FAIL/BLOCKED
2. 证据路径json/screenshot/log
3. 责任人签字
---
## 7. 依赖兼容审计命令M-017
执行脚本:
```bash
cd "/home/long/project/立交桥"
./scripts/ci/dependency-audit-check.sh 2026-03-27
```
最低断言:
1. 四件套文件存在且非空:
1. `reports/dependency/sbom_2026-03-27.spdx.json`
2. `reports/dependency/lockfile_diff_2026-03-27.md`
3. `reports/dependency/compat_matrix_2026-03-27.md`
4. `reports/dependency/risk_register_2026-03-27.md`
2. 输出结果为 `PASS`,并生成 `dependency_audit_result_2026-03-27.md`
---
## 8. 分阶段门禁失败回退演练M-018/M-019
执行脚本:
```bash
cd "/home/long/project/立交桥"
./scripts/ci/stage-gate-drill.sh G3 2026-03-27
```
最低断言:
1. G3 失败后必须触发回退到 G2。
2. 后续阶段冻结,不允许继续升波。
3. 生成原始日志与演练报告:
1. `reports/gates/stage_gate_drill_2026-03-27.log`
2. `reports/gates/stage_gate_drift_drill_report_2026-03-27.md`
---
## 9. 本地 Mock 联调模式(仅演练)
执行命令:
```bash
cd "/home/long/project/立交桥"
python3 "scripts/mock/supply_gateway_mock_server.py"
```
另开终端执行:
```bash
cd "/home/long/project/立交桥"
bash "scripts/supply-gate/run_all.sh" "scripts/supply-gate/.env.local-mock"
```
说明:
1. 本模式仅用于脚本联调与产物验证,不代表 staging/生产可发布。
2. 生产放行仍需在真实 staging 地址与真实短期 token 下复跑并验收。
---
## 10. TOK-005 凭证边界 Dry-Run开发阶段
执行命令:
```bash
cd "/home/long/project/立交桥"
bash "scripts/supply-gate/tok005_boundary_dryrun.sh" "scripts/supply-gate/.env"
```
最低断言:
1. `go test ./...``platform-token-runtime` 通过。
2. Query key 外拒规则存在(`key/api_key/token`)。
3. 审计脱敏断言存在且通过(禁止敏感值落审计)。
4. TOK 用例可执行覆盖完整(`TOK-LIFE-001~008``TOK-AUD-001~007`)。
5. staging 就绪性检查结果可追溯NO 时需明确阻塞原因)。
证据输出:
1. `reports/gates/tok005_dryrun_*.md`
2. `reports/gates/tok005_dryrun_*.log`
3. `tests/supply/artifacts/tok005_dryrun_*/go_test_output.txt`
说明:
1. Dry-run 仅用于开发阶段门禁前置验证,不可替代真实 staging 联调结论。
2. 真实放行仍以 `staging_precheck_and_run.sh` + `SUP-007/TOK-005` 实测结果为准。
---
## 11. TOK-006 统一 Gate 汇总Dry-Run + SUP-004~007
执行命令:
```bash
cd "/home/long/project/立交桥"
bash "scripts/supply-gate/tok006_gate_bundle.sh" "scripts/supply-gate/.env"
```
可选开关:
```bash
# 默认 1先执行 TOK-005 dry-run
ENABLE_TOK005_DRYRUN=1
# 默认 0仅汇总现有 SUP 报告,不触发 run_all
ENABLE_SUP_RUN=0
```
最低断言:
1. 输出单页 gate 汇总报告(含 TOK-005 + SUP-004~007
2. 生成明确发布判定:`GO / CONDITIONAL_GO / NO_GO`
3. 若存在 mock 证据或 `staging readiness != YES`,不得输出 GO。
证据输出:
1. `reports/gates/tok006_gate_bundle_*.md`
2. `reports/gates/tok006_gate_bundle_*.log`
3. `reports/gates/tok006_release_decision_onepager_template_v1_2026-03-30.md`(模板)
---
## 12. Superpowers 严格分阶段验证(代码+脚本+门禁)
执行命令:
```bash
cd "/home/long/project/立交桥"
bash "scripts/ci/superpowers_stage_validate.sh"
```
阶段定义(当前实现):
1. PHASE-01TOK 运行时代码测试Go 单测)
2. PHASE-02SUP-004~SUP-007 本地 mock 脚本联调
3. PHASE-03TOK-005 凭证边界 dry-runmock 环境)
4. PHASE-04TOK-006 统一 Gate 汇总
5. PHASE-05依赖兼容审计门禁M-017
6. PHASE-06分阶段回退演练门禁M-018/M-019
7. PHASE-07真实 staging 预检(无真值时应 DEFERRED
8. PHASE-08每日指标快照生成M-017/M-018/M-019
9. PHASE-097日趋势报告生成M-017/M-018/M-019
10. PHASE-10token 运行态就绪度检查M-021
结果判定:
1. 任一阶段 FAIL => `NO_GO`
2. 无 FAIL 且存在 DEFERRED => `CONDITIONAL_GO`
3. 全部 PASS => `GO`
可选环境变量:
```bash
# PHASE-07 使用的环境文件,默认 scripts/supply-gate/.env
STAGING_ENV_FILE="scripts/supply-gate/.env"
```
证据输出:
1. `reports/gates/superpowers_stage_validation_*.md`
2. `reports/gates/superpowers_stage_validation_*.log`
3. `tests/supply/artifacts/superpowers_stage_validation_*/phase*.log`
---
## 13. TOK-007 发布门禁复审(自动汇总)
执行命令:
```bash
cd "/home/long/project/立交桥"
bash "scripts/ci/tok007_release_recheck.sh"
```
最低断言:
1. 自动读取最新 `TOK-006` 汇总报告。
2. 自动读取最新 `Superpowers` 阶段验证报告。
3. 自动读取 `SUP Gate` 汇总评审结论。
4. 输出复审结论(`GO / CONDITIONAL GO / NO-GO`)与动作建议。
证据输出:
1. `review/outputs/tok007_release_recheck_*.md`
2. `reports/gates/tok007_release_recheck_*.log`
---
## 14. 最终决议一致性校验Final vs TOK-007
执行命令:
```bash
cd "/home/long/project/立交桥"
bash "scripts/ci/final_decision_consistency_check.sh"
```
最低断言:
1. 可解析 `final_decision``TOK-007``superpowers_stage_validation` 三类结论。
2.`final_decision``TOK-007` 不一致,输出 `WARN`(不自动覆盖签署结论)。
3. 若任一来源不可解析,输出 `FAIL` 并阻断自动流程。
证据输出:
1. `reports/gates/final_decision_consistency_*.md`
2. `reports/gates/final_decision_consistency_*.log`
---
## 15. 最终决议候选稿生成(不覆盖签署原件)
执行命令:
```bash
cd "/home/long/project/立交桥"
bash "scripts/ci/tok007_generate_final_decision_candidate.sh"
```
最低断言:
1. 输入源必须包括 `review/final_decision_2026-03-31.md` 与最新 `tok007_release_recheck_*.md`
2. 输出文件位于 `review/outputs/final_decision_candidate_from_tok007_*.md`
3. 仅生成候选稿,不覆盖原签署文件。
证据输出:
1. `review/outputs/final_decision_candidate_from_tok007_*.md`
2. `reports/gates/tok007_generate_candidate_*.log`
---
## 16. M-021 Token Runtime 就绪度检查
执行命令:
```bash
cd "/home/long/project/立交桥"
bash "scripts/ci/token_runtime_readiness_check.sh" "$(date +%F)"
```
可选开关:
```bash
# 默认 0跳过本地端口冒烟适配受限沙箱环境
ENABLE_TOKEN_RUNTIME_SMOKE=0
# 置 1执行本地服务启动 + issue + audit-events 冒烟
ENABLE_TOKEN_RUNTIME_SMOKE=1
# 可选:指定冒烟起始端口(默认 18082若被占用会自动顺延
TOKEN_RUNTIME_SMOKE_PORT=18082
```
最低断言:
1. 输出 `token_runtime_readiness_*.md` 报告并给出百分比结果。
2. 运行态代码与契约工件完整API入口/HTTP处理/OpenAPI/Dockerfile
3. `platform-token-runtime` 测试与构建均通过。
4. 若就绪度 `<100%`,脚本必须返回失败并阻断后续门禁。
证据输出:
1. `reports/gates/token_runtime_readiness_*.md`
2. `reports/gates/token_runtime_readiness_*.log`
3. `reports/gates/token_runtime_go_test_*.log`
4. `reports/gates/token_runtime_go_build_*.log`
---
## 17. Token 审计事件查询TOK-REAL-002
本地服务启动:
```bash
cd "/home/long/project/立交桥/platform-token-runtime"
export PATH="/home/long/project/立交桥/.tools/go-current/bin:$PATH"
go run ./cmd/platform-token-runtime
```
审计查询示例:
```bash
curl -sS "http://127.0.0.1:18081/api/v1/platform/tokens/audit-events?limit=20" \
-H "X-Request-Id: req-audit-query-demo"
```
最低断言:
1. 返回 `200`,且结构包含 `request_id/data.total/data.items`
2. 返回项包含 `event_id/event_name/request_id/route/result_code/created_at`
3. 响应不包含 `access_token` 或上游敏感凭证明文。
证据输出:
1. `platform-token-runtime/internal/httpapi/token_api_test.go`(自动化用例)
2. `reports/gates/token_runtime_readiness_*.md`(检查项 `TOK-REAL-002-C1/C2`
---
## 18. Staging 证据自动回填草稿
执行命令:
```bash
cd "/home/long/project/立交桥"
bash "scripts/ci/staging_evidence_autofill.sh"
```
可选参数(用于锁定本次流水证据,避免误取历史 latest
```bash
bash "scripts/ci/staging_evidence_autofill.sh" \
--staging-run-log "reports/gates/staging_run_2026-03-30_184432.log" \
--stage-report "reports/gates/superpowers_stage_validation_2026-03-30_184433.md" \
--token-readiness "reports/gates/token_runtime_readiness_2026-03-30_184435.md" \
--tok007-report "review/outputs/tok007_release_recheck_2026-03-30_184436.md" \
--pipeline-report "reports/gates/superpowers_release_pipeline_2026-03-30_184434.md"
```
最低断言:
1. 自动抽取 `PHASE-07``M-013~M-016``M-021` 与 TOK-007 机判结论。
2. 输出证据路径清单,便于人工补齐与签署。
3. 不得自动上调为 GO仅生成草稿。
证据输出:
1. `reports/gates/staging_token_go_evidence_autofill_*.md`
2. `reports/gates/staging_token_go_evidence_autofill_*.log`
---
## 19. 一键 Staging 发布流水
执行命令:
```bash
cd "/home/long/project/立交桥"
bash "scripts/ci/staging_release_pipeline.sh" "scripts/supply-gate/.env"
```
local/mock 防误跑(默认拦截):
```bash
# 仅当明确要做 local/mock 演练时启用
ALLOW_LOCAL_MOCK_STAGING=1 \
bash "scripts/ci/staging_release_pipeline.sh" "scripts/supply-gate/.env.local-mock"
```
说明:
1. STEP-01`staging_precheck_and_run.sh`(含 M-021/TOK-005/SUP run_all
2. STEP-02`superpowers_release_pipeline.sh`(使用 `STAGING_ENV_FILE`)。
3. STEP-03`staging_evidence_autofill.sh` 自动生成回填草稿(显式绑定本次流水证据文件)。
4. 检测到 local/mock env 且未设置 `ALLOW_LOCAL_MOCK_STAGING=1` 时,脚本应直接失败,防止误把演练结果当成真实 staging 证据。
可选监控(默认关闭、非阻断):
```bash
ENABLE_MINIMAX_MONITORING=1 \
MINIMAX_ENV_FILE="scripts/supply-gate/.env.minimax-dev" \
MINIMAX_RUN_ACTIVE_SMOKE=0 \
bash "scripts/ci/superpowers_release_pipeline.sh"
```
说明:
1. 开启后会在 `STEP-05` 额外执行 Minimax 每日快照 + 7 日趋势生成。
2. 该步骤是监控辅助项,失败仅记 `WARN`,不阻断 SUP 主门禁判定。
证据输出:
1. `reports/gates/staging_release_pipeline_*.md`
2. `reports/gates/staging_release_pipeline_*.log`
---
## 20. Minimax 上游独立 Smoke不并入 SUP 发布门禁)
执行命令:
```bash
cd "/home/long/project/立交桥"
bash "scripts/supply-gate/minimax_upstream_smoke.sh" "scripts/supply-gate/.env.minimax-dev"
```
可选环境变量:
```bash
# 默认 /v1/messages
MINIMAX_SMOKE_PATH="/v1/messages"
# 默认 minimax-smoke-model可替换为实际模型
MINIMAX_SMOKE_MODEL="your-model-id"
# 默认 20 秒
MINIMAX_TIMEOUT_SECONDS=20
```
最低断言:
1. 输出 `reports/gates/minimax_upstream_smoke_*.md` 报告。
2. 报告必须包含 base 连通探测与 active 鉴权探测两段结果。
3. 分类规则需区分:`PASS / PASS_AUTH_REACHED / FAIL_AUTH / FAIL_PATH / FAIL_NETWORK`
说明:
1. 该脚本仅用于“上游Minimax连通与鉴权可达性”验证。
2. 该脚本不参与 `SUP-004~SUP-007` 业务契约发布门禁判定。
3. 若 Minimax 返回 `404/405`,优先检查 `API_BASE_URL + MINIMAX_SMOKE_PATH` 组合是否正确。
---
## 21. Minimax 上游每日快照CI 汇总)
执行命令:
```bash
cd "/home/long/project/立交桥"
bash "scripts/ci/minimax_upstream_daily_snapshot.sh" "$(date +%F)" "scripts/supply-gate/.env.minimax-dev"
```
可选环境变量:
```bash
# 默认 0仅汇总最新 smoke 报告,不触发网络请求
RUN_ACTIVE_SMOKE=0
# 置 1执行一次实时 smoke 后再汇总
RUN_ACTIVE_SMOKE=1
```
最低断言:
1. 生成 `reports/gates/minimax_upstream_daily_snapshot_*.md`
2. 生成/更新 `reports/gates/minimax_upstream_daily_snapshots.csv`
3. 明确标注 `RUN_ACTIVE_SMOKE` 取值,区分“实时探测”与“仅汇总”。
4. 默认优先汇总“非 dry-run”最新报告避免将联调证据误当真实上游证据。
说明:
1. 该快照是“上游可达性趋势”证据,不替代 SUP 发布门禁。
2. 建议在定时任务中默认 `RUN_ACTIVE_SMOKE=0`,将实时探测作为受控任务执行。
3. 若仅存在 `PASS_DRY_RUN` 报告,快照状态应为 `CONDITIONAL_PASS`
---
## 22. Minimax 上游 7 日趋势报告
执行命令:
```bash
cd "/home/long/project/立交桥"
bash "scripts/ci/minimax_upstream_trend_report.sh" "$(date +%F)"
```
最低断言:
1. 生成 `reports/gates/minimax_upstream_trend_7d_*.md`
2. 报告包含最近 7 条(不足 7 条按实际)快照的状态统计。
3. 趋势状态遵循 `PASS_7D / CONDITIONAL_7D / NOT_READY / INSUFFICIENT_DATA`
说明:
1. 该趋势报告用于 F-03连续观测证据收敛不替代 staging 发布门禁。
2. 建议与第 21 节每日快照搭配执行,形成“日报 + 周趋势”组合。
---
## 23. 一键生成本地 STG 环境owner/viewer/admin token
执行命令:
```bash
cd "/home/long/project/立交桥"
bash "scripts/ci/generate_local_staging_env.sh" "scripts/supply-gate/.env.staging-real"
```
可选环境变量:
```bash
# 默认 http://127.0.0.1:18080
API_BASE_URL_VALUE="http://127.0.0.1:18080"
# 默认 http://127.0.0.1:18081
TOKEN_RUNTIME_URL="http://127.0.0.1:18081"
# 默认 7200 秒2小时
TOKEN_TTL_SECONDS=7200
# 默认 1若 token runtime 不可用则自动拉起临时实例
START_RUNTIME_IF_NEEDED=1
```
最低断言:
1. 生成 `scripts/supply-gate/.env.staging-real`(权限 `600`)。
2. 文件包含 `OWNER_BEARER_TOKEN / VIEWER_BEARER_TOKEN / ADMIN_BEARER_TOKEN` 三类 token。
3. 生成摘要报告 `reports/gates/local_staging_env_generation_*.md`(仅 hash不泄露明文 token
说明:
1. 该脚本生成的是“本地开发/联调用”平台 token非外部 LLM 厂商 key。
2. 切换真实 staging 时,只需替换 `API_BASE_URL_VALUE` 并重新执行脚本即可刷新 token 与 env。
---
## 24. 真实 STG 就绪度检查(地址+token+可达性)
执行命令:
```bash
cd "/home/long/project/立交桥"
bash "scripts/ci/staging_real_readiness_check.sh" "scripts/supply-gate/.env.staging-real"
```
最低断言:
1. `API_BASE_URL` 非占位值,且不是 `localhost/127.0.0.1`
2. 三类 token 非空且非占位值。
3. `API_BASE_URL` 基础可达性检查通过(`curl -I``000`)。
4. 生成报告 `reports/gates/staging_real_readiness_*.md`
说明:
1. 结果为 `READY` 才建议进入真实 STG 放行口径验证。
2. 结果为 `BLOCKED` 时,应先修复地址或 token再执行 `staging_release_pipeline.sh`