---
fonte: 01-canonicos/seed-dataviz.md
versao_da_fonte: v0.22
secao: 05
titulo: "Fronteiras e pendências abertas"
sequencia: 10 de 12
bytes_do_corpo: 21043
md5_do_corpo: 75829f83613aee852584344ae3b7b0c7
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-dataviz.md
---
## 5. Fronteiras e pendências abertas

- ~~**Gêmeos `seed-tokens.json`/`seed-tokens.css`** a regenerar com a §3c~~ — **ENCERRADO
  em 2026-08-09**, na promoção do DT (o prazo declarado era exatamente este gate). Os dois
  gêmeos foram para **v1.4**. **Achado da execução:** o débito era MAIOR do que o §7.0
  dizia — os gêmeos declaravam `v1.1` e não continham **nenhum** token do pacote mobile
  v1.2 (M1–M3: breakpoints, tipografia fluida `clamp()`, `--seed-fs-field-touch`,
  safe-area). A defasagem era de **duas versões**, não uma. Detalhe no §7.0 do
  `seed-tokens.md` v1.4, com o supersede formal da redação antiga da pendência.
- ~~**DG** não escrito~~ — **ENCERRADO em 2026-08-09** (§4, 13 decisões, `estável`).
- ~~**DM** não escrito~~ — **`estável` desde 2026-08-11** (spec na v0.5 §4b, promoção pelo
  "aprovo" do Rafael sobre o lote de formalização). ~~**DP e DI** não escritos~~ — **o DI foi
  escrito na v0.9** (§4c) e **fechado por inteiro na v0.12**: DI-a e DI-b, ambos `estável` em
  2026-08-11 (o DI-b por prova impressa física — item próprio abaixo). ~~**Resta o DP**~~ — **o DP foi escrito na v0.14** (§4d, DP1–DP14) e é **`estável` desde
  2026-08-11**, por aprovação no gate visual sobre o preview v0.3. Ele abre seis pendências nominais próprias, **DP-P1 a
  DP-P6**, listadas no §4d.16; nenhuma bloqueia a spec e todas bloqueiam a promoção a
  `estável`. **Fechado o DP, a Fase 5 fecha e o marco é disparado** — e o marco tem um item
  obrigatório já decidido: a **auditoria de impacto das lacunas** do §6 do
  `estudo-viver-de-ia.md` (KPI/número-protagonista, ranking com barra embutida, progresso de
  conclusão, timeline e camada de movimento), para dizer, linha a linha, se cada lacuna é
  aditiva ou exige supersede em algo já `estável`.
- ~~**PREVIEWS APROVADOS AUSENTES DO DRIVE**~~ — **FECHADA em 2026-08-11** (pendência P6 do
  MANIFESTO, aberta e fechada no mesmo dia). O Rafael reanexou os dois arquivos da pasta local
  de downloads dos cards; a conferência bateu **2/2**: `seed-dataviz-graficos-preview.html`
  82.126 B `8d1930598b9d124d3807fc80f70b0fbf` e `seed-dataviz-monitoramento-preview.html`
  30.166 B `f146c84a3d140a892d1de87ee37d334c`. As suites foram re-executadas contra os
  artefatos reais (163·0 e 85·0·6). *Registro de método:* a leitura de volta pegou a ausência
  **antes** de qualquer perda — na §1 do MANIFESTO, a mesma classe de defeito só apareceu
  depois de um arquivo ter sido sobrescrito.

### Erratas abertas contra os previews aprovados (E1–E6, medidas em 2026-08-11)

Todas nasceram da execução das suites contra os artefatos REAIS, depois do gate visual. Nenhuma
altera decisão da spec — **onde o preview diverge da spec, quem manda é a spec**; a errata existe
para que a divergência não seja lida um dia como se fosse regra.

