C4 记录自动化验收通过真机仍待确认
这个提交包含在:
@@ -3,5 +3,5 @@ R1,发布候选证据整理,"固定首轮主线 release candidate,汇总 A1-A8
|
||||
R2,本地门禁与 Runbook 补强,"把 A8 本地回归真实需要的本地服务参数、命令顺序、live smoke 检查和 SKIP 规则写入当前操作手册,避免后续误判。","1) Runbook 写明 SERVE_CLIENT_DIST、OCR_PROVIDER、IM_NOTIFIER_ENABLED、FIELD_ENCRYPTION_KEY 和项目 feature env 的本地门禁用途;2) live smoke 清单链接到发布准备清单;3) 不新增业务 API、数据库迁移或部署操作。","流程级验证:人工阅读 Runbook 能复现 A8 本地门禁准备;命令:rg -n \"发布候选|SERVE_CLIENT_DIST|OCR_PROVIDER|IM_NOTIFIER_ENABLED|FIELD_ENCRYPTION_KEY|PROJECT_DOMAIN_ENABLED|release-readiness-checklist\" docs/trialrun-runbook.md docs/trialrun/live-smoke-readiness.md docs/文档索引.md。","rg|manual",DONE,DONE,DONE,"docs/trialrun-runbook.md|docs/trialrun/live-smoke-readiness.md|docs/文档索引.md","[\"R1\"]","仅补文档和清单;测试 FIELD_ENCRYPTION_KEY 只能用于本地回归,生产必须使用安全密钥且不得提交。"
|
||||
R3,权限直连审计,"在部署前用员工、主管、财务、管理员账号直连主路径和备用路径,确认导航隐藏没有掩盖服务端授权缺口。","1) 形成角色 x 路径允许/拒绝矩阵;2) 普通员工直连预算、AP、ERP、完整差旅、票据中心、合同台账、付款批次等备用路径不得获得越权数据;3) 若发现服务端权限缺口,先拆独立修复 Issue,不进入部署。","流程级验证:分别登录员工、主管、财务、管理员账号 -> 直连 /budgets、/ap、/system/integrations/erp、/travel-requests、/invoice-pool、/contracts-registry、/payment-batches 和对应 API -> 记录 HTTP 状态、页面提示和是否泄露数据;命令:cd client && npm run test:e2e -- permission-direct-access.spec.ts settings-governance.spec.ts login-portal-ux.spec.ts --workers=1。","playwright|curl|manual",DONE,DONE,DONE,"client/tests/e2e/permission-direct-access.spec.ts|docs/trialrun/permission-direct-access-audit.md|docs/trialrun/release-readiness-checklist.md|issues/2026-05-10_12-39-37-release-readiness-live-smoke.csv","[\"R2\"]","R3 已完成:新增权限直连 E2E 和审计记录;首次 E2E 因 127.0.0.1:3000 未启动失败,启动本地 OA 服务后重跑通过 10 passed;typecheck/build/CSV/diff check 通过;未发现权限泄漏,未改业务代码,R4 仍未执行。"
|
||||
R4,部署预检,"检查生产/公网环境变量、数据库迁移状态、备份、回滚命令、Caddy/systemd 状态、/ready 和前端资源版本;未经批准不部署。","1) 生产环境变量缺项和敏感项不打印;2) 数据库迁移状态明确且有备份/回滚路径;3) Caddy/systemd 或既有部署方式健康;4) /ready 与前端资源版本可核对;5) 若需要修改生产配置,必须先获得确认。","流程级验证:只读检查部署目录、服务状态和 /ready;命令:node scripts/qa/check-live-smoke-env.mjs;命令:LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-live-smoke-readiness.sh;生产变更前必须停止等待批准。","ssh|bash|node|manual",DONE,DONE,DONE,"deploy/*|scripts/qa/*|docs/trialrun/release-readiness-checklist.md","[\"R3\"]","R4 完成:先发现远端运行时代码未对齐,后续按治理合同完成部署前备份、D3 受控同步和 D4 只读复检;远端关键运行时文件哈希已对齐,本机/公网 /ready 200,Prisma up to date,Caddy 正常,企业微信 config 不含 secret,公网 bundle 扫描 0 findings;R5 仍未执行。"
|
||||
R5,公网企业微信和真实 OCR live smoke,"在 R4 预检通过且真实测试账号、企业微信配置和真实 OCR 样票齐备后,执行公网登录、企业微信入口、移动审批、报销/OCR 上传和通知 deeplink。","1) LIVE_SMOKE_* 从缺失变为可执行;2) 企业微信 config、OAuth 跳转和手机入口可验证;3) 真实 OCR 样票上传能进入可解释终态;4) 缺配置时继续 SKIP,不得宣称真机或真实 OCR 通过。","流程级验证:node scripts/qa/check-live-smoke-env.mjs --strict;命令:LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-live-smoke-readiness.sh;人工真机:手机企业微信工作台打开海音达工作台 -> deeplink 回 OA 审批或详情页 -> 记录结果。","node|bash|playwright|manual",DOING,TODO,TODO,"scripts/qa/*|docs/trialrun/live-smoke-readiness.md|docs/trialrun/real-device-public-checklist.md","[\"R4\"]","R5 smoke 密码重置合同 issues/2026-05-10_17-10-42-r5-smoke-password-reset-and-live-smoke.csv 已完成 K1-K5;SMOKE001/SMOKE002 已重置为仓库外安全凭据,登录标识按公网 auth 契约使用 smoke 邮箱;check-live-smoke-env --strict 通过;run-live-smoke-readiness.sh 通过,证据目录 artifacts/qa-flow/live-smoke-readiness-20260510-172421,公网 bundle findings=0,live smoke 3 passed,真实 OCR 样票不再 SKIP 且终态为重复发票/ocr_failed 可解释;pending OCR 辅助扫描因缺 DATABASE_URL 继续 SKIP;K4 审计 authSessions 555->572、auditLogs 258->263,发票/报销数量未新增;本轮 R5 真机反馈与正式运行口径代码收口已完成:issues/2026-05-10_17-47-39-r5-real-device-feedback-mobile-ux.csv M1-M5 DONE,后端禁止自审/admin-only 审批,移动底部 Tab 改为报销,头像中文首字;审批规约与正式组织口径文档同步已完成:issues/2026-05-10_19-24-06-approval-governance-doc-sync.csv G1-G5 DONE;正式组织配置仍待 issues/2026-05-10_18-25-33-formal-approval-org-config.csv O1-O3;企业微信真机正式链路验收尚未执行,且本轮未部署,所以主 R5 仍保持 DOING/TODO/TODO,R6 保持 TODO。"
|
||||
R5,公网企业微信和真实 OCR live smoke,"在 R4 预检通过且真实测试账号、企业微信配置和真实 OCR 样票齐备后,执行公网登录、企业微信入口、移动审批、报销/OCR 上传和通知 deeplink。","1) LIVE_SMOKE_* 从缺失变为可执行;2) 企业微信 config、OAuth 跳转和手机入口可验证;3) 真实 OCR 样票上传能进入可解释终态;4) 缺配置时继续 SKIP,不得宣称真机或真实 OCR 通过。","流程级验证:node scripts/qa/check-live-smoke-env.mjs --strict;命令:LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-live-smoke-readiness.sh;人工真机:手机企业微信工作台打开海音达工作台 -> deeplink 回 OA 审批或详情页 -> 记录结果。","node|bash|playwright|manual",DOING,TODO,TODO,"scripts/qa/*|docs/trialrun/live-smoke-readiness.md|docs/trialrun/real-device-public-checklist.md","[\"R4\"]","R5 smoke 密码重置合同 issues/2026-05-10_17-10-42-r5-smoke-password-reset-and-live-smoke.csv 已完成 K1-K5;SMOKE001/SMOKE002 已重置为仓库外安全凭据,登录标识按公网 auth 契约使用 smoke 邮箱;check-live-smoke-env --strict 通过;run-live-smoke-readiness.sh 通过,证据目录 artifacts/qa-flow/live-smoke-readiness-20260510-172421,公网 bundle findings=0,live smoke 3 passed,真实 OCR 样票不再 SKIP 且终态为重复发票/ocr_failed 可解释;pending OCR 辅助扫描因缺 DATABASE_URL 继续 SKIP;K4 审计 authSessions 555->572、auditLogs 258->263,发票/报销数量未新增;本轮 R5 真机反馈与正式运行口径代码收口已完成:issues/2026-05-10_17-47-39-r5-real-device-feedback-mobile-ux.csv M1-M5 DONE,后端禁止自审/admin-only 审批,移动底部 Tab 改为报销,头像中文首字;审批规约与正式组织口径文档同步已完成:issues/2026-05-10_19-24-06-approval-governance-doc-sync.csv G1-G5 DONE;O2 正式组织配置已完成并部署最新 RC,C2/C3 R4 复检通过;C4 自动化 live smoke/真实 OCR 再次通过,证据 artifacts/qa-flow/live-smoke-readiness-20260510-201403,SMOKE002 请假待办已确认分配给 majianyong。主 R5 仍保持 DOING/TODO/TODO:缺企业微信真机正式矩阵截图/录屏,缺 majianyong 实际审批、wangshunli 二审或主管本人申请人工验收;R6 保持 TODO。"
|
||||
R6,小范围试运行,"公网和真机 smoke 通过后,只开放 2-3 个内部用户按清单试运行报销、请假、采购、审批、企业微信移动入口、付款和导出;反馈转新 Issue。","1) 试运行名单、角色、时间窗口和回滚联系人明确;2) 员工提交、审批人审批、财务付款/导出、企业微信 deeplink 回 OA 均有记录;3) 每日问题只登记和分级,不现场扩大 P2 功能范围;4) 试运行结束形成继续/回滚/修复判断。","流程级验证:员工提交报销/请假/采购 -> 主管或财务审批 -> 财务付款或导出 -> 企业微信通知 deeplink 回 OA -> 管理员检查审计和状态;人工记录问题、截图和处理结论。","manual|playwright",TODO,TODO,TODO,"docs/trialrun/release-readiness-checklist.md|docs/trialrun/manual-trialrun-report.md|issues/*.csv","[\"R5\"]","小范围试运行前不得扩 P2 预算、ERP、AI、完整差旅、复杂 BPM;反馈必须进入新 Issue CSV。"
|
||||
|
||||
|
无法渲染此文件,因为它包含了意外字符,其位于第 2 行和第 616 列。
|
@@ -1,4 +1,4 @@
|
||||
ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes
|
||||
O1,正式审批组织配置确认,"按正式公司运行口径确认公网组织关系和业务审批角色:majianyong 是员工可见直属主管;wangshunli 是后台公司负责人,使用 ceo+admin,不配置为普通 manager。","1) 远端当前角色和直属上级只读核实;2) 形成待写配置清单;3) 明确 admin 不自动获得业务审批权;4) 未经批准不写远端数据库。","流程级验证:只读查询公网员工 wangshunli/majianyong 的 roleCodes、directManagerId、department;核对 docs/需求-统一审批中心规约.md;不执行 UPDATE。","ssh|manual",DONE,DONE,DONE,"external|issues/2026-05-10_18-25-33-formal-approval-org-config.csv","[]","O1 read-only 2026-05-10T11:41:02Z:wangshunli=HYD000006 active dept=管理部 roles=[admin] directManager=null;majianyong=HYD000007 active dept=管理部 roles=[manager] directManager=null;SMOKE001 active roles=[admin,employee] directManager=null;SMOKE002 active roles=[employee] directManager=SMOKE001。docs/需求-统一审批中心规约.md 已核对正式口径:admin 不代表业务审批权。O2 required=yes;待写清单:employee_roles(wangshunli) add ceo rollback=delete ceo;employees(majianyong).direct_manager_id null -> wangshunli rollback=null;employees(SMOKE002).direct_manager_id SMOKE001 -> majianyong rollback=SMOKE001;可选 employee_roles(SMOKE001) 保持 admin+employee 仅作 smoke admin,不作为正式主管;不得把 wangshunli 配为 manager。未部署、未迁移、未重启、未改远端 .env、未执行 UPDATE。"
|
||||
O2,专用正式测试账号准备,"准备不使用真实员工日常账号的公网专用测试账号,并按正式组织关系挂到 majianyong 主管链路。","1) 专用员工、主管、财务或负责人测试账号 active;2) 密码只保存在仓库外安全位置;3) 自动化不使用真实员工日常账号;4) 账号角色满足正式审批链验证。","流程级验证:只读检查账号存在与状态;如需创建或重置密码,必须另行批准远端写操作;node scripts/qa/check-live-smoke-env.mjs --strict。","ssh|node|manual",DONE,DONE,DONE,"external","[""O1""]","O2 completed 2026-05-10T12:03:14Z:受控写入三项正式组织配置;before wangshunli roles=[admin] directManager=null, majianyong roles=[manager] directManager=null, SMOKE002 directManager=SMOKE001;after wangshunli roles=[admin,ceo] directManager=null, majianyong roles=[manager] directManager=wangshunli, SMOKE002 directManager=majianyong;SMOKE001 保持 admin+employee 仅作 smoke admin。回滚:删除 wangshunli 的 ceo 角色;majianyong.direct_manager_id 置空;SMOKE002.direct_manager_id 恢复 SMOKE001。node scripts/qa/check-live-smoke-env.mjs --strict 通过,liveSmokeReady=true liveOcrReady=true publicReady=true wecom=ready。未部署、未迁移、未重启、未改远端 .env、未改密码、未清理数据。"
|
||||
O3,正式审批链公网验收,"使用专用测试账号验证正式审批链:员工 -> majianyong;majianyong -> wangshunli;高额/例外单据触发 wangshunli 二审。","1) 普通低/中额员工单据由 majianyong 处理;2) 高额/高风险/例外进入 wangshunli;3) majianyong 本人申请由 wangshunli 处理;4) wangshunli 本人不能自审。","流程级验证:公网/企业微信专用账号提交报销或请假 -> 对应审批人处理 -> 检查审批历史、通知 deeplink 和业务状态;失败项记录截图/录屏位置。","playwright|manual",TODO,TODO,TODO,"docs/trialrun/real-device-public-checklist.md","[""O2""]","通过前不得把主 R5 标记为 DONE;如需清理测试数据,另拆 destructive cleanup Issue。"
|
||||
O3,正式审批链公网验收,"使用专用测试账号验证正式审批链:员工 -> majianyong;majianyong -> wangshunli;高额/例外单据触发 wangshunli 二审。","1) 普通低/中额员工单据由 majianyong 处理;2) 高额/高风险/例外进入 wangshunli;3) majianyong 本人申请由 wangshunli 处理;4) wangshunli 本人不能自审。","流程级验证:公网/企业微信专用账号提交报销或请假 -> 对应审批人处理 -> 检查审批历史、通知 deeplink 和业务状态;失败项记录截图/录屏位置。","playwright|manual",TODO,TODO,TODO,"docs/trialrun/real-device-public-checklist.md","[""O2""]","O3 partial:最新 RC 已部署并 R4 复检通过;SMOKE002 提交请假单 e98caca3-f7c0-4f60-a3b4-e95836b4b628 后,待办 9a61d7a3-0080-42af-8ea0-b73563593dfa 已只读确认分配给 majianyong/HYD000007/manager。O3 仍 TODO:缺 majianyong 实际审批、wangshunli 二审或主管本人申请、企业微信真机正式矩阵截图/录屏;通过前不得把主 R5 标记为 DONE;如需清理测试数据,另拆 destructive cleanup Issue。"
|
||||
|
||||
|
@@ -2,4 +2,4 @@ ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regr
|
||||
C1,最新 RC 基线与部署前提确认,"固定当前业务/组织 release candidate 基线为 930dbce,并确认 O2 已完成、远端备份/回滚路径可用、默认 SYNC_ENV=0;本步骤不部署。","1) 工作区除本合同外无业务代码变更;2) 业务/组织目标基线为 930dbce;3) O2 DONE/DONE/DONE;4) 部署前备份和回滚路径引用既有 D2/E1-E3 证据;5) R5 仍未宣称完成。","流程级验证:git status --short;git log --oneline -3;python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-10_18-25-33-formal-approval-org-config.csv;只读确认 deploy/trialrun/backups 存在新近备份;确认 SYNC_ENV 未设为 1。","git|python3|ssh|manual",DONE,DONE,DONE,"issues/2026-05-10_20-05-31-current-rc-deploy-r4-r5-closeout.csv","[]","C1 completed:业务/组织基线 930dbce,包含 8da16f5 移动/自审收口、ccef809 正式规约、465cd14 O1、930dbce O2;远端存在部署前备份 hyb-oa-db-20260510_134340.dump 与 hyb-oa-storage-20260510_134341.tar.gz;当前进程 SYNC_ENV!=1;不修改 .env,不手工修远端。"
|
||||
C2,受控部署最新 RC,"使用既有 deploy/trialrun/deploy.sh 同步最新 RC 到 /opt/hyb-oa-trialrun,执行脚本内置构建、init、/ready 和 smoke;默认不覆盖远端 .env。","1) deploy 脚本成功;2) SYNC_ENV=0;3) /ready 200;4) Prisma migrate deploy/status 成功;5) 失败时停止并记录,不进入 C3/C4。","流程级验证:bash deploy/trialrun/deploy.sh;检查脚本输出 env contract、rsync、容器构建/重建、init、Prisma migrate status、/ready、external deps smoke、runtime smoke、公网 bundle 扫描。","bash|ssh|node|manual",DONE,DONE,DONE,"deploy/trialrun/deploy.sh|deploy/trialrun/docker-compose.yml|deploy/trialrun/runbook.md","[""C1""]","C2 completed:bash deploy/trialrun/deploy.sh 成功;SYNC_ENV=0 跳过 .env 同步;完成 env contract、rsync、前端 build/typecheck、server/init 镜像构建、容器重建、init、Prisma migrate status up to date、/ready、external deps smoke、runtime smoke、公网 bundle 扫描 findings=0;部署脚本未注入 LIVE_SMOKE_*,因此部署后 live smoke 按设计跳过。"
|
||||
C3,部署后 R4 只读复检,"部署成功后重新执行 R4 只读复检,确认远端关键运行时文件、服务状态、Prisma、Caddy、企业微信 config 和公网 bundle 均可核对。","1) 关键文件哈希与本地目标版本一致;2) server/db 容器健康;3) Prisma migrate status up to date;4) /ready 200;5) Caddy active 且反代正常;6) 企业微信 config ready 且不含 secret;7) 公网 bundle 扫描 findings=0。","流程级验证:远端 sha256sum 对比 workspaceSettings.js/NavLinks.tsx/workflow.js;node scripts/qa/check-public-bundle-copy.mjs https://oa.hyinda.com;node scripts/qa/check-live-smoke-env.mjs --strict;只读检查 Caddy 与 Prisma migrate status。","ssh|node|manual",DONE,DONE,DONE,"docs/trialrun/deployment-preflight-2026-05-10.md|scripts/qa/check-public-bundle-copy.mjs|scripts/qa/check-live-smoke-env.mjs","[""C2""]","C3 completed:workspaceSettings.js/NavLinks.tsx/workflow.js 本地与远端 sha256 一致;server 容器 Up,db 容器 Up healthy;Prisma migrate status 显示 46 migrations 且 Database schema is up to date;check-live-smoke-env --strict 通过 publicReady=true wecom=ready liveSmokeReady=true liveOcrReady=true;Caddy active/enabled,oa.hyinda.com 反代到 127.0.0.1:3000;公网 bundle 扫描 scanned=54 focused=4 findings=0。"
|
||||
C4,O3 与 R5 自动化/真机门禁,"在最新 RC 部署并 R4 复检通过后,执行可自动化的公网 live smoke、真实 OCR 和正式审批链分配检查;企业微信真机与负责人审批动作为人工门禁。","1) run-live-smoke-readiness.sh 通过;2) SMOKE002 提交测试单据后低/中额待办分配给 majianyong;3) 高额/例外链路可验证进入 majianyong -> wangshunli 或记录阻断;4) 真机未验收时 O3/R5 不得标 DONE;5) 所有失败项有证据。","流程级验证:set -a; source ~/.hyb-oa/live-smoke.env; set +a; LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-live-smoke-readiness.sh;按 docs/trialrun/real-device-public-checklist.md 人工记录企业微信工作台、移动报销、审批 deeplink、正式审批矩阵。","bash|playwright|manual",TODO,TODO,TODO,"scripts/qa/*|docs/trialrun/real-device-public-checklist.md|issues/2026-05-10_12-39-37-release-readiness-live-smoke.csv|issues/2026-05-10_18-25-33-formal-approval-org-config.csv","[""C3""]","如果缺 majianyong/wangshunli 人工操作或真机截图,只能记录 BLOCKED/SKIP,不能把 O3 或主 R5 标为完成。"
|
||||
C4,O3 与 R5 自动化/真机门禁,"在最新 RC 部署并 R4 复检通过后,执行可自动化的公网 live smoke、真实 OCR 和正式审批链分配检查;企业微信真机与负责人审批动作为人工门禁。","1) run-live-smoke-readiness.sh 通过;2) SMOKE002 提交测试单据后低/中额待办分配给 majianyong;3) 高额/例外链路可验证进入 majianyong -> wangshunli 或记录阻断;4) 真机未验收时 O3/R5 不得标 DONE;5) 所有失败项有证据。","流程级验证:set -a; source ~/.hyb-oa/live-smoke.env; set +a; LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-live-smoke-readiness.sh;按 docs/trialrun/real-device-public-checklist.md 人工记录企业微信工作台、移动报销、审批 deeplink、正式审批矩阵。","bash|playwright|manual",DOING,TODO,TODO,"scripts/qa/*|docs/trialrun/real-device-public-checklist.md|issues/2026-05-10_12-39-37-release-readiness-live-smoke.csv|issues/2026-05-10_18-25-33-formal-approval-org-config.csv","[""C3""]","C4 partial 2026-05-10:run-live-smoke-readiness.sh 通过,证据 artifacts/qa-flow/live-smoke-readiness-20260510-201403;公网 bundle findings=0,live smoke 3 passed,真实 OCR 样票不再 SKIP,结果 ocr_failed 且提示重复发票可解释;pending OCR 辅助扫描缺 DATABASE_URL 继续 SKIP。自动正式链路:SMOKE002 提交年假半天 leaveRequest=e98caca3-f7c0-4f60-a3b4-e95836b4b628,task=9a61d7a3-0080-42af-8ea0-b73563593dfa,待办 assignee=majianyong/HYD000007/manager,状态 pending/reviewing。只读 smoke 审计:authSessions=590, reimbursements=1, invoices=5, leaveRequests=1, workflowInstances=1, auditLogs=269。BLOCKED:缺企业微信真机正式矩阵截图/录屏,缺 majianyong 实际审批、wangshunli 二审或主管本人申请人工验收;因此 C4、O3、主 R5 均不得标 DONE。"
|
||||
|
||||
|
在新工单中引用
屏蔽一个用户