Skip to content

[feature] 1.8.0-beta: remediation manifest JSON export (--export-remediation-manifest) #649

Description

@FabioLeitao

U: U1 — primeiro deliverable concreto da parceria Enterprise — sem manifest, a POC de proteção/stealthização não pode ser validada


Context

PLAN_REMEDIATION_INTERFACE.md phase 1 + parceria Comercial (Fornecedor de tecnologia).

Data Boar é discovery + evidence. Remediação é plugin third-party (Enterprise tier). A ponte é um JSON manifest estruturado que o plugin lê — sem re-scan completo, sem código do plugin no core. (remeter a docs privados sobre possíveis parcerias comerciais)

Goal

Adicionar flag --export-remediation-manifest <output.json> ao main.py (mesmo padrão de --export-dsar e --export-audit-trail). Produz mapa legível por máquina de onde o PII foi encontrado e qual tipo, para o plugin de remediação saber exatamente onde aplicar proteção/stealthização forte, masking ou encriptação.

Manifest schema (v1 — mínimo para POC)

{
  "schema_version": "1.0",
  "generator": "data-boar",
  "data_boar_version": "1.8.0-beta",
  "session_id": "sess_abc123",
  "exported_at": "2026-05-21T22:00:00-03:00",
  "remediation_targets": [
    {
      "finding_id": "find_001",
      "source_type": "postgresql",
      "connection_ref": "primary_db",
      "schema": "public",
      "table": "customers",
      "column": "cpf",
      "pii_type": "cpf_br",
      "suggested_profile": "TGCPF",
      "confidence": 0.97,
      "occurrence_count_estimated": 15000
    }
  ]
}

Regras de design:

  • connection_ref → referencia chave do config do operador, nunca credenciais
  • suggested_profile → derivado do mapeamento canônico pii_type → profile (issue companion)
  • Sem PII raw no manifest — arquivo seguro para compartilhar com operador do plugin
  • occurrence_count_estimated → do sampling, não full count

Acceptance criteria

  • Flag --export-remediation-manifest <file> adicionada ao main.py (argparse, mesmo padrão de --export-dsar)
  • Requer --session para identificar qual sessão de scan exportar
  • Output é JSON válido com schema acima
  • connection_ref populado com nome do connector no config (sem credenciais)
  • suggested_profile populado do mapeamento canônico pii_type → profile (ver issue companion)
  • Sem PII raw no manifest (samples excluídos ou hasheados se presentes)
  • tests/test_remediation_manifest.py cobre: export válido, sessão inexistente, findings vazios, multi-target
  • Atualizar PLAN_REMEDIATION_INTERFACE.md Phase 1 status para 🔄
  • python scripts/plans_hub_sync.py --write executado após doc update

Notes para Cursor

  • Usar --export-dsar como referência estrutural de implementação
  • Campo schema_version habilita evolução futura sem quebrar o parser do plugin
  • finding_id deve ser estável entre re-scans do mesmo source (derivar de hash de session_id + table + column + pii_type)
  • Gate behind license check Enterprise tier (consistente com outros features Enterprise)
  • Dev form: uv run python main.py --config config.yaml --session <id> --export-remediation-manifest remediation.json

Related

  • docs/plans/PLAN_REMEDIATION_INTERFACE.md — plano ativo
  • docs/use-cases/USE_CASE_SCAN_AND_REMEDIATE.md — pipeline context
  • Issues companion: [docs] pii_type→profile mapping, [decision] plugin config ADR

NÃO INICIAR ANTES DE #606 FECHADAcore/plugins/ e RemediationPlugin Protocol devem existir antes deste issue.

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Medium — important, next sprintdomain:LGPDFinding or feature maps to LGPDenhancementNew feature or requesttier:enterpriseFeature belongs to Enterprise licensing tier

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions