# P0.S5 — telemetria/log, documentação, `make check` 2× e E2E

| Campo | Valor |
|---|---|
| **Fase** | P0 — Fundação do painel: configurações tipadas e primitivas |
| **Issue** | P0.S5 — fechamento operacional da fase |
| **`kd` task** | `task_018e0620` (épico `epic_00j5mhqf`) |
| **Âncora** | `wiki/implementation-phases/P0-fundacao-painel.md` |
| **Status da revisão** | ✅ revisado |

## O que foi implementado

- Telemetria da escrita de settings confirmada no teste: span `core.settings.write` com
  `settings.section` e `settings.keys`, sem valores.
- `log_event('core.settings.updated')` coberto por `Log::spy()`: contexto com `module`, `action`,
  `section` e `keys`; o nome do campo **não** entra no log.
- Auditoria `core.settings.updated` com before/after coberta; a redação de segredo é unitária (`SecretPayload`) porque nenhuma seção declara `secret` no P0.
- Documentação de fase: status em `implementado (em revisão)`, DoD marcado e `INVENTARIO.md` §3.3
  com a capacidade de configurações tipadas e a evidência.
- `README.md` do programa: P0 em `em revisão`; P1–P12 seguem `planejado`.
- Sem mudança de contrato, schema, rota ou tabela nesta fatia.

## Arquivos para revisar

- `src/core/Internal/Settings/Test/DatabaseSettingsTest.php`
- `wiki/implementation-phases/P0-fundacao-painel.md`
- `wiki/implementation-phases/INVENTARIO.md`
- `wiki/implementation-phases/README.md`
- `_to_revision/P0-S5.md`

## Checklist D1–D14 aplicável

- [x] D1 — PHP 8.4: sem código novo de domínio; teste mantém `strict_types` e DI.
- [x] D2 — Laravel: sem provider/rota/config novo; `Log::spy()` nativo.
- [x] D3 — determinismo: nenhum relógio/aleatoriedade no teste; ordem do contexto fixa.
- [x] D4 — fronteiras: sem import novo entre `core`/`services`/`layout`/`modules`.
- [x] D5 — dependências: nenhuma adicionada; sem CDN.
- [x] D6 — CSS: não aplicável (sem UI/CSS nesta fatia).
- [x] D7 — HTML/a11y: não aplicável (sem markup novo).
- [x] D8 — i18n: nenhuma string visível nova.
- [x] D9 — grep-friendly: sem artefato/token novo.
- [x] D10 — dados: sem migration/schema/tabela nesta fatia.
- [x] D11 — segurança: log sem valores; auditoria sem PII/segredo.
- [x] D12 — observabilidade: span `core.settings.write`, log `core.settings.updated` e auditoria cobertos.
- [x] D13 — testes: `DatabaseSettingsTest` 11/43; `make check` 2× e `E2E=1` verdes.
- [x] D14 — docs: fase, DoD, `INVENTARIO.md` e `README.md` atualizados; revisão humana pendente.

## Evidência

| Gate | Resultado |
|---|---|
| `DatabaseSettingsTest` | 12 testes / 46 assertions (span + log + auditoria) |
| `make check` | 2× verde (107,59 s / 96,83 s) |
| `make check E2E=1` | verde (167,88 s); 113 passed, 1 skipped |
| Cobertura | 91,51% |
| PHPStan | 0 erros |

## Notas da revisão

| Data | Revisor | Resultado | Observações |
|---|---|---|---|
| 2026-10-24 | agente revisor P0-S5 | ✅ | Revisão adequada após contestação. **A retirado:** `core.settings.write` × `core.settings.updated` segue ADR-024; spec 06 corrigida para a exceção de Core. **B mitigado:** teste renomeado; caminho secreto fica para P1/P13. **C corrigido:** D1–D14 renumerado. **D corrigido:** contexto do log por igualdade exata. **E aberto:** `epic.results_in` omite `task_004op123` (limitação do `kd`; registrar). |
