Files
HarborForge/ZHI_TASKS.md

18 KiB
Raw Blame History

ZHI_TASKS.md

基于 docs/milestone-propose-requirements.md 拆分的开发 TODO 更新时间2026-03-16 目标:把需求拆到接近“可直接开工 / 可独立提 PR”的粒度


使用建议

  • 每个一级任务尽量对应一个小阶段
  • 每个二级任务尽量对应一个可独立提交的改动点
  • 做之前先勾选“设计/盘点”,做完再勾选“测试/文档”

P0 - 盘点与设计冻结

P0.1 旧状态与旧逻辑盘点

  • 搜出所有 milestone status 的旧枚举使用位置
  • 搜出所有 task status 的旧枚举使用位置
  • 搜出所有前端 status badge / 文案 / 下拉框位置
  • 搜出所有后端 transition / update / filter 逻辑位置
  • 搜出所有 CLI 中 status choices 的位置
  • 搜出所有测试里写死旧状态名的位置

P0.2 现有类型体系盘点

  • 盘点所有 task_type 的定义位置
  • 盘点所有 task_subtype 的定义位置
  • 确认前后端 task_type = task 的全部使用点
  • 列出历史数据迁移时 task_type = task 的处理方案候选

P0.3 数据迁移设计

  • 设计 milestone 旧状态 -> 新状态映射
  • 设计 task 旧状态 -> 新状态映射
  • 设计 assignee 与现有 assignee_id 的过渡策略
  • 设计 feat_task_id 存储什么值task id string / task code
  • 设计 reopen 记录落地方式comment / activity / 独立表)

P0.4 权限设计冻结

  • 确认 milestone 新权限名
  • 确认 task 新权限名
  • 确认 propose 新权限名
  • 确认 admin 是否默认拥有全部新增权限
  • 确认默认 role 是否需要预置部分权限

P1 - 数据模型与迁移骨架

P1.1 Milestone 模型改造

  • 修改后端 milestone enum 定义
  • 移除 pending
  • 移除 deferred
  • 移除 progressing
  • 增加 freeze
  • 增加 undergoing
  • 增加 completed
  • 增加 started_at
  • 更新 milestone schema
  • 更新 milestone response model

P1.2 Task 模型改造

  • 修改后端 task enum 定义
  • 移除 progressing
  • 增加 undergoing
  • 增加 completed
  • 增加 assignee 字段
  • 明确 assignee 是否替代 assignee_id
  • 更新 task schema
  • 更新 task response model

P1.3 Propose 模型新增

  • 新建 propose model
  • 增加 project_id
  • 增加 propose_code
  • 增加 title
  • 增加 description
  • 增加 status
  • 增加 created_by_id
  • 增加 created_at
  • 增加 updated_at
  • 增加 feat_task_id
  • feat_task_id 标记为服务端只读

P1.4 Propose 编码支持

  • 设计 propose counter 表/字段复用方案
  • 实现按 project 独立计数
  • 实现 P{i:05x} 格式生成
  • 实现 {proj_code}:P{i:05x} 拼接
  • 为并发创建补唯一性保护

P1.5 数据库迁移脚本

  • 编写 milestone 状态迁移脚本
  • 编写 task 状态迁移脚本
  • 编写新增 started_at 迁移
  • 编写新增 assignee 迁移
  • 编写新增 propose 表迁移
  • 编写新增 feat_task_id 迁移
  • 编写旧数据回填/默认值策略

P1.6 模型层校验与 smoke test

  • 确认应用启动不报 enum/schema 错误
  • 确认旧接口序列化不崩
  • 确认 migration 后可读写 milestone/task
  • 确认 propose 表能正常创建记录

P2 - 权限骨架

P2.1 后端权限枚举/注册

  • 注册 freeze milestone
  • 注册 start milestone
  • 注册 close milestone
  • 注册 close task
  • 注册 reopen closed task
  • 注册 reopen completed task
  • 注册 accept propose
  • 注册 reject propose
  • 注册 reopen rejected propose

P2.2 默认角色与权限种子

  • 更新默认权限种子
  • 更新 admin 默认权限
  • 更新可能的 owner / manager / dev 权限分配
  • 写一份新旧权限差异说明

P2.3 权限检查辅助方法

  • 为 milestone action 增加统一权限检查 helper
  • 为 task action 增加统一权限检查 helper
  • 为 propose action 增加统一权限检查 helper

P3 - Milestone 状态机后端

P3.1 Milestone 动作接口

  • 设计 milestone 动作接口路径
  • 实现 freeze 接口
  • 实现 start 接口
  • 实现 close 接口
  • 明确 completed 自动触发入口