> **AS SEIS FORAM CORRIGIDAS em 2026-08-11 (v0.7).** Os previews passam a
> `seed-dataviz-graficos-preview.html` **v1.3** e `seed-dataviz-monitoramento-preview.html`
> **v0.8**, e as suites fecham em **163 PASS · 0 FAIL** e **105 PASS · 0 FAIL · 0 FAIL·DOC**.
> **Gate visual do Rafael em 2026-08-11: aprovado.** As v1.3/v0.8 passam a ser os artefatos
> VIGENTES do DG e do DM; as v1.2/v0.7 seguem ancoradas no MANIFESTO como o registro do que
> sustentou as promoções. As três correções visíveis que motivaram o gate — E1 (medidores expõem
> `role="meter"`), E3 (troca de cor do "esperado" do ET5 e da hachura do no-data) e E5 (rótulo da
> pizza sai de dentro da fatia) — foram vistas e aceitas. As versões v1.2/v0.7 permanecem ancoradas no MANIFESTO
> como os artefatos que sustentaram a promoção do DM.
>
> **Sétimo ponto, achado durante a correção e tratado dentro da E3:** a hachura do `chart-no-data`
> desenhava as linhas em `cat-5-stroke` — a mesma armadilha do ET5, e no lugar mais sensível
> possível, porque "sem medição" é justamente o que nunca pode parecer uma categoria. Passou a
> consumir `chart-axis`. **Regra que sai daqui:** posição categórica nunca serve de neutro. Quando
> um desenho precisa de "referência", "contexto" ou "ausência", ele consome um token com esse
> papel declarado (`chart-no-data`, `chart-grid`, `chart-axis`, ou cinza de contexto do DG17) —
> nunca `cat-N`, porque `cat-N` é uma posição de série e pode mudar de cor em qualquer supersede
> de paleta, como mudou.

| # | Errata (medida) | Onde | Consequência |
|---|---|---|---|
| ~~**E1**~~ ✔ | `role="meter"` **não implementado** no preview do DM — o arquivo só DESCREVE a regra num parágrafo explicativo (0 ocorrências do atributo) | monitoramento v0.7 | O **DM4 não foi validado pelo gate visual**, porque não havia o que ver. A regra permanece na spec e sua implementação real é do produto (`useMeter` do React Aria); o **próximo preview do DM deve implementá-la** para que o gate possa exercê-la com leitor de tela |
| ~~**E2**~~ ✔ | Sparkline a **1,6px**; a hierarquia de traço — declarada em comentário no PRÓPRIO arquivo — manda 2px para dado | monitoramento v0.7 | Traço de dado abaixo do peso canônico, entre "estrutura" (1px) e "dado" (2px). Corrigir para 2px na próxima edição do preview; a spec (§4.6) não muda |
| ~~**E3**~~ ✔ | O "esperado" do gráfico ET5 consome `chart-cat-5` | monitoramento v0.7 | **Consequência não intencional do supersede da categórica:** na v1.0 o `cat-5` era cinza-400 (neutro, correto para uma referência), e na **v1.5 virou violeta**. Referência de comparação não pode carregar cor de categoria viva. O ET5 deve consumir tinta neutra (`chart-no-data` ou `chart-grid`); o `medido` segue em `cat-1`. **Primeira consequência colateral medida do supersede — a classe de risco que qualquer troca de paleta cria** |
| ~~**E4**~~ ✔ | **Deriva de hex primitivo:** 4 dos 17 primitivos embutidos divergem da rampa do §2.1, nos DOIS previews (o bloco de tokens foi copiado entre eles): `cinza-300` `#A9BCC8`→`#ACBECA` · `cinza-50` `#F5F8FA`→`#F2F6F9` · `cinza-800` `#3A4A54`→`#38464F` · `turquesa-300` `#66D2C2`→`#66D1C2`. Somam-se os hex categóricos derivados inline no preview de gráficos (`#4FC3E8`, `#00506F`, `#A8DCEF`, `#FFD166`) | ambos | **Nenhum veredito muda** (remedição completa: espalhamento das bandas 9/10/19 light e 9/8/17 vs 10/8/18 canônico; tinta da meta 7,07 vs 7,24 — deltas ≤1 ponto). Mas prova que o bloco de tokens dos previews foi **digitado, não copiado** do canônico. *Guarda que nasce daqui:* preview novo deve importar o `seed-tokens.css` ou ter o bloco conferido contra a rampa por script |
| ~~**E5**~~ ✔ | Rótulo interno "45%" sobre a fatia `cat-1` da pizza | gráficos v1.2 | Na paleta v1.5 mede **4,30 < 4,5** — o rótulo vai para fora com linha-guia (DG5-b remedido, §4.2). Defeito latente que só apareceu porque a regra é medida, não fixa |
| ~~**E6**~~ ✔ | `<title>` e texto de abertura dizem **"preview v0.1"** nos DOIS arquivos (as versões reais são v1.2 e v0.7); o do DM ainda cita "§3c do `seed-tokens.md` v1.4" | ambos | **A "identificação positiva por leitura" do MANIFESTO §3.1 não funciona nestes dois arquivos** — só o MD5 os identifica. É a mesma família do defeito da §1 (afirmação que não encontra o seu objeto), aqui invertida: o arquivo mente sobre si mesmo. Corrigir rótulo e referência na próxima edição |
- **`contraste-dg.py` desatualizado (pendência P8 do `MANIFESTO.md`):** ainda mede o DG11
  (contorno morto) e a paleta antiga — e, o que só se soube em 2026-08-11, percorre apenas
  três séries, que são justamente as que passam. **Reclassificada de higiene para guarda
  ausente**: era ele quem deveria ter flagrado o colapso do modo claro acima de 3 séries.
  Especificação da reescrita no **DI18** (§4c.12); a execução é lote seguinte, junto do
  preview e da suíte do DI.
- **Aliases `gauge-band-*` nos gêmeos:** só nascem quando o produto consumir o medidor
  (fronteira declarada no supersede DM3 da §3c) — não antecipar.
- **Teto da empilhada (DG10-b):** o racional de paleta caiu com a categórica v1.5; o teto de 4
  permanece por não ter sido reavaliado em gate. Reavaliar (4→5) quando um caso real do ERP
  pedir, com preview e gate.
- ~~**EMENDA DEVIDA ao `seed-tokens.md` §3c** (regra GI2): registrar o colapso de claridade da
  rampa categórica escura~~ — **CUMPRIDA em 2026-08-11**, na edição v1.5 da §3c (o gatilho GI2
  "editar por outro motivo" disparou com a categórica estendida). O registro inclui a remedição
  com a paleta nova (75/75/71/71/67) e a consequência declarada: o DG13 permanece obrigatório.
- ~~**Textura em série preenchida no IMPRESSO (DI):** o DG13 hoje só dispara em escuro +
  grayscale, e o impresso sai do modo **claro**. Pela medição, o claro tem espalhamento
  suficiente (7 pontos)…~~ — **TRATADA em 2026-08-11 (v0.9), e a redação acima continha uma
  ERRATA (E7).** Os "7 pontos" eram da categórica **v1.0, com três séries**. Remedido com as
  **seis** posições da v1.5 em modo claro: pior par **1 ponto** (`cat-1 × cat-4` e
  `cat-3 × cat-5`). O claro **não** tinha margem estreita — tinha margem nenhuma acima de três
  séries. Resultado: **DI2** supersede o gatilho do DG13 (§4c.2), que passa a
  `grayscale ∩ (escuro OU ≥4 séries)`. *O que a errata ensina:* um número medido carrega o
  contexto em que foi medido; ao citá-lo depois de um supersede de paleta, o contexto tem de
  ser reconferido, não herdado. **A pergunta original — se o modo de impressão entra no
  gatilho — segue ABERTA no DI-b**, item abaixo.
- ~~**DI-b — veredito do gatilho da textura no papel (DI3, §4c.3).**~~ — **FECHADO em
  2026-08-11** por prova impressa física (folha de 7 itens, impressa em cor e em escala de cinza
  pelo driver). **Veredito: o impresso NÃO entra no gatilho, porque não precisa** — em cor as 6
  séries se distinguem; em mono, que é grayscale por definição, o DI2 já dispara. Os **dois pares
  que colapsaram a olho são os dois pares previstos pela medição em tela** (`cat-1 × cat-4` e
  `cat-3 × cat-5`, ambos a 1 ponto), sem falso positivo nem falso negativo. **Consequência maior
  que o veredito:** o piso de claridade é calibrado por **FORMA**, não por meio — supersede
  registrado no §4c.3 e no §6.
- **Empilhada 100%, waterfall, boxplot e combo de eixo duplo** ficaram fora da v1 do DG (DG9).
  Entram quando o ERP pedir — a spec é aditiva, nenhuma delas mexe no que foi promovido.
- ~~**Slot ET5 (gráfico do alerta de geração)**~~ — **ENCERRADO na v0.13 por supersede do DM8**
  (§4b): o e-mail de alerta **não leva gráfico**, leva símbolo de alerta. Racional do Rafael: um
  PNG único servido a todos os disparos carrega números que não são do destinatário, e um alerta
  que contradiz o próprio texto destrói a confiança que ele existe para ter. O dado real vive no
  sistema. **O slot volta ao `seed-email.md` sem regra nova** — o EC5 já manda rasterizar ícone
  sob demanda a partir do SVG normalizado, em `/email/v1/icones/`. **Deixa de ser pendência da
  dataviz.**
- **NM5 (ícones):** se a F5 expandir o set de glifos (ex.: ícones de tipo de gráfico),
  dispara o `seed-icones.md` próprio — gatilho registrado, não disparado.
- **Skeleton/empty de gráfico** (herdados do Bloco 3, 2026-08-04): entram no DG.
- ~~**Gauge em grayscale (observado no render de 2026-08-09):** o desenho canônico do gauge
  (DM) deve prever textura/hachura ou rótulo de faixa~~ — **CUMPRIDA na v0.5**: o DM entregou
  as duas previsões — rótulo textual de estado sempre visível (**DM7**) e textura por banda no
  gatilho escuro+grayscale (**DM11**). A prova impressa real continua no DI (o gatilho de
  textura no modo de impressão segue em aberto, item acima da textura no impresso).
- **Guarda nova nascida da promoção do DT — `paridade-tokens.py` (2026-08-09):** a regra
  "o `.md`, o `.json` e o `.css` formam uma unidade; alterar um exige alterar os três"
  existia desde a v1.0 do `seed-tokens.md` **sem nenhum detector**, e por isso os gêmeos
  ficaram duas versões atrás sem que ninguém notasse — ler o `.md` não revela nada sobre o
  conteúdo dos gêmeos. O script mede 3 portões: **G1 não-regressão** (todo token do CSS
  anterior continua existindo, com o mesmo valor), **G2 paridade** (todo token do JSON tem
  contraparte no CSS, salvo isentos declarados), **G3 cobertura** (o inventário nominal da
  §3c e do pacote v1.2 está nos dois gêmeos, em light e dark). Placar na promoção:
  **43 PASS · 0 FAIL**. *Fato relevante de método:* o G1 **reprovou a primeira tentativa de
  regeneração** — ela reescrevia o CSS inteiro a partir do JSON e, no caminho, renomeou
  `--seed-sp-*` para `--seed-space-*`, perdeu o composto `--seed-focus-ring` (que só existe
  no CSS) e serializou sombras/famílias/beziers como estrutura DTCG em vez de valor CSS. A
  entrega passou a ser por **edição cirúrgica** do arquivo anterior. Lição transferível:
  regeneração total a partir de um modelo incompleto perde token em silêncio; preservar
  bytes é mais seguro que reconstruir e conferir.
- **Matriz de render se CRUZA, não se amostra (2026-08-09, achado do gate do DG):** a primeira
  matriz tinha 4 cenários e cobria `claro+grayscale` e `escuro`, mas **nunca a combinação**
  `escuro+grayscale` — que era exatamente onde estava o defeito. Amostrar combinações dá a sensação
  de cobertura sem a cobertura. A matriz passou a 6 cenários cruzando tema × grayscale × largura, e
  o render mede o `fill` **resolvido pelo navegador**, cobrando textura onde deve haver e ausência
  onde não deve.
