feat(techniques): status hover tooltips + min 2 tests for validated
Some checks failed
Aegis CI / lint-and-test (push) Has been cancelled
Some checks failed
Aegis CI / lint-and-test (push) Has been cancelled
1. Status logic (v3): require ≥2 validated tests with 'detected' result to reach 'validated' status. With only 1 validated+detected test the technique stays 'partial' (single test is insufficient evidence). Backfilled existing data: T1012 and T1059.001 downgraded to 'partial'. 2. Hover tooltips on status badges in TechniquesPage and TechniqueDetailPage: - validated: ≥2 tests executed and detected - partial: some tests done but incomplete coverage - in_progress: tests exist but none validated yet - not_covered: tests run but Blue Team didn't detect - not_evaluated: no tests created yet - review_required: recent update needs acknowledgment Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -27,6 +27,15 @@ import { useAuth } from "../context/AuthContext";
|
||||
import TestFromTemplateForm from "../components/TestFromTemplateForm";
|
||||
import type { TechniqueStatus, TestState, TestResult } from "../types/models";
|
||||
|
||||
const STATUS_TOOLTIPS: Record<TechniqueStatus, string> = {
|
||||
validated: "✅ Validated — ≥2 tests executed and detected by Blue Team. Technique is covered.",
|
||||
partial: "🟡 Partial — Some tests done but not all detected, only 1 validated test, or some tests still pending. More testing needed.",
|
||||
in_progress: "🔵 In Progress — Tests exist but none validated yet (draft, executing, or under review).",
|
||||
not_covered: "🔴 Not Covered — Tests were run but Blue Team did not detect the attack. Coverage gap.",
|
||||
not_evaluated: "⚫ Not Evaluated — No tests created for this technique yet.",
|
||||
review_required:"🟠 Review Required — Technique was recently updated or new intel/rules detected. Needs review.",
|
||||
};
|
||||
|
||||
const statusBadgeColors: Record<TechniqueStatus, string> = {
|
||||
validated: "bg-green-900/50 text-green-400 border-green-500/30",
|
||||
partial: "bg-yellow-900/50 text-yellow-400 border-yellow-500/30",
|
||||
@@ -243,9 +252,10 @@ export default function TechniqueDetailPage() {
|
||||
<div className="flex items-center gap-3">
|
||||
<h1 className="text-2xl font-bold text-white">{technique.mitre_id}</h1>
|
||||
<span
|
||||
className={`inline-flex rounded-full border px-2.5 py-0.5 text-xs font-medium ${
|
||||
className={`inline-flex rounded-full border px-2.5 py-0.5 text-xs font-medium cursor-help ${
|
||||
statusBadgeColors[technique.status_global]
|
||||
}`}
|
||||
title={STATUS_TOOLTIPS[technique.status_global]}
|
||||
>
|
||||
{technique.status_global.replace(/_/g, " ")}
|
||||
</span>
|
||||
|
||||
Reference in New Issue
Block a user