chore(08-05-product-interaction-consistency): 归档父任务
这个提交包含在:
@@ -0,0 +1 @@
|
||||
{"_example": "Fill with {\"file\": \"<path>\", \"reason\": \"<why>\"}. Put spec/research files only — no code paths. Run `python3 .trellis/scripts/get_context.py --mode packages` to list available specs. Delete this line once real entries are added."}
|
||||
@@ -0,0 +1,51 @@
|
||||
# 设计说明
|
||||
|
||||
## 1. 任务树与边界
|
||||
|
||||
父任务只维护共同目标、子任务边界、顺序和最终集成验收,不直接修改业务代码。
|
||||
|
||||
| 子任务 | 交付物 | 主要风险 |
|
||||
| --- | --- | --- |
|
||||
| `08-05-interaction-pattern-unification` | 错误/状态/文案/反馈/移动动作一致性,删除差旅自动选中 | 跨页面文案回归、共享组件影响 |
|
||||
| `08-07-interaction-pattern-browser-regression` | 补齐低风险统一的本地 Chromium 与企业微信 UA 模拟证据 | 证据边界、历史 spec 漂移 |
|
||||
| `08-07-e2e-fixture-repair` | 修复 R6/R111 committed E2E fixture 与断言,勘误历史诊断 | 测试口径被误删、fixture 权限漂移 |
|
||||
| `08-05-business-detail-routing` | 采购、资产已有详情态迁到独立路由 | URL 兼容、返回、dirty guard |
|
||||
| `08-07-business-routing-regression-repair` | 关闭资产创建后被 dirty guard 拦截及采购断言漂移 | 保存成功导航、共享 guard 放行边界 |
|
||||
| `08-05-contract-detail-workspace` | 新建合同详情、终止状态、迁移和事务审计 | 状态机、权限、迁移、审计 |
|
||||
|
||||
`08-07-local-database-migration-readiness` 是合同开工前独立执行的本地基线恢复任务,不属于父任务产品子任务,但其迁移状态与真实回归结果作为集成证据保留。
|
||||
|
||||
## 2. 执行顺序
|
||||
|
||||
1. 先实施低风险统一,形成后续页面可复用的错误消息、状态兜底和移动动作模式。
|
||||
2. 补齐低风险统一的浏览器证据,并修复补跑暴露的 committed E2E fixture/断言红灯。
|
||||
3. 再迁移采购/资产路由;该子任务只消费共享模式,不修改合同、差旅、付款或请假。
|
||||
4. 本地数据库基线恢复后,独立关闭真实回归暴露的资产创建跳转与采购断言漂移,不把该修复混入合同任务。
|
||||
5. 合同详情作为独立能力最后实施,必须单独批准其 schema、状态机与迁移计划。
|
||||
|
||||
父子关系不隐含自动授权。每个子任务都要独立执行 `task.py start`、验证、提交与归档。
|
||||
|
||||
## 3. 共同设计合同
|
||||
|
||||
- 页面职责以 `docs/产品设计规则.md` 为准,视觉细节在 `frontend-design` 不可用时保守复用现有组件。
|
||||
- 普通用户文案使用自然中文;技术 code、原始 payload、完整路径和敏感资料不进入普通页面。
|
||||
- 列表负责查找,详情负责处理;差旅、付款和请假按已确认例外保持现有业务边界。
|
||||
- 高风险动作必须有对象摘要、后果、理由和审计;服务端权限与状态校验始终为最终边界。
|
||||
- 所有面向用户可测改动只有在另行批准部署并通过公网检查后才能宣布线上可测。
|
||||
|
||||
## 4. 集成与回滚
|
||||
|
||||
- 三个产品交付子任务和质量支撑任务均独立提交;任何后续任务失败时可回滚该子任务,不回滚已经验收的前序任务。
|
||||
- 路由兼容保留旧链接过渡,避免低风险任务和路由任务必须同时上线。
|
||||
- 合同 migration 与前端详情同批兼容发布;生产应用、迁移和数据写入另需授权。
|
||||
- 最终集成复核只检查跨任务一致性、链接、共享组件和文档事实,不重做每个子任务的全部测试。
|
||||
|
||||
## 5. 共同验证
|
||||
|
||||
- `cd client && npm run typecheck && npm run build`
|
||||
- 相关聚焦 Playwright 与后端 Vitest
|
||||
- `python3 ./.trellis/scripts/task.py validate <task>`
|
||||
- `node scripts/qa/check-process-contract.mjs --baseline --json`
|
||||
- `node scripts/qa/audit-docs.mjs --check-registry`
|
||||
- `node scripts/qa/check-trellis-governance.mjs`
|
||||
- `git diff --check`
|
||||
@@ -0,0 +1 @@
|
||||
{"_example": "Fill with {\"file\": \"<path>\", \"reason\": \"<why>\"}. Put spec/research files only — no code paths. Run `python3 .trellis/scripts/get_context.py --mode packages` to list available specs. Delete this line once real entries are added."}
|
||||
@@ -0,0 +1,48 @@
|
||||
# 实施计划
|
||||
|
||||
## 1. 父任务职责
|
||||
|
||||
- [x] 审核三个产品交付子任务及质量支撑子任务的 PRD、design 和 implement,确认范围无重叠。
|
||||
- [x] 按“低风险统一 → 浏览器补跑 → E2E fixture 修复 → 采购/资产路由化 → 合同详情”顺序分别请求实施批准。
|
||||
- [x] 没有把父任务作为业务代码实现目标;实际实现均落在拥有对应交付物的子任务。
|
||||
|
||||
## 2. 子任务交付顺序
|
||||
|
||||
### 2.1 低风险操作规范统一
|
||||
|
||||
- [x] 完成共享错误、状态、命名、首页、审批反馈、移动动作和差旅自动选择修复。
|
||||
- [x] 通过其聚焦测试与完整前端构建,独立提交和归档。
|
||||
|
||||
### 2.2 采购与资产详情独立路由化
|
||||
|
||||
进入本节前,必须完成 `08-07-interaction-pattern-browser-regression` 与 `08-07-e2e-fixture-repair`,确认 committed 交互回归 spec 无已知红灯。
|
||||
|
||||
- [x] 在低风险任务完成后迁移采购/资产详情路由与旧链兼容。
|
||||
- [x] 验证所有仓库内入口、dirty guard 和浏览器返回,独立提交和归档;资产创建跳转回归由独立收尾任务关闭。
|
||||
|
||||
### 2.3 合同详情页与高风险动作归位
|
||||
|
||||
- [x] 单独实施详情 API/UI、`terminated`、迁移、事务审计和历史展示。
|
||||
- [x] 完成状态机/权限/迁移只读 review;reviewer 不改代码,最终结论 `PASS`。
|
||||
- [x] 本地验证后独立提交并归档;生产迁移与部署继续等待明确授权。
|
||||
|
||||
## 3. 父任务最终集成门禁
|
||||
|
||||
- [x] 三个产品交付子任务和质量支撑任务的验收结果与父 PRD 逐项对账。
|
||||
- [x] 确认普通用户错误无技术前缀,采购/资产新链接稳定,合同状态/证据边界未漂移。
|
||||
- [x] 确认差旅未恢复、付款/请假未路由化、非涉密合同附件未提前实现。
|
||||
- [x] 运行父任务 validate、process contract、docs registry、Trellis governance 和 `git diff --check`。
|
||||
- [x] 部署仍需另建或更新部署 task,并在获得明确授权后执行公网验证;本轮未部署。
|
||||
|
||||
## 4. 回滚点
|
||||
|
||||
- 每个子任务提交即一个独立回滚点。
|
||||
- 父任务不合并 schema 回滚、URL 回滚和共享组件回滚为一个不可分割提交。
|
||||
- 合同迁移的破坏性 drop 不随应用回滚自动执行,按合同子任务设计单独判断。
|
||||
|
||||
## 5. 集成收口证据
|
||||
|
||||
- 6 个登记子任务均已归档;本地迁移基线恢复任务作为独立前置证据保留。
|
||||
- 8 条会话回落失败仍未定性,已在父 PRD `Residual Register` 登记,未修改或删除相关断言,也未宣称套件全绿。
|
||||
- `runWithNextNavigationAllowed` 同步语义注释和 R6 `hr` fixture 用途注释登记为后续最小维护项,不在父任务收口中顺手修改业务代码或测试。
|
||||
- 生产、公网、企业微信真机仍为 `PAUSED`。
|
||||
@@ -0,0 +1,85 @@
|
||||
# 产品交互与页面操作一致性治理
|
||||
|
||||
## Goal
|
||||
|
||||
以小团队中文工作台为目标,把用户跨页面反复使用的“进入详情、新建、返回、审批、错误恢复和移动主动作”收敛为可预测的操作模型,减少同一动作在不同模块中位置、文案、反馈和导航行为不一致造成的学习与误操作成本。
|
||||
|
||||
## Background
|
||||
|
||||
- 当前产品事实源已固定六类页面模板、台账首屏纯列表、详情证据结构、状态矩阵动作语义和移动端底部主动作等边界。
|
||||
- 当前实现仍并存 `ListWorkspace`、`BusinessListTemplate`、`PageHeader` 等页面骨架,并存在独立路由、查询参数主从、列表内联编辑和 Dialog 等多种相互竞争的操作方式。
|
||||
- 2026-08-05 的产品/人机交互审查提出三类工作:先治理低风险、跨页复用的操作规则;再迁移已有详情态的同构台账;合同详情作为新增能力独立规划。
|
||||
- 当前仍有 58 个前端文件在普通用户路径拼接 `CODE: 中文消息`,共享 `resolveErrorMessage` 也保留该前缀;低风险子任务必须统一收敛。
|
||||
- 历史已确认付款批次保持列表内显式选择后的详情形态,不新增独立详情路由;本任务不得推翻该业务决定。
|
||||
|
||||
## Scope
|
||||
|
||||
- 父任务管理三个产品交付子任务及必要的质量支撑子任务,维护边界、顺序、验收和最终集成复核;质量支撑任务不扩张产品范围。
|
||||
- 低风险子任务负责跨页面文案、错误反馈、状态兜底、首页优先级、移动动作容器和差旅自动选中缺陷。
|
||||
- 采购/资产子任务负责两个已有详情态台账的独立路由迁移与旧链接兼容。
|
||||
- 合同子任务负责从零合同详情工作区、`terminated` 状态和事务审计设计/实施。
|
||||
- `08-07-interaction-pattern-browser-regression` 已补齐本地 Chromium/UA 模拟证据;`08-07-e2e-fixture-repair` 负责关闭补跑时暴露的 committed 测试红灯,二者均为质量支撑子任务。
|
||||
- 付款批次、请假和完整差旅不做详情路由化;非涉密合同附件能力按后续规约任务处理。
|
||||
|
||||
## Requirements
|
||||
|
||||
- R1:本父任务作为需求源和跨子任务验收入口,不直接承接大批量业务页面实现。
|
||||
- R2:子任务 `08-05-interaction-pattern-unification` 处理不改变业务 URL、数据库、API、权限模型和状态机的低风险一致性问题。
|
||||
- R3:子任务 `08-05-business-detail-routing` 只处理采购、资产两个已有详情态台账的列表/详情路由边界、深链、返回和未保存保护。
|
||||
- R4:子任务 `08-05-contract-detail-workspace` 独立定义合同详情的信息结构、权限与高风险动作归位,不与采购/资产的路由搬迁混做。
|
||||
- R5:视觉与交互分析优先遵循项目指定的 `frontend-design`;本会话该 skill 不可用时,只以 `ui-ux-pro-max`、现有共享组件和产品事实源做保守补充,不创建新的视觉体系。
|
||||
- R6:不得借一致性治理扩张业务模块、重做既有状态机、改变企业微信/OA 边界、放宽权限或触碰真实数据。
|
||||
- R7:完整差旅属于冻结模块,不做详情路由化;仅在低风险子任务中删除自动选择第一条记录的缺陷,不恢复或扩展差旅能力。
|
||||
- R8:三个产品交付子任务独立实施与批准;低风险统一先行,浏览器证据和 E2E fixture 红灯清零后再做采购/资产路由化,合同详情在其独立规划获批后最后实施。
|
||||
- R9:每个子任务独立完成本地验证、可访问性/交互回归和 Trellis 门禁;只有部署与公网关键路径检查通过后,才能告知用户线上可测。
|
||||
- R10:浏览器补跑与 E2E fixture 修复只维护验证可信度和 committed 测试绿色,不新增页面、权限、API、状态机或数据库能力。
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
- [x] 三个产品交付子任务均具有独立、可观察且不互相重复的验收标准,质量支撑子任务不扩张产品范围。
|
||||
- [x] 低风险统一先于详情路由化完成,路由化复用已经收敛的文案、反馈和动作组件。
|
||||
- [x] 浏览器补跑与 committed E2E fixture 修复在采购/资产路由化开工前完成,没有把当时已知的 R6/R111 红灯带入后续子任务。
|
||||
- [x] 当时范围内的问题已按完整搜索口径治理;错误码前缀未因错误的窄模式搜索被误判为已修复。
|
||||
- [x] 付款批次继续使用现有显式选择详情形态,没有新增独立详情路由。
|
||||
- [x] 完整差旅继续冻结;只删除首屏自动选中第一条记录的缺陷。
|
||||
- [x] 合同详情的信息结构和高风险动作边界在独立子任务中裁决,没有作为采购/资产迁移的附带工作。
|
||||
- [x] 除合同子任务独立批准的详情 API、`terminated` 状态和增量 schema 外,没有扩张其他 API、数据库、权限模型、审批/付款状态机、生产配置或真实业务数据。
|
||||
- [x] 各子任务要求的 typecheck/build、聚焦测试与治理门禁均完成;另有 8 条会话回落失败仍未定性、未宣称通过,并在父任务遗留清单中单独登记。
|
||||
- [x] 每个子任务完成后均有独立提交和回滚点,父任务已完成跨子任务集成复核。
|
||||
|
||||
## Out of Scope
|
||||
|
||||
- 模块冻结清单、一级导航产品组合和功能下线。
|
||||
- 全站视觉换肤、品牌重做、暗色模式或新设计系统。
|
||||
- 除合同子任务明确批准的详情 API、`terminated` 状态与增量 schema 外,不修改其他后端业务规则、权限、状态机、数据库 schema 或生产数据。
|
||||
- 付款批次独立详情路由。
|
||||
- 公网部署、生产配置或真实数据写入;如后续需要,必须另行获批。
|
||||
|
||||
## Test Plan
|
||||
|
||||
- 每个子任务先运行自身聚焦测试、typecheck/build 和任务 validate,再运行父任务集成门禁。
|
||||
- 父任务最终运行 `node scripts/qa/check-process-contract.mjs --baseline --json`、`node scripts/qa/audit-docs.mjs --check-registry`、`node scripts/qa/check-trellis-governance.mjs` 和 `git diff --check`。
|
||||
- 路由子任务覆盖采购/资产深链、旧 `?id=` 兼容、返回与未保存保护;合同子任务额外覆盖 Prisma 校验、迁移状态、状态不变量、事务审计失败回滚和只读 reviewer。
|
||||
- E2E fixture 修复直接运行 R6 七视口 spec 与 R111 双端 spec,不使用临时副本冒充 committed suite 通过。
|
||||
|
||||
## Open Questions
|
||||
|
||||
- 无;三个产品交付子任务的边界和合同终止持久化方案均已确认。未完成事项按下方遗留清单管理,不视为本父任务的开放范围问题。
|
||||
|
||||
## Integration Closeout(2026-08-08)
|
||||
|
||||
- 父任务登记的 6 个子任务均已完成并归档;本地数据库迁移基线由独立前置任务 `08-07-local-database-migration-readiness` 恢复并校验,不计入产品交付范围。
|
||||
- 集成复核确认:低风险交互模式已收敛;采购/资产详情路由和资产创建后跳转已关闭回归;合同详情、`terminated` 三字段、专用终止接口和 required audit 已通过只读 reviewer。
|
||||
- 差旅没有恢复冻结能力,付款/请假没有被路由化,非涉密合同附件没有提前实现。
|
||||
- 生产部署、公网检查和企业微信真机仍为 `PAUSED`;父任务归档不代表线上可测。
|
||||
|
||||
## Residual Register
|
||||
|
||||
1. **OPEN · 8 条会话回落失败,未定性且无执行 task**
|
||||
- `client/tests/e2e/r103-cross-page-ui-consistency.spec.ts` 仍有 7 条、`client/tests/e2e/global-search.spec.ts` 仍有 1 条失败,统一症状为多上下文或二次返回后落到登录页。
|
||||
- 当前证据只能证明数据库基线恢复且 `/api/me` 已返回 200,不能证明根因一定是测试夹具,也不能排除真实会话续期行为。
|
||||
- 本父任务不修改这些用例或登录实现。后续处理前必须另建 Trellis task,先在同一 runner 下稳定复现并定性“fixture/session mock”或“真实会话行为”;不得以删除断言作为默认修法。父任务归档不代表这 8 条通过。
|
||||
2. **DEFERRED · 同步导航放行语义注释**
|
||||
- `runWithNextNavigationAllowed` 依赖同步执行导航,并用 `queueMicrotask` 恢复 guard;未来维护应补注释说明该边界,避免误改成扩大放行窗口的 `setTimeout`。当前失败方向仍是安全地重新触发 guard,不构成功能缺陷。
|
||||
3. **DEFERRED · R6 fixture 的 `hr` 角色用途注释**
|
||||
- `r6-mobile-responsive-system-hotfix.spec.ts` 中的 `hr` 角色仅用于通过真实角色解析链获得 `leave.manage`,因为当前没有更窄的非通配角色。后续维护应补注释,避免把该 fixture 误解为业务上的完整 HR 管理员画像;当前 committed spec 已通过。
|
||||
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"id": "product-interaction-consistency",
|
||||
"name": "product-interaction-consistency",
|
||||
"title": "产品交互与页面操作一致性治理",
|
||||
"description": "统一小团队 OA 的页面操作模型,按低风险交互、采购资产路由、合同详情三项产品交付独立实施;浏览器回归与 E2E fixture 子任务作为质量支撑,完成后再进入路由和迁移阶段。",
|
||||
"status": "completed",
|
||||
"dev_type": null,
|
||||
"scope": "frontend-governance-and-three-child-integration",
|
||||
"package": null,
|
||||
"priority": "P2",
|
||||
"creator": "shunli",
|
||||
"assignee": "shunli",
|
||||
"createdAt": "2026-08-05",
|
||||
"completedAt": "2026-08-08",
|
||||
"branch": null,
|
||||
"base_branch": "main",
|
||||
"worktree_path": null,
|
||||
"commit": "3efa540",
|
||||
"pr_url": null,
|
||||
"subtasks": [],
|
||||
"children": [
|
||||
"08-05-interaction-pattern-unification",
|
||||
"08-05-business-detail-routing",
|
||||
"08-05-contract-detail-workspace",
|
||||
"08-07-interaction-pattern-browser-regression",
|
||||
"08-07-e2e-fixture-repair",
|
||||
"08-07-business-routing-regression-repair"
|
||||
],
|
||||
"parent": null,
|
||||
"relatedFiles": [
|
||||
"client/tests/e2e/r103-cross-page-ui-consistency.spec.ts",
|
||||
"client/tests/e2e/global-search.spec.ts",
|
||||
"client/src/components/common/UnsavedChangesGuard.tsx",
|
||||
"client/tests/e2e/r6-mobile-responsive-system-hotfix.spec.ts"
|
||||
],
|
||||
"notes": "6 个登记子任务均已完成归档;父任务集成复核通过。遗留 8 条会话回落失败仍未定性,后续必须另建 task 先区分 fixture/session mock 与真实会话行为;另登记同步导航放行和 R6 hr fixture 两项注释维护。生产、公网、企业微信真机仍为 PAUSED。",
|
||||
"meta": {
|
||||
"description": "统一小团队 OA 的页面操作模型,按低风险交互、采购资产路由、合同详情三项产品交付独立实施;浏览器回归与 E2E fixture 子任务作为质量支撑,完成后再进入路由和迁移阶段。"
|
||||
}
|
||||
}
|
||||
在新工单中引用
屏蔽一个用户