Skip to content

Roadmap

This document describes the evolution of Quorum (quorum-sec-scan), the consensus security scanning CLI/Docker tool. It consolidates the roadmap table published in the README.md, makes the current state explicit (v0.8.3, revision 2026-07-04), and organizes the work into phases (MVP / V1 / Expansion / V2 / V3 / Long term) with verifiable objectives, deliverables and exit criteria per phase. The document is as-is about what already exists and forward-looking (with a clear label) about what does not exist yet.

Product principle guiding every phase: false split > false merge — when in doubt, Quorum keeps findings separate and marks them unmapped, because a wrong merge hides risk. Every phase below preserves this invariant.

[!IMPORTANT] Quorum is CLI/Docker only: there is no web frontend, relational database, runtime REST API, or user authentication. No item on this roadmap introduces those categories. On AI: the deterministic core has no AI — the orchestration, correlationKey, fingerprint, confidence and the fail-on gate are model-free and reproducible. Since v0.8.x there is an opt-in advisory layer (--advice, off by default) that is presentation-only and never touches the core; without the flag the output is byte-identical. Items that could suggest otherwise are marked Out of scope with a rationale in the dedicated section.


1. Phase overview

The phase numbering (MVP/V1/Expansion/V2/V3) is the planning abstraction; it maps to the real SemVer versions per the table below. The release trigger is restricted to v[0-9]+.[0-9]+.[0-9]+ tags in .github/workflows/release.yml.

Phase Version(s) Theme Status
MVP v0.1.x Consensus SCA (Trivy + Grype), SARIF/JSON, :full image Done
V1 v0.2.x → v0.3.x IaC (Checkov/KICS) + crosswalk, K8s/hardening (Kubescape/Dockle), XML Done
Expansion v0.4.x → v0.8.x +6 engines (Terrascan/tfsec/Regula/Conftest/Polaris/kube-score), multi-cloud consensus (AWS/Azure/GCP) and multi-engine K8s, Prometheus metrics, supply-chain and security hardening, opt-in advisory layer (--advice) Done (current: v0.8.3)
V2 v1.0.0 Policy layer over normalized findings (Rego gate), persistent/shareable alias cache, image profiles Planned
V3 v1.x Per-resource identity in MISCONFIG, crosswalk expansion, new engines Planned
Long term v2.x+ Separate runtime module (Falco/Tetragon, stream model) Exploratory

Timeline (Mermaid)

timeline
    title Quorum evolution
    section MVP (v0.1.x) - done
        Consensus SCA      : Trivy + Grype
        Canonical model    : model.Finding, correlationKey vulnId+purl
        Reports            : SARIF (primary) + JSON
        Distribution       : :full image
    section V1 (v0.2.x / v0.3.x) - done
        IaC                : Checkov + KICS
        Crosswalk          : rule->canonical control (AVD/CIS)
        K8s and hardening  : Kubescape + Dockle
        XML format         : legacy pipelines / JUnit-like
    section Expansion (v0.4.x - v0.8.x) - done
        IaC multi-engine   : Terrascan + tfsec + Regula
        Policy-as-code     : Conftest (your Rego from ./policy)
        K8s multi-engine   : Polaris + kube-score (consensus with Kubescape)
        Crosswalk multi-cloud : AVD aws/azure/gcp + C-#### k8s hub
        Observability      : --metrics (Prometheus) + --log-format json
        Supply chain       : cosign keyless + SLSA + SBOM SPDX attested
        Advisory layer     : --advice (Phases 0-3, opt-in, presentation-only)
    section V2 (v1.0.0) - planned
        Policy gate        : Rego over normalized findings
        Alias cache        : persistent / shareable
        Profiles           : scanner + gate presets
    section V3 (v1.x) - planned
        MISCONFIG identity : per-resource (reduce over-merge)
        Crosswalk++        : more controls / official catalogs
        New engines        : on demand
    section Long term (v2.x+) - exploratory
        Runtime module     : Falco / Tetragon (stream model, separate module)

