3.1 KiB
技术设计
1. 修改边界
本任务只修改两份 Playwright spec 与已归档浏览器回归记录:
client/tests/e2e/r6-mobile-responsive-system-hotfix.spec.tsclient/tests/e2e/r111-invoice-reimbursement-guard.spec.ts.trellis/tasks/archive/2026-08/08-07-interaction-pattern-browser-regression/implement.md.trellis/tasks/archive/2026-08/08-07-interaction-pattern-browser-regression/openclaw-test-prompt.md.trellis/tasks/08-05-product-interaction-consistency/prd.md.trellis/tasks/08-05-product-interaction-consistency/design.md.trellis/tasks/08-05-product-interaction-consistency/implement.md
client/src、server/、权限映射、路由和产品行为只作为只读事实源,不在修改范围。
2. R6 fixture 权限链
R6 登录夹具通过 /api/me 返回合成用户,但 AuthContext 不消费响应中的任意 permissions 字段,而是在 client/src/auth/AuthContext.tsx:260 使用 resolvePermissionsForRoles(me.roleCodes) 生成权限。
当前合成用户角色为 manager、employee,不能获得 leave.manage。MobileLeavePage 因此把 ?view=form 回落为 records,导致仍存在的 mobile-leave-form 不渲染。
设计选择:给该 spec 的合成用户增加 hr 角色。hr 是当前角色表中最小的非通配选择,可通过真实角色解析链产生 leave.manage;不使用 admin 的 *,也不添加不会被消费的 mock 字段。
兼容检查:R6 的七个设备上下文共享该 fixture,必须完整运行 7/7,确认新增合成角色没有改变其他导航、审批、报销或移动布局断言。
3. R111 语义定位
R111 上传附件后,页面可能同时出现待上传摘要和已上传附件行。页面级 getByText("付款截图.png") 对 DOM 数量敏感,不能证明用户可打开已上传附件。
设计选择:PC 与移动两处都改为按可访问名称定位已上传附件按钮:
getByRole("button", { name: "查看补充附件:付款截图.png" })
该断言唯一、面向用户动作,并与 PC/移动运行时已有 aria-label 一致;不使用 .first() 或索引规避 strict mode。
4. 归档记录勘误
归档记录不删除当时的执行事实:原始 committed R6 spec 失败,临时 runner 跳过该断言后其余移动矩阵通过。只纠正因果诊断:失败来自 fixture 角色不能解析出 leave.manage,不是表单取消或企微/OA 边界要求删除覆盖。
证据文件名 r6-stale-leave-readonly-320.png 作为历史产物不改名;文字记录注明文件名不代表最终诊断。
5. 回滚
本任务没有数据迁移或运行时代码回滚。若测试修复引入意外回归,回滚范围仅为:
- 移除 R6 fixture 新增的
hr角色; - 恢复 R111 两处原定位器;
- 恢复归档文字勘误。
父任务规划只增加质量支撑任务登记和顺序,不改变三个业务交付物;若登记需回滚,只撤销该任务行与顺序说明。
回滚后会重新暴露两条已知红灯,因此优先修正断言/fixture 并 roll-forward,不以删除覆盖作为回滚手段。