diff --git a/apps/web/app/versions/[id]/page.tsx b/apps/web/app/versions/[id]/page.tsx index fff74bd..07dde5e 100644 --- a/apps/web/app/versions/[id]/page.tsx +++ b/apps/web/app/versions/[id]/page.tsx @@ -727,6 +727,7 @@ export default function VersionDetailPage() { versionId={version.id} projectId={version.projectId} requirements={requirements} + devTasks={devTasks} currentUserName={user?.name ?? ''} onLink={(ids, addedBy) => { ids.forEach((id) => updateRequirement(id, { versionId: version.id, addedToVersionBy: addedBy })); diff --git a/apps/web/components/version/VersionRequirementsTab.tsx b/apps/web/components/version/VersionRequirementsTab.tsx index b1041f1..557455c 100644 --- a/apps/web/components/version/VersionRequirementsTab.tsx +++ b/apps/web/components/version/VersionRequirementsTab.tsx @@ -3,18 +3,21 @@ import { useState } from 'react'; import { Plus, X, Search } from 'lucide-react'; import type { Requirement } from '@/lib/requirement'; +import type { DevTask } from '@/lib/dev-task'; import { REQ_STATUS_LABEL, REQ_STATUS_COLOR } from '@/lib/requirement'; +import { deriveReqDevStatus, canEditRequirement, REQ_DEV_STATUS_LABEL, REQ_DEV_STATUS_COLOR } from '@/lib/linkage-engine'; interface Props { versionId: string; projectId: string; requirements: Requirement[]; + devTasks: DevTask[]; onLink: (reqIds: string[], addedBy: string) => void; onUnlink: (reqId: string) => void; currentUserName: string; } -export function VersionRequirementsTab({ versionId, projectId, requirements, onLink, onUnlink, currentUserName }: Props) { +export function VersionRequirementsTab({ versionId, projectId, requirements, devTasks, onLink, onUnlink, currentUserName }: Props) { const [showAddModal, setShowAddModal] = useState(false); const linkedReqs = requirements.filter((r) => r.versionId === versionId); const availableReqs = requirements.filter((r) => r.projectId === projectId && !r.versionId && r.status === 'adopted'); @@ -40,29 +43,41 @@ export function VersionRequirementsTab({ versionId, projectId, requirements, onL