# 开发路线图

## 当前阶段：V2.3 — 关系表写入与预计算闭环

V2.3 在 V2.2 快读路径之后补上写入闭环：前端仍保留现有 AppData Store 写入形状，但 AppData 保存成功后会同步关系表、刷新/标脏小宝风险摘要，并记录慢 API 与慢 Prisma 查询。领域 CRUD 仍是后续阶段，当前重点是让版本详情、需求池、与我相关和小宝预警在大数据量下持续命中关系表快读。

### 已完成（按时间倒序）

**2026-07-03**
- V2.3 AppData write-side bridge added: successful `PUT /api/v1/data/:key` calls now trigger `AppDataV23SyncService` relation-table sync after optimistic-lock AppData writes.
- Relation sync reuses the V2.2 mapper and replaces current-state rows by partition scope: requirements by `product_id`, version plans/dev tasks/test cases/bugs by `version_id`.
- Append-only evidence tables continue to use duplicate-skipping inserts for work activities, worklogs, overtime, Xiaobao snapshots, and Xiaobao insights.
- Xiaobao summaries now refresh from risk snapshots and are marked `dirty=true` when version risk inputs change.
- Added lightweight observability: slow API request logging through a global Nest interceptor and slow Prisma query logging through query events.
- V2.2 partitioned domain schema foundation added: `requirements` uses HASH partitioning by `product_id`; `dev_tasks`, `test_cases`, and `bugs` use HASH partitioning by `version_id`.
- Partitioned table primary keys and business unique constraints now include partition keys, for example `(id, version_id)` and `(version_id, code)`.
- Xiaobao precompute storage foundation added: `xiaobao_risk_summaries` stores the current version risk, and `xiaobao_risk_snapshots` stores historical snapshots.
- Prisma schema now includes the V2.2 relational model skeleton, and the legacy `RequirementService` now uses the `(id, product_id)` composite key.
- AppData V2.2 migration mapper and preview service added, so legacy JSON can be rehearsed into relation-table rows with counts and skipped-record diagnostics before inserts are enabled.
- V2.2 scoped read API added for version detail, requirement pool, workspace, and Xiaobao warning summaries.
- Version detail, requirement pool, workspace, sidebar badges, version list Xiaobao indicators, and Xiaobao warning page now prefer V2.2 fast-read data and fall back to AppData only for compatibility.
- Requirement pool V2.2 queries require `productId`, avoiding accidental full-table scans against annual hundreds-of-thousands-row data.
- Xiaobao warning now consumes precomputed `xiaobao_risk_summaries` before loading heavy AppData task/test/bug/activity documents.
- V2.2 completion boundary: read hot paths are complete; writes remain on AppData until the relation-table write APIs are enabled.

**2026-07-02**
- `app_data` 读写增加乐观锁版本：`GET` 返回 `version`，前端保存携带最近版本，后端用 `key + updatedAt` 原子更新
- stale version / create race 返回 `409 APP_DATA_CONFLICT`，阻止多人同时编辑时的静默覆盖
- 新增后端 AppData 并发写入回归测试和前端 `server-data` 版本缓存测试

**2026-07-01**
- 补齐云服务器生产部署基线：`Dockerfile.web`、`Dockerfile.server`、`docker-compose.prod.yml`、Nginx 反代模板和 `.env.production.example`
- 补齐本地服务器/局域网部署基线：`docker-compose.local.yml`、`.env.local-server.example`、`deploy:local:*` 脚本
- 新增生产数据库初始化 migration，并提供 `pnpm db:deploy` / `pnpm --filter server db:deploy`
- 新增 `pnpm deploy:verify` 校验生产部署文件完整性
- 新增 `docs/deployment.md`，覆盖本地开发、云服务器部署、升级、备份和排查流程

**2026-06-24**
- 新增 NestJS `DataModule` + Prisma `AppData`，提供 `GET/PUT /api/v1/data/:key`
- 产品/项目/版本树、需求池、调研/产品方案/UI、开发任务、测试用例、Bug 改为服务端持久化
- 成员/角色/部门、任务类型、任务工时日志、加班记录改为服务端持久化
- 登录改为读取服务端成员数据；浏览器只保留登录会话

**2026-06-16**
- 项目模块顶部卡片（总版本数/已开发/需求数/Bug 总数）
- 项目模块版本记录与版本详情数据联动（耗时 + 状态胶囊）
- 4 份核心文档：architecture / decisions / workflow / roadmap

**2026-06-15**
- 与我相关：产品/项目/版本树筛选 + 红色待办徽标
- 与我相关：点击卡片打开 Drawer（PlanDetailDrawer 新建，DevTask/TestCase/Bug 复用）
- 全局 Drawer 阴影统一 shadow-2xl + 顶部上下文条
- 测试用例提 Bug 流程：drawer 内点击 → BugCreateModal
- DevTask + TestCase 转交功能（人员离职场景）
- 需求池：录入人员自动取当前用户 + 状态列改名（业务状态 / 实际进度）
- 产品页面：去掉规划中、项目名/版本胶囊可点击跳转

**2026-06-14**
- 需求变更模块：变更人员/原因/概述/详细 + 概览统计（变更人员排名 + 原因占比饼图）
- 计划任务转交（未开始/进行中可转交，从参与人员选）
- 关联需求增强：描述列 hover 完整内容、需求类型/变更原因/添加日期列
- 计划时间精确到分钟（datetime-local）+ 到期自动开始
- 阶段耗时 + 个人耗时排名（涵盖调研/产品/UI/开发/测试 5 类工作）

**2026-06-13**
- DevTask 状态简化：去掉 done，submitted 是终态
- 实际工时改为精确时间戳计算（精确到 0.5h）
- TestCase 主归属版本，requirement 改为可选标签
- Bug 直接挂版本（versionId 字段）
- linkage-engine（需求 ↔ DevTask 派生）
- workspace-engine（统一 WorkItem 聚合）

**2026-06-12 及更早**
- 完整模块：需求池/版本管理/计划任务（调研/产品/UI）/开发任务/测试用例/Bug
- 加班记录 + 排名 + 原因占比饼图
- 健康度计算 + 风险标签
- 版本执行态自动推导

### 进行中

- 项目详情页 VersionCard 状态胶囊数据联动（部分已完成）

## V2 — 后端接入

NestJS + Prisma + PostgreSQL 已开始接入。第一阶段先用 `app_data` JSONB 文档表承接现有 store 数据形状，避免浏览器清站点数据导致业务数据丢失；第二阶段再逐步拆成关系表。

### 关键任务

1. **服务端文档层**：`app_data` + `/api/v1/data/:key`（第一阶段已实现）
2. **localStorage → API 切换**：业务主数据不再写浏览器（第一阶段已实现）
3. **运行 Prisma 同步/迁移**：本地和服务器数据库都需要创建 `app_data`
4. **关系化拆表**：把稳定模块从 JSONB 拆成 Product/Project/Version/Task 等领域表
5. **认证**：NextAuth.js + JWT
6. **权限**：RBAC（Owner/Admin/Member/Viewer），按项目/版本级别
7. **版本规则引擎收敛**：VersionPlan 完成条件、关联需求候选、TaskCategory 语义码、TestCase.categoryId 统一收束到规则层

### 数据迁移策略

当前不做本地导入导出。清站点数据后浏览器旧数据无法恢复，后续新增数据直接写入 PostgreSQL。若以后需要迁移旧浏览器数据，再单独做管理员导入工具。

## V3 — AI Agent 集成

详细 Agent 规范见 `agent-spec.md`。本节只列规划，不重复 Agent 实现细节。

### V3.1 — Prototype Decompose Agent（首个 Agent）

**目标**：从产品方案的原型 + 关联需求，拆解出开发任务草案 + 测试用例草案；原型中明确可拆但没有匹配到关联需求的内容，按无需求ID分组进入任务/用例，不补需求池。

