From 80b1c31037c2abd49dd10871087c8d30dd4734b4 Mon Sep 17 00:00:00 2001 From: shunli Date: Wed, 29 Apr 2026 09:00:17 +0800 Subject: [PATCH] =?UTF-8?q?R76:=20=E5=9B=9E=E5=A1=AB=E8=85=BE=E8=AE=AFOCR?= =?UTF-8?q?=E8=AF=95=E8=BF=90=E8=A1=8C=E6=94=B6=E6=95=9B=E7=BB=93=E8=AE=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- artifacts/r75/coverage-matrix.csv | 4 ++-- .../2026-04-29_08-39-22-r76-external-trialrun-closeout.csv | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 issues/2026-04-29_08-39-22-r76-external-trialrun-closeout.csv diff --git a/artifacts/r75/coverage-matrix.csv b/artifacts/r75/coverage-matrix.csv index a1050e0e..a934417a 100644 --- a/artifacts/r75/coverage-matrix.csv +++ b/artifacts/r75/coverage-matrix.csv @@ -1,7 +1,7 @@ "Domain","Tier","Routes","Primary_Roles","Env_Gates","Feature_Flags","Coverage_Status","Evidence","Validated_Flows","Gaps","Next_Action" "认证与 Portal 导航","must_cover","/login|/portal|主/管/备导航","employee|manager|admin","APP_ORIGIN|COOKIE_SECURE|PORTAL_HOME_ENABLED|WECOM_ENTRY_ENABLED","portal_home_v1|wecom_entry_v1","done","artifacts/r69/acceptance-report.md|artifacts/r70/manual-trialrun-report.md|client/tests/e2e/login-portal-ux.spec.ts|client/tests/e2e/wecom-entry.spec.ts|client/tests/e2e/manual/r70-trialrun-assist.spec.ts","登录、Portal 首屏、员工/经理/管理员导航分组、普通浏览器与企微 WebView CTA 提示均有自动化或人工证据。","真实企微 OAuth 绑定与回跳未做端到端;HTTPS 部署态 cookie 行为未在本轮验证。","保持主链路 done;真实企微与 HTTPS 转 A5 外部专项。" "请假与审批","must_cover","/leave-requests|/workflow/tasks","employee|manager|admin","none","leave_holiday_calendar","done","artifacts/r69/acceptance-report.md|artifacts/r70/manual-trialrun-report.md|client/tests/e2e/leave-flow.spec.ts|client/tests/e2e/workflow-quick-approve.spec.ts|client/tests/e2e/leave-team-calendar.spec.ts","请假草稿、提交、撤回、经理快捷审批、团队日历权限边界与经理部门视角已自动化并在 R70 人工复测通过。","多审批人链路、代理审批、真实并发多人协同未在 trialrun 轮次验证。","维持 done;多人协同与代理审批并入 A5 或后续专项。" -"报销、票据中心与 OCR","must_cover","/reimbursements|/reimbursements/:id|/invoice-pool","employee|manager|finance|admin","OCR_PROVIDER|TENCENT_SECRET_ID|TENCENT_SECRET_KEY","invoice_verification","partial_external_blocked","artifacts/r70/manual-trialrun-report.md|artifacts/r70/live-ocr-batch-report.md|client/tests/e2e/reimbursement-workflow-progress.spec.ts|client/tests/e2e/invoice-ocr-flow.spec.ts|client/tests/e2e/manual/live-invoice-ocr.spec.ts|client/tests/e2e/manual/live-invoice-ocr-batch.spec.ts","报销提交后审批进度、票据中心缺字段修正、上传后自动 OCR 进入可绑定、绑定后提交已自动化;R70 人工链路也通过。","批量 live 腾讯 OCR 成功识别路径未验通;当前卡在 AuthFailure.SecretIdNotFound。支付完成后的财务链路未纳入本轮小团队 trialrun。","A5 先解决有效腾讯凭证,再重跑 live batch;无需再改前端框架。" +"报销、票据中心与 OCR","must_cover","/reimbursements|/reimbursements/:id|/invoice-pool","employee|manager|finance|admin","OCR_PROVIDER|TENCENT_SECRET_ID|TENCENT_SECRET_KEY","invoice_verification","partial","artifacts/r70/manual-trialrun-report.md|artifacts/r70/live-ocr-batch-report.md|issues/2026-04-29_08-39-22-r76-external-trialrun-closeout.csv|client/tests/e2e/reimbursement-workflow-progress.spec.ts|client/tests/e2e/invoice-ocr-flow.spec.ts|client/tests/e2e/manual/live-invoice-ocr.spec.ts|client/tests/e2e/manual/live-invoice-ocr-batch.spec.ts","报销提交后审批进度、票据中心缺字段修正、上传后自动 OCR 进入可绑定、绑定后提交已自动化;R70 人工链路也通过。","R76 已确认旧项目 `.env` 中存在一组可用腾讯凭证,且对用户提供的 PDF 发票直连 `VatInvoiceOCR` 时,只要显式传 `IsPdf=true` / `PdfPageNumber=1` 就能识别成功;`.env.local` 仍是无效凭证。当前应用链路在 OCR job 中只传 `ImageBase64`,所以 live 路径稳定复现 `FailedOperation.ImageDecodeFailed`,主阻塞已从鉴权转为 PDF 参数/预处理缺失。支付完成后的财务链路未纳入本轮小团队 trialrun。","R77 优先在 server OCR 链路按 `mime_type` 传递 PDF 参数(先补 `IsPdf` / `PdfPageNumber`);若 PDF 直传仍有边角失败,再评估引入旧项目的 PDF 转图片 fallback。" "周报与待办","must_cover","/weekly-reports|/todos","employee|manager","WEEKLY_REPORT_ENABLED|TODO_BOARD_ENABLED","weekly_report_v1|todo_board_v1","done","artifacts/r70/auto-trialrun-deep-report.md|artifacts/r70/manual-trialrun-report.md|client/tests/e2e/weekly-todo-flow.spec.ts|client/tests/e2e/manual/r70-trialrun-deep-assist.spec.ts","周报保存、生成待办、提交周报、完成待办闭环已自动化且在真实 trialrun 数据上复核通过。","经理侧未提交周报聚合与催办策略未单独验证。","维持 done;如进入管理场景增强,再补经理视角聚合。" "公告、搜索与通知","must_cover","/announcements|/notifications|全局搜索","employee|manager|admin","ANNOUNCEMENTS_ENABLED|GLOBAL_SEARCH_ENABLED","announcements_v1|global_search_v1","done","artifacts/r70/auto-trialrun-deep-report.md|artifacts/r70/manual-trialrun-report.md|client/tests/e2e/announcements-presence.spec.ts|client/tests/e2e/global-search.spec.ts|client/tests/e2e/manual/r70-trialrun-deep-assist.spec.ts|client/tests/e2e/r75-automation-gap-fill.spec.ts","公告发布、员工可见、Portal 汇总、真实搜索命中公告并跳转,以及通知中心未读筛选、单条已读、全部已读与待办跳转均有自动化或人工证据。","无当前试运行阻断缺口;真实外发渠道投递与通知渠道配置验证另见系统治理和外部环境项。","站内通知维持 done;外发渠道留在 A5/治理专项。" "团队状态与考勤","must_cover","/team|/attendance","employee|manager|admin","PRESENCE_BOARD_ENABLED|ATTENDANCE_ENABLED","presence_board_v1|attendance_v1","done","artifacts/r70/manual-trialrun-report.md|client/tests/e2e/announcements-presence.spec.ts|issues/2026-04-09_r59-attendance-clockin.csv|client/tests/e2e/r75-automation-gap-fill.spec.ts","团队状态更新、Portal 汇总、经理查看团队状态,以及员工今日上班/下班打卡、月视图记录、管理员团队考勤补卡最小链路均已验证。","排班、节假日豁免、跨日班次等复杂考勤规则未做专项回归,但不构成本轮 trialrun 阻断。","维持 done;复杂考勤规则按需要独立专项。" @@ -13,4 +13,4 @@ "预算、支付批次与 AP 运营","optional","/budgets|/payment-batches|/ap-operations","finance|admin","BUDGET_PRECHECK_ENABLED|PAYMENT_BATCH_ENABLED","budget_precheck_v1|payment_batch_v1","partial","issues/2026-03-29_08-07-14-p25-lite-budget-ap.csv|issues/2026-04-06_r52-ap-operations.csv","预算预检、支付批次 maker-checker、AP 工作台四 Tab 与快捷操作有实现、review 与浏览器级 QA 证据。","不属于当前小团队 trialrun 主路径,R69-R74 没有重新执行一轮本地场景回归。","若财务域纳入试运行,再补一轮 focused regression;本轮仅保留历史验证。" "ERP 集成与切换控制台","external","/system/integrations/erp|/system/cutover","integration admin|system.settings","ERP_SYNC_ENABLED|CUTOVER_CONSOLE_ENABLED","erp_sync|cutover_console_v1","partial_external","issues/2026-03-08_14-10-53-p19-erp-1-l5-masterdata-journal-bridge.csv|issues/2026-03-21_11-10-00-p29-replacement-readiness-refresh.csv|client/tests/e2e/live-smoke.spec.ts","ERP 管理页、mock/http 回归和只读 live smoke 有历史证据。","当前本地 trialrun 没有真实 ERP 出入站或 cutover 操作验证。","仅在外部环境专项下执行,不进入默认 trialrun gate。" "系统治理、功能开关与审计","enabled_admin","/system/workspace|/system/settings|/system/feature-flags|/system/workflow-definitions|/audit-logs|/system/notification-channels","admin","WORKFLOW_DEFINITION_ADMIN_ENABLED","workflow_definition_admin_v1","partial_done","artifacts/r70/manual-trialrun-report.md|client/tests/e2e/settings-governance.spec.ts|client/tests/e2e/live-smoke.spec.ts|server/src/scripts/smoke-trialrun-runtime.js|client/tests/e2e/r75-automation-gap-fill.spec.ts","工作区设置、系统设置、功能开关、审计日志打开与导航边界有自动化和人工证据;R74 本地门禁已检查 workspace/flag/navigation 基线,R75 已补功能开关备注保存并恢复写路径。","流程定义、通知渠道、工作区其他写操作和审计留痕写入效果仍未在当前 trialrun 做完整专项。","保留 partial_done;后续若治理域纳入试运行,再补通知渠道与流程定义写路径。" -"企微、HTTPS、部署态与并发","external","/login(企微入口)|部署运行时|多账号并发","all roles","APP_ORIGIN|COOKIE_SECURE|WECOM_*|PUBLIC_SECURITY_HARDENING_ENABLED","wecom_entry_v1|public_security_hardening_v1","blocked_external","deploy/trialrun/runbook.md|client/tests/e2e/wecom-entry.spec.ts|client/tests/e2e/live-smoke.spec.ts|server/src/scripts/smoke-trialrun-runtime.js|artifacts/r70/live-ocr-batch-report.md","本地/只读 smoke、env contract、导航/入口提示与 local runtime gate 已就绪。","真实企微 OAuth、HTTPS cookie secure、腾讯 OCR 有效鉴权、多用户并发协同仍缺环境级成功证据。","明确归入 A5 外部依赖专项,不继续在本地 Playwright 上重复消耗时间。" +"企微、HTTPS、部署态与并发","external","/login(企微入口)|部署运行时|多账号并发","all roles","APP_ORIGIN|COOKIE_SECURE|WECOM_*|PUBLIC_SECURITY_HARDENING_ENABLED","wecom_entry_v1|public_security_hardening_v1","blocked_external","deploy/trialrun/runbook.md|client/tests/e2e/wecom-entry.spec.ts|client/tests/e2e/live-smoke.spec.ts|server/src/scripts/smoke-trialrun-runtime.js|issues/2026-04-29_08-39-22-r76-external-trialrun-closeout.csv","本地/只读 smoke、env contract、导航/入口提示与 local runtime gate 已就绪。","真实企微 OAuth、HTTPS cookie secure、多用户并发协同仍缺环境级成功证据。腾讯 OCR 鉴权已确认不是当前主阻塞点:旧项目 `.env` 中至少一组凭证可用,当前主阻塞已转为应用层未传 PDF 参数导致的 `ImageDecodeFailed`。","企微/HTTPS/并发仍按 A3/A4 外部专项推进;OCR 从“外部凭证阻塞”切换为 R77 内部修复项,修完后再回到 live trialrun。" diff --git a/issues/2026-04-29_08-39-22-r76-external-trialrun-closeout.csv b/issues/2026-04-29_08-39-22-r76-external-trialrun-closeout.csv new file mode 100644 index 00000000..a3bc9e46 --- /dev/null +++ b/issues/2026-04-29_08-39-22-r76-external-trialrun-closeout.csv @@ -0,0 +1,6 @@ +"ID","Title","Description","Acceptance","Test_Method","Tools","Dev_Status","Review1_Status","Regression_Status","Files","Dependencies","Notes" +"A1","R76 外部环境契约补齐","补齐 HTTPS、COOKIE_SECURE、企业微信、腾讯 OCR 的试运行环境契约与安全注入路径,不把真实密钥写入仓库。","1) deploy 环境前置明确;2) external deps smoke 可跑;3) deploy 模式 runtime smoke 可跑。","命令:`cd server && node src/scripts/smoke-external-deps.js`;`cd server && TRIALRUN_RUNTIME_MODE=deploy node src/scripts/smoke-trialrun-runtime.js`。业务:核对 HTTPS 域名、企业微信回调、腾讯 OCR 凭证都已具备。","manual","DOING","TODO","TODO","deploy/trialrun/runbook.md|deploy/trialrun/checklist.md|server/src/scripts/smoke-external-deps.js|server/src/scripts/smoke-trialrun-runtime.js","[]","已从旧项目 `/home/shunli/shenzhou-business-suite/.env` 与 `.env.local` 提取候选腾讯配置并用运行时注入方式尝试;`smoke-external-deps.js` 已验证至少一组候选配置可跑。当前仍待真实 HTTPS/企微 deploy 契约与 `TRIALRUN_RUNTIME_MODE=deploy` 完整烟测。" +"A2","腾讯 OCR live 成功路径复测","在真实凭证和真实票样下重跑单张与批量 OCR 辅助复核,区分配置失败与识别失败。","1) 至少 1 张真实票样 OCR 成功;2) 不再出现 `SecretIdNotFound`;3) live batch 报告更新。","命令:`cd client && PLAYWRIGHT_MANUAL=1 PLAYWRIGHT_OCR_LIVE=1 PLAYWRIGHT_OCR_LIVE_BATCH=1 npx playwright test tests/e2e/manual/live-invoice-ocr-batch.spec.ts --workers=1 --reporter=list`。业务:上传真实票样,验证 OCR 成功后可绑定。","playwright|manual","DOING","TODO","TODO","client/tests/e2e/manual/live-invoice-ocr.spec.ts|client/tests/e2e/manual/live-invoice-ocr-batch.spec.ts|artifacts/r70/live-ocr-batch-report.md|external","[""A1""]","已按不写仓库的运行时注入方式逐个尝试旧项目候选腾讯配置:`.env` 这组直连腾讯 `VatInvoiceOCR` 且显式传 `IsPdf=true` / `PdfPageNumber=1` 时可成功识别用户提供的 PDF 发票;`.env.local` 仍报 `AuthFailure.SecretIdNotFound`。当前应用链路仍只传 `ImageBase64`,因此在 Playwright/live 路径上稳定复现 `FailedOperation.ImageDecodeFailed`,主阻塞已收敛到 PDF 参数/预处理缺失。" +"A3","HTTPS 与企业微信入口专项验证","在真实 HTTPS 域名下验证 COOKIE_SECURE、企业微信入口、OAuth 回调、已绑定免登与未绑定回退。","1) 已绑定用户可从企微进入 Portal;2) 未绑定用户回退登录页并有明确提示;3) HTTPS 下登录、刷新、退出正常。","业务:按 checklist 在企业微信工作台与浏览器分别验证。命令:必要时先跑 `cd client && npx playwright test tests/e2e/wecom-entry.spec.ts --reporter=list` 做入口回归。","manual|playwright","TODO","TODO","TODO","deploy/trialrun/checklist.md|deploy/trialrun/runbook.md|client/tests/e2e/wecom-entry.spec.ts|external","[""A1""]","当前阻塞:`APP_ORIGIN` 与 `WECOM_*` 未配置。" +"A4","多角色并发与权限审计专项","用员工、经理、管理员或财务做并发协同,验证审批、会话、审计留痕与拒绝访问边界。","1) 至少 1 条请假或报销并发审批链路通过;2) 至少 1 条权限拒绝边界可复现;3) 审计日志能看到对应留痕。","业务:三账号并发执行提交、审批、查询、审计。命令:结合现有 Playwright 与人工多浏览器会话执行,并记录证据。","manual|playwright","TODO","TODO","TODO","artifacts/r75/coverage-matrix.csv|artifacts/r70/manual-trialrun-report.md|client/tests/e2e/**|external","[""A1""]","本项不新增功能,只验证现有行为。" +"A5","R76 收口与 R77 拆分","回填覆盖矩阵与执行合同,给出哪些域已测完、哪些仍外部阻塞、哪些进入下一轮缺陷修复。","1) coverage matrix 与 R76 CSV 一致;2) 明确 external blocked 清单;3) 形成 R77 候选优先级。","业务:汇总 A1-A4 结果,回填状态并输出下一轮排序。","manual","DOING","TODO","TODO","issues/2026-04-29_08-39-22-r76-external-trialrun-closeout.csv|artifacts/r75/coverage-matrix.csv","[""A2"",""A3"",""A4""]","本轮已把 OCR 结论从“疑似无有效腾讯凭证”收敛为“存在一组可用旧项目凭证,但当前应用链路缺 PDF 参数/预处理”。R77 候选优先级:1) server OCR 识别 PDF;2) 复跑 live OCR;3) 再回到企微/HTTPS/并发外部专项。"