feat(review-queue): MITRE update review queue for leads
- New /techniques/review-queue page: lists all techniques flagged for review after a MITRE ATT&CK sync, grouped by tactic. Leads and admins can mark each one reviewed inline without leaving the page. - Sidebar: 'Review Queue' link (admin/red_lead/blue_lead only) with an amber badge showing the live pending count. - TechniqueDetailPage: amber banner when review_required=true explaining what happened and who can act; 'Mark as Reviewed' button now amber coloured for visual distinction. 'Leads only' chip shown for blue_tech.
This commit is contained in:
@@ -19,6 +19,7 @@ const TestCreatePage = React.lazy(() => import("./pages/TestCreatePage"));
|
||||
const TestDetailPage = React.lazy(() => import("./pages/TestDetailPage"));
|
||||
const TestCatalogPage = React.lazy(() => import("./pages/TestCatalogPage"));
|
||||
const ValidatedTestsPage = React.lazy(() => import("./pages/ValidatedTestsPage"));
|
||||
const ReviewQueuePage = React.lazy(() => import("./pages/ReviewQueuePage"));
|
||||
const ReportsPage = React.lazy(() => import("./pages/ReportsPage"));
|
||||
const SystemPage = React.lazy(() => import("./pages/SystemPage"));
|
||||
const UsersPage = React.lazy(() => import("./pages/UsersPage"));
|
||||
@@ -52,6 +53,7 @@ export default function App() {
|
||||
<Route path="/techniques/:mitreId" element={<Suspense fallback={<LoadingSpinner text="Loading…" />}><TechniqueDetailPage /></Suspense>} />
|
||||
|
||||
<Route path="/matrix" element={<Suspense fallback={<LoadingSpinner text="Loading…" />}><MatrixPage /></Suspense>} />
|
||||
<Route path="/techniques/review-queue" element={<Suspense fallback={<LoadingSpinner text="Loading…" />}><ReviewQueuePage /></Suspense>} />
|
||||
|
||||
{/* ── Executive Dashboard (leads + admin) ──────────────── */}
|
||||
<Route
|
||||
|
||||
Reference in New Issue
Block a user