Indicative Gantt (sequencing, not firm dates)

gantt
    title Phase sequencing (indicative, no date commitment)
    dateFormat  YYYY-MM-DD
    axisFormat  %Y-%m
    section MVP
    SCA Trivy+Grype            :done,    mvp, 2025-09-01, 60d
    section V1
    IaC Checkov+KICS (v0.2)    :done,    v1a, after mvp, 60d
    K8s/Dockle/XML (v0.3)      :done,    v1b, 2026-01-05, 75d
    section Expansion
    +6 engines (v0.4-v0.7)     :done,    ex1, after v1b, 90d
    Crosswalk multi-cloud+k8s  :done,    ex2, after v1b, 90d
    Supply-chain hardening     :done,    ex3, after v1b, 90d
    Advisory layer (v0.8)      :done,    ex4, after ex1, 45d
    section V2
    Policy gate (v1.0)         :         v2,  after ex4, 90d
    Persistent alias cache     :         v2c, after ex4, 45d
    Profiles                   :         v2p, after ex4, 45d
    section V3
    Per-resource identity      :         v3,  after v2, 90d
    section Long term
    Runtime module (Falco)     :         lp,  after v3, 180d

The dates in the Gantt are relative and indicative (sequencing), not calendar commitments. The only real release gating is a SemVer tag.


2. MVP — Consensus SCA (v0.1.x) · Done

Objectives

  • Prove the central thesis: correlate and score findings that multiple scanners agree on, instead of producing N duplicate reports.
  • Establish the canonical model (model.Finding) and the scan → normalize → correlate → score → report pipeline.

Deliverables

  • trivy and grype adapters implementing the Adapter interface (Name/Version/Supports/Capabilities/Run) — see internal/adapter/trivy.go and grype.go.
  • VULN correlationKey based on vulnId + purl; Fingerprint = sha256(correlationKey).
  • SARIF (primary) and JSON reports, with partialFingerprints["quorum/v1"] and properties.detectedBy/detectionCount/confidence.
  • :full Docker image with the scanners packaged in.
  • scan <target> and list-scanners commands (cobra) in cmd/quorum.

Exit criteria

  • [x] Two equivalent CVEs (CVE x GHSA) for the same package/version merge into a single finding with detectionCount = 2.
  • [x] Valid SARIF output ingestible by GitHub code scanning.
  • [x] Deterministic exit codes: 0 ok, 1 gate, 2 error.
  • [x] Contract test per adapter against a real fixture in internal/adapter/testdata.

3. V1 — IaC, K8s, hardening and formats (v0.2.x → v0.3.x) · Done

Both subphases are delivered: v0.2 (consensus IaC) and v0.3 (K8s, image hardening and XML). The components exist in the code and are covered by contract tests.

3.1 v0.2 — Consensus IaC · Done

Objectives: extend consensus to IaC misconfigurations, where engines diverge on rule IDs and resource identity.

Deliverables: - checkov and kics adapters (internal/adapter/checkov.go, kics.go). - Crosswalk YAML rule → canonical control (AVD/CIS) in internal/crosswalk, bundled at /opt/quorum/crosswalk (with automatic fallback from --crosswalk ./crosswalk). - MISCONFIG correlationKey by basename(file) + resourceType + canonicalControl, with a per-category fallback; an unmapped rule stays isolated and marked unmapped.

Exit criteria: - [x] An S3/IAM misconfig detected by Checkov and Trivy merges via a common canonicalControl. - [x] An unmapped rule stays isolated (never "guessed"). - [x] Suppressions via the .quorumignore baseline are always logged.

3.2 v0.3 — K8s, image hardening and XML · Done

Objectives: cover Kubernetes posture and image hardening; add XML output for legacy/JUnit-like pipelines.

