Roadmap¶
Este documento descreve a evolução do Quorum (quorum-sec-scan),
a ferramenta de consensus security scanning CLI/Docker. Ele consolida a tabela
de roadmap publicada no README.md, explicita o estado
atual (v0.8.3, revisão 2026-07-04), e organiza o trabalho em fases (MVP / V1
/ Expansão / V2 / V3 / Longo prazo) com objetivos, entregáveis e
critérios de saída verificáveis por fase. O documento é as-is sobre o que
já existe e forward-looking (com rótulo claro) sobre o que ainda não existe.
Princípio de produto que guia todas as fases: false split > false merge — na dúvida, o Quorum mantém findings separados e os marca como
unmapped, pois uma fusão errada esconde risco. Toda fase abaixo preserva esse invariante.[!IMPORTANT] O Quorum é CLI/Docker only: não há frontend web, banco relacional, API REST de runtime nem autenticação de usuários. Nenhum item deste roadmap introduz essas categorias. Sobre IA: o núcleo determinístico não tem IA — a orquestração, o
correlationKey, ofingerprint, oconfidencee o gate fail-on são livres de modelo e reprodutíveis. Desde a v0.8.x existe uma camada consultiva opt-in (--advice, desligada por padrão) que é apenas de apresentação e nunca toca o núcleo; sem a flag, a saída é byte-idêntica. Itens que poderiam sugerir o contrário estão marcados como Fora de escopo com justificativa na seção dedicada.
1. Visão geral das fases¶
A numeração de fases (MVP/V1/Expansão/V2/V3) é a abstração de planejamento; ela
mapeia para as versões SemVer reais conforme a tabela abaixo. O trigger de
release é restrito a tags v[0-9]+.[0-9]+.[0-9]+ em
.github/workflows/release.yml.
| Fase | Versão(ões) | Tema | Status |
|---|---|---|---|
| MVP | v0.1.x | SCA por consenso (Trivy + Grype), SARIF/JSON, imagem :full |
Concluído |
| V1 | v0.2.x → v0.3.x | IaC (Checkov/KICS) + crosswalk, K8s/hardening (Kubescape/Dockle), XML | Concluído |
| Expansão | v0.4.x → v0.8.x | +6 engines (Terrascan/tfsec/Regula/Conftest/Polaris/kube-score), consenso multi-cloud (AWS/Azure/GCP) e K8s multi-engine, métricas Prometheus, endurecimento de supply chain e segurança, camada consultiva opt-in (--advice) |
Concluído (atual: v0.8.3) |
| V2 | v1.0.0 | Camada de política sobre findings normalizados (gate Rego), cache de alias persistente/compartilhável, profiles de imagem | Planejado |
| V3 | v1.x | Identidade per-resource em MISCONFIG, ampliação de crosswalk, novos engines | Planejado |
| Longo prazo | v2.x+ | Módulo de runtime separado (Falco/Tetragon, modelo de stream) | Exploratório |
Linha do tempo (Mermaid)¶
timeline
title Evolução do Quorum
section MVP (v0.1.x) - concluído
SCA consenso : Trivy + Grype
Modelo canônico : model.Finding, correlationKey vulnId+purl
Relatórios : SARIF (primário) + JSON
Distribuição : imagem :full
section V1 (v0.2.x / v0.3.x) - concluído
IaC : Checkov + KICS
Crosswalk : rule->canonical control (AVD/CIS)
K8s e hardening : Kubescape + Dockle
Formato XML : pipelines legados / JUnit-like
section Expansao (v0.4.x - v0.8.x) - concluído
IaC multi-engine : Terrascan + tfsec + Regula
Policy-as-code : Conftest (seu Rego de ./policy)
K8s multi-engine : Polaris + kube-score (consenso com Kubescape)
Crosswalk multi-cloud : AVD aws/azure/gcp + hub C-#### k8s
Observabilidade : --metrics (Prometheus) + --log-format json
Supply chain : cosign keyless + SLSA + SBOM SPDX atestados
Camada consultiva : --advice (Fases 0-3, opt-in, só apresentação)
section V2 (v1.0.0) - planejado
Gate de politica : Rego sobre findings normalizados
Cache de alias : persistente / compartilhavel
Profiles : presets de scanners + gates
section V3 (v1.x) - planejado
Identidade MISCONFIG : per-resource (reduzir over-merge)
Crosswalk++ : mais controles / catalogos oficiais
Novos engines : conforme demanda
section Longo prazo (v2.x+) - exploratorio
Runtime module : Falco / Tetragon (stream model, modulo separado)
Gantt indicativo (sequenciamento, não datas firmes)¶
gantt
title Sequenciamento de fases (indicativo, sem compromisso de datas)
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 Expansao
+6 engines (v0.4-v0.7) :done, ex1, after v1b, 90d
Crosswalk multi-cloud+k8s :done, ex2, after v1b, 90d
Hardening supply chain :done, ex3, after v1b, 90d
Camada consultiva (v0.8) :done, ex4, after ex1, 45d
section V2
Gate de politica (v1.0) : v2, after ex4, 90d
Cache persistente de alias : v2c, after ex4, 45d
Profiles : v2p, after ex4, 45d
section V3
Identidade per-resource : v3, after v2, 90d
section Longo prazo
Runtime module (Falco) : lp, after v3, 180d
As datas no Gantt são relativas e indicativas (sequenciamento), não compromissos de calendário. O único gating real de release é uma tag SemVer.
2. MVP — SCA por consenso (v0.1.x) · Concluído¶
Objetivos¶
- Provar a tese central: correlacionar e pontuar findings sobre os quais múltiplos scanners concordam, em vez de produzir N relatórios duplicados.
- Estabelecer o modelo canônico (
model.Finding) e o pipeline scan → normalize → correlate → score → report.
Entregáveis¶
- Adapters
trivyegrypeimplementando a interfaceAdapter(Name/Version/Supports/Capabilities/Run) — verinternal/adapter/trivy.goegrype.go. correlationKeyde VULN baseado emvulnId + purl;Fingerprint = sha256(correlationKey).- Relatórios SARIF (primário) e JSON, com
partialFingerprints["quorum/v1"]eproperties.detectedBy/detectionCount/confidence. - Imagem Docker
:fullcom os scanners empacotados. - Comandos
scan <target>elist-scanners(cobra) emcmd/quorum.
Critérios de saída¶
- [x] Dois CVEs equivalentes (CVE x GHSA) para o mesmo pacote/versão fundem em um
único finding com
detectionCount = 2. - [x] Saída SARIF válida ingerível pelo GitHub code scanning.
- [x] Exit codes determinísticos:
0ok,1gate,2erro. - [x] Contract test por adapter contra fixture real em
internal/adapter/testdata.
3. V1 — IaC, K8s, hardening e formatos (v0.2.x → v0.3.x) · Concluído¶
Ambas as subfases estão entregues: v0.2 (IaC por consenso) e v0.3 (K8s, hardening de imagem e XML). Os componentes existem no código e são cobertos por contract tests.
3.1 v0.2 — IaC por consenso · Concluído¶
Objetivos: estender o consenso para misconfigurations de IaC, onde engines divergem em IDs de regra e identidade de recurso.
Entregáveis:
- Adapters checkov e kics (internal/adapter/checkov.go,
kics.go).
- Crosswalk YAML rule → canonical control (AVD/CIS) em
internal/crosswalk, bundled em /opt/quorum/crosswalk
(com fallback automático a partir de --crosswalk ./crosswalk).
- correlationKey de MISCONFIG por basename(file) + resourceType +
canonicalControl, com fallback por categoria; regra sem mapeamento fica
isolada e marcada unmapped.
Critérios de saída:
- [x] Misconfig de S3/IAM detectado por Checkov e Trivy funde via
canonicalControl comum.
- [x] Regra não mapeada permanece isolada (nunca "adivinhada").
- [x] Supressões via baseline .quorumignore sempre logadas.
3.2 v0.3 — K8s, hardening de imagem e XML · Concluído¶
Objetivos: cobrir postura Kubernetes e hardening de imagem; adicionar saída XML para pipelines legados/JUnit-like.
Entregáveis (estado no código):
- Adapter kubescape (K8S_POSTURE) — internal/adapter/kubescape.go. ✅ presente
- Adapter dockle (IMG_HARDENING, controles CIS-DI) — internal/adapter/dockle.go. ✅ presente
- Saída XML (mesma estrutura do JSON serializada) — internal/report. ✅ presente
- Polaris foi entregue na fase de Expansão (v0.4+) como adapter completo
(internal/adapter/polaris.go); deixou de ser um item
deferido do roadmap original. Ver §4.
Critérios de saída:
- [x] kubescape e dockle registrados em list-scanners e cobertos por
contract tests.
- [x] --format xml produz documento bem-formado equivalente ao JSON.
- [x] Polaris entregue (na Expansão) com adapter e contract test — não mais
deferido.
- [x] Probe de versão (Options.ProbeTime, 60s) distingue
timeout/killed(OOM)/não-instalado; status por scanner
(ran/skipped/unavailable/error/timeout) sempre presente no relatório.
4. Expansão — Engines, consenso multi-cloud/K8s e endurecimento (v0.4.x → v0.8.x) · Concluído¶
Fase não prevista com esse rótulo no roadmap original do README, mas que corresponde ao trabalho realmente entregue entre a v0.3 e a v0.8.3. Vários itens originalmente projetados para V2/V3 foram antecipados aqui. O pool de scanners passou de 6 para 12 e o consenso deixou de ser exclusivo de SCA: passou a valer para MISCONFIG/IaC (multi-cloud) e postura Kubernetes (multi-engine). Esta fase também introduziu a camada consultiva opt-in (§4.5).
4.1 Expansão de engines (6 → 12)¶
Entregáveis (adapters em internal/adapter):
| Adapter | Família (consenso) | Tipo | Observação |
|---|---|---|---|
terrascan |
iac |
MISCONFIG | políticas Tenable IaC (baked para offline) |
tfsec |
iac |
MISCONFIG | emite IDs AVD nativos → auto-correlaciona com Trivy; deprecado upstream |
regula |
iac |
MISCONFIG | regras IaC baseadas em OPA (Fugue) |
conftest |
policy |
MISCONFIG | policy-as-code: roda o seu Rego de ./policy (sem regras embutidas) |
polaris |
k8s |
K8S_POSTURE | best-practices Fairwinds |
kube-score |
k8s |
K8S_POSTURE | análise estática de manifests |
- As famílias de engine estão em
internal/consensus/consensus.go(iac,policy,k8s,hardening). conftestnão tem regras próprias: avalia o Rego do operador (padrão./policy, ouQUORUM_CONFTEST_ARGS="--policy <dir>"). Sem políticas, é reportado comoerror— policy-as-code é opt-in por design (internal/adapter/conftest.go).
4.2 Consenso multi-cloud e K8s multi-engine (crosswalk derivado)¶
Todos os mapeamentos foram derivados de output real dos scanners (mantendo
false split > false merge), sob crosswalk/.
- IaC (hub AVD):
crosswalk/aws.yaml,azure.yaml,gcp.yaml. Cobre S3/IAM/EBS/SG/RDS/KMS/CloudTrail/VPC-flow-logs (AWS), Azure Storage/Key Vault e GCP bucket/firewall/SQL, correlacionando trivy/checkov/kics/terrascan/regula.tfsecauto-correlaciona comtrivypor emitir AVD nativo. - K8s (hub C-#### do Kubescape):
crosswalk/k8s.yaml(schemaVersion: 1), correlacionando kubescape ↔ polaris ↔ kube-score em privilege-escalation, privileged, non-root, limites de cpu/mem, probes, read-only-fs, linux-hardening, automount-SA, network-policy, host-network, host-PID/IPC, capabilities e secrets. - RBAC segue single-engine: o RBAC do kubescape exige contexto de cluster, então não há par para consenso — documentado, não deferido silenciosamente.
4.3 Observabilidade e caps operacionais¶
- Nova flag
--metrics <arquivo>: emite métricas em formato texto Prometheus (textfile) —cmd/quorum/scan.go. - Nova flag
--log-format text|json: logs de progresso em stderr (json = um objeto por linha). - Passthrough por scanner via
QUORUM_<SCANNER>_ARGS(ex.:QUORUM_CHECKOV_ARGS="--bc-api-key …"destrava políticas Prisma/Bridgecrew através do Checkov OSS empacotado). - Caps contra DoS/OOM:
QUORUM_MAX_OUTPUT_BYTES(default 512 MiB) eQUORUM_MAX_TARGET_BYTES(default 20 GiB).
4.4 Endurecimento de supply chain e segurança¶
- Supply chain (
release.yml,Dockerfile.full,.goreleaser.yaml): atestação SLSA build-provenance e SBOM SPDX atestada (actions/attest-sbom) para imagem e por-binário (GoReleaser/syft), além dosbom: truedo BuildKit; cosign keyless com retry; bases pinadas porsha256; kubescape/tfsec/terrascan/regula/conftest verificados por checksum; DB do grype pré-cacheado comGRYPE_DB_VALIDATE_AGE=false(não expira);THIRD_PARTY_NOTICES.md. O knowledge pack + crosswalk agora também recebem uma atestação SLSA build-provenance a cada release (jobknowledgedorelease.yml; verifique comgh attestation verify knowledge/owasp/corpus.yaml). - GitHub Action (
action.yml, composite): cosign-verifica a imagem; auto-monta/var/run/docker.sockemtype: image(evita falso-zero em scan de imagem local); inputs descanner-argsedocker-socket; a tag móvelv0é avançada automaticamente portag-major.ymla cada release SemVer. Agora também expõe todos os inputs consultivos (advice,advice-provider,advice-endpoint,advice-model,advice-embed-model,advice-max,advice-cache,advice-allow-egress,advice-api-key,fix), auto-adicionahost-gatewayparalocale encaminha a API key via env pararemote. - Hardening de segurança (lacunas fechadas):
--outputcomfilepath.Cleane permissão0600;idda OSV validado eurl.PathEscape;targetiniciando com-recusado (argument injection); cachealiases.jsonem0600comschemaVersion; redação de segredos (oMatchdo trivy é redigido); DB do grype não expira. Cobertura de testes reportada no CI. Docs publicados no GitHub Pages (MkDocs Material).
4.5 Camada consultiva (IA opt-in) — Fases 0-3 · Entregue (v0.8.x)¶
A camada consultiva é o delta da v0.7.4 para a v0.8.3. É opt-in via
--advice, apenas de apresentação, e nunca toca correlationKey,
fingerprint, confidence, severidade agregada ou o gate --fail-on — sem
--advice a saída é byte-idêntica. Isso supera a antiga nota de "sem IA até a
v1": o núcleo determinístico continua sem IA; as partes de IA são
estritamente opt-in e desligadas por padrão. Todo anexo de IA é rotulado
"AI-generated, advisory only". Design completo e guardrails em
21-proposta-ia; enquadramento honesto as-is em
13-ia.
Fase 0 (determinística, sem modelo). Templates de remediação curados +
referências OWASP, casados por canonicalControl/ruleId/category/type.
Pacote internal/enrich; dados em knowledge/*.yaml
(aws/azure/gcp/k8s/image/categories).
Fase 2 (RAG-as-artifact, determinística). Retrieval a partir de um corpus
OWASP versionado e pinado por digest (knowledge/owasp/corpus.yaml, pacote
internal/rag). Retrieval léxico por padrão (sem modelo); semântico
(embeddings) quando o corpus é embedado via quorum advise-index — o scan
auto-seleciona semântico quando o corpus tem vetores. É retrieval sobre um
artefato imutável, não inferência de LLM.
Fase 1 (LLM local opt-in). --advice-provider=local consulta um endpoint
on-host compatível com OpenAI (ex.: Ollama) para uma recomendação em linguagem
natural, e --fix=suggest propõe um patch que precisa passar por um re-scan de
verify-the-fix (aplicado a uma cópia temporária, re-escaneado com o mesmo
scanner, mantido só se o finding sumir e o arquivo ainda parsear; nunca
auto-aplicado). Reprodutível via temperature=0 + um cache em disco chaveado
por fingerprint+provider+model. Degradação graciosa: se o modelo estiver
inacessível, o relatório sai sem a advice de IA e o scan nunca falha. Pacote
internal/advisor.
Fase 3 (provedor remoto opt-in). --advice-provider=remote chama uma API
externa (auth via QUORUM_ADVICE_API_KEY). Os dados saem do host, então é gated
por consentimento explícito (--advice-allow-egress), bloqueado por
--offline, e recusa --fix (isso faria upload de código-fonte). Apenas o
finding normalizado é enviado — nunca código-fonte.
Nova superfície de CLI. Flags --advice, --advice-provider
(none|local|remote), --advice-endpoint, --advice-model,
--advice-embed-model, --advice-cache, --advice-max, --advice-allow-egress,
--fix (off|suggest); novo subcomando quorum advise-index (embeda o corpus
OWASP, preservando o pin de digest). Novos campos de MergedFinding:
Remediation, References, Advice (tipos model.Remediation/DocRef/Advice/Fix).
Novas métricas (só sob --advice). quorum_advice_enriched{kind=remediation|references|recommendation},
quorum_advice_provider{provider}, quorum_advice_fix{stage=proposed|verified}
(verified/proposed = a taxa de verify-the-fix).
Novos evals. O harness internal/evals mede cobertura de remediação
determinística, relevância de referências OWASP e a taxa de verify-the-fix (roda
no CI, sem modelo pesado).
Critérios de saída (verificados):
- [x] Sem --advice, a saída SARIF/JSON/XML é byte-idêntica a um build sem a
camada consultiva.
- [x] --advice (Fase 0/2) anexa templates de remediação determinísticos e
referências OWASP pinadas por digest, offline, sem modelo.
- [x] --advice-provider=local --fix=suggest só expõe um patch que sobrevive ao
re-scan de verify-the-fix; nunca é auto-aplicado.
- [x] --advice-provider=remote é bloqueado por --offline, recusa --fix, e
exige --advice-allow-egress; apenas o finding normalizado é enviado.
- [x] Métricas consultivas emitidas apenas sob --advice; evals rodam no CI.
- [x] Knowledge pack + crosswalk carregam uma atestação SLSA verificável com
gh attestation verify.
Critérios de saída (Expansão, verificados):
- [x] list-scanners registra os 12 adapters; cada um coberto por contract test.
- [x] Misconfig de mesma classe fundindo entre trivy/checkov/kics/terrascan/regula
via canonicalControl (aws/azure/gcp).
- [x] Postura K8s fundindo entre kubescape/polaris/kube-score via hub C-####.
- [x] --metrics grava textfile Prometheus; --log-format json emite um objeto
por linha.
- [x] Imagem e binários com SLSA + SBOM SPDX atestados; cosign keyless verificável.
- [x] Regras/targets maliciosos (argument injection) recusados; segredos redigidos.
5. V2 — Gate de política, cache persistente e profiles (v1.0.0) · Planejado¶
Objetivos¶
Levar o Quorum de "consenso + relatório" para "consenso + política sobre os findings normalizados", mantendo o modelo CLI/Docker. Reduzir custo de rede do alias e simplificar a configuração recorrente em CI.
Nota (o que já existe vs. o que falta): o adapter
conftestjá entrega policy-as-code como scanner — ele roda o seu Rego contra os arquivos (IaC/manifests) e produz findings MISCONFIG. O que a V2 propõe é diferente e complementar: um gate Rego sobre os findings já normalizados e correlacionados do Quorum (ex.: "bloquear qualquer VULN ≥ HIGH sem baseline aprovada", "exigirconfidence ≥ 0.8para auto-aprovar exceção"). Esse gate ainda não existe.
Entregáveis propostos¶
- Gate de política sobre findings normalizados (OPA/Conftest embutido).
- Avaliar o modelo canônico do Quorum contra políticas Rego declarativas,
como gate adicional complementar a
--fail-on/--min-severity; resultado refletido no exit code (1= gate de política disparou). - Empacotado de forma que rode offline (sem servidor OPA externo).
- Cache persistente de alias.
- Hoje os aliases vão para
~/.cache/quorum/aliases.json(local,0600, comschemaVersion). Proposta: formato compartilhável entre runs/CI (artefato cacheável), com TTL e invalidação; mantém degradação graciosa e respeito a--offline. - Profiles de imagem/scan.
- Presets nomeados (ex.:
sca-fast,iac-strict,k8s-posture) combinando--scanners,--min-severity,--fail-on, política e crosswalk, para evitar linhas de comando longas e divergência entre pipelines.
Critérios de saída¶
- [ ] Política Rego de exemplo (sobre findings normalizados) roda offline e altera o exit code de forma determinística.
- [ ] Cache de alias persistido e reusado entre dois runs reduz chamadas OSV observáveis (mensurável nos logs).
- [ ] Pelo menos 3 profiles documentados, cada um reproduzível por uma flag.
- [ ] Sem regressão de contrato: todos os contract tests verdes.
- [ ] Documentação de cada recurso novo com exemplo executável em CI.
Nota de escopo (V2): OPA/Conftest aqui é uma biblioteca/binário avaliado localmente dentro do pipeline CLI — não introduz API REST, daemon nem servidor de políticas. Se uma "Proposta futura" exigir servidor, ela cai em Fora de escopo abaixo.
6. V3 — Identidade per-resource, crosswalk++ e novos engines (v1.x) · Planejado¶
Objetivos¶
Atacar a principal limitação conhecida de correlação MISCONFIG e ampliar cobertura de controles e engines.
Entregáveis propostos¶
- Identidade per-resource em MISCONFIG.
- Limitação atual (ver README §Known limitations):
dois recursos distintos do mesmo tipo com o mesmo controle no mesmo
arquivo podem over-merge. Proposta: identidade de recurso normalizada
(ex.: endereço Terraform
aws_s3_bucket.data) para correlacionar com precisão sem violarfalse split > false merge. - Ampliação do crosswalk.
- Mais controles/clouds além do já coberto (S3/IAM/EBS/SG/RDS/KMS/CloudTrail/ VPC-flow-logs, Azure Storage/Key Vault, GCP bucket/firewall/SQL); validação contra catálogos oficiais AVD/CIS; possível ferramenta de lint do crosswalk.
- Novos engines.
- Avaliação de outros engines OSS conforme demanda (ex.: Docker Scout, Clair,
OpenSCAP — hoje deferidos no README por peso de arquitetura/login),
sempre via interface
Adapter+ contract test.
Critérios de saída¶
- [ ] Caso de teste com dois recursos do mesmo tipo/controle/arquivo deixa de over-merge e produz dois findings corretos.
- [ ] Crosswalk lintado contra catálogos oficiais; cobertura documentada.
- [ ] Cada novo engine registrado em
list-scannerscom contract test contra fixture real e mapeado na família de engines correta.
7. Longo prazo — Módulo de runtime (v2.x+) · Exploratório¶
Objetivos¶
Estender a tese de consenso para sinais de runtime, sem comprometer a natureza CLI/batch do Quorum atual.
Entregáveis propostos¶
- Módulo de runtime separado consumindo streams de Falco/Tetragon (modelo de eventos de execução), entregue como componente distinto do orquestrador de scan estático — para não transformar o Quorum em um daemon de propósito geral.
Critérios de saída¶
- [ ] Modelo de stream especificado e isolado do
model.Findingestático (ou explicitamente versionado/separado). - [ ] Prova de conceito que correlaciona um achado estático com um evento de runtime sem acoplar o caminho de scan existente.
Esta fase é exploratória: sujeita a redefinição/cancelamento. Não há compromisso de entrega.
8. Fora de escopo (N/A) — e por quê¶
Itens frequentemente esperados em roadmaps de produtos de segurança que o Quorum não persegue, por decisão de arquitetura:
| Item | Status | Justificativa |
|---|---|---|
| Frontend web / dashboard | N/A | Quorum é CLI/Docker; relatórios (SARIF/JSON/XML) são consumidos por ferramentas existentes (GitHub code scanning, DefectDojo). |
| Banco de dados relacional | N/A | Estado é efêmero por run; persistência limita-se a cache de alias em arquivo. |
| API REST / daemon de runtime do scanner | N/A | Modelo é batch em CI/CD com gate por exit code; um servidor mudaria o modelo de confiança. |
| Autenticação / contas de usuário | N/A | Sem multi-tenant; identidade é a do pipeline. Verificação de cadeia usa OIDC/cosign, não login. |
| IA / LLM no núcleo determinístico | N/A | Consenso é determinístico e auditável; um LLM introduziria não-determinismo no correlationKey/confidence. A camada consultiva opt-in (--advice, §4.5) é apenas de apresentação e nunca toca o núcleo — não é IA de núcleo. |
| Plataforma SaaS/cloud gerenciada | N/A | Distribuição é imagem Docker + binário nativo; o consumidor opera o pipeline. |
Proposta futura (claramente separada): se houver demanda, um runtime module (Longo prazo) e/ou integrações de exportação (ex.: webhook para sistemas de tracking) poderiam ser estudados como componentes opcionais e separados, sem reverter a decisão de não ter daemon/SaaS no núcleo. A telemetria já existente (
--metrics, formato texto Prometheus) é arquivo textfile, não um servidor — coerente com o modelo batch. A camada consultiva, da mesma forma, permanece opt-in e local-first, e pode ser removida sem alterar um único byte do núcleo.
9. Como uma fase "fecha" (definição de pronto)¶
Independentemente da fase, um item só é considerado entregue quando:
- [ ] Código segue a interface
Adapter(quando aplicável) e o modelo canônico. - [ ] Há contract test contra fixture real do output da ferramenta
(
internal/adapter/testdata). - [ ]
make test,make vet,make buildverdes; CI (ci.yml, com cobertura de testes) e e2e (e2e.yml) passam. - [ ] Invariante false split > false merge preservado (sem fusões
especulativas;
unmappedquando não houver mapeamento). - [ ] Status por scanner e supressões de baseline permanecem explícitos ("0 findings is not proof of safety").
- [ ] Para itens da camada consultiva: sem
--advicea saída é byte-idêntica; anexos de IA são rotulados"AI-generated, advisory only"; osevalseminternal/evalspermanecem verdes no CI. - [ ] Documentação atualizada (publicada no GitHub Pages) e, quando aplicável,
exemplo de CI em
examples/ci/. - [ ] Release apenas por tag SemVer
v[0-9]+.[0-9]+.[0-9]+, com imagens/binários assinados (cosign keyless) e atestações SLSA build-provenance + SBOM SPDX verificadas (incluindo o knowledge pack + crosswalk).
10. Rastreabilidade README ↔ fases¶
Mapeamento direto da tabela do README §Roadmap para as fases deste documento:
| Linha do README | Fase aqui | Observação de fidelidade |
|---|---|---|
MVP — Trivy + Grype, vulnId+purl, SARIF+JSON, :full |
MVP | Igual. |
| v0.2 — Checkov + KICS, crosswalk, category fallback | V1 / v0.2 | Concluído. |
| v0.3 — Kubescape + Polaris, Dockle, XML | V1 / v0.3 + Expansão | Kubescape/Dockle/XML na v0.3; Polaris entregue na Expansão (adapter presente). |
| Scanner evaluation — Polaris, kube-score, Terrascan, tfsec, Conftest, Regula | Expansão | Todos Added (adapters presentes); consenso multi-cloud/k8s. |
| Recomendações com IA / RAG OWASP / auto-remediação | Expansão (v0.8.x) | Entregue como a camada consultiva opt-in (--advice, Fases 0-3); núcleo segue sem IA. |
| v1.0 — OPA/Conftest, cache persistente de alias, profiles | V2 | Conftest-como-scanner já existe; gate Rego sobre findings normalizados ainda planejado. |
| future — runtime Falco/Tetragon | Longo prazo | Exploratório, módulo separado. |
Premissas¶
- Versão de referência: o estado atual é v0.8.3 (revisão 2026-07-04). O
número vem do enunciado/README; o literal em
cmd/quorum/root.goéversion = "0.1.0", um default de build sobrescrito no release via-ldflags "-X main.version=…". Ogit describeretorna a tag móvelv0(avançada automaticamente portag-major.yml), usada para pin do GitHub Action. - Camada consultiva: tratada como implementada —
--advicee os pacotesinternal/enrich(Fase 0),internal/rag(Fase 2) einternal/advisor(Fases 1/3) existem, com o corpus pinado por digest emknowledge/owasp/e o harnessinternal/evalsno CI. É opt-in e desligada por padrão, apenas de apresentação, e nunca toca o núcleo determinístico; sem--advicea saída é byte-idêntica. Isso supera a premissa anterior de "sem IA até a v1", mantendo o enquadramento honesto: o núcleo não tem IA. - Polaris: tratado como implementado — existe
internal/adapter/polaris.goe a família"polaris": "k8s"eminternal/consensus/consensus.go, com mapeamento nocrosswalk/k8s.yaml. Isso corrige a premissa anterior (v0.2.3), quando Polaris ainda era só referência sem adapter. - Subfases v0.3 "concluídas": os adapters
kubescape/docklee a saída XML existem no código e passam contract tests; o gap de Polaris foi fechado na Expansão, então v0.3 é marcada como Concluído (não mais "em andamento"). - Policy-as-code: distinguido em dois níveis — (a)
conftestjá roda o seu Rego contra arquivos e produz findings MISCONFIG (entregue na Expansão); (b) o gate Rego sobre os findings normalizados/correlacionados do Quorum segue planejado (V2). São recursos distintos e complementares. - Crosswalk: todos os mapeamentos são derivados de output real dos
scanners (
false split > false merge); antes de produção, valide contra os catálogos oficiais AVD/CIS. O knowledge pack + crosswalk agora carregam uma atestação SLSA por release. - Datas: nenhuma data de calendário é compromisso; os blocos do Gantt são sequenciais e indicativos. O único gate real de release é uma tag SemVer.
- Conteúdo das fases V2/V3/Longo prazo: descrito como proposta derivada da linha "v1.0/future" do README; detalhes de implementação (formato de cache, esquema de políticas, nomes de profiles) são ilustrativos e sujeitos a design.
- Itens "Fora de escopo": derivados explicitamente dos princípios declarados
(CLI/Docker only; sem web/DB/REST/auth, sem IA no núcleo); não são
funcionalidades removidas, e sim categorias nunca pretendidas para o núcleo. A
telemetria
--metricsé um arquivo texto Prometheus (não um servidor), coerente com o modelo batch, e a camada consultiva permanece opt-in e local-first.