fix(ai): 收紧AI任务类型入库规则

This commit is contained in:
Script Generator
2026-07-02 18:19:34 +08:00
parent a39dde3824
commit 68b768788b
10 changed files with 90 additions and 22 deletions

View File

@@ -8,7 +8,7 @@ import { useDevTaskStore } from '@/stores/useDevTaskStore';
import { useTestCaseStore } from '@/stores/useTestCaseStore';
import { useTaskCategoryStore } from '@/stores/useTaskCategoryStore';
import { useAuthStore } from '@/stores/useAuthStore';
import { findCategoryByCode, type CategoryGroup } from '@/lib/task-category';
import { findCategoryByCode, resolveAiTaskCategoryByName, type CategoryGroup } from '@/lib/task-category';
import { clampDevAiEstimateHours, clampTestCaseAiEstimateHours } from '@/lib/ai-estimation-policy';
import { resolveDecomposeDraftRequirementFields } from '@/lib/ai-decompose-adoption';
import { formatReportRequirementLabel } from '@/lib/ai-decompose-report';
@@ -102,6 +102,15 @@ export function DecomposeReportModal({
return fallbackGroup === 'testing' ? '功能测试' : '开发任务';
};
const resolveDraftCategoryName = (
draft: AgentDevTaskDraft | AgentTestCaseDraft,
fallbackGroup: Extract<CategoryGroup, 'development' | 'testing'>,
) =>
resolveAiTaskCategoryByName(categories, resolveDraftTaskTypeName(draft, fallbackGroup), fallbackGroup, {
allowCreate: fallbackGroup !== 'testing',
fallbackCode: draft.categoryCode,
}).category.name;
const handleAdopt = () => {
if (submitting) return;
setSubmitting(true);
@@ -124,7 +133,7 @@ export function DecomposeReportModal({
const refs = normalizeRefs(draft.references);
const requirementFields = resolveDecomposeDraftRequirementFields({ ...draft, references: refs }, requirements);
const taskTypeName = resolveDraftTaskTypeName(draft, 'development');
const categoryId = ensureCategory(taskTypeName, 'development').id;
const categoryId = ensureCategory(taskTypeName, 'development', { fallbackCode: draft.categoryCode }).id;
const aiEstimateHours = clampDevAiEstimateHours(draft.categoryCode, draft.aiEstimateHours);
const recommendedAssignee = resolveRecommendedAssignee(draft, version.members ?? []);
@@ -166,7 +175,10 @@ export function DecomposeReportModal({
const refs = normalizeRefs(draft.references);
const requirementFields = resolveDecomposeDraftRequirementFields({ ...draft, references: refs }, requirements);
const taskTypeName = resolveDraftTaskTypeName(draft, 'testing');
const categoryId = ensureCategory(taskTypeName, 'testing').id;
const categoryId = ensureCategory(taskTypeName, 'testing', {
allowCreate: false,
fallbackCode: draft.categoryCode,
}).id;
const aiEstimateHours = clampTestCaseAiEstimateHours(draft.categoryCode, draft.aiEstimateHours);
const recommendedAssignee = resolveRecommendedAssignee(draft, version.members ?? []);
@@ -351,7 +363,7 @@ export function DecomposeReportModal({
<div className="flex items-center gap-2 flex-wrap">
<span className="text-[13px] font-medium text-[var(--ink)]">{d.title}</span>
<span className="text-[10px] px-1.5 py-0.5 rounded bg-[var(--bg-subtle)] text-[var(--ink-soft)]">
{resolveDraftTaskTypeName(d, 'development')}
{resolveDraftCategoryName(d, 'development')}
</span>
<span className="text-[10px] px-1.5 py-0.5 rounded bg-zinc-100 text-zinc-600">
{d.priority}
@@ -422,7 +434,7 @@ export function DecomposeReportModal({
<div className="flex items-center gap-2 flex-wrap">
<span className="text-[13px] font-medium text-[var(--ink)]">{d.title}</span>
<span className="text-[10px] px-1.5 py-0.5 rounded bg-[var(--bg-subtle)] text-[var(--ink-soft)]">
{resolveDraftTaskTypeName(d, 'testing')}
{resolveDraftCategoryName(d, 'testing')}
</span>
<span className="text-[10px] px-1.5 py-0.5 rounded bg-zinc-100 text-zinc-600">
{d.priority}