docs: dev status round 13 — P5.3 assignee identity + P5.4 completion comment

This commit is contained in:
zhi
2026-03-17 11:02:47 +00:00
parent 0df2cfc0a9
commit c3b59f7c91

View File

@@ -382,6 +382,78 @@
- 或 P5.3 后端 task transition 补全 current_user 依赖注入 + assignee 身份校验
- 或 P5.4 后端 undergoing→completed 强制要求 comment
### 2026-03-17 10:00 UTC第 12 轮P8.3 Milestone freeze/start 按钮前置条件检查与禁用提示)
本轮做了什么:
- 新增后端 `GET /projects/{pid}/milestones/{mid}/actions/preflight` 端点milestone_actions.py
- 当 milestone 为 `open` 时,返回 freeze 是否允许 + 原因(检查 maintenance/release task 数量)
- 当 milestone 为 `freeze` 时,返回 start 是否允许 + 原因(检查依赖 milestone/task 是否已 completed
- 只读接口,不做任何数据变更
- 前端 MilestoneDetailPage 集成 preflight
- milestone 加载后自动调用 preflight API
- freeze 按钮:条件不满足时禁用 + 显示 ⚠ 原因提示(如"No maintenance/release task found"
- start 按钮:依赖未完成时禁用 + 显示 ⚠ 原因提示
- 动作执行成功后自动刷新 preflight 状态
- 鼠标 hover 按钮时 title 也显示原因
改了哪些关键文件:
- `HarborForge.Backend/app/api/routers/milestone_actions.py` — 新增 preflight endpoint+84 行)
- `HarborForge.Frontend/src/pages/MilestoneDetailPage.tsx` — preflight 状态 + 按钮禁用逻辑
验证结果:
- Python AST 语法检查通过
- `npx tsc --noEmit` 零错误通过
- 已 commitbackend `7a16639`frontend `faf7842`
当前阻塞/风险:
- P2 权限骨架仍未落地preflight 不检查用户是否有 freeze/start 权限(只检查业务前置条件)
- 无本地 MySQL/运行环境做集成验证
- P5.3 task transition 的 assignee 身份校验仍缺失
- P5.4 后端 undergoing→completed 强制要求 comment 仍缺失
下一轮最建议继续做什么:
- P5.3 后端 task transition 补全 assignee 身份校验open→undergoing 时校验操作者 == assignee
- 或 P5.4 后端 undergoing→completed 强制要求 completion comment
- 或 P10.7 前端 propose 编辑限制open 时允许编辑 title/description
### 2026-03-17 11:00 UTC第 13 轮P5.3 Assignee 身份校验 + P5.4 完成 Comment 强制要求)
本轮做了什么:
- 在后端 transition 接口补全 P5.3 和 P5.4 两项关键校验
- **P5.3 Assignee 身份校验**
- transition 接口新增 `current_user` 依赖注入
- `open → undergoing`:除校验 assignee 非空外,新增校验 `current_user.id == task.assignee_id`,非 assignee 返回 403
- `undergoing → completed`:同样校验操作者必须为 assignee
- **P5.4 完成 Comment 强制要求**
- transition 接口新增 `TransitionBody` 请求体(含可选 `comment` 字段)
- `undergoing → completed` 时强制要求 `comment` 非空,否则返回 400
- 后端自动创建 Comment 记录(复用 `models.Comment`),不再依赖前端单独调用 comment API
- transition 所有状态变更现在自动写 `log_activity`,记录 old/new status
- auto-complete milestone 时传入 `current_user.id` 替代原先的 `None`
- **前端 TaskDetailPage 同步更新**
- `doAction` 改为接收 `body` 参数,直接在 transition POST 请求体中传递 `{ comment }`
- Finish 流程不再单独调用 `POST /comments`,改为后端统一处理
- Close 流程的 reason comment 同样通过请求体传递
改了哪些关键文件:
- `HarborForge.Backend/app/api/routers/tasks.py` — transition 接口重构(+40 行)
- `HarborForge.Frontend/src/pages/TaskDetailPage.tsx` — doAction/finish/close 逻辑简化
验证结果:
- Python AST 语法检查通过
- `npx tsc --noEmit` 零错误通过
- 已 commitbackend `ffb0fa6`frontend `d6a45c3`
当前阻塞/风险:
- P2 权限骨架仍未落地close task / reopen 权限未注册和调用)
- batch transition 接口尚未同步 P5.3/P5.4 校验(无 current_user无 comment body
- 无本地 MySQL/运行环境做集成验证
下一轮最建议继续做什么:
- P10.7 前端 propose 编辑限制open 时允许编辑 title/description其他状态禁止
- 或 P9.3 前端 task 编辑权限守卫(按 assignee/status 显示/隐藏编辑入口)
- 或 P5.7 后端 task PATCH 接口编辑权限服务端防守
---
## 1. 背景