- **Aprendizado de ferramenta (2026-08-09):** o screenshot via CLI do Chrome
  (`--screenshot --window-size=360,...`) truncou a renderização à direita e simulou um
  overflow que não existia (scrollWidth medido: 360, zero elementos estourando). A
  camada de render da F5 usa **puppeteer** (viewport + `fullPage`), nunca o CLI — vale
  como requisito da futura suite de render do DG.

### Erratas E9–E16 (nascidas na janela do sub-bloco DI, 2026-08-11)

As E1–E6 (subseção acima) foram divergências do PREVIEW em relação à spec. Estas oito são de
natureza mais variada — e três delas são de uma classe nova e desconfortável: **correção
declarada que não foi inteiramente aplicada, ou que foi aplicada sem remedir o que quebrou.**

| # | Errata (medida) | Onde | Estado |
|---|---|---|---|
| **E7** | O §5 afirmava "o claro tem 7 pontos de espalhamento" — número da categórica v1.0 com **três** séries. Com as seis da v1.5 o pior par mede **1 ponto** | este arquivo, §5 | **RESOLVIDA** — motivou o DI2 |
| **E8** | A §3c do `seed-tokens.md` declara o fundo de referência dark como `#1C252B`; o token real é `#1D272D`. *Causa raiz achada depois:* o número foi copiado do **preview**, que embutia o valor errado — não do token | `seed-tokens.md` §3c | aberta; emenda registrada |
| **E9** | `seed-dataviz.md` v0.8 (74.897 B) ficou sem âncora no `MANIFESTO.md`, que ainda ancorava a v0.7 | `MANIFESTO.md` §3.7 | fecha na edição do MANIFESTO deste lote |
| **E10** | As cópias **v1.5** de `seed-tokens.json`/`.css` em `validacao/` não são declaradas em lugar nenhum. Mantidas de propósito pelo Rafael como insumo histórico da execução do `paridade-tokens.py` | `validacao/` | declarar em prosa, como já se faz com o `LEIA-ME` |
| **E11** | **Pizza de 5 séries sem textura alguma.** Violava o DG13 já na redação ANTIGA — o gatilho escuro ∩ grayscale se aplicava a ela e nunca foi implementado. Não é consequência do DI2; o DI2 apenas tornou visível | preview do DG v1.3 | **CORRIGIDA** na v1.4 |
| **E12** | O §6 deste arquivo afirmava, na linha do supersede do gatilho, que *"a suite extrai todos os seletores que ligam textura e exige as duas condições em cada um"*. **A suíte não tinha nenhuma seção de DG13.** 163 verificações, zero sobre a regra que o gate humano criou | §6 · `suite-dataviz-dg.mjs` | **CORRIGIDA** — seção `DG13/DI2` com 11 verificações + `E3/E13` com 2; suíte vai a **176 PASS · 0 FAIL** |
| **E13** | A hachura do `chart-no-data` apontada para `chart-axis` pela E3 mede **2,80** contra o preenchimento — abaixo do piso de 3:1. A E3 trocou um valor certo com semântica errada por um valor errado com semântica certa | `seed-tokens.md` §3c | **RESOLVIDA** — token próprio `chart-no-data-hatch` (v1.7): 3,93 light · 3,84 dark |
| **E14** | **A correção da E3 foi PARCIAL.** Ela trocou a tinta da hachura apenas no *swatch da legenda*; os **dois `<pattern>` SVG** que desenham a hachura de verdade continuaram em `chart-cat-5-stroke` — ou seja, em violeta — desde a v1.5. Quatro ocorrências | preview do DG v1.3 | **CORRIGIDA** na v1.4 |
| **E15** | **Terceira ocorrência da mesma armadilha:** a série "Esperada" do gráfico *medida × esperada* consumia `cat-5-stroke`. É referência, não categoria | preview do DG v1.3 | **CORRIGIDA** na v1.4 — passa a cinza de contexto (linha 4,74 · rótulo 6,55), o mesmo papel que o preview do DM adotou na E3 |
| **E16** | **Deriva de 19 tokens SEMÂNTICOS** no bloco embutido do preview, contra o canônico: `surface-page`/`raised`/`subtle` dark, `text-primary`/`secondary`/`inverse` dark, toda a família `feedback-danger`, `border-*` dark, `chart-grid`, `chart-positive`, `chart-negative`, `chart-no-data`. A E4 achara 4 **primitivos**; ninguém tinha auditado os semânticos | preview do DG v1.3 | **CORRIGIDA** na v1.4, **por script a partir do canônico** — que é literalmente a guarda que a E4 pediu |

