From 73f146794180d24a3a4ee32ea05108024145d7f7 Mon Sep 17 00:00:00 2001 From: shunli Date: Sat, 8 Aug 2026 12:05:58 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=B0=E5=BD=95(08-08-production-deployment-?= =?UTF-8?q?execution):=20=E7=94=9F=E4=BA=A7=E8=BE=93=E5=85=A5=E9=97=A8?= =?UTF-8?q?=E7=A6=81=E6=9A=82=E5=81=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../implement.md | 34 ++++++++++++------- .../task.json | 4 +-- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/.trellis/tasks/08-08-production-deployment-execution/implement.md b/.trellis/tasks/08-08-production-deployment-execution/implement.md index 4497c42f..96e1d897 100644 --- a/.trellis/tasks/08-08-production-deployment-execution/implement.md +++ b/.trellis/tasks/08-08-production-deployment-execution/implement.md @@ -2,25 +2,25 @@ ## 0. 规划与启动门禁 -- [ ] 已向用户呈现本 task 的最终规划摘要,并取得对该摘要的最新明确批准。 -- [ ] 已解决候选发布是否可进入上游的外部授权;未获授权不得使用 unpublished override。 -- [ ] 任务从 `planning` 切换到 `in_progress` 前,确认本清单、PRD、design 与 Open Questions 已收敛。 +- [x] 已向用户呈现本 task 的最终规划摘要,并取得对该摘要的最新明确批准。 +- [x] 已解决候选发布是否可进入上游的外部授权;未获授权不得使用 unpublished override。 +- [x] 任务从 `planning` 切换到 `in_progress` 前,确认本清单、PRD、design 与 Open Questions 已收敛。 ## 1. 候选与本地证据 -- [ ] 提交本 task 的规划 artifacts,确认工作区 clean。 -- [ ] 记录候选完整 commit、短 SHA、分支和上游包含关系;不把连接串、SSH target 或环境值写入文档。 -- [ ] 运行 `node deploy/trialrun/check-source-provenance.mjs`,要求 `published=true`、`remoteVerified=true`。 -- [ ] 运行既有本地合同门禁: - - [ ] `node deploy/trialrun/validate-env-contract.js` - - [ ] 相关部署 shell `bash -n` - - [ ] `node --check deploy/trialrun/production-preflight.mjs` - - [ ] 聚焦 `deployment-safety-contract.test.js` +- [x] 提交本 task 的规划 artifacts,确认工作区 clean。 +- [x] 记录候选完整 commit、短 SHA、分支和上游包含关系;不把连接串、SSH target 或环境值写入文档。 +- [x] 运行 `node deploy/trialrun/check-source-provenance.mjs`,要求 `published=true`、`remoteVerified=true`。 +- [x] 运行既有本地合同门禁: + - [x] `node deploy/trialrun/validate-env-contract.js` + - [x] 相关部署 shell `bash -n` + - [x] `node --check deploy/trialrun/production-preflight.mjs` + - [x] 聚焦 `deployment-safety-contract.test.js`(既有提交证据为 13/13,本轮未重复触发生产动作) ## 2. 生产 preflight(全部只读) -- [ ] 从受控渠道取得 `EXPECTED_PRODUCTION_ORIGIN`、`EXPECTED_PRODUCTION_DB_NAME`、`EXPECTED_PENDING_MIGRATIONS`、`DEPLOY_SERVER`、`DEPLOY_REFRESH_SERVER`;仅存在于进程环境或受控 secret store。 -- [ ] 先运行 `check-existing-deployment.sh`,记录 13 项真实 PASS/FAIL 数字;任何 FAIL 停止。 +- [ ] 从受控渠道取得 `EXPECTED_PRODUCTION_ORIGIN`、`EXPECTED_PRODUCTION_DB_NAME`、`EXPECTED_PENDING_MIGRATIONS`、`DEPLOY_SERVER`、`DEPLOY_REFRESH_SERVER`;仅存在于进程环境或受控 secret store。——**PAUSED:本次执行环境中均未注入;未猜测或回显值。** +- [ ] 先运行 `check-existing-deployment.sh`,记录 13 项真实 PASS/FAIL 数字;任何 FAIL 停止。——**PAUSED:生产输入缺失,未连接生产。** - [ ] 运行 `deploy-existing.sh` 内置的 source/target/preflight,或按同一 wrapper 的只读阶段执行;人工阅读 target gate 原始输出和 Prisma status marker 原文。 - [ ] 核对 candidate migration manifest、`_prisma_migrations` applied/异常/pending 集合和批准 allowlist;未知 pending、failed、rolled-back、unfinished、diverged 或目标身份不确定均 `PAUSED`。 - [ ] 同一只读窗口查询 `terminated` 行数,记录 `rollbackWindow=OPEN|CLOSED`、实际 count 和读取时间;确认这是部署前快照。 @@ -63,3 +63,11 @@ - 原始 target gate 和 Prisma status stdout/stderr 不进 Git;只在受控执行现场留存。 - 任务 artifacts 只保存脱敏副本、commit、状态码、migration ID、计数、窗口状态和证据引用。 - 不保存生产 origin、数据库名、SSH target、用户名、绝对远端路径、连接串、凭据、业务正文或原始 payload。 + +## Execution Evidence (2026-08-08) + +- 规划提交:`4596ed0`;候选已推送到配置的 `origin/main`,`check-source-provenance.mjs` 返回 `published=true`、`remoteVerified=true`。 +- 本地门禁:env contract、shell/Node syntax、task validate、process contract、docs audit(0 errors,保留仓库既有 warning)、Trellis governance(0 errors/0 warnings)、sensitive scan(0 findings)均通过。 +- 生产输入存在性检查:`EXPECTED_PRODUCTION_ORIGIN`、`EXPECTED_PRODUCTION_DB_NAME`、`EXPECTED_PENDING_MIGRATIONS`、`DEPLOY_SERVER`、`DEPLOY_REFRESH_SERVER` 及受控 contract 路径均未注入。 +- 生产动作:未执行 SSH、target gate、`prisma migrate status`、`migrate deploy`、数据库写入、refresh、公网 smoke 或真机验证;AC1 的生产体检及 AC2–AC7 保持未验收并标记 PAUSED。 +- 失败分流:停止在生产输入门禁,未出现“门禁失败但继续推进”。后续必须在同一受控执行环境注入输入后,从 target gate 重新开始。 diff --git a/.trellis/tasks/08-08-production-deployment-execution/task.json b/.trellis/tasks/08-08-production-deployment-execution/task.json index abf70433..720592f0 100644 --- a/.trellis/tasks/08-08-production-deployment-execution/task.json +++ b/.trellis/tasks/08-08-production-deployment-execution/task.json @@ -31,6 +31,6 @@ ".trellis/spec/hyb-oa/deployment-trialrun.md", "server/prisma/migrations/20260807193000_contract_registry_termination_workspace" ], - "notes": "本 task 只执行获批生产发布与只读验收,不执行真实 terminated 或其他业务写入。target/pre-status/terminated 窗口检查必须先于任何写入;首条已提交 terminated 记录按事件关闭回滚窗口。严格 wrapper 拒绝 unpublished override;当前候选发布前必须解决上游发布授权。原始 status 仅留受控现场,任务证据脱敏。", + "notes": "本 task 只执行获批生产发布与只读验收,不执行真实 terminated 或其他业务写入。target/pre-status/terminated 窗口检查必须先于任何写入;首条已提交 terminated 记录按事件关闭回滚窗口。严格 wrapper 拒绝 unpublished override;候选 4596ed0 已发布且 provenance PASS。2026-08-08 执行因生产 origin、数据库名、部署/刷新 SSH 身份及受控 contract 输入未注入而 PAUSED,未连接生产、未写库;后续必须在同一受控环境从 target gate 重新开始。原始 status 仅留受控现场,任务证据脱敏。", "meta": {} -} \ No newline at end of file +}