文件
hyb-oa/.trellis/tasks/09-11-reimbursement-payment-handoffs/implement.md
T
wangsli 5d8cdf12b4
ci-e2e / e2e (push) Canceled after 0s
ci-minimal / check-minimal (push) Canceled after 0s
fix: 隔离门户待办身份并取消旧请求(09-11-reimbursement-payment-handoffs)
2026-09-11 20:21:46 +08:00

17 KiB
原始文件 Blame 文件历史

执行清单

2026-09-11 只读复核后取消旧请求(原范围接续,未提交/部署)

冻结树 dcde0d44 的双端合成浏览器复核发现:甲旧请求在乙登录后返回 401,会用乙 token 重放,并把乙结果写到甲 queryKey;甲再次登录等待新响应时显示乙待办。原 6/62/真实隔离通过记录不改写,它们未覆盖该分支。只读回执见 postpush-identity/readonly-review.md。本次沿原批准的门户隔离范围返回实施,不改变全局认证或业务权限,不新建任务。

  • 补双端迟到 401、真实传输取消、甲→乙→甲回归,先在现有未取消构建上跑红;补同身份刷新正例。
  • 两页 queryFn 消费 signal,经现有门户 API 传给 HTTP 请求;不改全局认证、业务写入或其他查询。
  • 新构建、专项、联合页面与真实隔离验证;保留失败证据,不重复累加数量。
  • 主会话检查、更新稳定合同与两任务状态;新修订树及补丁重放以 postpush-cancellation/manifest.json 为准,独立复核、提交推送和部署继续分列。

实际结果:未取消构建双端红测均失败;取消修正后专项 10/10,三个既有文件同轮 66/66、退出 0、零重试(包含这 10 项)。新 typecheck/build/PWA 与真实隔离数据库/认证/HTTP/双端完整业务链通过,临时库和合成附件已清理。14 个验证源输入、115 个构建文件在冻结前核对未变;135 单测仅按未变输入复用。迟到 401 专项为合成 auth/API,不冒充真实过期会话实测;真实业务链的普通登录与切账号另有证据。

本轮复核/修复只触及旧门户请求未取消这一根因,主会话自检不抵扣独立 review。原 dcde0d44 包与 NO_GO 回执保留;不将同会话修补写为独立通过,不改全局认证或其他模块缓存。下一步将 postpush-cancellation 新输入交审,再按明确授权提交推送、冻结新 SHA、执行时预检及部署/公网自动验收。未提交、推送、连接生产或部署。

2026-09-11 身份隔离修复接续(用户已确认,本地实施与验证)

官方 current 在实际 integration 副本切至本 task,联合协调仍由 09-04 记录;复用原任务,不新建修复 task。批准范围是 PC/手机门户身份缓存隔离与自动验证,不含提交、推送、部署、生产资料或全局认证改造。原 readonly-review/P1 及冻结输入保持原样;新证据另存 postpush-identity。

  • 在现有 visual-portal spec 补同文档账号切换矩阵,先用未修正构建复现 PC/手机慢响应串显,再修两个门户 queryKey/无身份禁用门。
  • 同一 BrowserContext/文档验证双端慢响应、失败重试、旧请求晚返回;不清缓存、不强刷、不用新上下文替代切账号。保留已有前缀刷新及角色权限。
  • 新构建、定向页面、联合三文件及受影响真实隔离链路验证;本地通过与生产/独立 review 分列,未变服务端单测按输入核对复用。
  • 主会话检查本轮差异、补稳定 spec 和两项原任务状态;另存修订包,不覆盖旧复现或把阶段结束当上线。

本地结果:未修构建 PC/手机 slow 两项均复现串显;修后身份隔离专项 6/6,联合三文件同轮 62/62、零重试,包含该 6 项,不重复累加。新 typecheck/build/PWA 通过;真实隔离 PostgreSQL/密码登录/JWT/HTTP/双端业务链 PASS_REAL_DB_HTTP,新增同文档员工→CEO 登录、身份回读、真实门户响应暂缓和零旧待办断言通过,临时库/合成附件已清理。135/135 单测按服务端、共享前端 helper 和依赖清单未变核对复用,不称重跑。证据见联合目录 postpush-identity;具体冻结树、摘要和检查结果以该目录 manifest.json 为准。

