You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Aperio surfaces findings, but operators can only triage one finding at a time. Once UEBA (#12), correlation rules (#11), cloud IAM (#13), and DSPM (#15) ship, finding volume goes up and operators need to:
Group related findings into a single investigation case.
Assign cases to specific operators or teams.
Add status, comments, handoff notes to the case (not the individual finding).
Maintain a postmortem record for closed cases (what happened, how we fixed it, what we'll do differently).
Hand off cases between shifts / on-call rotations without losing context.
AgentTask (already in the schema) is for agent-driven work and doesn't model the human investigation surface. We need a sibling concept for humans.
Goals
InvestigationCase model spanning multiple SecurityFinding rows.
Shift handoff view — on-call dashboard of open cases with last activity + summary.
Non-goals
Not building a full IR / SOAR platform (PagerDuty, Tines, Torq territory) — Aperio cases live and breathe in the SSPM surface, not as a generic ticketing system.
LLM-driven case suggestion + auto-generated case summary on creation (depends on #46); postmortem auto-export to compliance evidence (#5)
P4
Cross-tenant anonymized case-pattern signaling (community signal of "this attack pattern was seen across 14 customers this week")
Open questions
How to handle the same finding linked to multiple cases (allowed? — probably yes, but UI must show all links).
Should muting / risk-exception flow at the case level or stay at the finding level? Recommendation: both, with case-level being the more common shortcut.
Cross-case dependencies (CASE-X blocks CASE-Y) — defer to a later phase.
Reuses: SecurityFinding, User for assignment, TenantAuditLog for case-activity audit, RiskException for case-level mute (refactor to accept either finding or case scope).
Problem
Aperio surfaces findings, but operators can only triage one finding at a time. Once UEBA (#12), correlation rules (#11), cloud IAM (#13), and DSPM (#15) ship, finding volume goes up and operators need to:
AgentTask(already in the schema) is for agent-driven work and doesn't model the human investigation surface. We need a sibling concept for humans.Goals
InvestigationCasemodel spanning multipleSecurityFindingrows.OPEN → INVESTIGATING → CONTAINED → REMEDIATED → CLOSED → REOPENED).Non-goals
WorkflowDeliverys (Workflow & ticketing integration: JIRA, Linear, Slack, Teams, PagerDuty, SLA tracking #50) when a case needs engineering work.Proposed design
Schema
Auto-correlation suggestions
When a new finding is created, run heuristics:
assetId? Suggest joining open case touching that asset.actor/Person(Identity-first correlation, lifecycle & non-human inventory (ISPM) #45)? Suggest joining open case for that person.ruleKeywithin 24h? Suggest joining same-rule open case.Surface as a "Suggested cases" panel on the finding-detail page with one-click "Link to CASE-1247".
Postmortem template
Schema-driven prompts on case close:
{ "what_happened": "...", "impact": "...", "root_cause": "...", "containment": "...", "remediation_actions": ["..."], "lessons_learned": "...", "follow_up_tasks": [{"title":"...", "owner":"..."}] }Once captured, the postmortem JSON exports cleanly into the compliance evidence pack (#5) and the executive report (#19).
UI surface
/cases— list of open cases with priority, status, assignee, age, last activity./cases/<shortId>— case detail: linked findings, comments, activity timeline, assignee, postmortem (when present)./cases/queue— on-call shift view: P1+P2 open cases sorted by age; "your queue" filter.Phasing
InvestigationCase+CaseFindingLink+CaseComment+CaseActivityschema; case CRUD RPCs;/caseslist + detail pages; manual link/unlinkOpen questions
priority; severity-driven finding SLAs still apply but the case "rolls up".References
SecurityFinding,Userfor assignment,TenantAuditLogfor case-activity audit,RiskExceptionfor case-level mute (refactor to accept either finding or case scope).