文件
hyb-oa/.trellis/tasks/archive/2026-08/08-05-reimbursement-payment-batch-deployment/prd.md
T
wangsli 254ba2dbd1
ci-e2e / e2e (push) Canceled after 0s
ci-minimal / check-minimal (push) Canceled after 0s
chore(reimbursement-payment-batch-deployment): 归档部署任务
2026-08-05 10:53:38 +08:00

5.6 KiB
原始文件 Blame 文件历史

报销付款批次改进部署

Goal

将 reimbursement-small-team-form-validation 已完成并本地验证的报销详情、付款批次费用明细和银行回单在线预览改进,安全发布到既有公网 OA,并用只读、脱敏证据确认活动版本和关键页面合同生效。

Background and confirmed facts

  • 功能提交为 d440011,任务归档提交为 3659d38;当前 main 工作区干净,但相对 origin/main 领先 2 个提交,部署前必须先发布到上游。
  • 本轮应用改动不包含 Prisma schema、migration、生产环境键或部署脚本变化。
  • 本地已完成 Prisma、Node 语法、前端 typecheck/build、19 项 PC/移动 Playwright、Trellis/文档/敏感信息门禁;后端聚焦测试唯一失败是既有 BIFF8 本机依赖缺口,与本轮代码无关。
  • 既有生产部署使用 deploy/trialrun/deploy-existing.sh,固定 SYNC_ENV=0,从受控 systemd unit 读取部署合同;不得覆盖生产 .env 或从 Docker 标签猜测目录。
  • 当前进程环境未直接注入两个部署 SSH target;执行阶段从本机受控 SSH 配置探测既有部署身份和 forced-command refresh 身份,探测过程不回显目标、账号或路径。
  • 用户已授权本次公网部署,但未授权真实报销、审批、付款、银行、ERP、企业微信或生产配置写入。

Scope

  • 将已验证的 main 提交推送到现有上游并通过既有来源校验。
  • 运行既有部署聚合预检,使用 deploy-existing.sh 发布到现有公网环境。
  • 验证活动 build、/ready、公开前端资源、基础 smoke、外部依赖和功能开关。
  • 记录脱敏部署结果、可解释 SKIP、回滚边界和 Trellis 收尾证据。

Requirements

R1 发布来源与预检

  • 部署候选必须是干净、已提交并包含在 origin/main 的明确提交;部署前先推送本任务的启动记录和既有功能提交。
  • 使用既有聚合预检,要求部署身份、六项合同、仓库、环境文件、数据目录、运行实例、build、存储/PGDATA 挂载、备份 build、refresh 身份和 forced-command 全部通过。
  • 环境合同、来源校验或远端聚合预检任一失败即停止,不使用 unpublished override,不绕过备份合同。

R2 受控发布

  • 仅使用 deploy-existing.sh 发布,保持 SYNC_ENV=0 和既有数据目录;不执行数据库重置、不修改 migration、不覆盖生产 .env。
  • 发布过程中允许既有部署脚本执行构建、容器更新、已提交 migration 检查、运行时 smoke 和备份合同刷新;本轮预期无待执行 migration。
  • 不创建或修改真实报销、付款批次、回单或银行数据,不执行真实付款。

R3 公网只读验收

  • 公网 /ready、运行时 build SHA 和前端公开短 SHA 必须与发布提交一致。
  • 运行既有基础公网 smoke、外部依赖/功能开关检查和前端资源扫描;有专用 LIVE_SMOKE_* 凭据时才运行登录态 smoke,缺失时记录为明确 SKIP,不读取或输出真实账号密码。
  • 对本轮功能只做无业务写入的验证:确认公开 bundle 包含新文案/入口合同,服务端路由已随目标 build 发布;不得用真实回单或真实付款数据制造验证样本。

R4 结果与回滚

  • 记录发布提交、部署合同总结果、/ready、公网 smoke、登录态 smoke 是否执行及任何可解释 SKIP。
  • 若应用发布成功但备份合同 refresh 失败,按“已部署但合同刷新失败”处理,不重复发布应用;先恢复合同。
  • 应用或 readiness 失败时,使用既有部署入口回滚到上一个已发布提交,不修改数据库结构或生产环境文件。

Acceptance Criteria

  • AC1:候选提交已推送到 origin/main,工作区干净,来源和部署前聚合体检通过。
  • AC2:deploy-existing.sh 完整通过,生产 .env 未同步或覆盖,数据库无新增 migration,未发生真实业务或付款写入。
  • AC3:公网 /ready、运行时 build 与前端短 SHA 均命中本次发布提交。
  • AC4:基础公网 smoke、部署运行时 smoke、外部依赖/功能开关和前端资源扫描通过;登录态 smoke 按凭据实际状态记录 PASS 或明确 SKIP。
  • AC5:公开资源可确认差旅事由去重、付款批次费用明细/小计和“下载需说明用途”等新前端合同已发布,不暴露真实回单、账号或存储资料。
  • AC6:任务记录、Trellis 治理、敏感信息检查和 git diff --check 通过;只在全部部署与公网门禁通过后告知用户可以测试。

Out of Scope

  • 修改本轮功能代码、数据库模型、migration、生产环境变量或部署脚本。
  • 真实报销提交、审批、付款批次操作、回单上传/预览、完整银行账号查看或真实付款。
  • 企业微信写入、ERP、银行直连、生产数据库重置或人工修复真实业务数据。
  • 为部署缺口启用 unpublished override、跳过聚合预检或弱化附件权限/审计。

Test Plan

  • Local/preflight:环境合同、任务校验、Trellis 治理、敏感信息、git diff --check、Git 来源/上游包含关系和既有部署 13 项聚合合同。
  • Deploy:deploy-existing.sh 内置的构建、Compose、migration 状态、运行时 smoke、活动 build、公开 build 和备份合同 refresh。
  • Public:/ready、基础无凭据 Playwright/readiness、外部依赖与功能开关检查、前端资源关键文案扫描;登录态 smoke 仅在专用凭据存在时运行。
  • Negative/rollback:来源、预检或 readiness 任一失败即停止;应用已发布但 refresh 失败时不重复部署应用。