Skip to content

[P0][CI] Recuperar validação local sem Actions pago e provar a main pós-beta.5 #316

Description

@wesleysimplicio

Parent: #315

Problema comprovado

Os runs CI #433/#435 e o run de release #4 falharam antes de executar os jobs porque a conta está bloqueada por billing. Assim, a existência de .github/workflows/ci.yml não prova fmt, coverage, clippy, build, tests, cargo-deny, gitleaks, gates binários ou E2E.

Esta issue não tenta corrigir billing por código. Ela cria uma fonte de verdade local/container, reproduzível e gratuita, que continua funcionando quando GitHub Actions está indisponível.

Objetivo

Entregar um comando único, fail-fast e reproduzível que valide o SHA atual da main, gere evidência durável e possa depois ser chamado por qualquer runner, sem depender de secrets, LLM local ou GitHub Actions pago.

Caminho mais rápido

  1. Reusar os scripts e comandos já existentes; não criar outro framework de CI.
  2. Separar fast (escopo Simplicio alterado) de deep (workspace herdado).
  3. Rodar primeiro preflight e gates baratos; interromper antes de compilar se ambiente/contrato estiver inválido.
  4. Persistir um receipt único com hashes de todos os relatórios.
  5. Só depois religar o mesmo comando a Actions/self-hosted runner.

Implementação passo a passo

  1. Criar scripts/validate_local.py ou equivalente com contratos de saída versionados.
  2. Registrar SHA, dirty state, SO/arch, Rust/Python, protoc/DotSlash/rg, limites de CPU/RAM e versões do ecossistema.
  3. Implementar perfis:
    • fast: fmt, scanners, crates Code-owned, testes focados, docs e package smoke;
    • deep: clippy/check/test workspace, coverage, cargo-deny e matrizes cross-platform;
    • release: deep + build release + instalado + checksum/SBOM/manifest.
  4. Executar os gates na ordem de menor custo: preflight → formato/policy → testes Python → Rust focado → integração → workspace profundo.
  5. Não baixar ferramentas silenciosamente. Reportar dependência ausente com código estável e comando de instalação.
  6. Gerar validation-summary.md e receipt HBP; JSON somente como export explícito, nunca storage interno.
  7. Redigir environment/secrets e impor tamanho máximo de logs.
  8. Criar container/Dev Container opcional com toolchain pinada.
  9. Adicionar teste que simula job não iniciado e confirma que isso nunca vira PASS.
  10. Documentar execução em Linux/macOS/Windows; quando não observável, retornar null + motivo.
  11. Após desbloqueio administrativo, fazer workflow chamar exatamente o mesmo entrypoint.
  12. Reexecutar contra 39ebdd93872b8fae0dc412641acc94c1c7bdc980 ou a main mais nova declarada e anexar evidência.

Testes obrigatórios

  • checkout limpo e sujo;
  • dependência ausente/incompatível;
  • gate com sucesso, falha e timeout;
  • cancelamento e reexecução;
  • logs truncados;
  • segredo-shaped fixture;
  • receipt adulterado;
  • execução repetida com resultados/hashes determinísticos onde aplicável;
  • perfil fast não executa workspace profundo;
  • perfil release recusa publicar se qualquer pré-requisito estiver UNKNOWN ou FAIL.

Evidência para fechar

PR/commit, comandos completos, artifacts/receipts, hashes, logs de um caminho feliz e duas falhas, tempos fast/deep/release, lista de gates e riscos residuais.

Execução

  • Implementar o objetivo descrito.
  • Fazer a implantação aplicável.
  • Executar e registrar os testes.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    Status
    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions