Dataviz
5. Fronteiras e pendências abertas
Gêmeos— 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 declaravamseed-tokens.json/seed-tokens.cssa regenerar com a §3cv1.1e não continham nenhum token do pacote mobile v1.2 (M1–M3: breakpoints, tipografia fluidaclamp(),--seed-fs-field-touch, safe-area). A defasagem era de duas versões, não uma. Detalhe no §7.0 doseed-tokens.mdv1.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áveldesde 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, ambosestávelem 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áveldesde 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 aestá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 doestudo-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.html82.126 B8d1930598b9d124d3807fc80f70b0fbfeseed-dataviz-monitoramento-preview.html30.166 Bf146c84a3d140a892d1de87ee37d334c. 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.htmlv1.3 eseed-dataviz-monitoramento-preview.htmlv0.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õemrole="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-datadesenhava as linhas emcat-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 consumirchart-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) — nuncacat-N, porquecat-Né uma posição de série e pode mudar de cor em qualquer supersede de paleta, como mudou.
| # | Errata (medida) | Onde | Consequência |
|---|---|---|---|
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 |
|
| 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 | |
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 |
|
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 |
|
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 | |
<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.pydesatualizado (pendência P8 doMANIFESTO.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— 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.seed-tokens.md§3c (regra GI2): registrar o colapso de claridade da rampa categórica escuraTextura 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-4ecat-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 agrayscale ∩ (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-4ecat-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 aoseed-email.mdsem 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.mdpró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.jsone o.cssformam uma unidade; alterar um exige alterar os três" existia desde a v1.0 doseed-tokens.mdsem nenhum detector, e por isso os gêmeos ficaram duas versões atrás sem que ninguém notasse — ler o.mdnã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+grayscaleeescuro, mas nunca a combinaçãoescuro+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 ofillresolvido 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 oNEU-01passou 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 |
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) |