Deliverables (state in code): - kubescape adapter (K8S_POSTURE) — internal/adapter/kubescape.go. ✅ present - dockle adapter (IMG_HARDENING, CIS-DI controls) — internal/adapter/dockle.go. ✅ present - XML output (same structure as JSON serialized) — internal/report. ✅ present - Polaris was delivered in the Expansion phase (v0.4+) as a full adapter (internal/adapter/polaris.go); it is no longer a deferred item from the original roadmap. See §4.

Exit criteria: - [x] kubescape and dockle registered in list-scanners and covered by contract tests. - [x] --format xml produces a well-formed document equivalent to the JSON. - [x] Polaris delivered (in Expansion) with an adapter and contract test — no longer deferred. - [x] Version probe (Options.ProbeTime, 60s) distinguishes timeout/killed(OOM)/not-installed; per-scanner status (ran/skipped/unavailable/error/timeout) is always present in the report.


4. Expansion — Engines, multi-cloud/K8s consensus and hardening (v0.4.x → v0.8.x) · Done

A phase not foreseen under this label in the original README roadmap, but which corresponds to the work actually delivered between v0.3 and v0.8.3. Several items originally planned for V2/V3 were brought forward here. The scanner pool grew from 6 to 12 and consensus stopped being exclusive to SCA: it now applies to MISCONFIG/IaC (multi-cloud) and Kubernetes posture (multi-engine). This phase also introduced the opt-in advisory layer (§4.5).

4.1 Engine expansion (6 → 12)

Deliverables (adapters in internal/adapter):

Adapter Family (consensus) Type Note
terrascan iac MISCONFIG Tenable IaC policies (baked for offline)
tfsec iac MISCONFIG emits native AVD IDs → auto-correlates with Trivy; deprecated upstream
regula iac MISCONFIG OPA-based IaC rules (Fugue)
conftest policy MISCONFIG policy-as-code: runs your Rego from ./policy (no built-in rules)
polaris k8s K8S_POSTURE Fairwinds best-practices
kube-score k8s K8S_POSTURE static manifest analysis
  • The engine families live in internal/consensus/consensus.go (iac, policy, k8s, hardening).
  • conftest has no rules of its own: it evaluates the operator's Rego (default ./policy, or QUORUM_CONFTEST_ARGS="--policy <dir>"). Without policies it is reported as error — policy-as-code is opt-in by design (internal/adapter/conftest.go).

4.2 Multi-cloud and multi-engine K8s consensus (derived crosswalk)

