# Contrato De Evidencias Do Artefato NVR

Este arquivo e intencionalmente sanitizado. Ele nao deve conter segredos de
runtime, tokens reais, dumps de banco, hostnames privados, dados de cliente ou
logs brutos de servicos.

O SHA256 final de um ZIP nao pode ser embutido dentro do proprio ZIP sem mudar
o digest do arquivo. Por isso, `scripts/package.sh` grava a identidade final do
artefato como arquivos auxiliares ao lado do ZIP gerado:

- `<artifact>.sha256`
- `<artifact>.evidence.json`

O arquivo auxiliar JSON e a ancora de auditoria do artefato testado. Ele contem somente
metadados sanitizados:

- nome do arquivo do artefato
- SHA256 final do ZIP
- tamanho final do ZIP em bytes
- diretorio raiz do payload
- SHA256 de `BUILD_MANIFEST.sha256`
- SHA256 deste contrato de evidencias
- nomes dos comandos verificadores

Scripts de verificacao devem comparar o ZIP testado com o arquivo auxiliar ou com
`EXPECTED_ZIP_SHA256` explicito. Se o hash divergir, o artefato testado nao e o
mesmo artefato auditado ou homologado.

Conjunto minimo de evidencias de producao:

- run `bash scripts/verify-final-package.sh <artifact>.zip`
- run `bash scripts/verify-final-package-real-stack.sh <artifact>.zip`
- preservar `<artifact>.sha256`
- preservar `<artifact>.evidence.json`
- preservar logs sanitizados da rodada de prova

Modo de pacote final:

- coletar evidencias reais com `bash scripts/collect-final-evidence.sh`
- passar a saida sanitizada ao empacotamento com
  `FINAL_PACKAGE_MODE=1 FINAL_EVIDENCE_DIR=<collection>/FINAL_EVIDENCE bash scripts/package.sh <artifact>.zip`
- o ZIP deve conter `FINAL_EVIDENCE/` na raiz do payload
- `FINAL_EVIDENCE/` deve conter `SUMMARY.md`, `MANIFEST.json` e logs de comandos sanitizados
- logs brutos, arquivos `.env`, bancos, arquivos compactados, chaves privadas, cookies, headers de autorizacao e tokens devem ficar fora do ZIP

O arquivo auxiliar em modo final inclui:

- `final_package_mode: true`
- `final_evidence_path: FINAL_EVIDENCE`
- `final_evidence_tree_sha256`
- `final_evidence_manifest_sha256`

Os scripts de verificacao reprovam o modo final quando `FINAL_EVIDENCE/` esta
ausente ou quando o hash da arvore nao bate com o arquivo auxiliar.

Checklist de coleta de evidencias:

- testes: `bash scripts/test.sh`, `bash scripts/test-regression.sh`, checks de pacote
- Docker: `docker compose build --no-cache`, `up -d`, `ps`, `exec php php -m`, verificacoes de saude
- logs de instalacao em VM limpa
- logs de ISO/autoinstall
- logs de reinicializacao e pos-reinicializacao
- `php -m`
- `systemctl is-enabled`, `is-active` e `status --no-pager --full` das unidades NVR
- status/headers HTTP de saude, lancamento, gateway, internos bloqueados e assets

Pasta limpa de entrega:

- preparar somente a pasta de entrega com `bash scripts/prepare-clean-delivery-dir.sh prepare <delivery-dir>`
- gerar o ZIP final dentro dessa pasta
- validar a pasta com `bash scripts/prepare-clean-delivery-dir.sh assert <delivery-dir> <delivery-dir>/<artifact>.zip`
- a pasta deve conter exatamente um ZIP mais os arquivos auxiliares `.sha256` e `.evidence.json`
- nunca limpar a raiz do projeto, `public_html` ou pastas fonte de evidencia como parte da limpeza de entrega

Nao cole segredos neste diretorio. Use hashes, linhas de status, trechos
redigidos e transcricoes de comandos com valores sensiveis removidos.
