docs(ai): 记录无需求ID拆解分组

This commit is contained in:
Script Generator
2026-07-01 12:53:20 +08:00
parent e5ef9ee28b
commit 063545c865
7 changed files with 138 additions and 19 deletions

View File

@@ -23,7 +23,7 @@ Requirement Version TestCase
```
**Requirement需求= 语义层**,解释功能范围和业务原因,不驱动流程。
**Version版本= 执行主线**,所有任务归属版本,状态由版本派生。
**Version版本= 执行主线**,所有任务归属版本,状态由版本派生;需求只是可选语义分组
**TestCase + Bug = 质量闭环**,挂在版本上验收。
## 技术栈
@@ -97,6 +97,7 @@ apps/web/
修改 A 影响 B 时,**B 通过 filter A 派生**,不要双向写。例:
- 需求关联到版本:需求设 `versionId`,版本详情 `requirements.filter(r => r.versionId === id)`
- 任务/用例归属版本:新数据优先使用 `versionId`;旧 DevTask 可通过 `requirementId -> Requirement.versionId` 兼容推导
- 删除版本清理孤儿数据PlanTask/DevTask/TestCase/Bug + 释放 Requirement.versionId
## 状态机概览
@@ -139,6 +140,7 @@ V2 接入后端后改为基于 `ProjectMember` 表的 RBACOwner/Admin/Member/
- AI Agent 不是一个独立服务,而是嵌在前端的"特定调用入口"。当前 V3.1 仅 Prototype Decompose Agent。
- Agent 写入数据时必须带 `aiDraft: true` 标记,列表中视觉区分(紫色边)。用户编辑后自动清除标记。
- DevTask / TestCase 加入 `references[]` 字段,记录任务/用例的来源(需求 / 原型批注。Agent 和人工创建均强制至少 1 条引用。
- 原型中有明确功能但没有匹配到关联需求时AI 可以生成无需求ID分组草案写入任务/用例的 `requirementName`,不创建 Requirement不加入关联需求列表。
- 原型链接**不在 Version 上独立存储**,而是来自产品方案 (VersionPlan type=product) 已完成计划的 `resultUrl`。约定:提交产品方案的成果就是原型。
- AI 服务实现走 **NestJS 后端**`apps/server/src/modules/ai/`),不走 Next.js API Route。
- API Key 通过 **`/admin/ai-config` 页面配置**(仅超管可见),存到 `apps/server/data/ai-config.json`,不入 git环境变量 `ANTHROPIC_API_KEY` 作为兜底。
@@ -147,10 +149,14 @@ V2 接入后端后改为基于 `ProjectMember` 表的 RBACOwner/Admin/Member/
| 实体 | 字段 | 类型 | 说明 |
|------|------|------|------|
| DevTask | versionId | string | 执行归属版本无需求ID分组也通过它进入版本 |
| DevTask | requirementId | string? | 正式需求 ID无需求ID分组为空 |
| DevTask | requirementName | string? | 无正式需求 ID 时的展示分组名 |
| DevTask | references | Reference[]? | 引用来源(需求/原型批注) |
| DevTask | aiDraft | boolean? | AI 草案标记 |
| DevTask | aiDraftAt | string? | AI 生成时间戳 |
| DevTask | aiEstimateHours | number? | AI 预估耗时;执行人预估仍写 estimateHours |
| TestCase | requirementName | string? | 无正式需求 ID 时的展示分组名 |
| TestCase | references | Reference[]? | 同上 |
| TestCase | aiDraft | boolean? | 同上 |
| TestCase | aiDraftAt | string? | 同上 |