---
fonte: 01-canonicos/seed-componentes.md
versao_da_fonte: v1.67
secao: h48
titulo: "Histórico da seção §48 — Painel — grade, lentes, frescor, edição direta e mapa (não é regra)"
status: historico
vigente_desde: null
superseded_by: null
tipo_de_fatia: historico
secao_mae: 48
quando_consultar: "Histórico da §48 — NÃO é regra; leia só se a pergunta for sobre o passado (quando e por que a decisão mudou)."
em_uma_frase: null
nao_cobre: null
conceitos: null
vocabulario: null
sequencia: 97 de 172
bytes_do_corpo: 7348
md5_do_corpo: 17996cded3b2a3295e15ee5790ff35f3
gerado_por: 06-validacao/geradores/gen-camada-ia.py
nota: fatia GERADA — o corpo abaixo é byte a byte o trecho do canônico; edite o canônico, nunca esta fatia. Canônico inteiro em https://ds.seed.eng.br/01-canonicos/seed-componentes.md
---
### Histórico da seção

> **Base (3 rodadas encadeadas, 2026-08-12):** **R1 canon interno** — **DF6** (esta fronteira) e
> **DM10** (tempo real é produto); a **Régua de Espera** do Bloco 3 em três regimes compostos
> (ação · carga inicial · refresh sobre conteúdo, com delay de 1s e permanência mínima); os
> **dois regimes de live region** do §1.13 (discreto × contínuo, uma por componente); o §46
> inteiro (SH2 landmarks nomeados, SH5 ativo que sobrevive ao grayscale); o **DP12** (destino
> externo × interno); o §40 (densidade compacta medida em 33px); e a **§6b do
> `estudo-viver-de-ia.md`** — a auditoria que mostrou que a "camada de movimento" **não era
> lacuna de token** (existem 4 durações + 4 easings + `prefers-reduced-motion` desde os
> primitivos) e sim **de consumo**. **R2 mercado** — comutador de visualização no ClickUp, Notion
> e Linear: as lentes mostram os mesmos itens com filtro e layout próprios sobre a mesma fonte;
> trocar de lente não altera os itens; e a adequação da lente **depende do dado**. **R3 normas** —
> **WCAG 2.2.2 (nível A)**: informação que se atualiza sozinha, começa automaticamente e é
> apresentada em paralelo com outro conteúdo exige mecanismo para **pausar, parar, esconder ou
> controlar a frequência**; painel com intervalo escolhível (30s / 5min / manual) satisfaz pelo
> controle de frequência. **Base adicional da rodada 3 (edição direta):** **WCAG 2.2, SC 2.5.7
> Dragging Movements (AA)** — toda funcionalidade que usa arrasto tem de ter **caminho de
> ponteiro único** alternativo; e a documentação do ClickUp sobre gantt × timeline (ver PN3c).
> Consolidados aprovados pelo Rafael em 2026-08-12 e 2026-08-13.

*(Estado: **`estável`**. **Gate visual do Rafael APROVADO em 2026-08-13 sobre o preview v0.6** — o quarto e último gate do bloco, depois das quatro camadas automatizadas. Com ele o **bloco 6C FECHA** e a Fase 6 vai a 3/3 blocos concluídos (6A §46 Shell · 6B §47 Página institucional · 6C §48 Painel). **A promoção é dos contratos PN1–PN54; as decisões de marca S3, S4 e S6 seguem proposta — ver a ressalva no cabeçalho do §48 e a pendência PN-P1 em §48.9.** Este bloco é o primeiro do projeto validado em **cinco** camadas, e a quinta (`render-contraste.mjs`) nasceu de um defeito que as outras quatro não podiam ver.)*

**Rodada 1 — 2026-08-12, preview v0.1 → v0.2.** `suite-painel.mjs` **67 PASS · 0 FAIL** — *prova
de que as guardas são reais:* contra um preview com 5 defeitos deliberados (lente desabilitada em
vez de oculta, frequência sem opção manual, pílula pintada pelo sinal, `aria-valuemin` ausente,
base proporcional não declarada) ela **reprova em 6**; `render-painel.mjs` **17 PASS · 0 FAIL**;
`contraste-painel.py` **44 PASS · 0 FAIL** após as correções que a própria medição exigiu. **O
gate visual reprovou o v0.1 e produziu o PN3b** — as lentes "linha do tempo" e "calendário"
desenhavam listas. Preview a **v0.2**, suíte a **75**, render a **25**; contra a versão em que as
duas lentes voltam a ser lista, a suíte **reprova em 6**.

