Skip to content

Restore complete Kubescape result coverage #3156

Open
1 of 3 issues completed
Open

Description

@devantler

🤖 Generated by the Agentic Engineer

Description

The 2026-08-15 production security survey could not establish complete Kubescape coverage across posture, vulnerability, and runtime signals:

  • posture controls were present for 227 of 243 expected controls (93.4% coverage), below the repository's 95% CI floor;
  • 35 of 141 current long-lived containers had no complete paired vulnerability result;
  • 15 of 87 active ReplicaSets had neither runtime profile, and one additional pair was partial;
  • runtime alerts reach Alertmanager, but delivery to a durable downstream sink was not proven.

The active scanner-artifact failure in #3023 may explain part of the posture gap, but it does not account for or verify the vulnerability and runtime coverage gaps. A partial survey must stay explicit until every expected workload has a current, attributable result.

Expected behavior

The live security stack exposes a current and complete result set for every in-scope workload, with coverage semantics aligned to the repository gate and a verifiable alert-delivery path.

Acceptance criteria

  • Define the expected-object denominator for posture, vulnerability, and runtime coverage.
  • Restore current paired vulnerability results for all in-scope long-lived containers, or document a narrow evidence-backed exclusion.
  • Restore both runtime profiles for all in-scope active ReplicaSets, with partial pairs reported as failures.
  • Reconcile the live posture coverage calculation with the 95% repository floor without weakening either signal.
  • Prove an emitted runtime alert reaches the intended durable sink.
  • Add a fail-loudly regression check for missing or stale result objects.

Part of #2447.

Current denominator and remaining work — 2026-10-05

#4262 has delivered the denominator-aware, fail-loudly checker. Its fresh production read exits 1: posture expected=102/current=102/missing=0/empty=0/orphan=0; vulnerability expected=80/current=57/missing=10/stale=13/split=31; runtime expected=82/current=74/failing=2/missing=2/partial=2/stale=0/pending=12. These are workload/image/profile coverage counts, not the CI compliance percentage. Split stored versions remain untrustworthy even when their listed timestamp is current.

The denominator and regression-check criteria are delivered by #4262. Remaining acceptance is coherent current vulnerabilities (#4263/#3955), complete runtime pairs and learning measurement (#4264), plus a real emitted-alert-to-durable-sink receipt. Keep this issue open; complete posture collection alone does not satisfy it.

Activity

  1. added theissue type on Aug 15, 2026
  2. coderabbitai commented on Aug 15, 2026

    @coderabbitai
    Contributor
    🔗 Related PRs

    #3037 - fix(cilium): refuse a zero-count gate release and correct the runbook order [merged]
    #3080 - feat(observability): alert when a Crossplane managed resource stops reconciling [merged]
    #3103 - feat(security): assert the node image verifier can enforce at all [merged]
    #3109 - fix(deploy): avoid redundant GHCR node reboots [merged]
    #3142 - docs(kubescape): correct the controller-rbac migration guidance [merged]


    📝 Issue Planner

    Check the box below or use the @coderabbitai plan command to generate an implementation plan and prompts that you can use with your favorite coding assistant.

    • Create Plan

    🧪 Issue enrichment is currently in open beta.

    You can configure auto-planning by selecting labels in the issue_enrichment configuration.

    To disable automatic issue enrichment, add the following to your .coderabbit.yaml:

    issue_enrichment:
      auto_enrich:
        enabled: false

    💬 Have feedback or questions? Drop into our discord!

  3. moved this to 📥 Backlog in 🌊 Project Boardon Aug 15, 2026
  4. added a commit that references this issue on Aug 22, 2026
  5. devantler commented on Aug 22, 2026

    @devantler
    ContributorAuthor

    🤖 Generated by the Agentic Engineer

    Production coverage recheck — 2026-08-22

    The scanners are producing data, but complete coverage still cannot be established:

    • Posture: three fresh direct samples contain populated controls and non-zero failures, proving liveness. Only 49 of 2,405 summaries are under 24 hours, so no payload-complete cluster score or comparison with the repository's 95% CI floor is supportable.
    • CVE: sampled summaries and paired manifests carry current scanner metadata and coherent positive totals, but 286 active containers versus 138 summaries have not been identity-reconciled. Summary references also resolve their payloads only in the scanner namespace, so cluster-wide critical/high and reachable totals remain unavailable.
    • Runtime: 353 profile/network pairs are complete and 195 are partial. Alert routing is configured to the existing Slack-backed path rather than stdout-only, but downstream delivery was not proven.

    These are coverage gaps, not a clean or broken-scanner verdict. They remain within this issue's existing acceptance criteria; no duplicate tracker was created.

  6. devantler commented on Sep 30, 2026

    @devantler
    ContributorAuthor

    🤖 Generated by the Agentic Engineer

    Split into three sub-issues so each part can be picked up and finished on its own:

    1. Define the expected Kubescape result set per surface and fail on missing or stale results #4262: define the expected result set for each surface, and add a read-only check that fails on missing or stale results. This comes first, because the other two measure against it.
    2. Reconcile Kubescape vulnerability summaries with the containers they describe #4263: reconcile vulnerability summaries with the containers they describe, and derive cluster-wide totals. Blocked by Define the expected Kubescape result set per surface and fail on missing or stale results #4262.
    3. Complete Kubescape runtime profile pairs and prove runtime alert delivery #4264: complete the runtime profile pairs and prove that a runtime alert reaches its destination. Blocked by Define the expected Kubescape result set per surface and fail on missing or stale results #4262.

    This issue closes when all three are done and the check from #4262 reports full coverage on production.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Fields

    Priority

    None yet

    Effort

    None yet

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions