diff --git a/.trellis/tasks/09-05-existing-deploy-db-lifecycle-isolation/implement.md b/.trellis/tasks/09-05-existing-deploy-db-lifecycle-isolation/implement.md index bea6e874..21966674 100644 --- a/.trellis/tasks/09-05-existing-deploy-db-lifecycle-isolation/implement.md +++ b/.trellis/tasks/09-05-existing-deploy-db-lifecycle-isolation/implement.md @@ -80,3 +80,23 @@ AC1–AC7 已完成本地验收;AC8 的首次真实发布观察保持未执行 - 健康超时或任何前置失败均停止,不调长 120 秒、不自行启动 db、不切换 initialize、不盲目重放旧命令或 init/seed。备份合同刷新、/ready 与 bundle marker 仍须通过。 - 当前有旧 task 未提交交接笔记;它不属于本次提交。为满足部署来源 clean-worktree 门禁,将只对该文件临时 stash 保管,记录对象和摘要,发布及证据提交结束后原样恢复,不删除其他 stash 或改动。 - 用户观测测试约 90 秒;保留全覆盖,不改抽样运行。如后续优化,仅合并冗余 fixture/减少重复准备,不删除独立行为断言和四类变异覆盖。 + +## 首次真实发布与数据库身份观察(2026-09-05) + +- 产品提交:`f223bfb72fb2baef51199702c2def84c41af7aef`,已 push;线上应用版本为 `f223bfb72fb2`。部署从该产品提交的干净工作区执行,后续验收记录提交仅更新本 task 文档,不代表重新部署或新的线上应用版本。 +- 先执行 `PRODUCTION_READ_ONLY_PREFLIGHT=1 node deploy/trialrun/production-identity-bootstrap.mjs`,再执行获批的 `node deploy/trialrun/production-identity-bootstrap.mjs`,两者均 exit 0。主会话持续查看阶段日志至部署完成;旧工具命令序列仅保留为不可执行参考,未重放。 + +| 检查 | 真实发布结果 | +| --- | --- | +| 前置门禁 | 13 项聚合预检与生产身份验证 PASS;迁移前后均为 `pending=none`,回滚窗口 OPEN。 | +| 数据库健康与阶段时序 | 四次健康检查均 PASS;未放宽固定 120 秒上限、切换 initialize 或自动启动/修复 db。init、server build、应用切换及迁移状态检查完成。 | +| 同一项目 db 身份比较 | ID、Created、StartedAt、RestartCount、镜像五项前后均相同,部署后仍 healthy;证明本次应用发布未重建或重启该 db 容器。 | +| 应用更新 | server 容器与镜像均变化;公网 `/ready` 为 HTTP 200、`data.ok=true`、`buildSha=f223bfb72fb2`。 | +| 公网包与文案 | `scanned=106 focused=2 buildMarker=PASS findings=0`。 | +| 既有发布合同 | external deps/runtime smoke 及备份合同刷新 PASS,未绕过门禁。 | + +- 脱敏观察结果:`artifacts/qa-flow/existing-deploy-db-lifecycle-isolation/first-live-observation.json`。原始有限容器元数据与受控阶段日志仅保留在本轮私有临时证据目录;提交只记录布尔比较结论和公开构建标记,不纳入容器标识、秘密或业务响应。 +- 本次身份观察只查询目标 Compose 项目的容器元数据;正式部署仍实际运行既有 migration/seed 和备份合同刷新,因此不能表述为数据库内容或运维状态完全只读。 +- AC8 已获授权并完成,AC1–AC7 的本地验证与独立复核记录保持不变。未操作 0014、真实银行资料、财务账号、IM routing 或 Trellis 升级 worktree;旧 task 笔记不属于本次提交。 +- 证据回填后,Trellis validate、governance/敏感扫描、process baseline、git diff --check 均通过。docs registry 检查 exit 0、errors=0,仍提示 22 个未登记文档;task validate 仍提示现有 deployment spec 超过注入上限。两项提示如实保留,不作为本 task 的整改范围;本轮只更新三份 task 文件,不重复运行产品回归或部署。 +- 产品交付与验收记录提交分开;不为纯证据提交再次部署。task 保持 `in_progress`,未归档;财务 403 仍为下一项,尚未启动。 diff --git a/.trellis/tasks/09-05-existing-deploy-db-lifecycle-isolation/prd.md b/.trellis/tasks/09-05-existing-deploy-db-lifecycle-isolation/prd.md index ef592a3b..4430c9a4 100644 --- a/.trellis/tasks/09-05-existing-deploy-db-lifecycle-isolation/prd.md +++ b/.trellis/tasks/09-05-existing-deploy-db-lifecycle-isolation/prd.md @@ -46,7 +46,7 @@ ## Out of Scope - 不改 Compose 服务拓扑、业务代码、schema/migration/seed 实现、付款及账号权限、IM routing、Trellis 升级、治理规则、目录权限、其他小债。财务 403 在本任务之后另开只读诊断。 -- 用户本轮只批准立 task 和规划。未经下一轮批准不实施;不启动生产发布、故障注入、数据修复或账号操作。一个 task、一个实施提交单元,实施后安排只读独立复核;提交、push、部署、归档各遵守明确授权边界。 +- 初始仅批准立 task 和规划;2026-09-05 用户随后批准实施,并在独立复核 PASS 后明确批准提交、push 和首次真实部署,执行证据见 implement.md。一个 task、一个实施提交单元;该授权不包含生产故障注入、数据修复、账号操作或归档。 ## Acceptance Criteria @@ -57,4 +57,4 @@ - [x] AC5(R3):测试完全本地合成,不访问真实 Docker、SSH、生产 env 或数据库;测试可经 static 门禁运行,fake 未知命令 fail closed,无提前退出假通过。 - [x] AC6(R2):既有部署安全合同、身份/路径/迁移/日志/刷新/版本断言和 shell syntax 通过;未弱化其他安全约束。 - [x] AC7:只读独立复核覆盖显式 db 操作、init 间接依赖、测试有效性与初始化兼容,问题闭环后才交实施 diff;同步现有 spec,未混入其他 task 或小债。 -- [ ] AC8:交付区分本地防护验证与生产执行;若未来单独批准生产验收,需比较同一项目 db 容器 ID/创建时间前后不变及应用版本更新、ready 通过,禁止在生产注入故障。本轮生产验证为未授权、不执行。 +- [x] AC8:用户追加明确授权后完成首次真实发布;同一项目 db 容器 ID、创建时间、启动时间、重启次数和镜像前后不变,健康状态正常,server 容器与镜像已更新;公网 ready 为 HTTP 200、buildSha=f223bfb72fb2,bundle marker PASS、文案 findings=0。未在生产注入故障;本地验证与生产观察分别记录于 implement.md。 diff --git a/.trellis/tasks/09-05-existing-deploy-db-lifecycle-isolation/task.json b/.trellis/tasks/09-05-existing-deploy-db-lifecycle-isolation/task.json index 786096bd..0e734cef 100644 --- a/.trellis/tasks/09-05-existing-deploy-db-lifecycle-isolation/task.json +++ b/.trellis/tasks/09-05-existing-deploy-db-lifecycle-isolation/task.json @@ -2,7 +2,7 @@ "id": "existing-deploy-db-lifecycle-isolation", "name": "existing-deploy-db-lifecycle-isolation", "title": "既有环境应用发布隔离数据库容器生命周期", - "description": "隔离 existing 应用发布中的显式及依赖传播数据库容器生命周期操作,保留 initialize 与既有迁移流程;当前仅批准规划。", + "description": "隔离 existing 应用发布中的显式及依赖传播数据库容器生命周期操作,保留 initialize 与既有迁移流程;实施、独立复核及获批首次真实部署已通过,未归档。", "status": "in_progress", "dev_type": null, "scope": null, @@ -15,7 +15,7 @@ "branch": null, "base_branch": "main", "worktree_path": null, - "commit": null, + "commit": "f223bfb72fb2baef51199702c2def84c41af7aef", "pr_url": null, "subtasks": [], "children": [], @@ -30,6 +30,6 @@ "scripts/qa/run-release-gate.sh", ".trellis/spec/hyb-oa/deployment-trialrun.md" ], - "notes": "2026-09-05 用户已批准 PRD 和实施;重点:显式 up db 受模式约束、init 依赖隔离、按服务生命周期语义断言、固定120秒健康等待、fake不污染真实PATH、准备工具恢复参考。一个 task、一个实施提交单元、只读独立复核。实施后先发 diff,不自动提交、push、部署或归档。", + "notes": "2026-09-05 用户独立复核 PASS 后明确批准提交、push 和首次真实部署。产品提交 f223bfb72fb2baef51199702c2def84c41af7aef 已推送并部署;同一项目 db 的 ID、创建时间、启动时间、重启次数和镜像均未变,健康检查与公网 ready/bundle marker 通过,文案 findings=0。完整证据见 implement.md;后续仅提交验收记录,不重新部署。保留 in_progress,未获归档授权;旧 task 笔记不纳入提交,财务 403 尚未启动。", "meta": {} }