From 1c4633b62acde2b18f086246b34bb14917ba1c44 Mon Sep 17 00:00:00 2001 From: shunli Date: Fri, 9 Oct 2026 10:19:57 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E9=BD=90=E6=89=8B=E6=9C=BA=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E9=A1=B5=E6=88=AA=E5=9B=BE=E5=B0=B1=E7=BB=AA=E6=A3=80?= =?UTF-8?q?=E6=9F=A5=EF=BC=8809-06-release-gate-integrity=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 承接 09-17-company-loan-principal-repayment 的 N3 候选验证。 R106 手机首次截图前确认登录标题、账号输入和按钮已就绪,保留原全页截图、真实隔离后端登录、Worker 设置及全部巡检。 验证:受管完整 R106 文件 1 项通过,零失败/跳过/重试,14 张截图和报告生成;环境、源码一致性、清理、任务与治理检查通过。文档登记保留原有告警。 第四轮完整门禁为 371 通过、1 失败,原回执保留。Chromium 原始错误唯一成因尚未证明,此候选另行执行完整门禁。 独立代码复核、真实还款验收和发布待完成;仅本地提交。 --- .trellis/spec/hyb-oa/frontend-react-vite-design.md | 1 + .../tasks/09-06-release-gate-integrity/implement.md | 11 +++++++++++ .trellis/tasks/09-06-release-gate-integrity/prd.md | 8 ++++++++ .../implement.md | 12 ++++++++++++ .../09-17-company-loan-principal-repayment/prd.md | 10 ++++++++++ client/tests/e2e/r106-visual-audit.spec.ts | 4 ++++ 6 files changed, 46 insertions(+) diff --git a/.trellis/spec/hyb-oa/frontend-react-vite-design.md b/.trellis/spec/hyb-oa/frontend-react-vite-design.md index f1a5fdc9..099e78be 100644 --- a/.trellis/spec/hyb-oa/frontend-react-vite-design.md +++ b/.trellis/spec/hyb-oa/frontend-react-vite-design.md @@ -170,6 +170,7 @@ and verification contracts. Do not copy broad aesthetic guidance from - At the narrowest viewport where the fixed sidebar appears, the main detail column is at least `560px`, the action column is at least `280px`, and the document has no horizontal overflow beyond a `2px` rendering tolerance. - Business identifiers and normal company-time date strings use DOM line-count or geometry assertions; `position: sticky` alone is not proof that the layout is usable. - A Playwright spec writes screenshots only to its own current output directory. Never reuse an archived Trellis task's evidence directory as a live test target. +- Before a first screenshot after SPA navigation, assert the intended page identity and required controls are ready (for example, login heading and identifier visible, submit enabled). `goto`/load or font completion alone does not prove React has rendered the intended view. Preserve the original screenshot and test budget; do not convert capture failures into retries or assume a screenshot error proves authentication failed. - When comparing alignment inside an animated ancestor (for example `.page-scaffold`'s `page-reveal`), read all relevant `getBoundingClientRect()` values in one synchronous browser `evaluate`/`evaluateAll` callback. Sequential `boundingBox()` calls, or calls grouped with `Promise.all`, can observe different animation frames. Keep the original alignment assertions and pixel tolerances; do not hide the race with sleeps, retries or disabled page animations. ### 4. Validation & Error Matrix diff --git a/.trellis/tasks/09-06-release-gate-integrity/implement.md b/.trellis/tasks/09-06-release-gate-integrity/implement.md index 41bf5d94..86a9c759 100644 --- a/.trellis/tasks/09-06-release-gate-integrity/implement.md +++ b/.trellis/tasks/09-06-release-gate-integrity/implement.md @@ -1,3 +1,14 @@ +## 2026-10-09 手机首次截图就绪检查(N3 第四轮后) + +原回执 `artifacts/release-gate/loan-receipt-n3-20261009-r4/`:候选 `8e17e8df`,82 迁移、服务端 4558 通过/1 项既有可选跳过;浏览器 371 通过/1 失败、零跳过/重试。前几轮修正后的报销付款、PWA 升级和企微历史三项均通过。 + +- [x] 收齐错误栈和截图:R106 在手机首次 `page.screenshot` 返回 Chromium 协议错误,尚未执行手机登录。截图前只有 `goto`,缺少页面就绪断言;原运行没有足够证据唯一归因于渲染时序、Worker 或认证。安全日志及失败摘要保存在 N3 准备目录,原 FAIL 不改写。 +- [x] 在原截图前确认登录标题、账号输入可见和提交按钮可用,保留原截图、全部巡检、真实登录、Worker 设置和预算。不引入截图重试、刷新、休眠或业务代码修改。 +- [x] 受管 `retained-local` 完整 R106 文件 1 项通过,零失败/跳过/重试,浏览器阶段约 32.7 秒。14 张截图、员工及管理员后续巡检和报告实际生成,自动报告无 finding;环境、源码一致性及自有资源清理通过。这不是独立视觉审查,也不据单次通过唯一归因历史错误。 +- [ ] 主会话差异、任务/治理检查后按既有授权本地提交,再由借款 N3 对干净新候选执行第五轮原完整门禁。 + +定向证据为准备目录的 `r106-readiness-focused/`、`r106-focused-process.json` 和 `r106-focused-summary.json`,完整回执为 `artifacts/release-gate/loan-receipt-n3-20261009-r5/`。验证期间冻结源码/测试/文档,结果写 ignored 回执。独立代码复核仍待;无推送、部署、生产访问或真实 OCR。 + ## 2026-10-09 桌面模拟接口隔离补齐(N3 第三轮后) 原回执 `artifacts/release-gate/loan-receipt-n3-20261009-r3/`:候选 `98bab397`,82 迁移、服务端 4558 通过/1 项既有可选跳过,浏览器 371 通过/1 失败。PWA 升级和报销付款主链路通过;唯一失败位于桌面企微历史标题等待,失败快照为登录页。环境、源码一致性及自有资源清理通过。 diff --git a/.trellis/tasks/09-06-release-gate-integrity/prd.md b/.trellis/tasks/09-06-release-gate-integrity/prd.md index acabc2b5..2b4215b8 100644 --- a/.trellis/tasks/09-06-release-gate-integrity/prd.md +++ b/.trellis/tasks/09-06-release-gate-integrity/prd.md @@ -1,3 +1,11 @@ +## 2026-10-09 手机首次截图就绪检查(N3 第四轮接续) + +候选 `8e17e8df` 第四轮完整门禁为 FAIL:浏览器 371 通过/1 失败、零跳过/重试,其余阶段通过。失败栈明确在 R106 的手机登录页首次截图,Chromium 返回 `Page.captureScreenshot: Unable to capture screenshot`;字体等待已结束,手机账号尚未填写。不是登录断言失败,也没有证据证明真实认证或 Worker 有问题。原测试在 `goto` 后直接截图,没有检查 React 页面是否已经可用;尚未证明这一缺口是 Chromium 协议错误的唯一成因。 + +本次最小修正只在原截图前确认登录标题、账号输入和提交按钮已就绪,使用原断言预算。保留原全页截图、真实隔离后端登录、Worker 策略、电脑/手机/管理员全部巡检及报告,不重试截图、不增加休眠或测试预算、不改产品认证/资金代码。先以 `QA_RETAINED_SPECS=r106-visual-audit.spec.ts bash scripts/qa/run-web-gates.sh retained-local` 重验完整文件,再按 N3 既有授权形成本地候选并运行原完整门禁;新结果不能覆盖第四轮 FAIL。独立代码复核、真实还款和发布仍待完成。 + +修正后的受管完整文件 1 项通过、零失败/跳过/重试;14 张截图和报告实际生成,环境、源码一致性及清理通过。不据单次通过宣称已证明 Chromium 历史错误的唯一成因;完整候选资格仍待第五轮回执。 + ## 2026-10-09 桌面模拟接口隔离补齐(N3 第三轮接续) 候选 `98bab397` 第三轮完整门禁为 FAIL:浏览器 371 通过/1 失败、零跳过/重试;报销付款与 PWA 升级已通过。唯一失败是 `internal-readiness-ui.spec.ts` 的桌面企微历史页在整页导航后未出现标题,失败快照为登录页。该文件的手机手动 context 已屏蔽 Service Worker,使用 `page.route` 的桌面默认 context 却遗漏了既有隔离合同。原运行没有请求来源证据,不能宣称历史唯一根因已证明。 diff --git a/.trellis/tasks/09-17-company-loan-principal-repayment/implement.md b/.trellis/tasks/09-17-company-loan-principal-repayment/implement.md index 92c3b96c..daaefadc 100644 --- a/.trellis/tasks/09-17-company-loan-principal-repayment/implement.md +++ b/.trellis/tasks/09-17-company-loan-principal-repayment/implement.md @@ -1,3 +1,15 @@ +## 2026-10-09 N3 第四轮结果及第五轮候选验证 + +第四轮候选 `8e17e8df` 完整门禁为 **FAIL**:82 迁移、服务端 4558 通过/1 项既有可选跳过、静态/构建及业务回归通过;浏览器 371 通过/1 失败、零跳过/重试。报销付款主链路、PWA 升级和企微历史三项均通过,环境、源码一致性及自有资源清理通过。 + +- 失败栈位于 R106 手机登录页首次全页截图:`Page.captureScreenshot: Unable to capture screenshot`,字体等待已结束。手机登录尚未执行;前次“手机登录失败”线索不能当作结论。安全登录日志、准确失败摘要与原回执分别保存在 N3 准备目录和第四轮回执,Chromium 内部唯一成因尚未证明。 +- 原测试在 `goto` 后立即截图,未检查 React 页面就绪。由现有 `09-06-release-gate-integrity` 在截图前确认登录标题、输入和按钮;保留原截图、全部电脑/手机/管理员巡检、真实隔离后端登录、Worker 策略和原预算,不加截图重试、刷新或休眠。 +- [x] 受管 `retained-local` 完整 R106 文件 1 项通过、零失败/跳过/重试,浏览器阶段约 32.7 秒;原手机登录前截图及后续员工/管理员巡检均完成,14 张截图和报告实际产出。环境、源码一致性及清理通过;证据为准备目录的 `r106-readiness-focused/` 及同级 process/summary 回执。不据单次通过倒推历史唯一成因。 +- [ ] 任务/治理及主会话差异检查后,按 N3 既有授权本地提交,再对干净新候选运行原 `bash scripts/qa/run-release-gate.sh verify-candidate`。第五轮回执为 `artifacts/release-gate/loan-receipt-n3-20261009-r5/`,不预填 PASS。 +- 前四轮 FAIL 均保留;验证期间冻结源码、测试和文档,实际提交、结果及交审信息写 ignored 回执。独立代码复核、真实还款与公网仍待;没有推送、部署、生产查询或真实 OCR。 + +最终候选及结论以第五轮回执和 `local-followup.json` 为准,以下历史时点不改写。 + ## 2026-10-09 N3 第三轮结果及第四轮候选验证 第三轮候选 `98bab397` 的完整门禁为 **FAIL**:82 个迁移、服务端 4558 通过/1 项既有可选跳过、静态/构建及业务回归通过;浏览器 371 通过/1 失败、零跳过/重试。报销付款主链路和 PWA 跨版本升级通过。原回执及准确失败边界见 `artifacts/release-gate/loan-receipt-n3-20261009-r3/`;环境、源码一致性及自有资源清理通过。 diff --git a/.trellis/tasks/09-17-company-loan-principal-repayment/prd.md b/.trellis/tasks/09-17-company-loan-principal-repayment/prd.md index d043cbf1..82caf058 100644 --- a/.trellis/tasks/09-17-company-loan-principal-repayment/prd.md +++ b/.trellis/tasks/09-17-company-loan-principal-repayment/prd.md @@ -1,5 +1,15 @@ # 公司借款台账与本金归还 +## 2026-10-09 N3 第四轮结果及手机截图前置检查 + +候选 `8e17e8df` 第四轮完整门禁为 FAIL:82 迁移、服务端 4558 通过/1 项既有可选跳过,静态/构建及业务回归通过;浏览器 371 通过/1 失败、零跳过/重试。报销付款、PWA 升级和企微历史三项均通过。唯一失败为 R106 手机登录前首次截图的 Chromium 协议错误,尚未执行手机登录;不能把这一结果写成认证故障。 + +由 `09-06-release-gate-integrity` 补原截图前的登录页面就绪断言,保留全部截图和巡检、真实隔离后端登录及 Worker 设置,不修改产品或资金规则。Chromium 内部唯一成因尚未证明。先受管定向重验完整文件,再按既有授权本地提交并对干净新候选执行原完整门禁。第四轮原始证据及 `local-followup.json` 保留在 `artifacts/release-gate/loan-receipt-n3-20261009-r4/`,第五轮计划回执为 `artifacts/release-gate/loan-receipt-n3-20261009-r5/`,实际结果以回执为准。 + +修正后受管完整 R106 文件 1 项通过、零失败/跳过/重试,14 张截图和巡检报告实际生成;环境、源码一致性及清理通过。该结果不替代新候选完整门禁或独立复核。 + +独立代码复核、真实还款和公网仍待完成;没有推送、部署、生产查询或真实 OCR。整体任务保持 `in_progress`,不以旧通过项和定向结果拼接完整资格。 + ## 2026-10-09 N3 第三轮结果及桌面测试隔离修正 候选 `98bab397` 第三轮为 FAIL:82 迁移、服务端 4558 通过/1 项既有可选跳过、静态/构建和业务回归通过;浏览器 371 通过/1 失败、无跳过或重试。报销付款主链路和 PWA 升级本轮均通过。唯一失败为桌面企微历史测试在整页导航后等待标题超时,快照已回登录页;现有测试使用模拟接口,却只在手机 context 屏蔽 Service Worker。原请求来源未记录,不将该漏项写成已证实的历史唯一根因。 diff --git a/client/tests/e2e/r106-visual-audit.spec.ts b/client/tests/e2e/r106-visual-audit.spec.ts index 8ece4707..5f311101 100644 --- a/client/tests/e2e/r106-visual-audit.spec.ts +++ b/client/tests/e2e/r106-visual-audit.spec.ts @@ -545,6 +545,10 @@ test.describe.serial("R106 自动视觉巡检", () => { })); const mobilePage = await mobileContext.newPage(); await mobilePage.goto("/login"); + // Navigation can finish before the React login view is ready for capture. + await expect(mobilePage.getByRole("heading", { name: "海音达 OA", exact: true })).toBeVisible(); + await expect(mobilePage.getByTestId("login-identifier")).toBeVisible(); + await expect(mobilePage.getByTestId("login-submit")).toBeEnabled(); await mobilePage.screenshot({ path: screenshotPath("wecom-login-before-auth"), fullPage: true }); await loginForAudit(mobilePage, EMPLOYEE); await auditPage(mobilePage, { label: "企微模拟-首页", route: "/mobile", mobile: true, screenshotName: "mobile-wecom-home" });