# História 01 — Explorar o portal

- **Spec:** `tests/01-explorar-portal.spec.ts`
- **Camadas:** E2E (Playwright + axe) · sniffCSS (check `a11y` do `make check`)
- **Dono:** Portal (shell + módulos `Portal/Home` e `Publicacoes/Noticias`)
- **Status:** ativa

## Jornada
Visitante anônimo abre a home, abre a listagem de notícias, abre o detalhe de uma notícia
e cai numa URL inexistente.

## Critérios de aceite
1. A home responde **200**, com **exatamente um `<h1>`** e a estrutura do shell
   (skip links, `header.site-header`, `main#main-content[tabindex="-1"]`, `footer#site-footer`).
2. A listagem `/noticias` responde **200** com a mesma estrutura.
3. O detalhe `/noticias/{slug}` responde **200** para conteúdo publicado
   (slug determinístico vindo de `php artisan db:seed`) e traz o conteúdo no `<main>`.
4. URL inexistente responde **404** — **dentro do shell**, com um `<h1>` e caminho de volta
   ao início (nunca página branca nem stack trace).
5. Axe sem violações WCAG A/AA nas quatro telas.
6. `sniff check --rules --uniform` sem `fail` na home (check `a11y` do `make check`).

## Pré-condição
`php artisan db:seed` (seeder idempotente de notícias demonstrativas — ADR-017).

## Fora de escopo (dono · fase)
- **Busca com resultados**: o service `Search` está no backlog; `/busca` ainda não existe.
  O formulário do header é estrutural (label, submit, teclado) — ver história 02.
- **Paginação/filtros da listagem**: F4.I1 (CMS) publica conteúdo real.

## Evidência
`make check E2E=1` verde (e2e Playwright + a11y sniffCSS).
