## Goal

Adicionar nome acessível ao campo de busca global do header (overlay de busca), presente em todas as páginas públicas do portal.

**Reprodução (evidência coletada em 2026-08-17):**
- Todas as páginas contêm:
  ```html
  <form method="get" action="http://localhost:10011/busca">
    <input type="search" name="q" class="main-search-input" placeholder="O que você procura?" required>
  </form>
  ```
- O input não possui `<label>`, nem `id`, nem `aria-label`. O único nome acessível seria o `placeholder`, que **não é um nome acessível válido** (falha WCAG 4.1.2 "Name, Role, Value" e 1.3.1 "Info and Relationships").
- Localização no template: `V2/layouts/portal/header/header-search-area.blade.php` (overlay de busca) — confirmar via grep se há outros pontos com `main-search-input` (ex.: `V2/layouts/portal/.../search-trigger`).

**Solução esperada:**
- Adicionar `aria-label="Buscar no portal"` ao input `main-search-input` (mínimo) e/ou um `<label for="...">` com classe `visually-hidden` vinculado por `id`.
- Manter o `placeholder` como dica visual (pode permanecer).
- Padrão do projeto já usado no filtro de notícias: `label class="visually-hidden" for="news-search"` + `aria-label` no input — seguir o mesmo padrão para consistência.
- Verificar se há instâncias duplicadas do overlay (desktop/mobile) para aplicar em todas (partials reutilizados).

## Non-Goal

- Não alterar o comportamento JS do overlay (abrir/fechar busca).
- Não alterar a página `/busca` (resultados) — apenas o input do header.
- Não renomear o parâmetro `q`.
- Sem mudanças de layout visual.

## Constraints

PHP 7.4 | PHPUnit ~6.0. Nunca commitar. Model: UUID, SoftDeletes.
Use o X-CMS-AI-Token do ai_acess definido no .env para ter livre acesso ao CMS a nível de UI/UX
SniffCSS habilitado em MCP e Host para consulta da página real
Docker only. execute via docker compose exec app [command]
Atenção a partiais renderizados mais de uma vez (não duplicar `@push`/ids).

## Success Criteria

1. SniffCSS (com `--ax-tree`) mostra o input `main-search-input` com `aria.name` preenchido ("Buscar no portal") nas páginas capturadas (ex.: `/noticias`, `/`).
2. Nenhum duplicado de `id` introduzido (overlay único) — validar no HTML renderizado.
3. O overlay de busca continua abrindo/fechando (comportamento preservado).
4. Suíte V2 Unit não regride (0 novas falhas).
5. (Opcional) Teste feature assert `aria-label` no HTML do portal.

================================================================================

# RESULT-LOG

```
Status: Concluído
Date: 2026-08-17
Sub-tasks: 3/3 (fix seeder, fix conteúdo vivo no banco, testes + AX tree)
Files modified: 2 (V2/Seeds/SleHeaderSeeder.php + conteúdo vivo v2_structural_portal_contents)
Seeds closed: 1/1 (sucesu-1650)
Outcome: Input da busca global do header (overlay SLE) agora tem nome acessível.
Notes:
  - O input vive no conteúdo SLE do header (v2_structural_portal_contents, area=header),
    gerado pelo SleHeaderSeeder. Corrigido no SEEDER (fonte p/ re-seed) E no conteúdo
    vivo do banco (update direto na linha do header).
  - Fix aplicado: id="portal-search-overlay" + aria-label="Buscar no portal" no input
    + <label for="portal-search-overlay" class="visually-hidden">Buscar no portal</label>
    (padrão já usado no fallback header-search-area.blade.php e no filtro de notícias).
  - AX tree (sniffCSS, overlay aberto via --click a.search-trigger): searchbox
    name='Buscar no portal' (antes: input sem nome acessível).
  - Sem mudança visual (label visually-hidden). Screenshot AFTER (overlay aberto) em
    sniff-report/evidence/sucesu-1650/after/. Baseline (DOM sem aria-label) em
    sniff-report/captures/noticias.jsonl + plan/11.
  - Testes: tests/Feature/V2/Services/Search/HeaderSearchInputA11yTest.php
    (2 testes, 6 asserts) — aria-label presente + id único.
```

================================================================================

# AI-AREA

```
1. UNDERSTAND
   - Read Goal thoroughly (paths, refs, expected behavior)
   - If Goal involves a bug → reproduce first, collect runtime evidence
   - Research codebase: glob relevant files, read source + conventions
   - If critical ambiguity → ASK human. Minor → ASSUME + document.

2. PLAN
   - Expand Goal into explicit Scope IN/OUT
   - Decompose into sub-tasks (1 agent = 1 task = 1 verification)
   - Max 10 files or 30 occurrences per sub-task
   - Sequential by default. Parallel only if independent.
   - Register: sd create → sd plan create → sd plan adopt → sd sync

3. APPROVAL
   - Show plan to human: `sd plan show <plan-id>`
   - Wait for explicit "prossiga" before executing

4. EXECUTE
   - For each sub-task sequentially:
     a. Delegate to coder via task tool
     b. Verify against Success Criteria
     c. IF implementation involves UI, verify with SniffCSS (MCP || CLI command)
     d. IF fail any verify → correction sub-task, repeat 4a
     e. sd close <seed-id> --reason "[result]"

5. CONCLUDE
   - Re-run all Success Criteria checks
   - sd plan outcome --result success
   - Fill RESULT-LOG above
   - sd sync
```