本实现计划将标注平台分解为可执行的开发任务。任务按照从基础设施到核心功能再到集成的顺序组织,确保每一步都可以独立测试和验证。
[x] 1. 初始化前端应用和项目结构
cd web && nx generate @nx/react:application lq_label --style=scss --bundler=webpack[x] 2. 初始化后端应用和数据库
[x] 2.1 编写后端数据库初始化的单元测试
[x] 3. 实现后端 Project API
Requirements: 6.1
[x] 3.2 实现 Project CRUD 端点
GET /api/projects (列表)
POST /api/projects (创建)
GET /api/projects/{id} (详情)
PUT /api/projects/{id} (更新)
DELETE /api/projects/{id} (删除,级联删除任务)
Requirements: 5.3, 1.3, 1.6, 1.7
[x] 3.3 编写 Property 1 的属性测试
在 backend/test/ 目录创建测试文件
Property 1: Project creation adds to list
Validates: Requirements 1.3
使用 Hypothesis 生成随机项目数据
验证创建后项目出现在列表中且有唯一 ID
Requirements: 1.3
[ ]* 3.4 编写 Property 3 的属性测试
在 backend/test/ 目录创建测试文件
Property 3: Project deletion cascades
Validates: Requirements 1.7
创建项目和关联任务,删除项目后验证任务也被删除
Requirements: 1.7
[ ]* 3.5 编写 Property 12 的属性测试
在 backend/test/ 目录创建测试文件
Property 12: Project ID validation on task creation
Validates: Requirements 6.4
使用无效的 project_id 创建任务,验证返回 404
Requirements: 6.4
[ ] 4. 实现后端 Task API
Requirements: 6.2
[x] 4.2 实现 Task CRUD 端点
GET /api/tasks (列表,支持筛选)
POST /api/tasks (创建)
GET /api/tasks/{id} (详情)
PUT /api/tasks/{id} (更新)
DELETE /api/tasks/{id} (删除)
GET /api/projects/{id}/tasks (按项目查询)
Requirements: 5.4, 2.2, 2.5, 2.6
[ ]* 4.3 编写 Property 4 的属性测试
在 backend/test/ 目录创建测试文件
Property 4: Task creation associates with project
Validates: Requirements 2.2
创建任务并验证它关联到正确的项目
Requirements: 2.2
[ ]* 4.4 编写 Property 6 的属性测试
在 backend/test/ 目录创建测试文件
Property 6: Task completion updates status
Validates: Requirements 2.7
标注所有数据后验证任务状态更新为 completed
Requirements: 2.7
[ ] 5. 实现后端 Annotation API
Requirements: 6.3
[x] 5.2 实现 Annotation CRUD 端点
GET /api/annotations (列表,支持筛选)
POST /api/annotations (创建)
GET /api/annotations/{id} (详情)
PUT /api/annotations/{id} (更新)
GET /api/tasks/{id}/annotations (按任务查询)
Requirements: 5.5, 3.3, 3.5
[ ]* 5.3 编写 Property 8 的属性测试
在 backend/test/ 目录创建测试文件
Property 8: Annotation saves update progress
Validates: Requirements 3.3
保存标注后验证任务进度更新
Requirements: 3.3
[ ]* 5.4 编写 Property 13 的属性测试
在 backend/test/ 目录创建测试文件
Property 13: Task ID validation on annotation creation
Validates: Requirements 6.5
使用无效的 task_id 创建标注,验证返回 404
Requirements: 6.5
[ ]* 5.5 编写 Property 14 的属性测试
在 backend/test/ 目录创建测试文件
Property 14: JSON serialization round-trip
Validates: Requirements 6.7
验证标注结果的 JSON 序列化和反序列化
Requirements: 6.7
[ ]* 5.6 编写 Property 11 的属性测试
[ ] 6. Checkpoint - 后端 API 完成
[x] 7. 实现前端状态管理 (Jotai Atoms)
[x] 8. 实现前端 API 服务层
[ ] 9. 实现 Layout 组件
Requirements: 4.5, 7.1, 7.4, 7.7
[x] 9.2 创建 Sidebar 组件
定义菜单项 (Projects, Tasks, Annotations)
实现导航功能
实现响应式设计
Requirements: 7.2, 7.5
[ ]* 9.3 编写 Property 15 的属性测试
在 web/apps/lq_label/test/ 目录创建测试文件
Property 15: Navigation menu highlighting
Validates: Requirements 7.3
验证当前路由对应的菜单项高亮显示
Requirements: 7.3
[x] 10. 实现 ProjectListView
Requirements: 1.1, 1.2, 1.5
[ ]* 10.2 编写单元测试
在 web/apps/lq_label/test/ 目录创建测试文件
测试项目列表渲染
测试创建按钮点击
测试项目操作
Requirements: 1.1, 1.2
[x] 11. 实现 ProjectForm 组件
Requirements: 1.2, 1.4
[ ]* 11.2 编写 Property 2 的属性测试
在 web/apps/lq_label/test/ 目录创建测试文件
Property 2: Empty project name rejection
Validates: Requirements 1.4
使用 fast-check 生成空白字符串,验证表单阻止提交
Requirements: 1.4
[x] 12. 实现 ProjectDetailView
[ ]* 12.1 编写单元测试
[x] 13. 实现 TaskListView
Requirements: 2.3, 2.4
[ ]* 13.2 编写 Property 5 的属性测试
在 web/apps/lq_label/test/ 目录创建测试文件
Property 5: Task status filtering
Validates: Requirements 2.4
验证筛选后只显示匹配状态的任务
Requirements: 2.4
[ ]* 13.3 编写 Property 7 的属性测试
在 web/apps/lq_label/test/ 目录创建测试文件
Property 7: User task assignment filtering
Validates: Requirements 3.1
验证用户只看到分配给自己的任务
Requirements: 3.1
[x] 14. 实现 TaskForm 组件
[ ]* 14.1 编写单元测试
[x] 15. Checkpoint - 项目和任务管理完成
[x] 16. 实现 AnnotationView (LabelStudio 集成)
Requirements: 3.2, 10.4
[x] 16.2 集成 LabelStudio 编辑器
动态导入 @humansignal/editor
获取项目配置和任务数据
初始化 LabelStudio 实例
配置编辑器选项
Requirements: 8.1, 8.2, 8.3
[x] 16.3 实现标注保存功能
使用 MST onSnapshot 监听标注变化
序列化标注结果为 JSON
调用 API 保存标注
更新任务进度
Requirements: 3.3, 8.4, 8.6
[x] 16.4 实现编辑器清理逻辑
在组件卸载时销毁 LabelStudio 实例
清理 MST 订阅
清理 DOM 引用和事件监听器
Requirements: 8.8
[ ]* 16.5 编写 Property 9 的属性测试
在 web/apps/lq_label/test/ 目录创建测试文件
Property 9: Empty annotation rejection
Validates: Requirements 3.4
验证空标注结果被阻止提交
Requirements: 3.4
[ ]* 16.6 编写 Property 10 的集成测试
在 web/apps/lq_label/test/ 目录创建测试文件
Property 10: LabelStudio config initialization
Validates: Requirements 3.7
验证编辑器使用项目配置正确初始化
Requirements: 3.7, 8.2
[ ]* 16.7 编写 Property 16 的集成测试
在 web/apps/lq_label/test/ 目录创建测试文件
Property 16: Editor cleanup on unmount
Validates: Requirements 8.8
验证编辑器卸载时资源被正确清理
Requirements: 8.8
[x] 17. 实现路由配置
[x] 18. 实现错误处理和用户反馈
Requirements: 10.1, 10.3
[x] 18.2 实现 Error Boundary
创建 ErrorBoundary 组件
实现错误捕获和显示
实现错误日志记录
Requirements: 10.5, 10.7
[x] 18.3 实现加载状态指示器
使用 @humansignal/ui 的 Spinner 组件
在数据加载时显示加载指示器
Requirements: 10.4
[ ]* 18.4 编写单元测试
在 web/apps/lq_label/test/ 目录创建测试文件
测试 Toast 通知显示
测试 Error Boundary 捕获错误
测试加载状态显示
Requirements: 10.1, 10.3, 10.4, 10.5
[x] 19. 实现表单验证
[ ]* 19.1 编写单元测试
[x] 20. 样式优化和响应式设计
[ ] 21. 最终集成测试
[ ] 22. 文档和部署准备
[ ] 23. Final Checkpoint - 完整功能验证
* 的任务为可选测试任务,可以跳过以加快 MVP 开发