P3.2 Freeze 业务规则

  • 查询当前 milestone 下 maintenance/release task 数量
  • 校验“有且仅有一个 release maintenance task”
  • 失败时返回明确错误 detail
  • 成功时写入 status=freeze
  • 写 activity log / 操作记录

P3.3 Start 业务规则

  • 读取 milestone 前置依赖
  • 校验依赖 milestone 是否完成
  • 校验依赖 task 是否完成
  • 校验其他依赖对象是否完成
  • 校验通过后写入 status=undergoing
  • 自动写入 started_at
  • 写 activity log / 操作记录

P3.4 Close 业务规则

  • 仅允许 open/freeze/undergoing -> closed
  • 校验 close milestone 权限
  • undergoing close 增加附加确认/原因字段支持(如需要)
  • 为后续“依赖修正”预留服务端入口
  • 写 activity log / 操作记录

P3.5 Completed 自动触发

  • 在 task 完成逻辑里检测 release maintenance task
  • 校验 milestone 下唯一 release task 已完成
  • 自动写入 milestone completed
  • 防止重复触发
  • 写 activity log / 操作记录

P3.6 Milestone 编辑限制

  • open 允许编辑基本信息
  • freeze 禁止范围调整相关字段修改
  • completed 禁止编辑
  • closed 禁止编辑
  • 对 feature 相关变更做服务端防守

P4 - 依赖检查后端

P4.1 通用依赖检查能力

  • 抽一个依赖检查 service/helper
  • 支持检查 milestone 依赖
  • 支持检查 task 依赖
  • 支持检查 support 依赖
  • 支持检查 meeting 依赖

P4.2 milestone 开始前检查

  • milestone start 复用通用依赖检查
  • 返回详细未满足依赖信息

P4.3 task 开始前检查

  • task pending -> open 复用通用依赖检查
  • 返回详细未满足依赖信息

P4.4 close 后依赖修正预留

  • 设计 milestone close 后依赖修正数据结构
  • 决定先阻塞 close 还是允许 close 后手动修复
  • 为未来依赖修正 UI/API 预留接口

P5 - Task 状态机后端

P5.1 Task 动作接口梳理

  • 明确继续复用现有 transition 接口还是拆动作接口
  • 如复用 transition补足新状态合法性校验
  • 如拆动作接口,设计 open/start/finish/close/reopen API

P5.2 pending -> open

  • 校验当前状态必须为 pending
  • 校验前置依赖全部满足
  • 校验所在 milestone 允许 task 进入 open
  • 更新状态为 open
  • 写 activity log / 操作记录