复盘:固定 queryKey 隐含“浏览器只使用一个账号”,原独立上下文和冷进入测试漏掉会话生命周期。原始红测有效保留;修后首次专项 4/6 的两项失败是测试事件未冒泡到 window,首次真实链失败是 /me 夹具从精简 request.employee 读取了不存在的工号字段,均在身份/刷新前置阶段失败。修正事件和按认证 ID 查隔离库资料后重跑通过,没有放宽断言或更改认证实现。原失败日志仍在,不把夹具失败说成新增生产缺陷。

本轮 P1 在已测门户范围本地闭合,独立只读复核仍 PENDING_INLINE。未提交、推送、连接生产或部署;其他查询缓存、同账号权限变更、完整发布门禁、公网角色验收和正式备份应用级恢复不由本轮 PASS 推导。下一步交审新修订包,经明确提交推送授权冻结新 SHA,再更新执行时预检并另批部署/公网自动验收;员工不代测。

2026-09-11 只读复核 P1:同浏览器切账号待办串显(历史:当时方案待确认)

主会话检查冻结树 68f44e1531719c4d83308cc80494181f0d390803,使用本地合成 API/真实浏览器复现:甲通过界面退出、乙登录,同一文档且账号控件已显示乙,乙的门户请求尚未返回时仍显示甲的待办。正确空响应返回后消失;没有访问生产或验证服务端越权。PC 已实测,手机仅发现同类固定 queryKey,尚未复现。不重写此前 56/56、135/135 及真实隔离链路通过记录。

本轮只读检查与诊断未改运行时,旧冻结输入保留,当前候选不放行。首次诊断 /me fixture 漏 requestId,登录未通过;修正 fixture 后两次观察一致,后一次额外断言账号控件已切乙。细节见联合目录 postpush-recheck/readonly-review.md;不是独立 reviewer 结论。

  • 确认后将 PC/手机门户缓存键按当前员工身份区分;无已确认身份不查询,不沿用上一身份数据或用强刷掩盖问题。保持现有前缀失效刷新、冷进入和财务卡权限。
  • 在同一 BrowserContext、同一页面文档通过真实页面退出/登录路径覆盖双端,不调用清缓存/新建上下文/强刷;分别验证慢响应、失败和旧身份请求晚到均不出现他人待办。
  • 保留已有角色正反例和状态消失回归;改后构建并对受影响真实隔离链路回归,再冻结新输入。认证 API、角色、生产数据和付款写入不在此修复范围;其他模块全局认证缓存另行归因,不宣称两页修复解决全站缓存。

2026-09-11 联合附件回归接续(最新本地验证,未提交/部署)

复用 09-04 原任务核实剩余高敏附件失败:旧材料 CSS/按钮名定位未随共享组件同步,附件在失败快照中实际存在。仅适配该测试并补单字理由/取消关闭断言,不改运行时、角色或删除规则。专项 1/1;原三份页面文件同轮 56/56、退出 0,包含本任务普通员工/CEO 双端待办冷进入、处理后消失和手机错误重试。下文“55 项通过/1 项未过”保留为上次冻结记录,不再是当前缺口。

运行时和 QA 输入与上一冻结树一致,复用 135/135 单测、构建/PWA 和真实隔离 HTTP/双端业务结果,不称本轮重跑。新复核材料见联合目录 postpush-recheck,旧 postpush 输入/失败日志不覆盖;附件专项为 mock 请求验证,不冒充生产或持久化删除。独立复核、完整门禁、明确提交推送修正授权、新候选执行时预检及部署/公网合成验收仍未完成,员工不代测。

2026-09-11 提交后复核与首批上线准备(本轮已批准,未部署)

用户批准按综合建议规划并实施。复用本任务修待办缺陷,09-04 维护联合交审与发布验收清单;不新增细碎 task,不继承提交/推送/部署/生产写入授权。执行副本为既有 integration,官方 current 已切换并回读为本 task。主会话 inline 实施/检查,不派 implement/check 子代理,独立 review 继续单列。

