fix: 4 improvements — campaign test deletion, review queue triggers, technique link, Jira read-only
Some checks failed
Aegis CI / lint-and-test (push) Has been cancelled

1. Campaign test deletion: removing a test from a campaign now also
   deletes the underlying Test record and recalculates technique status.

2. Review Queue triggers: review_required=True is now also set when
   - Sigma/Elastic detection rules are imported for a technique
   - A test is validated (coverage status changes)

3. Test detail — Technique link: 'Technique' entry added at the top of
   the Details sidebar showing MITRE ID + name as a clickable link to
   /techniques/{mitre_id}.

4. Jira panel — read-only on test page: added readOnly + label props to
   JiraLinkPanel. TestDetailPage now passes readOnly=true and the test
   name as label, hiding Link Issue / Sync / Unlink controls (automatic
   Jira creation only — no manual management).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
kitos
2026-05-29 11:18:55 +02:00
parent 727b8af7fd
commit 1b513b050e
6 changed files with 118 additions and 40 deletions

View File

@@ -440,6 +440,26 @@ export default function TestDetailPage() {
<div className="rounded-xl border border-gray-800 bg-gray-900 p-6">
<h2 className="mb-4 text-lg font-semibold text-white">Details</h2>
<dl className="space-y-4">
{test.technique_mitre_id && (
<div>
<dt className="text-xs font-medium uppercase text-gray-500">Technique</dt>
<dd className="mt-1">
<button
onClick={() => navigate(`/techniques/${test.technique_mitre_id}`)}
className="flex items-start gap-1.5 text-left group"
>
<span className="font-mono text-xs text-cyan-400 shrink-0 group-hover:underline">
{test.technique_mitre_id}
</span>
{test.technique_name && (
<span className="text-xs text-gray-400 group-hover:text-gray-300 transition-colors">
\u2014 {test.technique_name}
</span>
)}
</button>
</dd>
</div>
)}
<div>
<dt className="text-xs font-medium uppercase text-gray-500">Description</dt>
<dd className="mt-1">
@@ -539,7 +559,7 @@ export default function TestDetailPage() {
)}
{/* Jira Integration */}
<JiraLinkPanel entityType="test" entityId={testId!} />
<JiraLinkPanel entityType="test" entityId={testId!} readOnly label={test.name} />
{/* Phase Timeline (read-only, with Tempo sync) */}
<TestPhaseTimeline test={test} testId={testId} />