---
fonte: 01-canonicos/seed-componentes.md
versao_da_fonte: v1.43
secao: 77
titulo: "GR1 GANHA INSTRUMENTO — o contrato do grafismo volta a ser verificável, e não por lista: por alvo de pasta com pasta de prova (2026-08-21, décima segunda parte) · `validacao/guarda-grafismo.mjs`"
sequencia: 83 de 98
bytes_do_corpo: 7643
md5_do_corpo: a4ef91862206198375f0fce0e52d503c
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
---
## 77. GR1 GANHA INSTRUMENTO — o contrato do grafismo volta a ser verificável, e não por lista: por alvo de pasta com pasta de prova (2026-08-21, décima segunda parte) · `validacao/guarda-grafismo.mjs`

> **Contexto para quem lê isto sem ter visto o resto.** O **grafismo** da SEED v2
> é a "linguagem de linhas" do §7 do `marca-seed.md`: curvas finas de 1,5–2px em
> turquesa, que substituíram as ondas chapadas de 2018. Ele existe em dois modelos
> — a **SERRA EM ARCOS** no rodapé (**PADRÃO**) e a **MONTANHA** no topo
> (**opção** de quem monta a peça) — com **regimes de regra independentes**, por
> veredito do decisor. A anatomia, os planos, a gramática e as 12 peças estão no
> **§76**; esta seção trata do **INSTRUMENTO** que verifica o contrato.

### 77.1 O estado que o §76 declarava, e que esta seção fecha

O §76 registrou o contrato **GR1 sem instrumento**: as três cláusulas escritas, o
código perdido na propagação, e a frase de que "todo placar GR1 de folha antiga é
histórico e irreproduzível". **Contrato escrito não é contrato verificado** — a
mesma distinção que obrigou o supersede formal da tabela BT1–BT7 no §64.1.
Agora o contrato tem régua.

### 77.2 As três cláusulas, como se medem e o que cada uma devolve

| cláusula | como se mede (o juiz é o pixel) | teto | devolve |
|---|---|---|---|
| **GR1-a** | render sem grafismo × render com grafismo; a área é o conjunto de pixels que **muda** | ≤ **10%** da peça | `0,47%–1,79%` nas 18 peças |
| **GR1-b** | máscara do símbolo (render sem ele × com ele), **erodida 1px** para excluir antisserra, intersectada com a máscara do grafismo | **0 px** | **0 px em todas as 18** |
| **GR1-c** | **regime** pela âncora geométrica (que borda a caixa encosta, tol. 2px); **altura** pela extensão vertical da tinta; a caixa **declarada** sai ao lado | ≤ **~8%** da altura | 7 formatos `5,89–6,67%` pintada / `7,80–7,92%` declarada |

**Alvo de PASTA, sem filtro de nome** (`readdirSync(...).filter(endsWith('.html'))`),
exclusões por `PULA=` **impressas e contadas** — o 42º defeito nasceu de um filtro
por prefixo de nome, que é lista escrita à mão com outra sintaxe.

**Classificação estrutural, não por nome de classe:** um `<svg>` da peça é
**GRAFISMO** quando todas as suas formas pintáveis (fora de
`defs`/`mask`/`clipPath`/`symbol`) têm `fill:none` e têm `stroke`; `<svg>` com
forma preenchida é **IDENTIDADE**, e é o alvo da GR1-b. **O censo com o motivo de
cada elemento sai impresso por peça.** *Consequência canon-fiel e declarada: o
`<svg class="risco">` amarelo de 56px é grafismo — é a linha "Marcador de seção"
da tabela do §7 ("linha curva curta (40–80px) … turquesa-400 ou amarelo"). Ele
pinta 164 px (0,026% do cartão) e entra na área; sai `[n/a]` na GR1-c.*

### 77.3 A gramática de consumo — o que um criador de peça precisa cumprir

1. **Rodapé é o padrão; topo é opção.** Veredito verbatim: *"o uso das
   montanhas/ondas no topo nao é o padrao, o padrao em em baixo, mas aprovei esse
   modelo de montanha para usar no topo caso o criador queira coloca-las no
   topo."*
2. ⚠ **SUPERSEDIDO PELO §78 (mesma data).** O texto original dizia: *"Faixa de
   rodapé, canon vigente (v5.3): ≤ ~8% da altura. Peça que precisa de serra-cena
   (11,8%–15,7%) hoje reprova de propósito e espera a emenda MR-P4"*. **A emenda
   MR-P4 foi aprovada no mesmo dia** e o canon vigente é a **v5.5**: faixa de
   rodapé responde ao regime (**detalhe ≤~8%** · **serra-cena com teto por
   formato**, §78.2) e faixa de topo responde à **largura** (§79). *A frase de
   cima ficou verdadeira por poucas horas — e é por isso que ela está riscada em
   vez de apagada.*