**Rodada 2 — 2026-08-13, preview v0.3.** Oito lentes (S1) e camada visual (PN21).
`suite-painel.mjs` v2 **107 PASS · 0 FAIL**; *prova:* contra um preview com **4 defeitos
plantados** — gantt sem dependências, véu a 35%, dois heros, `transition` com duração solta — ela
**reprova exatamente nos 4**. `render-painel.mjs` v2 **37 PASS · 0 FAIL**, medindo em Chrome real
3 conectores de dependência com extensão em pixels, 5 faixas de responsável com **sub-linhas de
sobreposição em tops distintos**, marca de capacidade no mesmo x, excedente com largura real,
contorno do mapa com bbox medido e 5 pontos dentro do viewBox. `contraste-painel.py` v2 **70 PASS
· 0 FAIL**, incluindo os pares do hero escuro (branco × `cinza-900` = 13,86; itálico
`turquesa-300` = 7,57; botão-solução = 5,11).

**Rodada 3 — 2026-08-13, preview v0.5 → v0.6. Cinco camadas, todas verdes, todas re-executadas
contra o artefato final:**

| Camada | Ferramenta | Placar | O que ela mede |
|---|---|---|---|
| `suite-painel.mjs` v4 | Node + jsdom | **133 PASS · 0 FAIL** | Estrutura, ARIA, tokens, classes fantasma, referências fantasma, higiene |
| `render-painel.mjs` v3 | Chrome headless | **37 PASS · 0 FAIL** | Colapso da grade em 3 larguras, geometria das oito lentes, frescor vivo |
| `render-edicao.mjs` v1 | Chrome headless | **142 PASS · 0 FAIL** | Os 33 contratos de edição direta, filtro, escala, mapa e criação — gesto por gesto, com pixels |
| `render-contraste.mjs` v1 | Chrome headless | **6 PASS · 0 FAIL** | Contraste de **composição** renderizada nos dois temas (368 textos medidos), não de par de token |
| `contraste-painel.py` v2 | Python | **70 PASS · 0 FAIL** | Pares declarados, calculados fora do navegador |

**Rodada 4 — 2026-08-13 (noite), preview v0.6 → v0.7 → v0.8. A inversão do hero.** Cinco
camadas re-executadas contra o v0.8 final: `suite-painel.mjs` **139 PASS · 0 FAIL** (era 133;
entram `NV-01`, `PN21-05c/05d/05e/05f/05g`) · `render-painel.mjs` **37 · 0** ·
`render-edicao.mjs` **142 · 0** · `render-contraste.mjs` **6 · 0** · `contraste-painel.py`
**78 · 0** (era 70; entram `PC-H5b`, `PC-H6`…`PC-H11`). **Nenhum artefato canônico foi
tocado** — cinco arquivos de preview e validação, e nenhum dos 40 HTML do repositório.

**Errata E-6C-01 (2026-08-13, achado na conferência de ambiente): título e selo declaravam
versões diferentes.** O `<title>` do preview dizia *"preview v0.3"* e o selo na tela dizia
*"preview v0.5"* — duas declarações de versão no mesmo arquivo, discordando. A guarda `HIG-03`
passava verde porque media apenas **presença** de versão no título. **O defeito importa porque o
título da aba é o primeiro sinal de arquivo fresco** — três relatos de *"não funciona"* nesta
sessão foram cache, e um título que mente cega justamente o instrumento usado para detectar cache.
*Correção estrutural, não sintomática:* a versão passa a ter **fonte única** (constante
`VERSAO_PREVIEW` no `gen-painel.py`), consumida por dois marcadores do molde
(`@@VERSAO_TITULO@@` no título, `@@VERSAO@@` no selo, este com data e hora) — divergir deixa de
ser possível por construção. Preview bumpado a **v0.6** porque o artefato corrigido tem de ser
distinguível do defeituoso **na tela**. *Guarda de regressão permanente, creditada ao Rafael:*
**`HIG-06` — título e selo declaram a MESMA versão**; contra um artefato com a versão do título
plantada de volta em v0.3, a suíte **reprova em exatamente 1**, e a mensagem nomeia os dois
valores.

> **Escrito em 2026-08-12.** Estes quatro blocos — KPI, ranking, progresso e timeline — são os
> **buracos vermelhos** que o censo de lacunas do `estudo-viver-de-ia.md` (§6) encontrou e que a
> **auditoria de impacto** do marco da Fase 5 (§6b daquele arquivo) classificou como **aditivos**:
> nenhum exige supersede em algo `estável`. O achado estrutural do censo foi que os buracos **não
> eram gráficos** — eram **componentes de dado que não são gráficos**, uma classe intermediária
> sem dono entre o Bloco 6 (dados) e o DG (gráficos core). É esta seção.

