---
fonte: 01-canonicos/seed-dataviz.md
versao_da_fonte: v0.22
secao: 06
titulo: "Supersedes formais"
sequencia: 11 de 12
bytes_do_corpo: 13962
md5_do_corpo: 0284bcb3a35921a0c8bbbb3b47cf1485
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
---
## 6. Supersedes formais

| O que morre | O que passa a valer | Motivo |
|---|---|---|
| **DG10-d** — separar segmentos da pilha com traço de 1px em `surface-page` | **DG11** — contorno de 1px em `cinza-900` em toda superfície de área opaca | O branco mede **1,85** contra `cat-2` (amarelo): praticamente invisível. O `cinza-900` mede ≥4,17 contra todos os fills nos dois modos, e resolve fronteira contra o fundo **e** contra o vizinho — uma regra no lugar de duas. Descartado no caminho: contorno na variante `-stroke` da própria série (`cat-2-stroke` × `cat-1` = 1,28) |
| **Portão de grayscale por razão de contraste WCAG** (1ª versão do `contraste-dg.py`) | **Portão por espalhamento de claridade**, piso de 6 pontos | A razão de contraste foi calibrada para texto sobre fundo e reprovava o modo claro (`cat-1` × `cat-3` = 1,22), onde o gate humano leu bem. A claridade discrimina faixa: claro espalha 20 pontos, escuro 4. O piso está declarado no código como **calibrado pelo gate, não derivado de norma** |
| Gatilho da textura "escuro **OU** grayscale", e depois "só grayscale" | **Interseção escuro + grayscale** (DG13) | Duas leituras erradas da decisão do Rafael, ambas ligavam textura onde a cor já resolve. Guarda permanente: a suite extrai todos os seletores que ligam textura e exige as duas condições em cada um |
| **DG11** — contorno de 1px em `cinza-900` em toda superfície de área opaca | **DG14** — zero contorno; fronteira por vão de 2px na cor do cartão (espaço negativo) | Gate de estética de 2026-08-10 ("ar de relatório antigo"). A causa raiz do DG11 — fill que reprovava 3:1 sozinho — foi removida pela categórica estendida v1.5 (todos os fills ≥3,22; `cat-1` mudou de stop para isso). Cadeia completa: **DG10-d → DG11 → DG14**, cada elo com racional medido |
| A parte "e contorno" do **DG12** | DG12 restrito ao **rótulo interno** | O contorno morreu com o DG14; a regra da tinta fixa permanece viva para o rótulo. Exceção nova declarada: a meta do medidor ACOMPANHA a superfície, porque as bandas invertem com o tema (DM3) — 7,07/3,93 medidos |
| Categórica v1.0 (valores) e a restrição "nenhum hex novo" do DT | **Categórica ESTENDIDA v1.5** (§3c do `seed-tokens.md`) — 2 matizes exclusivos de dado, 5 famílias, `cat-1`→turquesa-500, regra do dourado, cinza fora | Racional medido: 3 matizes livres na marca ⇒ 6 posições sempre repetiam família ("escalas da mesma cor", crítica do gate). Leis de consumo na §4.6 |
| Racional de paleta do **DG10-b** ("acima de 4 pareia matizes") | Teto de 4 permanece; racional passa a ser o cognitivo do mercado | Com a v1.5, as posições 1–5 são famílias distintas — o fato de paleta sumiu. Teto não reavaliado em gate; pendência registrada no §5 |
| Papéis do gauge do DT (banda colorida carrega a severidade) | **DM3** — banda em intensidade de cinza; a barra de valor carrega a severidade | Faixas coloridas distavam 1 ponto (light) / 0 (dark) de claridade; Few manda codificar faixa em intensidade. Nenhum hex muda; supersede formal na §3c v1.5 |
| Piso de 6 pontos como critério geral de espalhamento | **Piso restrito ao contexto de calibração** (barras altas adjacentes, modo claro); fora dele decide o gate | No DM, bandas a 9/8/17 pontos — acima do piso — seguiam indistintas para o Rafael. Emenda no DG13; o DM11 nasceu dessa decisão de gate |
| **DG13** — gatilho da textura na interseção **escuro ∩ grayscale** | **DI2** — `grayscale ∩ (escuro OU ≥4 séries)` | Remedição de 2026-08-11 com as **seis** posições da categórica v1.5 em modo claro: `cat-1 × cat-4` = **1 ponto** e `cat-3 × cat-5` = **1 ponto** de claridade (56/75/49/55/50/27). O "a cor basta no claro" do DG13 valia para **três** séries, medidas na paleta v1.0 — a v1.5 dobrou as posições sem que o gatilho fosse remedido. O que muda é a densidade da paleta, não o meio. *Descartados:* somar só o impresso ao gatilho (deixaria aberto um colapso de tela já medido) · texturizar sempre (reprovado no gate de 2026-08-09) · baixar o piso de 6 para 1 (escolher o limiar para caber na paleta inverte instrumento e evidência) |
| A afirmação do §5 de que **o modo claro tem 7 pontos de espalhamento** (errata **E7**) | O claro tem **1 ponto** no pior par acima de 3 séries | Os 7 pontos são da categórica v1.0 com `cat-1/2/3`, corretos na data. Citar um número medido depois de um supersede de paleta exige reconferir o contexto, não herdá-lo. É a segunda consequência colateral medida do supersede da categórica — a primeira foi a E3 (ET5 em `cat-5`) |
| **DM8** — o e-mail de alerta de geração leva um **gráfico** (barra agrupada esperado × medido, PNG @2x no R2) | **O e-mail de alerta leva SÍMBOLO DE ALERTA, não gráfico.** O slot volta ao `seed-email.md` sob o EC5 (ícone raster sob demanda, `/email/v1/icones/`) | Gate de produção do asset, 2026-08-11. O PNG hospedado é **arquivo único servido a todos os disparos**: os números nele são necessariamente ilustrativos, e o cliente com desvio de 6% receberia imagem mostrando 18%, contradizendo o texto. Quem vê isso conclui que **o sistema erra**, não que a imagem é genérica — e alerta existe para ser confiável. *O e-mail avisa; o sistema mostra.* A correção não abre exceção: **reconduz o slot a uma lei que já existia** e que o DM8 havia contornado ao especificar um PNG de conteúdo. *Descartado:* gráfico gerado por usina no envio — não por mérito, mas por domínio; o DM10 já pôs comportamento dependente de dado vivo no produto (Lovable/Supabase), e isso é programação de sistema, não spec de DS |
| A regra do piso: *"o piso de 6 pontos decide apenas no contexto em que foi calibrado; fora dali quem decide é o gate"* — lida como **meio novo exige calibração nova** | **O piso é calibrado por FORMA de apresentação e vale para aquela forma em qualquer meio.** Forma nova exige recalibração por gate mesmo no meio de sempre | Prova impressa física de 2026-08-11 (§4c.3). O DI3 nasceu prevendo que papel exigiria piso próprio; **não exigiu**. Os dois pares que o Rafael não distinguiu na folha em escala de cinza são **exatamente** os dois que a medição em tela apontava a 1 ponto (`cat-1 × cat-4` e `cat-3 × cat-5`), sem falso positivo nem falso negativo em 15 pares. Comparando com o DM11 — bandas finas de medidor, 9/8/17 pontos, indistinguíveis **na tela** —, a variável discriminante aparece: forma diferente + mesmo meio → o instrumento erra; mesma forma + meio diferente → acerta. *Por que a regra nova é melhor:* a anterior mandava recalibrar a cada meio, o que é caro e desnecessário; a nova manda recalibrar a cada forma, que é onde o risco mora, e explica **os dois** episódios em vez de um. *Descartado:* manter a redação por "contexto", vaga o bastante para caber qualquer coisa e portanto incapaz de prever nada |
| Vocabulário de textura do **DG13 com 4 posições** | **6 posições** — acrescentam-se linhas verticais (série 5) e diagonal a 135° (série 6) | O teto de séries sempre foi 6; o vocabulário parava em 4. A lacuna era invisível porque o gatilho antigo nunca foi exercido contra um gráfico de 5 ou 6 séries — o único que existe estava sem textura nenhuma (errata E11). A 6ª usa 135° e não 45° porque **a diagonal a 45° é exclusiva do `chart-no-data`**, e é a exclusividade que impede "sem medição" de ser lido como categoria. *Descartados:* 45° com espaçamento diferente (a distinção viraria densidade, frágil no papel e em fotocópia) · pontos maiores para a 5 (lê como a textura 2 de perto) |
| A hachura do `chart-no-data` consumindo **`chart-axis`** (redação da errata E3) | **`chart-no-data-hatch`**, token próprio — cinza-600 light / cinza-400 dark (`seed-tokens.md` v1.7 §3c) | `chart-axis` é cinza-500 e mede **2,80** contra o preenchimento cinza-100, abaixo do piso de 3:1 (errata E13). A cadeia inteira do papel: `cat-5-stroke` (v1.0 — cinza-600 por acidente, passava com 3,93) → `chart-axis` (E3 — semântica certa, medição quebrada) → token próprio (3,93 / 3,84). *Descartado:* consumir o primitivo `cinza-700` direto — repetiria a estrutura do erro, que foi um papel de desenho existir sem token próprio e tomar emprestado o de outro papel |
| **DF2** como cobertura completa do consumidor web (shadcn Chart sobre Recharts v3) | DF2 vigente para os tipos core, monitoramento e derivados; **a família MAPA consome `d3-geo` + `topojson-client`** (DP2, §4d.2) | **Recharts não desenha mapa** — não há componente geográfico na biblioteca. Não é supersede do DF2 e sim o preenchimento de uma lacuna que ele tinha sem saber, por ter sido escrito quando mapa não era escopo. *Descartados:* mapa de tiles (Leaflet/MapLibre/Google/Mapbox) — traz base cartográfica de terceiro com estética própria, não imprime, e paga custo de render em pan/zoom que nem usamos · D3 puro sem invólucro — aqui a camada `d3-geo` é obrigatória de qualquer forma, o opcional é o wrapper acima dela |
| **DG14** lido como "nenhuma superfície de dado leva contorno, em qualquer forma" | **DG14 com escopo declarado:** vale onde a superfície é **separável por espaço negativo** (barra, segmento de pilha, fatia, área). Onde a geometria é **contígua** (mapa, heatmap), a fronteira é desenhada e consome `chart-grid` (DP4, §4d.4) | Território é contíguo: não existe vão entre dois municípios sem que se invente um. A regra que cobre o caso **já existia e está `estável` desde o DT** — condição (b) da §3c do `seed-tokens.md`, escrita junto com a isenção do WCAG 1.4.11 para heatmap. Por isso é precisão de escopo, não supersede: nenhuma decisão anterior deixa de valer. *Descartado:* erodir cada polígono para fabricar o vão de 2px — em município estreito a erosão consome a área, e na borda externa do estado ela abre canaleta contra o fundo, **inventando fronteira onde não há** |
| **DI2** aplicado literalmente ao mapa (textura por série quando `grayscale ∩ (escuro OU ≥4 séries)`) | **Em mapa, a distinção de categoria em escala de cinza é por FORMA do marcador** — círculo · quadrado · triângulo — com **teto de 3 categorias** (DP10, §4d.10) | O DI2 permanece vigente; o que muda é o **veículo**. Textura exige área para virar padrão: dentro de um marcador de 8–12px, quadriculado ou pontilhado não produzem padrão, produzem sujeira, e em impressão a laser ou fotocópia produzem borrão. É a mesma lógica do supersede da regra do piso (§4c.3): o instrumento vale para a **forma** em que foi calibrado. *Descartados:* hachura reduzida proporcionalmente ao marcador (a distinção viraria densidade, frágil no papel e pior em fotocópia — armadilha já rejeitada no vocabulário de textura) · losango, estrela e cruz como 4ª–6ª formas (perdem identidade a 8–12px; círculo/quadrado/triângulo diferem em **número de vértices**, atributo que sobrevive à redução) |
| **DP4 da v0.14** — a fronteira de município consome `chart-grid` | **`chart-geo-boundary`**, token próprio novo na v1.8 dos gêmeos (errata **E19**) | Medido em 2026-08-11 pelo `contraste-dp.py`: **`chart-grid` e `chart-no-data` têm o mesmo hex nos dois temas** (`#E3EBF0` / `#38464F`), então a fronteira **desaparece** sobre um município sem medição (razão **1,00**) e mede **1,11** contra o território de contexto. A condição (b) da §3c foi escrita para heatmap, onde a fronteira nunca separa dois cinzas; num mapa, separar dois cinzas é o caso normal. *Descartados:* `border-default` (1,37) · `border-strong` (2,33) · emprestar `chart-axis`, que passa numericamente mas **no dark é o mesmo hex do `chart-no-data-hatch`** — a estrutura exata da errata E3 |
| **DP10 da v0.14** — cor codifica a categoria até 3 marcadores; forma só acima disso | **A FORMA é o portador permanente da categoria; a cor é redundância** (errata **E20**) | Espalhamento de claridade medido entre os marcadores: no **dark** os três pares medem **3,6 · 3,7 · 0,2** pontos, e mesmo no **light** o par `cat-1 × cat-4` mede **0,9** — todos abaixo do piso de 6. Como o mapa vai para impressão (mono é grayscale por definição) e para o ERP (tema escuro), **não existe cenário em que a cor sustente a categoria sozinha**. *Registro desconfortável:* a alternativa correta estava escrita na v0.14 e foi descartada **por raciocínio** ("cria distinção sem informação"), sem medição — o erro que o §7 da v0.11 já havia nomeado |
| **DP9** — a malha é publicada em **DOIS níveis** de resolução (figura e ERP) | **UM único asset**, simplificado a **2%** (Visvalingam com topologia preservada) | Medido em 2026-08-11 sobre a Malha Municipal Digital do IBGE 2025, com instrumento próprio (erro de área por município na projeção real). **A previsão do DP9 era que o nível de papel seria pesado demais para o site — a diferença medida entre os dois níveis é de 192 KB** (710 KB contra 518 KB), porque abaixo de 1% quem domina o arquivo é a quantização, não a contagem de vértices. Dois assets da mesma geometria por 192 KB é uma segunda fonte de verdade em troca de quase nada, exatamente o que o **DF7** existe para impedir. **Piso declarado do nível único: erro de área no p99 ≤ 2%** (medido: **1,78%**), porque é este o nível que hospedará o coropleto do DP14, onde a área desenhada é o que compara os dados. *Descartados com número:* 1% (p99 **4,08%**, pior município **20,5%**) · 0,5% (p99 9,70%) · 0,2% (p99 23,24%) · 0,05% (p99 68,55%, e economiza apenas 208 KB sobre o 1%). *Caso-limite achado pelo instrumento sozinho:* **Santa Cruz de Minas (MG), 3,565 km²**, o menor município de Minas — a 2% erra 4,2%; a 1%, 20,5% |
| *(do DT, inalterado)* nada | — | Sequencial, no-data, divergente, gauge-tokens e strokes v1.3 seguem intocados |

---

