diff --git a/docs/milestone-propose-requirements.md b/docs/milestone-propose-requirements.md index 37de10e..230ab0b 100644 --- a/docs/milestone-propose-requirements.md +++ b/docs/milestone-propose-requirements.md @@ -315,6 +315,73 @@ - 或 P3.6 后端 milestone 编辑限制(freeze/completed/closed 时拒绝核心字段修改) - 或 P8.3 前端 milestone freeze/start 按钮前置条件检查与禁用提示 +### 2026-03-17 08:00 UTC(第 10 轮:Task 状态机后端校验 P5.1-P5.6) + +本轮做了什么: +- 在后端 tasks.py 实现完整的 task 状态流转校验(P5.1-P5.6) +- 新增 `VALID_TRANSITIONS` 映射表,定义合法流转: + - pending → open / closed + - open → undergoing / closed + - undergoing → completed / closed + - completed → open (reopen) + - closed → open (reopen) +- 新增 `_check_transition()` 校验函数,非法流转返回 400 + 明确错误信息 +- **transition 接口**:加入状态机校验 + pending→open 校验 milestone 必须为 undergoing + open→undergoing 校验 assignee 非空 + reopen 时清除 finished_on +- **batch transition 接口**:逐条校验,非法转换跳过并返回 skipped 列表(不破坏已有批量行为) +- **PATCH update 接口**:通过 PATCH 修改 status 时同样强制状态机校验 + +改了哪些关键文件: +- `HarborForge.Backend/app/api/routers/tasks.py` — +65 行 + +验证结果: +- Python AST 语法检查通过 +- 已 commit: `589b1cc` + +当前阻塞/风险: +- P5.3 assignee 操作者校验("只有当前 assignee 可以 start")未实现——当前只校验 assignee 非空,未校验请求者身份(transition 接口无 current_user 参数) +- P5.4 undergoing→completed 需要 comment 的校验尚未加入后端(前端已有弹窗,但后端不拦截) +- 权限检查(close task / reopen closed task / reopen completed task)尚未注册和调用 +- 无本地 DB 做运行时集成验证 + +下一轮最建议继续做什么: +- P3.6 后端 milestone 编辑限制(freeze/completed/closed 时拒绝核心字段 PATCH) +- 或 P8.3 前端 milestone freeze/start 按钮禁用+前置条件提示 +- 或 P5.3 补全 transition 接口的 current_user 依赖注入 + assignee 身份校验 + +### 2026-03-17 09:00 UTC(第 11 轮:P3.6 Milestone 编辑限制 — 前后端完整落地) + +本轮做了什么: +- 实现 P3.6 milestone 编辑限制的后端 + 前端完整守卫 +- **后端 PATCH 接口**(milestones.py): + - `completed` / `closed` 终态:直接拒绝所有 PATCH 修改 + - `freeze` / `undergoing`:禁止修改范围相关字段(title, description, due_date, planned_release_date, depend_on_milestones, depend_on_tasks),返回具体被阻止的字段名 + - 禁止通过 PATCH 修改 status(强制使用 action endpoints) +- **后端 DELETE 接口**(milestones.py): + - `undergoing` / `completed` 状态禁止删除 milestone +- **前端 MilestoneDetailPage**: + - `open` 状态:正常显示 Edit Milestone 按钮 + - `freeze` / `undergoing`:隐藏编辑按钮,显示 "⚠ scope fields are locked" 提示 + - `completed` / `closed`:不显示编辑入口(已有逻辑保持) + +改了哪些关键文件: +- `HarborForge.Backend/app/api/routers/milestones.py` — PATCH 守卫 + DELETE 守卫(+32 行) +- `HarborForge.Frontend/src/pages/MilestoneDetailPage.tsx` — 编辑按钮可见性调整 + +验证结果: +- Python AST 语法检查通过 +- `npx tsc --noEmit` 零错误通过 +- 已 commit:backend `314040c`,frontend `a4b4ffc`,parent `6b265ea` + +当前阻塞/风险: +- feature story task 在 freeze 后的编辑限制只做了"不能新增",但已有 feature task 的核心字段编辑限制尚未加入 task PATCH 接口 +- P2 权限骨架仍未落地,所有动作接口使用通用 role check 占位 +- 无本地 MySQL/Docker 做运行时集成验证 + +下一轮最建议继续做什么: +- P8.3 前端 milestone freeze/start 按钮前置条件检查与禁用提示(freeze 时检查 release task 存在性,start 时检查依赖完成情况) +- 或 P5.3 后端 task transition 补全 current_user 依赖注入 + assignee 身份校验 +- 或 P5.4 后端 undergoing→completed 强制要求 comment + --- ## 1. 背景