5.9 KiB
5.9 KiB
实施计划
当前状态:in_progress。用户已批准最终规划摘要,任务已由
task.py start激活。
1. 实施前固定现场
- 记录 HEAD、当前 task 与
git status --porcelain,确认只有本任务规划文件和父任务 child link 变化。 - 复读 PRD、design、
.trellis/spec/hyb-oa/frontend-react-vite-design.md的未保存保护与 list-to-detail route migration 场景。 - 只读确认本地 Prisma migration status 仍 current;若数据库再次漂移,真实 API 回归标
PAUSED,本任务不得执行任何 migration/reset/seed。
2. 修复共享 guard 的成功保存导航
- 在
UnsavedChangesProvider内抽取单次 allow-next 执行函数,复用现有 ref + microtask 恢复语义。 - 暴露语义收窄的 post-save hook/方法,不改变现有
useUnsavedChangesGuard调用者契约。 - 普通 dirty navigation、确认、取消、browser back 与 beforeunload 逻辑保持原样。
3. 修复资产创建成功链路
- 创建成功后先完成成功态更新并通过 post-save 入口
replace到 canonical detail,保留backSource。 - 将资产 list/detail invalidation 移出关键导航等待路径;后台刷新失败不得触发创建失败 toast 或阻止跳转。
- 编辑既有资产的保存刷新行为不做无关重构。
- API 失败路径继续保留表单与 dirty state。
4. 测试与证据维护
assets-flow.spec.ts增加/保留“无 unsaved dialog + canonical URL + history”断言。procurement-flow.spec.ts将英文Employee改为EMPLOYEE.name,保留“申请人”语义断言;并同步现行筛选/状态控件。- 追加两个归档任务的 post-archive delta,分别记录产品回归与测试侧失败。
- 更新 frontend spec 的 post-save bypass 合同、错误矩阵、Good/Bad 和测试要求。
- 不修改其余 8 条会话/mock 失败相关实现或断言。
5. 验证顺序
cd client && npm run typecheckcd client && npm run buildcd client && npx playwright test tests/e2e/business-detail-routing.spec.ts --workers=1 --reporter=listcd client && npx playwright test tests/e2e/r103-cross-page-ui-consistency.spec.ts --grep "资产长表单切回记录列表" --workers=1 --reporter=list(1 passed / 0 failed / 0 skipped)- 在回环本地、migration current、后台任务关闭且服务配置完整的当前 checkout 上运行:
cd client && E2E_MODE=local E2E_BASE_URL=http://127.0.0.1:3000 npx playwright test tests/e2e/assets-flow.spec.ts tests/e2e/procurement-flow.spec.ts --workers=1 --reporter=list - 记录真实
2 passed / 0 failed / 0 skipped;第一次运行暴露的视口/筛选控件漂移已在目标 spec 内最小同步,未修改范围外失败。
6. 质量与收口
- 使用
trellis-check复核共享 guard API 是否只在成功保存后使用,并搜索所有调用点。 python3 ./.trellis/scripts/task.py validate 08-07-business-routing-regression-repairnode scripts/qa/check-trellis-governance.mjs --jsongit diff --check- 确认无 server、Prisma、权限、合同 task、其余会话 fixture 或生产配置改动。
- 提交前给出中文 commit 计划并获得用户明确批准;不 push、不部署。
7. 停止条件
- migration status 非 current、目标非回环或本地服务缺必要安全配置 →
PAUSED,不执行数据库修复。 - 资产 POST 未成功或未返回 ID → 先归因 API/数据,不启用 bypass 掩盖失败。
- post-save 入口需要全局关闭 guard、修改路由权限或影响其他表单保存语义 → 返回规划复核。
- 真实 E2E 出现本任务范围外新产品失败 → 记录并回来确认,不扩大范围。
8. 执行记录
- 起始 HEAD:
892b313;任务启动前只有本任务规划目录与父任务 child link 变化。 - 迁移基线:只读
prisma migrate status为 current;未执行 migration、reset、seed、数据清理或手工 DDL。 - 共享 guard:新增
usePostSaveNavigation(),内部复用原同步 allow-next ref 与 microtask 恢复;client/src只有资产创建成功回调一个 post-save 调用点,显式放弃仍走 Provider 私有执行函数。 - 资产链路:POST 成功且 ID 有效后先
replace到 canonical 详情,再后台失效资产 list/detail cache;无 ID 与请求失败不启用 bypass。 - 聚焦回归:
business-detail-routing.spec.ts:5 passed / 0 failed / 0 skipped。r103-cross-page-ui-consistency.spec.ts --grep "资产长表单切回记录列表":1 passed / 0 failed / 0 skipped,覆盖未保存取消/放弃、成功保存无弹窗/history,以及合成 400 后保留输入与 dirty guard。
- 真实主链路:
assets-flow.spec.ts与procurement-flow.spec.ts合计2 passed / 0 failed / 0 skipped;真实资产链路继续完成领用、归还、调拨与盘点,采购链路完成提单、审批与归档。 - 初次真实补跑暴露两个测试侧漂移:资产用例在 1024px 继续查找桌面侧栏入口;采购用例仍操作已迁移的常驻范围按钮/状态下拉。仅在两份目标 spec 内做最小同步,未修改产品代码来迎合旧断言。
- 静态与构建:
npm run typecheckPASS;npm run buildPASS(仅有既有 Browserslist 数据提示)。 - 流程门禁:task validate PASS;flow coverage
blockingGapCount=0、10/10core bundles、9acceptance specs;process contract PASS0/0;Trellis governance PASS0/0;git diff --checkPASS。 - 文档审计:
0 errors / 1 warning;警告为仓库既有22个未注册 docs 文件,本任务未新增 docs 文件。 - 边界:无
server/、Prisma、权限、合同 task、其余 8 条会话失败对应测试、生产配置、部署或公网改动;真实 E2E 合成记录按批准保留,未清理。 - 工作提交:
c14b40a(修复: 08-07-business-routing-regression-repair 关闭资产创建跳转回归);未 push、未部署。