All mappings were derived from real scanner output (keeping false split > false merge), under crosswalk/.

  • IaC (AVD hub): crosswalk/aws.yaml, azure.yaml, gcp.yaml. Covers S3/IAM/EBS/SG/RDS/KMS/CloudTrail/VPC-flow-logs (AWS), Azure Storage/Key Vault and GCP bucket/firewall/SQL, correlating trivy/checkov/kics/terrascan/regula. tfsec auto-correlates with trivy by emitting native AVD.
  • K8s (Kubescape C-#### hub): crosswalk/k8s.yaml (schemaVersion: 1), correlating kubescape ↔ polaris ↔ kube-score on privilege-escalation, privileged, non-root, cpu/mem limits, probes, read-only-fs, linux-hardening, automount-SA, network-policy, host-network, host-PID/IPC, capabilities and secrets.
  • RBAC stays single-engine: kubescape's RBAC requires cluster context, so there is no peer for consensus — documented, not silently deferred.

4.3 Observability and operational caps

  • New --metrics <file> flag: emits metrics in Prometheus text format (textfile) — cmd/quorum/scan.go.
  • New --log-format text|json flag: progress logs to stderr (json = one object per line).
  • Per-scanner passthrough via QUORUM_<SCANNER>_ARGS (e.g. QUORUM_CHECKOV_ARGS="--bc-api-key …" unlocks Prisma/Bridgecrew policies through the bundled Checkov OSS).
  • DoS/OOM caps: QUORUM_MAX_OUTPUT_BYTES (default 512 MiB) and QUORUM_MAX_TARGET_BYTES (default 20 GiB).

4.4 Supply-chain and security hardening

  • Supply chain (release.yml, Dockerfile.full, .goreleaser.yaml): SLSA build-provenance attestation and attested SBOM SPDX (actions/attest-sbom) for the image and per-binary (GoReleaser/syft), plus BuildKit's sbom: true; cosign keyless with retry; bases pinned by sha256; kubescape/tfsec/terrascan/regula/conftest verified by checksum; grype DB pre-cached with GRYPE_DB_VALIDATE_AGE=false (never expires); THIRD_PARTY_NOTICES.md. The knowledge pack + crosswalk now also carry a SLSA build-provenance attestation per release (release.yml knowledge job; verify with gh attestation verify knowledge/owasp/corpus.yaml).
  • GitHub Action (action.yml, composite): cosign-verifies the image; auto-mounts /var/run/docker.sock on type: image (avoids a false-zero on local image scans); scanner-args and docker-socket inputs; the moving v0 tag is advanced automatically by tag-major.yml on every SemVer release. It now also exposes all advisory inputs (advice, advice-provider, advice-endpoint, advice-model, advice-embed-model, advice-max, advice-cache, advice-allow-egress, advice-api-key, fix), auto-adds host-gateway for local, and forwards the API key via env for remote.
  • Security hardening (closed gaps): --output with filepath.Clean and 0600 permission; OSV id validated and url.PathEscaped; a target starting with - refused (argument injection); aliases.json cache in 0600 with a schemaVersion; secret redaction (trivy's Match is redacted); grype DB never expires. Test coverage reported in CI. Docs published to GitHub Pages (MkDocs Material).

4.5 Advisory layer (opt-in AI) — Phases 0-3 · Delivered (v0.8.x)

The advisory layer is the delta from v0.7.4 to v0.8.3. It is opt-in via --advice, presentation-only, and never touches correlationKey, fingerprint, confidence, aggregated severity or the --fail-on gate — without --advice the output is byte-identical. This supersedes the earlier "no AI until v1" note: the deterministic core still has no AI; the AI parts are strictly opt-in and off by default. Every AI attachment is labeled "AI-generated, advisory only". Full design and guardrails in 21-proposta-ia; honest as-is framing in 13-ia.

Phase 0 (deterministic, no model). Curated remediation templates + OWASP references matched by canonicalControl/ruleId/category/type. Package internal/enrich; data in knowledge/*.yaml (aws/azure/gcp/k8s/image/categories).

Phase 2 (RAG-as-artifact, deterministic). Retrieval from a versioned, digest-pinned OWASP corpus (knowledge/owasp/corpus.yaml, package internal/rag). Lexical retrieval by default (no model); semantic (embeddings) once the corpus is embedded via quorum advise-indexscan auto-picks semantic when the corpus carries vectors. This is retrieval over an immutable artifact, not LLM inference.

Phase 1 (opt-in local LLM). --advice-provider=local queries an on-host OpenAI-compatible endpoint (e.g. Ollama) for a natural-language recommendation, and --fix=suggest proposes a patch that must pass a verify-the-fix re-scan (applied to a temp copy, re-scanned with the same scanner, kept only if the finding is gone and the file still parses; never auto-applied). Reproducible via temperature=0 + an on-disk cache keyed by fingerprint+provider+model. Graceful degradation: if the model is unreachable the report ships without AI advice and the scan never fails. Package internal/advisor.

Phase 3 (opt-in remote provider). --advice-provider=remote calls an external API (auth via QUORUM_ADVICE_API_KEY). Data leaves the host, so it is gated on explicit consent (--advice-allow-egress), blocked by --offline, and refuses --fix (that would upload source). Only the normalized finding is sent — never source code.

New CLI surface. Flags --advice, --advice-provider (none|local|remote), --advice-endpoint, --advice-model, --advice-embed-model, --advice-cache, --advice-max, --advice-allow-egress, --fix (off|suggest); new subcommand quorum advise-index (embeds the OWASP corpus, preserving the digest pin). New MergedFinding fields Remediation, References, Advice (types model.Remediation/DocRef/Advice/Fix).

New metrics (only under --advice). quorum_advice_enriched{kind=remediation|references|recommendation}, quorum_advice_provider{provider}, quorum_advice_fix{stage=proposed|verified} (verified/proposed = the verify-the-fix rate).

New evals. internal/evals harness measures deterministic remediation coverage, OWASP reference relevance and the verify-the-fix rate (runs in CI, no heavy model).

Exit criteria (verified): - [x] Without --advice, SARIF/JSON/XML output is byte-identical to a build with no advisory layer. - [x] --advice (Phase 0/2) attaches deterministic remediation templates and digest-pinned OWASP references, offline, no model. - [x] --advice-provider=local --fix=suggest only surfaces a patch that survives the verify-the-fix re-scan; it is never auto-applied. - [x] --advice-provider=remote is blocked by --offline, refuses --fix, and requires --advice-allow-egress; only the normalized finding is sent. - [x] Advisory metrics emitted only under --advice; evals run in CI. - [x] Knowledge pack + crosswalk carry a SLSA attestation verifiable with gh attestation verify.

Exit criteria (Expansion, verified): - [x] list-scanners registers the 12 adapters; each covered by a contract test. - [x] Same-class misconfig merging across trivy/checkov/kics/terrascan/regula via canonicalControl (aws/azure/gcp). - [x] K8s posture merging across kubescape/polaris/kube-score via the C-#### hub. - [x] --metrics writes a Prometheus textfile; --log-format json emits one object per line. - [x] Image and binaries with SLSA + SBOM SPDX attested; cosign keyless verifiable. - [x] Malicious rules/targets (argument injection) refused; secrets redacted.


5. V2 — Policy gate, persistent cache and profiles (v1.0.0) · Planned

Objectives

Take Quorum from "consensus + report" to "consensus + policy over the normalized findings", keeping the CLI/Docker model. Reduce the network cost of aliasing and simplify recurring CI configuration.

Note (what already exists vs. what is missing): the conftest adapter already delivers policy-as-code as a scanner — it runs your Rego against the files (IaC/manifests) and produces MISCONFIG findings. What V2 proposes is different and complementary: a Rego gate over Quorum's already normalized and correlated findings (e.g. "block any VULN ≥ HIGH without an approved baseline", "require confidence ≥ 0.8 to auto-approve an exception"). That gate does not yet exist.

Proposed deliverables

  1. Policy gate over normalized findings (embedded OPA/Conftest).
  2. Evaluate Quorum's canonical model against declarative Rego policies, as an additional gate complementary to --fail-on/--min-severity; result reflected in the exit code (1 = policy gate tripped).
  3. Packaged so it runs offline (no external OPA server).
  4. Persistent alias cache.
  5. Today aliases go to ~/.cache/quorum/aliases.json (local, 0600, with a schemaVersion). Proposal: a format shareable across runs/CI (cacheable artifact), with TTL and invalidation; keeps graceful degradation and respect for --offline.
  6. Image/scan profiles.
  7. Named presets (e.g. sca-fast, iac-strict, k8s-posture) combining --scanners, --min-severity, --fail-on, policy and crosswalk, to avoid long command lines and divergence between pipelines.

Exit criteria

  • [ ] An example Rego policy (over normalized findings) runs offline and changes the exit code deterministically.
  • [ ] A persisted, reused alias cache across two runs reduces observable OSV calls (measurable in the logs).
  • [ ] At least 3 documented profiles, each reproducible with a flag.
  • [ ] No contract regression: all contract tests green.
  • [ ] Documentation of each new feature with a runnable example in CI.

Scope note (V2): OPA/Conftest here is a library/binary evaluated locally inside the CLI pipeline — it does not introduce a REST API, daemon, or policy server. If a "future proposal" required a server, it falls under Out of scope below.


6. V3 — Per-resource identity, crosswalk++ and new engines (v1.x) · Planned

Objectives

Attack the main known limitation of MISCONFIG correlation and broaden control and engine coverage.

Proposed deliverables

  1. Per-resource identity in MISCONFIG.
  2. Current limitation (see README §Known limitations): two distinct resources of the same type with the same control in the same file can over-merge. Proposal: a normalized resource identity (e.g. the Terraform address aws_s3_bucket.data) to correlate precisely without violating false split > false merge.
  3. Crosswalk expansion.
  4. More controls/clouds beyond what is already covered (S3/IAM/EBS/SG/RDS/KMS/ CloudTrail/VPC-flow-logs, Azure Storage/Key Vault, GCP bucket/firewall/SQL); validation against official AVD/CIS catalogs; a possible crosswalk lint tool.
  5. New engines.
  6. Evaluation of other OSS engines on demand (e.g. Docker Scout, Clair, OpenSCAP — today deferred in the README due to architecture/login weight), always via the Adapter interface + a contract test.

Exit criteria

  • [ ] A test case with two resources of the same type/control/file stops over-merging and produces two correct findings.
  • [ ] Crosswalk linted against official catalogs; coverage documented.
  • [ ] Each new engine registered in list-scanners with a contract test against a real fixture and mapped to the correct engine family.

7. Long term — Runtime module (v2.x+) · Exploratory

Objectives

Extend the consensus thesis to runtime signals, without compromising the CLI/batch nature of today's Quorum.

Proposed deliverables

  • Separate runtime module consuming Falco/Tetragon streams (execution-event model), delivered as a distinct component from the static-scan orchestrator — so as not to turn Quorum into a general-purpose daemon.

Exit criteria

  • [ ] Stream model specified and isolated from the static model.Finding (or explicitly versioned/separate).
  • [ ] Proof of concept correlating a static finding with a runtime event without coupling the existing scan path.

This phase is exploratory: subject to redefinition/cancellation. There is no delivery commitment.


8. Out of scope (N/A) — and why

Items frequently expected in security-product roadmaps that Quorum does not pursue, by architectural decision:

Item Status Rationale
Web frontend / dashboard N/A Quorum is CLI/Docker; reports (SARIF/JSON/XML) are consumed by existing tools (GitHub code scanning, DefectDojo).
Relational database N/A State is ephemeral per run; persistence is limited to a file-based alias cache.
REST API / scanner runtime daemon N/A The model is batch in CI/CD with a gate via exit code; a server would change the trust model.
Authentication / user accounts N/A No multi-tenant; identity is the pipeline's. Chain verification uses OIDC/cosign, not login.
AI/LLM in the deterministic core N/A Consensus is deterministic and auditable; an LLM would introduce non-determinism into correlationKey/confidence. The opt-in advisory layer (--advice, §4.5) is presentation-only and never touches the core — it is not core AI.
Managed SaaS/cloud platform N/A Distribution is a Docker image + native binary; the consumer operates the pipeline.

Future proposal (clearly separate): if there is demand, a runtime module (Long term) and/or export integrations (e.g. a webhook to tracking systems) could be studied as optional, separate components, without reverting the decision to have no daemon/SaaS in the core. The existing telemetry (--metrics, Prometheus text format) is a textfile, not a server — consistent with the batch model. The advisory layer likewise stays opt-in and local-first, and can be removed without changing a single byte of the core.


9. How a phase "closes" (definition of done)

Regardless of the phase, an item is only considered delivered when:

  • [ ] The code follows the Adapter interface (where applicable) and the canonical model.
  • [ ] There is a contract test against a real fixture of the tool's output (internal/adapter/testdata).
  • [ ] make test, make vet, make build green; CI (ci.yml, with test coverage) and e2e (e2e.yml) pass.
  • [ ] The false split > false merge invariant is preserved (no speculative merges; unmapped when there is no mapping).
  • [ ] Per-scanner status and baseline suppressions stay explicit ("0 findings is not proof of safety").
  • [ ] For advisory-layer items: without --advice the output is byte-identical; AI attachments are labeled "AI-generated, advisory only"; evals in internal/evals stay green in CI.
  • [ ] Documentation updated (published to GitHub Pages) and, where applicable, a CI example in examples/ci/.
  • [ ] Release only by a SemVer tag v[0-9]+.[0-9]+.[0-9]+, with signed images/binaries (cosign keyless) and SLSA build-provenance + SBOM SPDX attestations verified (including the knowledge pack + crosswalk).

10. README ↔ phase traceability

Direct mapping from the README §Roadmap table to this document's phases:

README line Phase here Fidelity note
MVP — Trivy + Grype, vulnId+purl, SARIF+JSON, :full MVP Same.
v0.2 — Checkov + KICS, crosswalk, category fallback V1 / v0.2 Done.
v0.3 — Kubescape + Polaris, Dockle, XML V1 / v0.3 + Expansion Kubescape/Dockle/XML in v0.3; Polaris delivered in Expansion (adapter present).
Scanner evaluation — Polaris, kube-score, Terrascan, tfsec, Conftest, Regula Expansion All Added (adapters present); multi-cloud/k8s consensus.
AI recommendations / OWASP RAG / auto-remediation Expansion (v0.8.x) Delivered as the opt-in advisory layer (--advice, Phases 0-3); core stays AI-free.
v1.0 — OPA/Conftest, persistent alias cache, profiles V2 Conftest-as-scanner already exists; Rego gate over normalized findings still planned.
future — Falco/Tetragon runtime Long term Exploratory, separate module.

Assumptions

  • Reference version: the current state is v0.8.3 (revision 2026-07-04). The number comes from the statement/README; the literal in cmd/quorum/root.go is version = "0.1.0", a build default overridden at release via -ldflags "-X main.version=…". git describe returns the moving v0 tag (advanced automatically by tag-major.yml), used to pin the GitHub Action.
  • Advisory layer: treated as implemented--advice and the packages internal/enrich (Phase 0), internal/rag (Phase 2) and internal/advisor (Phases 1/3) exist, with the digest-pinned corpus under knowledge/owasp/ and the internal/evals harness in CI. It is opt-in and off by default, presentation-only, and never touches the deterministic core; without --advice the output is byte-identical. This supersedes the previous "no AI until v1" assumption while keeping the honest framing: the core has no AI.
  • Polaris: treated as implementedinternal/adapter/polaris.go exists and the "polaris": "k8s" family in internal/consensus/consensus.go, with a mapping in crosswalk/k8s.yaml. This corrects the earlier assumption (v0.2.3), when Polaris was still only a reference without an adapter.
  • v0.3 subphases "done": the kubescape/dockle adapters and the XML output exist in the code and pass contract tests; the Polaris gap was closed in Expansion, so v0.3 is marked as Done (no longer "in progress").
  • Policy-as-code: distinguished at two levels — (a) conftest already runs your Rego against files and produces MISCONFIG findings (delivered in Expansion); (b) the Rego gate over Quorum's normalized/correlated findings remains planned (V2). They are distinct and complementary features.
  • Crosswalk: all mappings are derived from real scanner output (false split > false merge); before production, validate against the official AVD/CIS catalogs. The knowledge pack + crosswalk now carry a SLSA attestation per release.
  • Dates: no calendar date is a commitment; the Gantt blocks are sequential and indicative. The only real release gate is a SemVer tag.
  • Content of the V2/V3/Long-term phases: described as a proposal derived from the README's "v1.0/future" line; implementation details (cache format, policy schema, profile names) are illustrative and subject to design.
  • "Out of scope" items: derived explicitly from the stated principles (CLI/Docker only; no web/DB/REST/auth, no AI in the core); they are not removed features but categories never intended for the core. The --metrics telemetry is a Prometheus textfile (not a server), consistent with the batch model, and the advisory layer stays opt-in and local-first.