docs: dev status round 11 — P3.6 milestone edit restrictions
This commit is contained in:
@@ -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. 背景
|
||||
|
||||
Reference in New Issue
Block a user