R5 重置 smoke 密码并完成自动化 live smoke
这个提交包含在:
@@ -11,7 +11,7 @@
|
||||
- 主开发合同:`issues/2026-05-09_20-57-19-mvp-mainline-dev-kickoff.csv`,A1-A8 已全部 `DONE/DONE/DONE`。
|
||||
- 剩余主线批次合同:`issues/2026-05-10_10-48-03-mvp-remaining-mainline-closeout.csv`,B1-B5 已全部 `DONE/DONE/DONE`。
|
||||
- 当前状态:本地门禁已闭环;R4 部署预检、D3 受控同步和 D4 只读复检已完成;公网已部署本轮 release candidate。
|
||||
- 当前最大缺口:R5 已启动准入与 readiness 检查,但公网真实账号、企业微信真机和真实 OCR 样票条件仍未闭环,继续按 `SKIP` 处理,R5 尚未完成。
|
||||
- 当前最大缺口:R5 公网自动化和真实 OCR 已通过;企业微信真机人工验收尚未执行,因此 R5 尚未完成,R6 仍不能开始。
|
||||
|
||||
首轮路线保持不变:OA 是唯一业务主系统和正式审批中心;企业微信只做入口、身份、通知、deeplink 和打卡原始采集边界;不接飞书,不接企业微信原生审批。
|
||||
|
||||
@@ -81,7 +81,7 @@ R3 审计执行记录见 [`permission-direct-access-audit.md`](permission-direct
|
||||
|
||||
部署前只做只读确认,不直接改生产:
|
||||
|
||||
2026-05-10 R4/D3/D4 结论:`DONE`。已创建部署前 DB/storage 备份,执行 `bash deploy/trialrun/deploy.sh` 同步远端文件树并完成脚本内置 smoke;部署后只读复检显示关键运行时文件哈希对齐、Prisma migration up to date、`/ready` 200、Caddy 正常、企业微信 config 不返回 secret、公网资源文案扫描 0 findings。R5 仍需真实账号、企业微信真机和真实 OCR 样票后单独执行。
|
||||
2026-05-10 R4/D3/D4 结论:`DONE`。已创建部署前 DB/storage 备份,执行 `bash deploy/trialrun/deploy.sh` 同步远端文件树并完成脚本内置 smoke;部署后只读复检显示关键运行时文件哈希对齐、Prisma migration up to date、`/ready` 200、Caddy 正常、企业微信 config 不返回 secret、公网资源文案扫描 0 findings。R5 公网自动化和真实 OCR 已在后续 smoke 密码重置后通过,仍需企业微信真机人工验收后才能关闭。
|
||||
|
||||
- 当前生产 commit、部署目录和本地 release candidate 是否一致。
|
||||
- 生产 `.env` 必需项是否完整;检查时不得打印 secret。
|
||||
@@ -140,6 +140,19 @@ LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-live-smoke-readine
|
||||
- smoke 数据只读审计:`SMOKE001/SMOKE002` 均 active,`authSessions=555`,`invoices=5`,`ocrResultsLinkedFromInvoices=1`,`auditLogs=258`。
|
||||
- 结论:R5 仍未通过,下一步需重置或重新提供 `SMOKE001/SMOKE002` 密码后重跑;R6 仍不能开始。
|
||||
|
||||
2026-05-10 R5 smoke 密码重置与自动化复查:
|
||||
|
||||
- 执行合同:`issues/2026-05-10_17-10-42-r5-smoke-password-reset-and-live-smoke.csv`。
|
||||
- K1 只读确认:R4 已完成,R5 仍未完成;`SMOKE001/SMOKE002` 均 active;部署前备份 `hyb-oa-db-20260510_134340.dump` 与 `hyb-oa-storage-20260510_134341.tar.gz` 可追溯。
|
||||
- K2 已受控重置两个 smoke 账号密码和登录失败状态;新凭据仅写入仓库外 `~/.hyb-oa/live-smoke.env`,权限 `600`,未打印或提交密码。当前登录接口按邮箱/手机号查询,live smoke 登录标识使用 smoke 邮箱,员工编号仍为 `SMOKE001/SMOKE002`。
|
||||
- `node scripts/qa/check-live-smoke-env.mjs --strict`:通过,`liveSmokeReady=true`,`liveOcrReady=true`。
|
||||
- `LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-live-smoke-readiness.sh`:通过;公网资源文案扫描 `scanned=54 focused=4 findings=0`;公网 live smoke `3 passed`;真实 OCR 样票不再 `SKIP`。
|
||||
- 真实 OCR 终态:样票识别出发票代码/号码、销售方、金额和日期;因历史样票重复,页面提示“已识别出相同发票,不能重复添加”,记录为可解释终态。
|
||||
- 证据目录:`artifacts/qa-flow/live-smoke-readiness-20260510-172421/`。
|
||||
- pending OCR 辅助扫描仍因缺 `DATABASE_URL` 记录 `SKIP`,不作为 R5 硬阻断。
|
||||
- K4 副作用只读审计:`authSessions=555 -> 572`,`auditLogs=258 -> 263`;`reimbursements=1`、`invoices=5`、`ocrResultsLinkedFromInvoices=1` 保持不变;未清理数据。
|
||||
- 结论:公网自动化和真实 OCR 已通过;企业微信真机人工验收尚未执行,所以主 R5 仍不能置为 `DONE/DONE/DONE`,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 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 密码。"
|
||||
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 仍保持 DOING/TODO/TODO,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 列。
|
@@ -0,0 +1,6 @@
|
||||
ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes
|
||||
K1,执行前只读确认,"确认 R4 已完成、R5 未完成、远端 SMOKE001/SMOKE002 active、部署前备份可用,并记录当前 smoke 数据审计计数;本步骤不做写操作。","1) 主合同 R4=DONE/DONE/DONE 且 R5 未完成;2) 远端 smoke 账号存在且 active;3) 部署前备份文件名可追溯;4) 记录 smoke 数据审计计数。","流程级验证:读取 issues/2026-05-10_12-39-37-release-readiness-live-smoke.csv;ssh [email protected] 进入 /opt/hyb-oa-trialrun 后执行 docker-compose server node src/scripts/audit-smoke-data.js --format=text;只记录账号状态和计数摘要,不打印 secret。","ssh|node|manual",DONE,DONE,DONE,"issues/2026-05-10_12-39-37-release-readiness-live-smoke.csv|external","[]","K1 完成:主合同 R4=DONE/DONE/DONE、R5=DOING/TODO/TODO;远端 SMOKE001/SMOKE002 均 active;部署前备份 hyb-oa-db-20260510_134340.dump 与 hyb-oa-storage-20260510_134341.tar.gz 存在;执行前计数 authSessions=555,reimbursements=1,invoices=5,ocrResultsLinkedFromInvoices=1,auditLogs=258。"
|
||||
K2,重置 smoke 账号密码,"为 SMOKE001/SMOKE002 在本机生成强密码,写入仓库外 ~/.hyb-oa/live-smoke.env 且权限 600;使用远端容器内 hashPassword 更新两个账号 password_hash 并清空登录失败状态。","1) ~/.hyb-oa/live-smoke.env 存在且权限 600;2) 仅更新 SMOKE001/SMOKE002;3) 清空 login_failed_count/login_failed_first_at;4) must_change_password=false;5) 不打印、不提交新密码;6) 当前 schema 无 login_locked_until 时记录为 N/A。","流程级验证:stat -c '%a %n' ~/.hyb-oa/live-smoke.env;远端容器内执行受控 reset 脚本,输出只允许包含已更新账号标识、active、must_change_password 和失败计数字段状态,不输出密码或 hash。","ssh|node",DONE,DONE,DONE,"external","[""K1""]","K2 完成:生成 ~/.hyb-oa/live-smoke.env,权限 600,OCR 样票存在;远端仅更新 SMOKE001/SMOKE002,两个账号 status=active、mustChange=false、failedCount=0、firstFailedAt=null;未打印密码或 hash;login_locked_until 在当前 schema 中不存在,记录为 N/A。"
|
||||
K3,R5 自动化重跑,"source 本机安全凭据后执行 live smoke strict 准入、公网 readiness、资源扫描、网页登录 smoke 和真实 OCR 样票上传复核。","1) check-live-smoke-env --strict 通过;2) run-live-smoke-readiness.sh 完成;3) live smoke 不再 SKIP;4) 真实 OCR 不再 SKIP 并进入可解释终态;5) 公网 bundle 扫描 findings=0。","流程级验证:set -a && source ~/.hyb-oa/live-smoke.env && set +a;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;检查最新 artifacts/qa-flow/live-smoke-readiness-* 的 live-smoke.txt、live-ocr.txt、public-bundle-copy.txt。","bash|node|playwright",DONE,DONE,DONE,"scripts/qa/*|artifacts/qa-flow","[""K2""]","K3 完成:首次用 employee_no 登录标识仍 401;确认登录接口只接受 email/phone 后,将本机凭据 identifier 改为 smoke 邮箱并重置失败计数;check-live-smoke-env --strict 通过;run-live-smoke-readiness.sh 通过,公网 bundle findings=0,live smoke 3 passed,真实 OCR 样票不再 SKIP,终态为重复发票/ocr_failed 且页面提示不能重复添加;证据目录 artifacts/qa-flow/live-smoke-readiness-20260510-172421;pending OCR 辅助扫描因缺 DATABASE_URL 继续 SKIP。"
|
||||
K4,副作用只读审计,"R5 自动化后只读审计 smoke 账号产生的会话、票据、OCR 和审计日志数量;不清理测试数据。","1) 远端审计脚本只读运行成功;2) 记录自动化前后计数变化;3) 不执行删除、归档、UPDATE 或清理。","流程级验证:ssh [email protected] 进入 /opt/hyb-oa-trialrun 后执行 docker-compose server node src/scripts/audit-smoke-data.js --format=text;对比 K1 计数并记录摘要。","ssh|node|manual",DONE,DONE,DONE,"server/src/scripts/audit-smoke-data.js|external","[""K3""]","K4 完成:远端只读审计成功;K1->K4 计数变化 authSessions 555->572、auditLogs 258->263;reimbursements=1、invoices=5、ocrResultsLinkedFromInvoices=1、invoiceVerifications=0、workflowInstances=0 保持不变;未清理数据。"
|
||||
K5,R5/R6 状态门禁,"根据 K1-K4 和企业微信真机人工验收结果回填主 R5;自动化通过但真机未验收时,主 R5 仍保持 DOING/TODO/TODO,R6 保持 TODO。","1) 自动化、真实 OCR、企业微信真机均通过时主 R5 才可置 DONE/DONE/DONE;2) 真机未验收时主 R5 不得完成;3) 更新发布清单和本合同 Notes;4) 校验 CSV 和 diff。","流程级验证:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-10_17-10-42-r5-smoke-password-reset-and-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_17-10-42-r5-smoke-password-reset-and-live-smoke.csv|issues/2026-05-10_12-39-37-release-readiness-live-smoke.csv|docs/trialrun/release-readiness-checklist.md","[""K3"",""K4""]","K5 完成:已回填主 R5 Notes 和 release readiness 清单;因企业微信真机人工验收尚未执行,主 R5 保持 DOING/TODO/TODO,R6 保持 TODO;已校验本合同、主合同和 git diff --check。"
|
||||
|
在新工单中引用
屏蔽一个用户