# QA — aderência do corpus ao `public-v7` (ADR-001/004, PHP 8.4, Laravel 12)

Data: 2026-10-21. Escopo: `sucesu_analise/` (129 documentos). Referência:
`public-v7/` (Concordia), em especial `wiki/adr/ADR-001`, `ADR-004`, `ADR-009`,
`ADR-013`, `ADR-014`, `ADR-020`, `ADR-022`, `ADR-028`, `ADR-038`, `ADR-040`, `ADR-041`,
`ADR-042` e as skills `php-84-correct`/`laravel-12`.

> **Atualização 2026-10-21:** PA-07 está superado. O ADR-042 vigente proíbe ETL e
> `legacy_mapping`; “Modo A” não é uma opção válida sem emenda formal do ADR. Ver
> [`alignment-public-v7.md`](alignment-public-v7.md).

## 1. Veredito

O corpus estava correto como **engenharia reversa do V2**, mas faltava uma decisão de
destino. Sem ela, detalhes internos do legado (Bootstrap/jQuery, Sentinel, nonce por
request, `HtmlMinify`, `v2_*`, PHP 7.4) podiam ser lidos como requisitos. A decisão foi
registrada em `09_reimplementacao/pilha-alvo-public-v7.md`; nenhum fato do legado foi
removido.

Achados materiais:

| ID | Achado | Tipo | Ação |
|---|---|---|---|
| PA-01 | R-19 (“decidir pilha-alvo”) e `LG-REIMPL-11` estavam abertos | lacuna | resolvidos: PHP 8.4/Laravel 12/PG 18/PHPUnit 13 |
| PA-02 | UI documentada em Bootstrap/jQuery/AdminLTE, sem dizer o que substituir | risco de cópia | alvo Tailwind 4/daisyUI 5/Lucide; DOM/estado preservados |
| PA-03 | Editor com HTML livre e blocos especiais | segurança/escopo | ADR-028: AST+parser mantidos; HTML livre e blocos especiais descartados |
| PA-04 | CSP por nonce + `unsafe-inline` + minify | conflito com cache/ETag | alvo CSP estática, sem minify, ETag/304 |
| PA-05 | “WCAG AAA” declarado sem auditoria | alegação não verificada | alvo eMAG 3.1 + WCAG 2.2 AA como gate |
| PA-06 | Prefixo `v2_` e nomes de tabela tratados como schema | conflito com token canônico | mapa `v2_* → token`; URL pública preservada |
| PA-07 | ETL M0–M9 como único caminho de migração | decisão de produto implícita | Modo A (ETL) × Modo B (curadoria manual) explícitos |
| PA-08 | `LG-REIMPL-12` (sanitização) aberta | aceite de R-16 | resolvida por AST/jsonb + escape no render |

## 2. O que foi alterado

- Novo: `09_reimplementacao/pilha-alvo-public-v7.md` (constituição, layout, token,
  substituições, fronteira de fidelidade, conflitos, modos de migração, gates).
- `README.md`: seção “Pilha-alvo”, estrutura e próximo passo.
- `_contrato/TAXONOMIA.md`: regra “legado × alvo” (contrato externo × mecanismo interno).
- `09_reimplementacao/riscos.md`: R-19 resolvido; LG-REIMPL-11/12 fechadas.
- `09_reimplementacao/ordem-de-construcao.md`: E1 aponta para a pilha-alvo e usa schema
  canônico/`IdGen`, não “87 migrations equivalentes” literais.
- `09_reimplementacao/migracao-de-dados.md`: premissa de schema novo + Modo A/B.
- `01_arquitetura/{00,03,05,09,11}`: callouts “legado × alvo”.
- `04_ui/{01..05}`: callouts de UI e de acessibilidade (AA/eMAG).
- `03_servicos-ui/{content-rich-editor,landing-sections-editor}/spec.md`: alvo ADR-028 e
  remoção de jQuery/Bootstrap/Owl.
- `05_modulos/README.md`: acessibilidade declarada × alvo verificável.

## 3. O que deliberadamente não foi alterado

- Fatos do legado, citações, contagens e índices: continuam válidos.
- Nomes de tabelas/rotas nas specs: são **contrato histórico**; o mapa para o alvo está no
  documento novo (LG-ALVO-02).
- `_indices/*.csv`: nenhuma linha removida/renomeada; o índice descreve o V2.

## 4. Decisões ainda abertas

`LG-ALVO-01` (ETL × curadoria), `LG-ALVO-02` (nomes físicos), `LG-ALVO-03` (biblioteca de
planilhas), `LG-ALVO-04` (assinatura PDF), `LG-ALVO-05` (busca nativa × tabela própria),
`LG-ALVO-06` (AAA em telas específicas).

## 5. Verificação

```
coverage.py --docs --complete  -> 56/56 unidades, 930/930 arquivos, erros []
lint_docs.py --strict-citations -> 129 docs, 0 erros
merge_indices.py --check       -> Índices OK
git -C sucesu-cms status --porcelain -> vazio
```