| **E17** | **`vector-effect` não é herdada** (SVG 2: *Inherited: no*). Declará-la num `<g>` é inócuo — não alcança os `<path>` filhos. A primeira escrita do preview do DI cometeu isso; o preview do DG sempre fez certo, por seletor universal `.seed-chart__plot svg *`, que atinge cada elemento individualmente | preview do DI v0.1 | **CORRIGIDA** na v0.2 — regra por seletor universal + teste `DI6-04` que reprova qualquer `<g>` carregando o atributo. A lei do §4.6 estava certa; o que faltava era a implementação que a torna verdadeira |

> **A classe de defeito que E14 e E16 expõem, e que vale mais que as erratas em si.** A E3 foi
> declarada corrigida em 2026-08-11 e o arquivo nunca foi lido de volta *no ponto corrigido* —
> conferiu-se o MD5 (que muda com qualquer edição) e o placar da suíte (que não media aquilo).
> É a assinatura exata do defeito da §1 do `MANIFESTO.md`, agora numa variação mais sutil: não
> é "a propagação foi afirmada e não aconteceu", é **"a correção foi afirmada e aconteceu pela
> metade"**. *Regra que fica:* correção de errata é verificada pela **medição do que ela
> prometia consertar**, não pelo fato de o arquivo ter mudado. Se a errata dizia "a hachura não
> pode ser categórica", o teste é varrer TODAS as hachuras — foi o que o `NEU-01` passou a fazer.
>
> **A E16 fecha um ciclo aberto pela E4** e explica a **E8**: a §3c copiou o fundo de referência
> dark do *preview* (`#1C252B`) em vez de copiar do *token* (`#1D272D`). Bloco de token digitado
> à mão não contamina só o artefato — contamina o canônico que o cita.

### Emendas devidas a outros arquivos canônicos

| Arquivo | Emenda | Quando |
|---|---|---|
| `seed-email.md` v0.11 | Referenciar o PNG do gráfico do alerta (ET5) quando existir | Spec pronta (DM8); dispara quando o PNG @2x existir no R2 |
| `seed-componentes.md` v0.47 | Sparkline dentro da tabela §40 (célula de tendência) | **Gatilho cumprido** — gate do DM confirmou (DM5/DM6, §4b). A emenda entra na próxima edição real do `seed-componentes.md` (regra GI2), referenciando o contrato decorativo do DM6 |
| `seed-tokens.md` v1.6 §3c | **ERRATA E8 (medida em 2026-08-11):** a §3c declara o fundo de referência do dark como cartão `surface-raised` **`#1C252B`**; o valor real do token no `seed-tokens.css` é **`#1D272D`**. Corrigir o hex citado | **Nenhum veredito muda** — remedi as 6 séries contra os dois valores e os deltas ficam entre −0,16 e −0,24 (cat-1 8,50→8,31 · cat-6 10,66→10,42), todos com folga enorme sobre o piso de 3:1. Entra na próxima edição do arquivo por outro motivo (regra GI2), como a E3 entrou |
| `seed-componentes.md` v0.47 §44 | O **GI1** descreve a cadeia de 3 camadas para componentes de UI; para **gráfico** há um 4º salto (`--chart-N` → `chartConfig` → `var(--color-CHAVE)`), especificado no **DI11** (§4c.11) | Não é conflito: o GI1 continua correto no seu domínio. A emenda é uma referência cruzada, a entrar na próxima edição real do `seed-componentes.md` (regra GI2) |
| ~~`MANIFESTO.md` v1.1~~ | ~~Linhas deste arquivo, do `seed-tokens.md` e do `contraste-dataviz.py`~~ | **CUMPRIDA em 2026-08-09** — `MANIFESTO.md` **v1.2** ancora os artefatos da F5 (e fecha de quebra a pendência P4, do marco v1.5) |

---

