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,9 +23,10 @@
- 不带引用的草案不允许写入
3. **AI 输出必须有"对账报告"**
- 拆解任务前,先输出三段对账:
- 拆解任务前,先输出结构化对账:
- ✅ 完美对应(需求 ↔ 原型注释 ↔ 任务)
- ⚠️ 需求未见原型 / 仅原型未见需求
- ⚠️ 需求未见原型
- 无需求ID分组原型有明确功能但没有匹配到关联需求
- ❓ 注释含糊无法转化
- 对账报告先呈现给用户,用户审核后才执行写入
@@ -49,7 +50,7 @@
### Agent 1Prototype Decompose Agent原型拆解
**目的**:把"产品方案原型 + 关联需求"拆解成开发任务草案 + 测试用例草案。
**目的**:把"产品方案原型 + 关联需求"拆解成开发任务草案 + 测试用例草案。关联需求是正式范围锚点原型中明确可拆但没有匹配到关联需求的功能也可以拆成无需求ID分组草案。
**输入**
- 当前版本「产品方案」类型 + status=completed 的 VersionPlan取其 `resultUrl` 作为**原型链接**(约定:产品方案的成果即原型)
@@ -63,7 +64,7 @@
- 当前版本至少关联 1 条需求
**输出**
- 对账报告(结构化文本,含"完美对应/单边/含糊"三段
- 对账报告(结构化文本,含"完美对应/需求未见原型/无需求ID分组/含糊"
- DevTask 草案数组(每条带 `aiDraft: true` + `references[]` + `aiEstimateHours`,可选 `recommendedAssigneeName` / `recommendedAssigneeReason`
- TestCase 草案数组(每条带 `aiDraft: true` + `references[]` + `aiEstimateHours`,可选 `recommendedAssigneeName` / `recommendedAssigneeReason`
- `target = dev_tasks``testCaseDrafts` 必须为空数组;`target = test_cases``devTaskDrafts` 必须为空数组
@@ -73,7 +74,8 @@
- 编号未出现时,再按需求标题和需求概述(`title` / `description`)做语义匹配。
- 有 QY 编号时,`prototype_note` 引用只能使用真实存在的 QY 编号。
- 没有 QY 编号但原型文本已命中需求编号或需求概述时,不应丢弃;可只引用 `requirement`,并在 `matched.noteIds` 返回空数组。
- 只有既匹配不到需求编号,也匹配不到需求概述语义的原型批注,进入 `noteOnly``ambiguous`
- 既匹配不到需求编号,也匹配不到需求概述语义,但能形成明确功能名称和任务范围的原型批注,进入 `prototypeOnly`,对应草案带 `requirementName` 且不带 `requirement` 引用
- 只有无法形成稳定任务/用例的含糊批注才进入 `ambiguous`
**测试用例拆解粒度**
- TestCase 要按功能点、UI 交互、表单校验、接口、数据一致性、权限、异常、边界、状态流转、兼容性和回归点拆细。
@@ -86,6 +88,9 @@
- 打开采纳弹窗前,前端先过滤当前版本已采纳过的重复 DevTask/TestCase 草案
- 写入字段中 `aiDraft: true``aiDraftAt: ISO时间戳`
- 写入 `aiEstimateHours`,不写入执行人预估 `estimateHours`
- DevTask / TestCase 必须写入 `versionId` 作为执行归属;`requirementId` 可选
- 无正式需求 ID 的草案写入 `requirementName` 作为分组展示名,列表显示为 `无需求ID · {requirementName}`
- 无需求ID分组不创建 Requirement不写入需求池不加入版本关联需求列表
- DevTask 草案不写预计开始/截止时间,负责人后续排期时再填写
- 只有用户在采纳弹窗勾选“采纳推荐负责人”时,才把已校验的 `recommendedAssigneeName` 写入 `assigneeId`
@@ -242,15 +247,27 @@ interface DecomposeOutput {
report: {
matched: Array<{ reqId: string; noteIds: string[]; taskCount: number }>;
reqOnly: string[]; // 需求 ID 列表
noteOnly: string[]; // 原型注释 ID 列表
prototypeOnly: Array<{ requirementName: string; noteIds: string[]; taskCount: number }>;
ambiguous: Array<{ noteId: string; reason: string }>;
};
devTaskDrafts: Array<{ title: string; description?: string; categoryCode: string; priority: Priority; aiEstimateHours: number; recommendedAssigneeName?: string; recommendedAssigneeReason?: string; references: Reference[] }>;
testCaseDrafts: Array<{ title: string; description: string; categoryCode: string; priority: Priority; aiEstimateHours: number; recommendedAssigneeName?: string; recommendedAssigneeReason?: string; references: Reference[] }>;
devTaskDrafts: Array<{ title: string; description?: string; categoryCode: string; priority: Priority; aiEstimateHours: number; requirementName?: string; recommendedAssigneeName?: string; recommendedAssigneeReason?: string; references: Reference[] }>;
testCaseDrafts: Array<{ title: string; description: string; categoryCode: string; priority: Priority; aiEstimateHours: number; requirementName?: string; recommendedAssigneeName?: string; recommendedAssigneeReason?: string; references: Reference[] }>;
}
```
要求AI 不输出数据库 `categoryId`,只输出稳定 `categoryCode`。前端确认写入时按 `TaskCategory.code` 映射成 `categoryId`映射失败时使用对应分组的默认类型兜底。AI 不输出 `estimateHours`、预计开始或预计截止。
要求AI 不输出数据库 `categoryId`,只输出稳定 `categoryCode`。前端确认写入时按 `TaskCategory.code` 映射成 `categoryId`映射失败时使用对应分组的默认类型兜底。AI 不输出 `estimateHours`、预计开始或预计截止。草案没有 `requirement` 引用时,必须有 `requirementName` 和至少一个 `prototype_note` 引用。
### 任务/用例分组契约
```ts
interface VersionScopedRequirementGroup {
versionId: string; // 执行归属,必填
requirementId?: string; // 正式需求 ID可选
requirementName?: string; // 无正式需求 ID 时的展示分组名
}
```
要求:版本级聚合使用 `versionId`;需求级进度只统计带 `requirementId` 的 DevTask。无需求ID分组只影响版本任务/用例视图,不影响需求池和关联需求列表。
## 视觉规范
@@ -258,3 +275,4 @@ AI 草案在 DevTask / TestCase 列表中的视觉区分:
- 整行加 `border-l-2 border-l-purple-400 bg-purple-50/30`
- 标题旁紫色徽章「AI 草案」(`bg-purple-100 text-purple-600`
- 用户在详情抽屉里编辑保存任意字段后,徽章和左边线自动消失
- 无需求ID分组不额外显示“原型发现”等标记只在分组标题中展示 `无需求ID · {requirementName}`