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,confidenceand 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¶
trivyandgrypeadapters implementing theAdapterinterface (Name/Version/Supports/Capabilities/Run) — seeinternal/adapter/trivy.goandgrype.go.- VULN
correlationKeybased onvulnId + purl;Fingerprint = sha256(correlationKey). - SARIF (primary) and JSON reports, with
partialFingerprints["quorum/v1"]andproperties.detectedBy/detectionCount/confidence. :fullDocker image with the scanners packaged in.scan <target>andlist-scannerscommands (cobra) incmd/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:
0ok,1gate,2error. - [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). conftesthas no rules of its own: it evaluates the operator's Rego (default./policy, orQUORUM_CONFTEST_ARGS="--policy <dir>"). Without policies it is reported aserror— 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.tfsecauto-correlates withtrivyby 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|jsonflag: 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) andQUORUM_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'ssbom: true; cosign keyless with retry; bases pinned bysha256; kubescape/tfsec/terrascan/regula/conftest verified by checksum; grype DB pre-cached withGRYPE_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.ymlknowledgejob; verify withgh attestation verify knowledge/owasp/corpus.yaml). - GitHub Action (
action.yml, composite): cosign-verifies the image; auto-mounts/var/run/docker.sockontype: image(avoids a false-zero on local image scans);scanner-argsanddocker-socketinputs; the movingv0tag is advanced automatically bytag-major.ymlon 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-addshost-gatewayforlocal, and forwards the API key via env forremote. - Security hardening (closed gaps):
--outputwithfilepath.Cleanand0600permission; OSVidvalidated andurl.PathEscaped; atargetstarting with-refused (argument injection);aliases.jsoncache in0600with aschemaVersion; secret redaction (trivy'sMatchis 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-index — scan
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
conftestadapter 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", "requireconfidence ≥ 0.8to auto-approve an exception"). That gate does not yet exist.
Proposed deliverables¶
- Policy gate over normalized findings (embedded OPA/Conftest).
- 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). - Packaged so it runs offline (no external OPA server).
- Persistent alias cache.
- Today aliases go to
~/.cache/quorum/aliases.json(local,0600, with aschemaVersion). Proposal: a format shareable across runs/CI (cacheable artifact), with TTL and invalidation; keeps graceful degradation and respect for--offline. - Image/scan profiles.
- 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¶
- Per-resource identity in MISCONFIG.
- 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 violatingfalse split > false merge. - Crosswalk expansion.
- 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.
- New engines.
- 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
Adapterinterface + 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-scannerswith 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
Adapterinterface (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 buildgreen; CI (ci.yml, with test coverage) and e2e (e2e.yml) pass. - [ ] The false split > false merge invariant is preserved (no speculative
merges;
unmappedwhen there is no mapping). - [ ] Per-scanner status and baseline suppressions stay explicit ("0 findings is not proof of safety").
- [ ] For advisory-layer items: without
--advicethe output is byte-identical; AI attachments are labeled"AI-generated, advisory only";evalsininternal/evalsstay 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.goisversion = "0.1.0", a build default overridden at release via-ldflags "-X main.version=…".git describereturns the movingv0tag (advanced automatically bytag-major.yml), used to pin the GitHub Action. - Advisory layer: treated as implemented —
--adviceand the packagesinternal/enrich(Phase 0),internal/rag(Phase 2) andinternal/advisor(Phases 1/3) exist, with the digest-pinned corpus underknowledge/owasp/and theinternal/evalsharness in CI. It is opt-in and off by default, presentation-only, and never touches the deterministic core; without--advicethe 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 implemented —
internal/adapter/polaris.goexists and the"polaris": "k8s"family ininternal/consensus/consensus.go, with a mapping incrosswalk/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/dockleadapters 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)
conftestalready 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
--metricstelemetry is a Prometheus textfile (not a server), consistent with the batch model, and the advisory layer stays opt-in and local-first.