the induce-detect-explain loop is the product's core promise and nothing tests it end to end. each scenario in internal/chaos already declares a PairedRule() (cpu to scheduler_contention, disk-sat to disk_io_bottleneck, fd-leak to fd_leak, tcp-loss to tcp_retransmit_storm, memory to oom_imminent, cgroup-memory to memory_limit_pressure), but there's no test that actually induces a scenario and confirms the paired rule fires.
propose: a privileged integration test (real ebpf build) that, per registered scenario, induces it inside the container, runs the doctor cycle, and asserts a finding with the declared PairedRule() is present. iterate over the registry so a new scenario is covered automatically, and skip cascade (paired rule "multiple") or assert its component rules. this is the regression net for the whole detection path.
depends on the harness (#143), needs the privileged/BTF setup from #148. distinct from the 24h soak in #38, this is per-scenario correctness, not endurance.
the induce-detect-explain loop is the product's core promise and nothing tests it end to end. each scenario in
internal/chaosalready declares aPairedRule()(cpu to scheduler_contention, disk-sat to disk_io_bottleneck, fd-leak to fd_leak, tcp-loss to tcp_retransmit_storm, memory to oom_imminent, cgroup-memory to memory_limit_pressure), but there's no test that actually induces a scenario and confirms the paired rule fires.propose: a privileged integration test (real
ebpfbuild) that, per registered scenario, induces it inside the container, runs the doctor cycle, and asserts a finding with the declaredPairedRule()is present. iterate over the registry so a new scenario is covered automatically, and skipcascade(paired rule "multiple") or assert its component rules. this is the regression net for the whole detection path.depends on the harness (#143), needs the privileged/BTF setup from #148. distinct from the 24h soak in #38, this is per-scenario correctness, not endurance.