已推送 fedcaed1 的只读复核发现手机门户整体查询仍受 canUseFinance 限制:API 能返回普通员工退回事项,不代表该角色手机真正发起了查询;旧浏览器覆盖只有 finance 手机、employee PC。此前 135/39 通过记录保留,但不能证明这两个角色端组合通过,也不继续把 fedcaed1 标成无已知阻断的发布候选。

  • 先追加手机普通员工与单独 CEO 的冷进入回归,在旧代码上复现;保留失败证据。
  • 移除手机整个门户查询的财务展示门,财务卡片/服务器权限不变;补处理后消失和失败重试。
  • 运行定向浏览器、typecheck/build、有关真实隔离链路和治理检查;失败逐项归因,不让真实员工代测。
  • 核对旧候选 32 文件、两笔提交树与冻结证据;另存提交后交审封面、此次修正补丁及摘要,不改写旧 manifest/review。
  • 在 09-04 原计划写清首批角色剩余就绪项、发布前重查、受控公网验收与停止条件;旧附件保留标记不再追查。
  • 新修正经明确提交推送授权后冻结新 SHA;独立复核、发布审批与公网验收仍待完成,不把本地修复当上线。

并行技术债继续沿既有 09-06 门禁、09-05 错误解释及 08-23 恢复任务排期。10-05 的 673 条到期记录不统一续期,主线不顺手改 F1 付款读取或其他模块。

复盘:根因是新增业务 DTO 后仍沿用旧财务卡片的查询开关,属于变更传递遗漏与角色×端覆盖缺口。原 API 回归和财务手机测试没有验证普通员工/CEO 的手机查询是否发出。针对旧代码的两个手机冷进入用例均失败(待办链接为 0),修正后 employee/ceo × PC/手机冷进入/处理后消失,加手机错误重试共 6 项通过。服务端权限、角色和持久化模型未改;后续真实隔离测试额外断言手机真正发起 portal 请求,而不是仅验证接口返回。经验已补既有前端规约,不新增经验文档。

最终本地回执:证据集中于联合目录的 postpush/。当前全部运行时修正仅 3 个前端页面(本任务手机待办、09-04 报销按钮/付款窄屏),服务端未改。unit-complete.log 135/135、build-integrated.log typecheck/build/PWA、real-db-browser-final.log PASS_REAL_DB_HTTP 且两类手机待办各自真实认证冷进入 1→0 通过;临时库/合成附件已清理。三文件扩展 ui-final.log 原始 54/56,手机断言按响应式合同纠正后 responsive-final.log 3/3,去重为 55 项已通过、1 条未改动的历史附件选择器用例仍失败;没有把扩展检查写成全绿。独立 review、提交推送修正、部署/公网验收均待完成。原 39 项与本轮回归不重复累加,腾讯实时 OCR 仍未测试。

最新前置补记:用户另批后,当前生产 fe025e65 镜像已独立保存并完成配置/14 层/归档摘要及新 SSH 回读;财务/yj 的所属主体仅两行条件修正并独立连接回读通过,未改角色/经理/银行。共用 09-04/09-08 最新回执和联合副本 artifacts/qa-flow/20260911-authorized-preparation/;下文制品/两人主体缺失是此前阶段状态。候选 fedcaed1 未变,未部署;独立复核、ARM 管理员渠道和配对恢复仍未完成。

2026-09-11 提交推送回执(最新,未部署)

用户已批准执行推荐下一步。本任务提交 fedcaed1a13cc3b32ee47e1d72c2b5ffa5512c57(15 文件),前一笔详情修复 f9aee4c93272204d18408217358d95334cedcd5e(19 文件);两笔最终树 476364c76c 与原冻结包一致,origin/main 回读 fedcaed1,待推送 0。共享 QA 按补丁拆分,没有覆盖独立副本或混入根 checkout 改动。

135/135 单测、39/39 页面和真实隔离流程的输入未变,复用原结果,不声称本轮重跑。独立 reviewer 受 inline 限制仍待完成,没有继承旧候选审查或批准部署。生产只读预检确认仍 fe025e65、68 条迁移无 pending、41.09 GiB 余量、今日同版本备份完整性通过;当前镜像独立制品未找到,ARM 归档管理员凭据待补,配对恢复未做。

四名确认账号的门户/付款部门 gate 均开启;财务/yj 经理关系正确、本人所属主体仍缺,生产字段未回填。就绪与恢复详情复用 09-04/09-08/08-23 最新回执,不把资料存在性当银行解密或真实流程通过。联合副本 artifacts/qa-flow/20260911-combined/ 保存 commit-plan、commit-receipt、push-receipt;artifacts/qa-flow/20260911-readonly/ 保存新预检。历史 manifest/补丁未重写。