3. **Faixa de topo não responde ao teto de rodapé** e sai `[n/a]` nomeado —
   veredito **MT-P1**, verbatim: *"considere que o topo segue uma regra e o rodapé
   outra regra"*.
4. **Área total de grafismo ≤ 10%**, contando **todo** elemento de linguagem de
   linhas da peça, inclusive o marcador de seção.
5. **O grafismo não toca o núcleo do glifo do símbolo. 0 px, sem tolerância.**
6. **Cor só em stop da rampa canônica turquesa** (regra §0-b, nascida da retirada
   do `#0A6B60`). A guarda **não** mede cor — quem mede é a
   `guarda-literal-de-cor.mjs` (NV2) e a régua de contraste.

### 77.4 Fronteira declarada — o que este instrumento NÃO julga

- **Não julga se o desenho lê como serra.** Legibilidade de **forma** não é
  medível por guarda; o juiz continua sendo o **gate visual humano**. *Foi por
  isso que a peça de rodapé de 32px (P1) passou em todas as cláusulas e ainda
  assim o registro diz "não lê como serra".*
- **Não mede milímetros.** Todo número é px de **tela** — **MR-P6** aberta para o
  cartão 89×51mm e a pasta A4.
- **Não mede contraste** do grafismo contra o fundo, nem a supressão de fragmento
  (a "regra do fragmento" do §76.4, que é construção do gerador).
- **Não tem bancada nem suíte**, e a fronteira segue a do §76: o componente não
  interage, então não há comportamento a asserir.

### 77.5 O 47º defeito de instrumento, porque ele muda como se escreve guarda nesta casa

**Esconder um elemento e mostrá-lo de novo não restaura o pixel** — 112 px do
glifo do símbolo voltam diferentes depois do ciclo `visibility:hidden` → `''`,
enquanto quatro capturas sem toque nenhum são byte-idênticas. O sinal foi um
número **impossível**: sobreposição de **−77 px** entre dois planos.
**Conserto:** um estado de render por **carga nova**, e a carga só esconde.
**Régua que sai disso, e vale para toda guarda:** quem mexe na página para medir
**imprime prova de estabilidade** (estado de controle renderizado duas vezes, em
cargas independentes, exigindo 0 px) e devolve `[n/a]` quando instável.
Reproduza: `node validacao/prova-47o-defeito.mjs`.

### 77.6 Onde está a prova, e como se roda

```
DIR=render-audit/prova-gr1            node validacao/guarda-grafismo.mjs   # 10·3·8
DIR=render-audit/gate-z3/formatos     node validacao/guarda-grafismo.mjs   # 21·0·0
DIR=render-audit/gate-z3/largos       node validacao/guarda-grafismo.mjs   # 11·4·0
DIR=render-audit/gate-montanha        node validacao/guarda-grafismo.mjs   # 14·2·2
DIR=render-audit/prova-gr1 ESCALA=2   node validacao/guarda-grafismo.mjs   # 10·3·8 (condição variada)
```

Folha de conferência: `render-audit/gate-gr1/fechamento.html`
(gerada por `validacao/monta-folha-gr1.py`, que lê os `placar-*.json` escritos
pela própria guarda — **nenhum número redigitado**).
`LEIA-ME.md` autossuficiente em `render-audit/prova-gr1/`.

### 77.7 Pendências que esta seção deixa

- **GR-P5 (nova)** — estender a GR1-c com o regime **SERRA-CENA** por formato,
  **depois** de MR-P4 aprovada, com a fixture escrita antes e **uma dimensão por
  vez**.
- **GR-P6 (nova)** — a divergência de ÁREA contra o instrumento perdido
  (`0,49–1,79%` × `0,67–2,17%` históricos) não é resolvível: fica registrada. *Se
  alguém encontrar o arquivo antigo num backup, a primeira coisa a fazer é
  comparar as duas definições de área.*
- **GR-P7 (nova)** — a prova de estabilidade existe em **1 de 56** instrumentos.
  A varredura de quais outros mexem na página e não a imprimem é uma varredura de
  uma linha, e é irmã da varredura de `scroll-behavior` (43º defeito) e da
  **IN-P2**.
- **MR-P6** — grafismo em milímetros (segue aberta, do §76).


