R5 记录 credentialed live smoke 仍阻断

这个提交包含在:
2026-05-10 16:42:10 +08:00
父节点 8bd93aad7f
当前提交 869ef367f8
共修改 3 个文件,包含 15 行新增和 1 行删除
@@ -122,6 +122,14 @@ LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-live-smoke-readine
- `node scripts/qa/check-live-smoke-env.mjs --strict`:仍失败,缺 `LIVE_SMOKE_*` 与 OCR live 文件或目录。
- 结论:F3 公网业务 smoke、F4 企业微信真机验收和 R6 小范围试运行仍不能开始。
2026-05-10 R5 credentialed 复查:
- 执行合同:`issues/2026-05-10_16-39-17-r5-credentialed-live-smoke.csv`。
- `/home/shunli/.hyb-oa/live-smoke.env` 不存在,未执行 `source`。
- `node scripts/qa/check-live-smoke-env.mjs`:`publicReady=true`,`wecom=ready`,`liveSmokeReady=false`,`liveOcrReady=false`。
- `node scripts/qa/check-live-smoke-env.mjs --strict`:仍失败,缺公网 smoke 账号和 OCR live 文件或目录。
- 结论:H3 公网自动化业务 smoke、H4 企业微信真机验收和 R6 小范围试运行仍不能开始。
判定:
- `liveSmokeReady=false` 时只能记录公网账号条件缺失。
@@ -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 解阻合同 issues/2026-05-10_16-28-34-r5-live-smoke-unblock.csv 已执行 F1/F2/F5;publicReady=true,wecom=ready,但 strict 仍失败,liveSmokeReady=false,liveOcrReady=false;缺 LIVE_SMOKE_ADMIN_IDENTIFIER/PASSWORD、LIVE_SMOKE_EMPLOYEE_IDENTIFIER/PASSWORD、OCR live 账号或员工账号、PLAYWRIGHT_OCR_LIVE_FILE 或 PLAYWRIGHT_OCR_LIVE_DIR。F3/F4 未执行,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 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 通过。"
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 列。
@@ -0,0 +1,6 @@
ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes
H1,R5 本机凭据包确认,"确认本轮 credentialed live smoke 只从仓库外本机安全凭据包读取环境变量,不提交账号、密码、OCR 样票、截图敏感信息或真实路径。","1) 当前基线为 8bd93aa;2) 凭据包位置为仓库外 ~/.hyb-oa/live-smoke.env;3) 文件存在且权限为 600 才可进入 H2 source;4) 文件不存在时停止后续业务验证。","流程级验证:git status --short;stat -c '%a %n' /home/shunli/.hyb-oa/live-smoke.env;不得 cat、grep、打印或提交凭据内容。","git|stat|manual",DONE,DONE,DONE,"issues/2026-05-10_16-39-17-r5-credentialed-live-smoke.csv|external","[]","H1 阻断确认:执行前工作区干净;/home/shunli/.hyb-oa/live-smoke.env 不存在,无法 source 凭据包;本轮未创建、读取或提交任何真实账号、密码、OCR 样票或 secret。"
H2,R5 凭据准入 strict 重跑,"在 H1 凭据包存在时 source 本机环境变量并重跑 live smoke 准入;若 strict 失败或凭据包不存在,停止 H3/H4。","1) node scripts/qa/check-live-smoke-env.mjs 输出 publicReady=true 且 wecom=ready;2) node scripts/qa/check-live-smoke-env.mjs --strict 通过才可进入 H3;3) 缺凭据或样票时记录缺项,不执行公网业务 smoke。","流程级验证:若凭据包存在,执行 set -a && source ~/.hyb-oa/live-smoke.env && set +a 后运行 node scripts/qa/check-live-smoke-env.mjs 和 --strict;凭据包不存在时只记录阻断。","node|manual",DONE,DONE,DONE,"scripts/qa/check-live-smoke-env.mjs|docs/trialrun/live-smoke-readiness.md","[""H1""]","H2 阻断确认:因 ~/.hyb-oa/live-smoke.env 不存在,未执行 source;沿用无凭据准入结论 publicReady=true、wecom=ready、liveSmokeReady=false、liveOcrReady=false,H3/H4 不执行。"
H3,公网自动化 credentialed live smoke,"在 H2 strict 通过后执行公网自动化 R5,覆盖 /ready、公网资源扫描、网页登录 smoke 和真实 OCR 样票上传。","1) LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-live-smoke-readiness.sh 不再出现 live smoke 或真实 OCR SKIP;2) public bundle findings=0;3) live OCR 进入可解释终态。","流程级验证: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",TODO,TODO,TODO,"scripts/qa/run-live-smoke-readiness.sh|artifacts/qa-flow","[""H2""]","未执行:H1/H2 阻断,缺本机凭据包。"
H4,企业微信真机人工验收,"在 H3 通过后使用真实手机企业微信和移动浏览器验证工作台入口、绑定或登录回退、移动审批、报销上传、通知、布局和 deeplink。","1) 真机企业微信可进入海音达工作台;2) 移动页面无 PC 壳、横向溢出或内部码值主展示;3) 审批 deeplink 回 OA;4) 失败项有证据位置。","流程级验证:按 docs/trialrun/real-device-public-checklist.md 执行;记录测试日期、设备、企业微信版本、账号角色、失败步骤和证据位置,摘要不得含隐私或密钥。","manual|playwright",TODO,TODO,TODO,"docs/trialrun/real-device-public-checklist.md|docs/trialrun/release-readiness-checklist.md","[""H3""]","未执行:H3 未执行,企业微信真机验收仍缺人工记录。"
H5,R5 credentialed 结果回填与 R6 Gate,"根据 H1-H4 结果回填主 R5;只有 H2-H4 全部通过才允许启动 R6。","1) 若 H2-H4 全部通过,主 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-39-17-r5-credentialed-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-39-17-r5-credentialed-live-smoke.csv|issues/2026-05-10_12-39-37-release-readiness-live-smoke.csv|docs/trialrun/release-readiness-checklist.md","[""H2""]","H5 完成:因 H1/H2 阻断,主 R5 保持 DOING/TODO/TODO,R6 保持 TODO;提交类型为 R5 记录 credentialed live smoke 仍阻断。"
1 ID Title Description Acceptance Test_Method Tools Dev_Status Review1_Status Regression_Status Files Dependencies Notes
2 H1 R5 本机凭据包确认 确认本轮 credentialed live smoke 只从仓库外本机安全凭据包读取环境变量,不提交账号、密码、OCR 样票、截图敏感信息或真实路径。 1) 当前基线为 8bd93aa;2) 凭据包位置为仓库外 ~/.hyb-oa/live-smoke.env;3) 文件存在且权限为 600 才可进入 H2 source;4) 文件不存在时停止后续业务验证。 流程级验证:git status --short;stat -c '%a %n' /home/shunli/.hyb-oa/live-smoke.env;不得 cat、grep、打印或提交凭据内容。 git|stat|manual DONE DONE DONE issues/2026-05-10_16-39-17-r5-credentialed-live-smoke.csv|external [] H1 阻断确认:执行前工作区干净;/home/shunli/.hyb-oa/live-smoke.env 不存在,无法 source 凭据包;本轮未创建、读取或提交任何真实账号、密码、OCR 样票或 secret。
3 H2 R5 凭据准入 strict 重跑 在 H1 凭据包存在时 source 本机环境变量并重跑 live smoke 准入;若 strict 失败或凭据包不存在,停止 H3/H4。 1) node scripts/qa/check-live-smoke-env.mjs 输出 publicReady=true 且 wecom=ready;2) node scripts/qa/check-live-smoke-env.mjs --strict 通过才可进入 H3;3) 缺凭据或样票时记录缺项,不执行公网业务 smoke。 流程级验证:若凭据包存在,执行 set -a && source ~/.hyb-oa/live-smoke.env && set +a 后运行 node scripts/qa/check-live-smoke-env.mjs 和 --strict;凭据包不存在时只记录阻断。 node|manual DONE DONE DONE scripts/qa/check-live-smoke-env.mjs|docs/trialrun/live-smoke-readiness.md ["H1"] H2 阻断确认:因 ~/.hyb-oa/live-smoke.env 不存在,未执行 source;沿用无凭据准入结论 publicReady=true、wecom=ready、liveSmokeReady=false、liveOcrReady=false,H3/H4 不执行。
4 H3 公网自动化 credentialed live smoke 在 H2 strict 通过后执行公网自动化 R5,覆盖 /ready、公网资源扫描、网页登录 smoke 和真实 OCR 样票上传。 1) LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-live-smoke-readiness.sh 不再出现 live smoke 或真实 OCR SKIP;2) public bundle findings=0;3) live OCR 进入可解释终态。 流程级验证: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 TODO TODO TODO scripts/qa/run-live-smoke-readiness.sh|artifacts/qa-flow ["H2"] 未执行:H1/H2 阻断,缺本机凭据包。
5 H4 企业微信真机人工验收 在 H3 通过后使用真实手机企业微信和移动浏览器验证工作台入口、绑定或登录回退、移动审批、报销上传、通知、布局和 deeplink。 1) 真机企业微信可进入海音达工作台;2) 移动页面无 PC 壳、横向溢出或内部码值主展示;3) 审批 deeplink 回 OA;4) 失败项有证据位置。 流程级验证:按 docs/trialrun/real-device-public-checklist.md 执行;记录测试日期、设备、企业微信版本、账号角色、失败步骤和证据位置,摘要不得含隐私或密钥。 manual|playwright TODO TODO TODO docs/trialrun/real-device-public-checklist.md|docs/trialrun/release-readiness-checklist.md ["H3"] 未执行:H3 未执行,企业微信真机验收仍缺人工记录。
6 H5 R5 credentialed 结果回填与 R6 Gate 根据 H1-H4 结果回填主 R5;只有 H2-H4 全部通过才允许启动 R6。 1) 若 H2-H4 全部通过,主 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-39-17-r5-credentialed-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-39-17-r5-credentialed-live-smoke.csv|issues/2026-05-10_12-39-37-release-readiness-live-smoke.csv|docs/trialrun/release-readiness-checklist.md ["H2"] H5 完成:因 H1/H2 阻断,主 R5 保持 DOING/TODO/TODO,R6 保持 TODO;提交类型为 R5 记录 credentialed live smoke 仍阻断。