本节覆盖下文“未提交/未推送”的历史状态;回执为候选之外的未提交文档补记,任务不归档。下一步独立复核及另批当前镜像保存/配对恢复和就绪缺项;部署及公网合成验收仍另批,不让真人代测。

已获 2026-09-11 综合规划实施批准;独立工作树基线 fe025e65。复用已读 backend/frontend/权限规约;未授权生产操作、提交、推送或归档。

  • 只读事实加载与四类投影,最小 DTO 和正反例。
  • 接入 PC/手机既有门户,避免新旧聚合重复,聚焦/重入刷新。
  • Vitest 服务/路由、客户端 typecheck/build、合成 Playwright、真实隔离业务状态演进验证。
  • 主会话只读检查和规约更新;与详情修复按补丁形成联合工作树,不整文件覆盖。
  • 独立只读 review,inline 主会话自检不抵扣。
  • 明确授权后分别提交推送,候选 fedcaed1 已冻结并远端回读。
  • 最新生产/备份只读预检、就绪/恢复、获批发布及公网受控验收,分别登记,不由本地 PASS 推导。

2026-09-11 实施与联合验收回执

代码完成但未提交。原独立副本为 artifacts/isolated-worktrees/20260911-payment-handoffs;联合副本为 artifacts/isolated-worktrees/20260910-reimbursement-payment-integration,基线同为 fe025e65。联合副本包含 09-04 详情修复与本任务,两个共享 QA 文件按补丁合并;根 checkout 既有改动、旧已审包与干净发布 clone 未动。正式 current 分别与各自任务一致;没有将旧 HEAD 冒充包含本轮改动的候选 SHA。

  • 服务端只读事务派生四类事项,不存 todo、不发通知、不解密账户;来源/部门 gate、角色/权限、非本人制单及删除/撤回排除均有正反例。缺银行资料仍是待组批事项,不声称能成功创建批次。
  • PC/手机使用同一 DTO,total 与全部明细一致;收到新投影不重复叠加旧财务聚合。移除 PC 行动前八项截断,增加超过八条回归。加载失败与空态分开,局部重入/聚焦重新查询。
  • 联合单测:6 文件 135/135,unit.log;联合页面:39/39、退出 0,ui.log;build.log 包含 typecheck/build/PWA。这些是联合数量,不与分项 16/16、3/3 重复相加。
  • real-db-browser.log:PASS_REAL_DB_HTTP、退出 0。真实一次性 PostgreSQL、密码登录/JWT、HTTP、桌面/手机,按退回→重提→审批→组批→独立复核→导出→合成回单→登记推进;门户事项随状态出现/消失,重复读取稳定且不写审计。并行保留原退回留痕删除、授权、历史材料与发票重用回归。
  • 最终证据在联合副本 artifacts/qa-flow/20260911-combined/;独立分项记录保留在原副本 artifacts/qa-flow/20260911-handoffs/。已查看联合 PC/手机门户合成截图,复用既有组件,不宣称新视觉体系已审。
  • 测试修正仅为真实 CJS require/feature flag fixture、has_session cookie 及合成回单字段对齐;没有放宽认证、资料门禁或产品付款约束。初次失败日志留存,以最终联合退出 0 为准。
  • 主会话已只读复核投影最小字段、只读事务、来源排除、目标入口、maker-checker、无新增写入及新旧聚合去重。独立 reviewer 未执行,旧候选审查不自动覆盖本轮。

测试不用真实员工或银行数据;OCR 为真实 worker + mock provider,长审批历史为合成 fixture。回单登记只发生在隔离合成库,没有银行连接。数据库和合成文件已清理;未调用真实腾讯 OCR、未恢复正式备份、未查询/修改生产、未发送消息。正式就绪与配对恢复准备仍归原付款/备份任务,不假报首批员工启用完成。

下一步与提交边界

先以联合 changes.diff/manifest 固定未提交输入供只读复核。建议与 09-04 拆为两笔,各引用 task;共享 QA 的先后补丁必须保留,不能整文件覆盖。无 schema/migration/seed/角色修改,本任务代码回退不修改业务记录;整站既有留痕删除回退语义仍有效。获批提交推送后冻结真实候选,再刷新生产和恢复前置、另批部署与公网合成验收,不让真人代测。