diff --git a/docs/trialrun/release-readiness-checklist.md b/docs/trialrun/release-readiness-checklist.md index 66b7411d..bdc9660f 100644 --- a/docs/trialrun/release-readiness-checklist.md +++ b/docs/trialrun/release-readiness-checklist.md @@ -130,6 +130,16 @@ LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-live-smoke-readine - `node scripts/qa/check-live-smoke-env.mjs --strict`:仍失败,缺公网 smoke 账号和 OCR live 文件或目录。 - 结论:H3 公网自动化业务 smoke、H4 企业微信真机验收和 R6 小范围试运行仍不能开始。 +2026-05-10 R5 历史凭据自动化复查: + +- 执行合同:`issues/2026-05-10_16-56-44-r5-history-credential-live-smoke.csv`。 +- 历史 `LIVE_SMOKE_*` 可临时提取,OCR 样票存在,`check-live-smoke-env --strict` 通过;凭据未落盘、未打印。 +- 公网 `/ready` 与企业微信 config 正常,公网资源文案扫描 `scanned=54 focused=4 findings=0`。 +- 公网 live smoke 未通过:管理员登录后停留 `/login`,接口返回 401;员工 smoke 和真实 OCR 未执行。 +- 证据目录:`artifacts/qa-flow/live-smoke-readiness-20260510-165833/`。 +- smoke 数据只读审计:`SMOKE001/SMOKE002` 均 active,`authSessions=555`,`invoices=5`,`ocrResultsLinkedFromInvoices=1`,`auditLogs=258`。 +- 结论:R5 仍未通过,下一步需重置或重新提供 `SMOKE001/SMOKE002` 密码后重跑;R6 仍不能开始。 + 判定: - `liveSmokeReady=false` 时只能记录公网账号条件缺失。 diff --git a/issues/2026-05-10_12-39-37-release-readiness-live-smoke.csv b/issues/2026-05-10_12-39-37-release-readiness-live-smoke.csv index 1396c53a..638707e3 100644 --- a/issues/2026-05-10_12-39-37-release-readiness-live-smoke.csv +++ b/issues/2026-05-10_12-39-37-release-readiness-live-smoke.csv @@ -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 credentialed 合同 issues/2026-05-10_16-39-17-r5-credentialed-live-smoke.csv 已执行 H1/H2/H5;/home/shunli/.hyb-oa/live-smoke.env 不存在,未 source 凭据包;publicReady=true,wecom=ready,但 strict 仍失败,liveSmokeReady=false,liveOcrReady=false;H3/H4 未执行,R6 仍 TODO,不得宣称 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 history credential 合同 issues/2026-05-10_16-56-44-r5-history-credential-live-smoke.csv 已执行 J1/J2/J3/J5;J1 strict 通过,J2 公网自动化未通过:管理员 live smoke 登录 401 停留 /login,员工 smoke 和真实 OCR 未执行;J3 只读审计 smoke 账号 active 且 auditLogs=258;J4 未执行,R6 仍 TODO。下一步需重置或重新提供 SMOKE001/SMOKE002 密码。" 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。" diff --git a/issues/2026-05-10_16-56-44-r5-history-credential-live-smoke.csv b/issues/2026-05-10_16-56-44-r5-history-credential-live-smoke.csv new file mode 100644 index 00000000..12453471 --- /dev/null +++ b/issues/2026-05-10_16-56-44-r5-history-credential-live-smoke.csv @@ -0,0 +1,6 @@ +ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes +J1,历史凭据临时注入与 strict 准入,"从本机 .bash_history 只解析 LIVE_SMOKE_* 到当前进程环境,结合现有 OCR 样票执行 R5 strict 准入;不落盘、不打印、不提交密码。","1) 能提取完整 LIVE_SMOKE_ADMIN/EMPLOYEE 四项;2) OCR 样票存在;3) check-live-smoke-env --strict 通过;4) 未写入 ~/.hyb-oa/live-smoke.env 或仓库文件。","流程级验证:使用只读脚本解析 .bash_history 并执行 node scripts/qa/check-live-smoke-env.mjs 和 --strict;输出只允许显示 present/missing、publicReady、wecom、liveSmokeReady、liveOcrReady,不显示任何 secret。","python3|node",DONE,DONE,DONE,"scripts/qa/check-live-smoke-env.mjs|artifacts/北京悦海堂餐饮管理有限公司_发票金额1683.00元.pdf","[]","J1 完成:历史 LIVE_SMOKE_* 四项均可提取且未打印;OCR 样票存在;check-live-smoke-env 与 --strict 均通过,liveSmokeReady=true,liveOcrReady=true;未写入凭据文件。" +J2,公网自动化 live smoke 与真实 OCR,"在 J1 strict 通过后,使用同一临时环境执行公网 readiness、资源扫描、网页登录 smoke 和真实 OCR 样票复核。","1) run-live-smoke-readiness.sh 完成;2) live smoke 不再 SKIP;3) 真实 OCR 不再 SKIP,并进入可解释终态;4) 公网 bundle 扫描 findings=0。","流程级验证:LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-live-smoke-readiness.sh;检查最新 artifacts/qa-flow/live-smoke-readiness-* 的 live-smoke.txt、live-ocr.txt、public-bundle-copy.txt。","bash|node|playwright",DOING,TODO,TODO,"scripts/qa/run-live-smoke-readiness.sh|artifacts/qa-flow","[""J1""]","J2 已执行但未通过:/ready 和 WeCom config 正常,公网 bundle 扫描 findings=0,pending OCR 因缺 DATABASE_URL 辅助 SKIP;live smoke 管理员登录停留 /login 且 401,员工 smoke 和真实 OCR 未执行。证据目录 artifacts/qa-flow/live-smoke-readiness-20260510-165833;需重置或重新提供 SMOKE001/SMOKE002 密码后重跑。" +J3,smoke 自动化副作用只读审计,"公网自动化后只读审计 SMOKE001/SMOKE002 产生的数据足迹,记录会话、票据、OCR、审计日志数量;不做清理。","1) 远端审计脚本只读运行成功;2) 记录 smoke 账号 active 状态和数据计数;3) 不执行删除、归档或数据库写操作。","流程级验证:ssh deploy@118.89.77.218 进入 /opt/hyb-oa-trialrun 后执行 docker-compose server node src/scripts/audit-smoke-data.js --format=text;只记录计数摘要。","ssh|node|manual",DONE,DONE,DONE,"server/src/scripts/audit-smoke-data.js|external","[""J2""]","J3 完成:SMOKE001/SMOKE002 均 active;authSessions=555,reimbursements=1,invoices=5,ocrResultsLinkedFromInvoices=1,auditLogs=258;未执行清理或写操作。" +J4,企业微信真机人工验收,"按现有真机清单人工验证企业微信工作台、移动浏览器、移动审批、报销上传、通知、deeplink 和布局。","1) 真实企业微信客户端可进入海音达工作台;2) 移动页面无 PC 壳、横向溢出或内部码值主展示;3) 审批 deeplink 回 OA;4) 失败项有证据位置。","流程级验证:按 docs/trialrun/real-device-public-checklist.md 执行;记录测试日期、设备、企业微信版本、账号角色、失败步骤和证据位置;不得提交敏感截图或隐私。","manual",TODO,TODO,TODO,"docs/trialrun/real-device-public-checklist.md|docs/trialrun/release-readiness-checklist.md","[""J2""]","自动化 UA 不能替代真机;若无人工记录,主 R5 不得标 DONE。" +J5,R5 状态回填与 R6 Gate,"根据 J1-J4 结果回填主 R5 和发布清单;只有自动化和真机均通过才允许启动 R6。","1) J1-J4 全部通过时,主 R5 置为 DONE/DONE/DONE;2) 自动化通过但真机未验收时,主 R5 保持 DOING/TODO/TODO;3) R6 保持 TODO。","流程级验证:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-10_16-56-44-r5-history-credential-live-smoke.csv;python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-10_12-39-37-release-readiness-live-smoke.csv;git diff --check。","python3|git|manual",DONE,DONE,DONE,"issues/2026-05-10_16-56-44-r5-history-credential-live-smoke.csv|issues/2026-05-10_12-39-37-release-readiness-live-smoke.csv|docs/trialrun/release-readiness-checklist.md","[""J1"",""J2"",""J3""]","J5 完成:因 J2 管理员登录 401 且 J4 未执行,主 R5 保持 DOING/TODO/TODO,R6 保持 TODO;下一步应重置或重新提供 smoke 密码。"