import type { RiskLevel } from '@cclabsnz/sf-core'; import type { Finding } from '../findings/Finding.js'; import type { AttackChain } from '../chains/AttackChain.js'; import { type CheckMeta } from '../findings/CheckMeta.js'; type Effort = CheckMeta['effort']; /** One thing to do, with everything it fixes. The executive report's plan is a list of these. */ export interface PlannedAction { /** What to do, as an instruction. */ title: string; /** The specifics, when the instruction names them after a colon ("Close X: A, B and C"). */ detail?: string; /** Why it matters, in one sentence. */ why: string; /** The open findings this action closes. */ fixes: Finding[]; /** Indexes into the chains passed in, of the named chains this action breaks: it closes every finding of their break point. */ breaks: number[]; /** * Named chains whose break point this action works on but cannot finish, because part of the break * point is waived or already passed: fixing the open part leaves the chain standing. */ weakens: number[]; /** Indexes of chains its findings take part in without being the break point. */ inChains: number[]; severity: RiskLevel; effort: Effort; /** 1 = start this week, 2 = this month, 3 = this quarter. */ wave: 1 | 2 | 3; /** Relative weight of the exposure it removes; used to rank and to place it on the matrix. */ risk: number; } /** * Turn findings and attack chains into a ranked plan. Each named chain's break point becomes one * action (chains sharing a break point share the action); every other open CRITICAL or HIGH finding * becomes an action per check. MEDIUM and LOW fixes stay in the roadmap. * * Wave 1 is anything that breaks a CRITICAL chain or closes a CRITICAL finding; otherwise weeks of * work is wave 3 and the rest wave 2. Within a wave, the most risk removed comes first. */ export declare function buildActionPlan(findings: Finding[], chains: AttackChain[]): PlannedAction[]; export {}; //# sourceMappingURL=ActionPlan.d.ts.map