**已完成的数据底座**（2026-06）：
- DevTask / TestCase 加 references[] + aiDraft + aiDraftAt
- 创建表单加「原型批注」字段
- 列表中 AI 草案视觉区分（紫色边 + 徽章）
- 编辑后自动清除 aiDraft 标记
- agent-spec.md / glossary.md 文档落地
- 约定：原型链接 = 产品方案 (VersionPlan type=product) 已完成计划的 resultUrl，不在 Version 上独立存储

**待实现**：
1. 后端 `AiGateway` + `PrototypeDecomposeService`（NestJS module）
2. 前端「AI 拆解任务和用例」按钮（产品方案 Tab）
3. 对账报告组件（弹窗呈现：完美对应 / 需求未见原型 / 无需求ID分组 / 含糊）
4. 用户确认后批量创建 DevTask + TestCase 草案
5. DevTask 增加 `versionId`，`requirementId` 改为可选，兼容旧数据通过需求反查版本
6. AiLog 表（调用记录、token 计量、用时）

**MVP 范围限制**：
- 不自动分配 assignee（留给用户在草案上手填）
- 不做"上一版基准 diff"（按 decisions.md #17 决议）
- 单 Agent 单 Round，不做多 Agent 编排

### V3.2 — 小宝预警 / Risk Watch Agent

小宝预警以版本发版风险为核心，先通过规则引擎计算风险分、趋势、静默风险、预计可发日期和置信度，再由 Risk Watch Agent 自动解释高风险版本。第一版已落地页面触发模式：打开 `/xiaobao-warning` 时保存当天快照，并在满足触发条件时自动生成 AI 解读。

当前不做后台定时 Agent。后续如果需要主动通知，再在已有 `xiaobao-risk-snapshots` 和 `xiaobao-risk-insights` 基础上增加定时巡检与消息推送。

**Schedule Suggest Agent**：基于成员负载和历史耗时，建议下一阶段任务分配，仍作为后续候选。

**多 Agent 协作设计**：等 Risk Watch 与 Schedule Suggest 都稳定后再设计编排策略。

### V3.3 — 其他场景候选

1. 需求智能分类（自动归档到产品 / 项目）
2. 健康度智能解读（数据指标 → 自然语言报告）
3. 需求转任务（需求采纳后一键生成 DevTask 草稿）

### 落地约束

- **不直接动数据**：所有 Agent 写入必须带 `aiDraft: true`，用户编辑后才转正
- **必须有引用**：所有 AI 产物带 references，用户能追溯到源头
- **必须有对账报告**：拆解类 Agent 输出前端展示结构化报告，让用户决策
- **不补需求池**：无需求ID分组只进入 DevTask/TestCase，不创建 Requirement，不加入关联需求列表
- **可降级**：原型不可达 / 输入数据不全 / 模型超时，明确告知用户失败原因，不写入任何数据

## 不在路线图（明确不做）

- **Jira/TAPD 替代品**：定位是产品/项目经理视角，不是开发任务管理
- **测试套件/测试计划**：测试用例是版本验收手段，不做完整测试管理
- **Gantt 甘特图**：现有的胶囊状态条 + 阶段耗时已经够用
- **看板视图**：DevTask 列表 + 筛选 + 状态流转已够用
- **回归测试**：测试用例不做版本间复用
- **客户/合同管理**：超出研发管理边界

## 关键里程碑

| 节点 | 状态 |
|------|------|
| V1 业务流程打磨 | 进行中 |
| V1 朋友试用反馈 | 持续中 |
| V2 后端接入 | 进行中（V2.1 AppData 已实现） |
| V3 AI 集成 | 等 V2 数据沉淀 |
| 公开发布 | TBD |
**2026-06-26**
- Workspace daily report upgraded from manual worklog summary to mixed activity aggregation.
- Added `work-activities` AppData key and a typed activity factory for VersionPlan, DevTask, TestCase, and Bug actions.
- `/workspace` daily report now groups delivery/progress/creation/risk/progress-note records and flags in-progress work that needs today's progress update.