P5.3 open -> undergoing

  • 校验当前状态必须为 open
  • 校验 assignee 非空
  • 校验操作者就是 assignee
  • 校验所在 milestone 为 undergoing
  • 更新状态为 undergoing
  • 写开始时间(如沿用 started_on
  • 写 activity log / 操作记录

P5.4 undergoing -> completed

  • 校验当前状态必须为 undergoing
  • 校验操作者就是 assignee
  • 校验 completion comment 已提交
  • 更新状态为 completed
  • 写完成时间(如沿用 finished_on
  • 写 activity log / 操作记录

P5.5 pending/open/undergoing -> closed

  • 校验当前状态合法
  • 校验 close task 权限
  • 更新状态为 closed
  • 写 close reason/comment如需要
  • 写 activity log / 操作记录

P5.6 closed/completed -> open reopen

  • 校验当前状态为 closedcompleted
  • closed 校验 reopen closed task 权限
  • completed 校验 reopen completed task 权限
  • 更新状态回 open
  • 写 reopen 记录
  • 写 activity log / 操作记录

P5.7 Task 编辑权限服务端防守

  • open + assignee=null 允许编辑主体
  • open + assignee!=null 仅 assignee/admin 可编辑主体
  • undergoing/completed/closed 禁止主体编辑
  • 保留 comment 接口可用性

P5.8 与 release maintenance task 联动

  • 在 task 完成时识别 release maintenance task
  • 与 milestone completed 自动触发逻辑打通
  • 防止普通 task 完成误触发 milestone completed

P6 - Propose 后端

P6.1 基础 CRUD

  • 实现 create propose
  • 实现 list proposes
  • 实现 get propose detail
  • 实现 update propose
  • 限制仅 open 可编辑主体

P6.2 Accept

  • 设计 accept API
  • 接收 milestone 选择参数
  • 校验 propose 当前状态为 open
  • 校验 accept propose 权限
  • 校验 milestone 属于同 project
  • 校验 milestone status 为 open
  • 自动创建 feature story task
  • 复制 title
  • 复制 description
  • 复制 created_by
  • 设置新 task 默认状态 pending
  • 自动回填 feat_task_id
  • 更新 propose status 为 accepted
  • 写 activity log / 操作记录

P6.3 Reject

  • 设计 reject API
  • 校验 propose 当前状态为 open
  • 校验 reject propose 权限
  • 支持 reason/comment
  • 更新 propose status 为 rejected
  • 写 activity log / 操作记录

P6.4 Reopen

  • 设计 reopen API
  • 校验 propose 当前状态为 rejected
  • 校验 reopen rejected propose 权限
  • 复用当前 propose不创建新记录
  • 更新 propose status 为 open
  • 写 reopen 记录
  • 写 activity log / 操作记录

P6.5 feat_task_id 只读保护

  • update 接口中忽略客户端传入的 feat_task_id
  • schema 中将 feat_task_id 标为只读输出字段
  • accept 成功后才允许服务端填充 feat_task_id

P7 - 移除 task_type = task

P7.1 后端清理

  • 从后端 enum/type 定义中移除 task
  • TASK_SUBTYPE_MAP 中移除 task
  • 清理 create/update 校验逻辑中的 task

P7.2 前端清理

  • 从 CreateTaskModal 移除 task
  • 从 CreateTaskPage 移除 task
  • 更新 task type 下拉默认值
  • 确认默认类型改成什么(待定后落地)

P7.3 历史数据处理

  • 统计数据库中已有多少 task_type=task
  • 确认迁移到哪个新 type/subtype
  • 编写数据修复脚本

P8 - 前端Milestone 页面

P8.1 类型与状态文案

  • 更新前端 milestone type/status 定义
  • 替换旧状态 badge
  • 增加新状态 badge
  • 展示 started_at

P8.2 Detail 页按钮

  • open 显示 freeze + close
  • freeze 显示 start + close
  • undergoing 显示 close
  • completed 不显示状态动作按钮
  • closed 不显示状态动作按钮

P8.3 按钮禁用与提示

  • freeze 不满足条件时禁用
  • freeze 提示缺少/多于 release maintenance task
  • start 不满足依赖时禁用
  • start 提示未完成依赖

P8.4 编辑态限制

  • open 时允许编辑基本信息
  • freeze 时禁止范围调整相关编辑项
  • completed/closed 时禁用编辑入口

P9 - 前端Task 页面

P9.1 类型与状态文案

  • 更新前端 task status 类型定义
  • 移除 progressing
  • 增加 undergoing
  • 增加 completed

P9.2 Detail 页按钮

  • pending 显示 open + close
  • open 显示 start + close
  • undergoing 显示 finish + close
  • completed 显示 reopen
  • closed 显示 reopen
  • 所有按钮按权限可见

P9.3 编辑行为

  • open + assignee=null 时显示编辑入口
  • open + assignee!=null 时按 assignee/admin 显示编辑入口
  • undergoing/completed/closed 时隐藏/禁用主体编辑入口
  • 保留 comment 区域

P9.4 Finish 流程

  • finish 前要求填写 comment
  • 设计 finish + comment 的交互(同弹窗 / 先评论再点完成)
  • finish 成功后刷新状态与 comment 列表

P9.5 Reopen 流程

  • completed 显示 reopen
  • closed 显示 reopen
  • reopen 成功后状态回到 open
  • 显示 reopen 历史记录(如可行)

P9.6 创建表单限制

  • 禁止通用 create task 创建 feature story task
  • 禁止通用 create task 创建 release maintenance task
  • 调整默认 task status 体验为 pending
  • 调整默认 task type移除 task 后)

P10 - 前端Propose 页面

P10.1 列表页

  • 新建 propose 列表页
  • 支持按 project 查看
  • 支持显示 status
  • 支持显示 propose_code

P10.2 创建页/弹窗

  • 新建 propose 创建表单
  • 支持填写 title/description
  • 自动归属当前 project

P10.3 详情页

  • 展示 propose_code
  • 展示 title
  • 展示 description
  • 展示 status
  • 展示 feat_task_id
  • 展示 created_by_id
  • 展示 created_at
  • 展示 updated_at

P10.4 按钮

  • open 显示 accept / reject
  • accepted 不显示状态动作按钮
  • accepted 显示 View Generated Task
  • rejected 显示 reopen
  • 所有按钮按权限可见

P10.5 Accept 交互

  • 弹出 milestone 选择框
  • 仅列出当前 project 下 open 的 milestone
  • accept 成功后展示生成的 feature task 跳转
  • 页面刷新后显示 feat_task_id

P10.6 Reject / Reopen 交互

  • reject 时支持填写 reason/comment
  • reopen 时提示会把 propose 恢复到 open
  • reopen 成功后刷新详情页状态

P10.7 编辑限制

  • open 时允许编辑 title/description
  • accepted 禁止编辑主体
  • rejected 禁止编辑主体

P11 - 权限管理前端/管理页

P11.1 新权限展示

  • 在权限列表中展示 milestone 新权限
  • 在权限列表中展示 task 新权限
  • 在权限列表中展示 propose 新权限

P11.2 Role 编辑

  • Role 编辑页支持勾选新权限
  • 默认角色展示正确
  • 保存后权限持久化正确

P12 - CLI / 文档 / 开发者说明

P12.1 CLI

  • 更新 task status choices
  • 更新 milestone status choices
  • 如需要,新增 propose 子命令

P12.2 README / docs

  • 更新状态枚举说明
  • 更新按钮/动作说明
  • 新增 propose 流程说明
  • 新增权限说明

P12.3 开发说明

  • 在 docs 中补一页“状态机总览”
  • 在 docs 中补一页“权限总览”
  • 在 docs 中补一页“propose -> feature story -> milestone”流程图/文字

P13 - 自动化测试

P13.1 Milestone 后端测试

  • open -> freeze 成功路径
  • open -> freeze 缺少 release task 失败
  • open -> freeze 多个 release task 失败
  • freeze -> undergoing 依赖未完成失败
  • freeze -> undergoing 成功并写 started_at
  • 测 release maintenance task 完成后 milestone 自动 completed
  • 测 milestone close 权限

P13.2 Task 后端测试

  • pending -> open 依赖满足成功
  • pending -> open 依赖不满足失败
  • open -> undergoing assignee 为空失败
  • open -> undergoing 非 assignee 操作失败
  • open -> undergoing assignee 操作成功
  • undergoing -> completed 无 comment 失败
  • undergoing -> completed 成功
  • close task 权限
  • reopen closed task 权限
  • reopen completed task 权限

P13.3 Propose 后端测试

  • 测 propose code 按 project 独立递增
  • open -> accepted
  • 测 accept 时 milestone 非 open 失败
  • 测 accept 后自动生成 feature story task
  • 测 accept 后自动写 feat_task_id
  • open -> rejected
  • rejected -> open
  • feat_task_id 无法手动修改

P13.4 前端 / E2E

  • 测 milestone 按钮显示规则
  • 测 milestone 按钮禁用提示
  • 测 task 按钮显示规则
  • 测 task finish 需要 comment
  • 测 task reopen 后回到 open
  • 测 propose create -> accept -> task generated 流程
  • 测 propose reject -> reopen 流程
  • 回归已有 wizard / role-editor / task / milestone 测试

P14 - 收尾与上线前检查

P14.1 数据校验

  • 用旧数据跑迁移
  • 抽查 milestone 状态迁移结果
  • 抽查 task 状态迁移结果
  • 抽查 task_type = task 数据迁移结果
  • 抽查 propose code 生成结果

P14.2 手工验收

  • 手工走 milestone freeze/start/close
  • 手工走 task open/start/finish/close/reopen
  • 手工走 propose create/accept/reject/reopen
  • 手工检查权限可见性
  • 手工检查禁用按钮与提示语

P14.3 最终文档整理

  • 更新 docs/milestone-propose-requirements.md 与最终实现差异
  • 删除过时说明
  • 标出最终未做项 / 延后项

建议 PR 切分

PR-1枚举、模型、迁移骨架

  • milestone/task/propose 模型与 schema
  • migration
  • 不碰前端交互

PR-2权限骨架

  • 新权限注册
  • 角色配置与权限 UI 基础支持

PR-3milestone 状态机后端

  • freeze/start/close/completed 自动触发

PR-4task 状态机后端

  • open/start/finish/close/reopen
  • assignee 与编辑控制

PR-5propose 后端

  • CRUD + accept/reject/reopen + feat_task_id

PR-6task type 清理

  • 移除 task_type = task
  • 数据修复

PR-7milestone 前端

  • status 展示 + 按钮 + 禁用提示

PR-8task 前端

  • status 展示 + 按钮 + finish/comment + reopen

PR-9propose 前端

  • 列表/详情/创建/accept/reject/reopen

PR-10测试与文档

  • E2E / 回归 / docs / CLI