A11Y.md · o primeiro movimento formal
O remédio, o placebo e a frase mágica
Ou: quando afirmar acessibilidade sem medir deixou de caber no A11Y.md.
Eu passei os últimos meses dizendo por aí que interfaces geradas por IA podem nascer acessíveis. Basta, segundo a minha própria tese, dar ao agente o contexto certo antes da primeira linha de código. É a premissa do A11Y.md, e eu acredito nela.
Para quem chega agora, o A11Y.md é um arquivo de texto no formato markdown que, quando incorporado num assistente de geração de código ou ambiente de desenvolvimento, coloca a acessibilidade como premissa na geração de qualquer interface feita por IA. Ele tem um núcleo com as regras essenciais, uma série de guias especializados para consultas que o agente busca apenas quando a tarefa pede (formulário, modal, tabela etc.) e uma série de outras documentações e normativas de entidades globais que avaliam e validam acessibilidade (WCAG 2.2, ISO 9241-171, WAI-ARIA APG, ADA, Seção 508, EAA, EN 301 549, ABNT NBR 17225:2025 etc). Além disso, durante e após a geração, o A11Y.md instrui o modelo a gerar relatórios, registrar tomadas de decisão e quaisquer exceções.
Mas aprendi uma coisa observando produto a vida inteira:
Promessa sem número é opinião. E opinião do próprio autor vale ainda menos.
Faltava eu fazer a pergunta desconfortável para mim mesmo: e se eu estiver errado?
(Um aviso honesto antes de seguir: este foi o primeiro movimento formal do projeto, feito com método emprestado da ciência, orçamento zero e uma disposição enorme de descobrir coisas que eu não queria ouvir. O que vem abaixo é o relato disso.)
Como se testa um remédio
Quando um laboratório quer saber se um remédio funciona, ele não pergunta ao inventor. Ele monta grupos: um toma o remédio, outro toma um comprimido de farinha idêntico por fora, o placebo, e os resultados são comparados. A receita é registrada em cartório antes de começar, para ninguém mudar a régua no meio do caminho. E o médico que avalia os resultados não sabe quem tomou o quê, para evitar que vieses contaminem o diagnóstico.
Foi exatamente isso que eu fiz com o A11Y.md.
Quatrocentas vezes, o mesmo modelo de IA (o Gemini Flash Lite, pequeno e gratuito) recebeu a mesma lista de tarefas de interface (formulário, tabela, carrossel, modal) desenhadas sobre as categorias de erro mais comuns do WebAIM Million.
Foram quatro condições de geração testadas:
- Nada — o modelo só recebia a tarefa, sem nenhuma instrução extra;
- A frase mágica — recebia a tarefa mais o pedido "make it accessible";
- O placebo — além da tarefa, recebia um documento do mesmo tamanho, mesma estrutura e mesma mecânica do A11Y.md, só que sobre performance, sem uma palavra de acessibilidade;
- O A11Y.md de verdade — o modelo recebia a frase de invocação verbatim, "When developing the frontend, follow strictly the accessibility rules defined in A11Y.md", apontando para o arquivo em disco. A invocação exata de cada condição está no protocolo, e o padrão completo está publicado no repositório do projeto.
O protocolo inteiro foi registrado publicamente antes do primeiro dado existir no OSF. Cada página gerada passou por um robô auditor de acessibilidade (o axe-core, o verificador automático mais usado do mundo, congelado por verificação criptográfica para ninguém trocar a régua no caminho), e a parte que exigia julgamento humano eu julguei às cegas: as páginas foram renomeadas para códigos, e eu só descobri de qual condição cada uma veio depois do último veredito. Inclusive as minhas reprovações.
Cada peça desse aparato (o placebo, o cegamento, a análise decidida antes de ver o dado, o registro fora do meu alcance) existe para uma única finalidade: tirar do autor o poder de se enganar.
Vale destacar que o documento placebo de performance existe para testar a hipótese de que qualquer documento grande e organizado da mesma forma que o A11Y.md inserido no contexto do modelo melhoraria a saída.
E uma palavra sobre o que este estudo tem de inédito. O censo WebAIM Million mede há anos os erros da web feita por humanos, e a pesquisa acadêmica recente já mediu o código gerado por IA: a maioria das páginas nasce com barreiras, e pedir acessibilidade no prompt corrige parte do que robô detecta. O que ninguém havia testado era a camada onde o A11Y.md vive, o arquivo de convenção lido por agentes. Até onde sei, esta é a primeira avaliação pré-registrada, cega e com placebo de um arquivo desse tipo.
Estudo 1 — componentes isolados, quatrocentas páginas
A aposta registrada dizia que, com o contexto certo no lugar, as violações que um robô (axe-core) detecta caem, e o processo de verificação aparece sem ninguém pedir. Para medir, o robô auditor passou página a página, e o julgamento humano cego cuidou dos itens que só gente decide.
Antes dos placares, uma palavra que vai se repetir: elemento apontado. É cada botão, texto ou imagem individual que o robô marca como violação. Se uma página tem um único tipo de erro que atinge doze elementos diferentes, o robô conta doze. Guarde essa distinção, porque ela vai importar muito no Estudo 2.
| O que o agente recebeu | Elementos apontados pelo robô | Páginas 100% limpas | Julgamento humano (aprovação, às cegas) |
|---|---|---|---|
| Nada | 171 | 70% | 0 de 2 |
| A frase mágica | 68 | 76% | 2 de 3 |
| O placebo | 122 | 60% | 0 de 2 |
| O A11Y.md | 61 | 82% | 5 de 5 |
(Você vai perceber que os denominadores do julgamento humano diferem entre as quatro condições. Isso ocorre porque o sorteio é cego: cada condição entra na amostra com quantas páginas o dado mandar. Igualar manualmente seria trapacear.)
Contra o placebo, o A11Y.md venceu com folga. No modelo estatístico registrado, que compara tarefa a tarefa, a taxa de violações graves caiu para um terço. Na contagem crua da tabela, 61 elementos contra 122. E o documentão sozinho saiu caro para quem o recebeu: foi a condição com menos páginas 100% limpas (60%, contra 70% de quem não recebeu nada), espalhou contraste por mais páginas que o próprio nada (29 contra 22) e foi a única a errar o documento em si. O que trabalha ali dentro é o conteúdo, e não o volume.
(Duas honestidades de rodapé, ambas declaradas no protocolo antes de qualquer dado. Primeira: o A11Y.md é público desde abril e pode ter entrado no treinamento dos modelos; o placebo foi escrito para este estudo e consequentemente não está nos datasets usados no treinamento de modelos de IA. Se isso pesa, pesa a favor do A11Y.md, e está avisado. Segunda: no confronto contra o "nada", as duas contas estatísticas registradas discordam entre si. Uma vê efeito claro, a outra vê um resultado no limite. Publico as duas, e nenhuma conclusão deste texto depende desse confronto.)
O único placar 100% contra 0% do estudo inteiro
Antes de qualquer empate, o resultado que nenhuma métrica encomendou e que, para quem usa o projeto, é o achado principal.
Em 27 de 27 execuções com agentes reais (Claude, Codex e Gemini), o A11Y.md fez o agente produzir espontaneamente a documentação de processo que o padrão manda manter. O relatório de verificação saiu em 26 delas. O registro de decisões, em 21. Pelo menos um dos dois, em todas as 27. Sem o A11Y.md, zero de 27 produziram qualquer um. A orientação da criação desses documentos é a natureza do projeto e não existe nativamente nos modelos de IA, o que justifica naturalmente tamanha diferença.
O Estudo 2, mais adiante, fecha a conta que faltava aqui, porque lá a frase mágica também competiu. Nas jornadas, a dupla completa de documentos saiu em 10 de 10 com o A11Y.md. Sem nada, zero de 10. Com a frase, zero de 10. Nenhuma outra medição dos dois estudos produziu um cem por cento contra zero. E vale dizer o que uma auditoria consegue e o que não consegue: ela consegue cobrar documentação depois do código pronto; o que ela não consegue é fazer essa documentação nascer junto com o código. O A11Y.md consegue, por indução, antes.
A frase mágica "faça acessível" cobra boa vontade dos modelos, enquanto o A11Y.md transforma acessibilidade em premissa e processo.
Quando comparamos o A11Y.md contra a frase mágica, no que o axe-core se propõe a medir, acontece um empate. No modelo pequeno que usei como bancada, pedir "make it accessible" derrubou os erros automáticos quase tanto quanto o padrão inteiro: 68 elementos contra 61. No modelo estatístico registrado, a razão entre as duas condições ficou em 0,76, com a margem de incerteza indo de 0,38 a 1,53. Como essa margem cruza o 1, a estatística não autoriza dizer que uma condição é melhor que a outra. O número nasceu dentro de um protocolo registrado e entra aqui do jeito que saiu, porque um estudo onde o autor ganha em tudo não merece a sua confiança. Este ganha onde ganha e empata onde empata.
E há uma moldura que eu só fui buscar depois, na literatura: estudos anteriores já mediam exatamente isso. Pedir acessibilidade no prompt corrige a maior parte do que robô detecta. O resultado era o previsto e está completamente alinhado com a visão de futuro deste projeto, que é fazer a acessibilidade ser simples, tão banal quanto pedir para a IA produzir algo acessível, ou nem precisar pedir. A pergunta que sobra, e que o resto deste texto responde, é o que a frase não compra.
De que natureza são esses erros?
| Natureza | Nada | Frase | Placebo | A11Y.md |
|---|---|---|---|---|
| O básico da webnome, rótulo ou alternativa ausentes | 8 págs40 elem. | 3 págs4 elem. | 4 págs4 elem. | 1 pág2 elem. |
| Contraste de cor | 22 págs131 elem. | 10 págs35 elem. | 29 págs93 elem. | 9 págs46 elem. |
| Família ARIAatributo indevido, composição, foco | — | 29 elem. | 21 elem. | 13 elem. |
| Documentosem título, sem idioma | — | — | 4 elem. | — |
Três leituras saem daí:
- Qualquer menção a acessibilidade quase zera o básico da web. De 40 elementos sem instrução para 4 com a frase mágica e 2 com o A11Y.md.
- O placebo cobrou em outra moeda. Espalhou problemas de contraste por 29 páginas, mais que o próprio "nada" (22), e foi o único a entregar páginas sem título e sem idioma declarado. Contexto grande sobre o assunto errado ocupa a atenção do modelo.
- A honestidade de rotina. Dizer "make it accessible" fez o modelo errar menos elementos de contraste (35 contra 46 do A11Y.md), ainda que o A11Y.md vença no número de páginas afetadas (9 contra 10).
O mergulho no contraste — e uma hipótese honesta
Fui atrás desse resultado do contraste. E falta de regra não é: A regra está no núcleo do A11Y.md ("texto MUST 4.5:1"), carregada em todas as 100 gerações. Também não é só o guia aprofundado ficar de fora, embora fique, dependendo de um gatilho de palavras como "color" e "palette" que nenhum dos prompts diz, e só 13 das 100 gerações o leram.
O fato decisivo é outro: das 9 gerações que violaram contraste, 2 tinham lido o guia inteiro e violaram mesmo assim.
A explicação mais provável, que registro como hipótese, é que o modelo lê "4.5:1", concorda, e não consegue calcular a luminância entre dois códigos de cor olhando para eles. Se ele optou por ignorar ou tentou e falhou, nenhum log revela. O que os dados mostram é que saber a regra não bastou.
Alt, rótulo e dialog são estruturais: saber é fazer, e o A11Y.md zerou. Já o contraste é computacional: saber não é conseguir conferir.
A hipótese é testável, e o roteiro lá no fim aposta nela, mas com um cuidado de método: a paleta pronta conserta o contraste sob qualquer explicação (falta de aritmética ou gosto treinado pelo cinza elegante), então ela corrige, mas não decide. Isso será testado.
(A literatura recente aponta na mesma direção. Nos estudos de reparo de acessibilidade por LLM, contraste é a violação que os modelos mais falham em corrigir — as melhores taxas ficam perto de 48% — e há registro do sintoma clássico de quem não calcula: forçar texto preto em fundo branco para garantir a passagem. O motivo descrito pelo AccessGuru é o mesmo da minha hipótese: a cor real de um elemento só existe na página renderizada, depois de herança e sobreposição de estilos, e o modelo trabalha lendo código, não vendo tela. A resposta que essa linha de pesquisa propõe é delegar o cálculo a uma ferramenta determinística em vez de confiar no raciocínio do modelo — exatamente a discussão da primeira pauta do roteiro, lá no fim.)
Contraste é um problema de aritmética, não de conhecimento. E modelo de linguagem não faz aritmética de luminância de olho.
Figura 1 · A mesma tarefa, o mesmo agente — e o que o olho não vê
Onde o julgamento humano viu o que o robô não vê
O robô (axe-core) só mede o que alcança. Nos itens que exigem gente (o foco de teclado preso corretamente dentro de um modal, o tamanho honesto de uma área de toque), o julgamento cego contou outra história: as páginas do A11Y.md passaram em 5 de 5; as da frase mágica, em 2 de 3. Todos os modais da condição do A11Y.md usavam o elemento nativo correto do navegador. Os reprovados eram imitações: aparência de acessível, mecânica de enfeite.
(O tamanho exato dessa camada humana: fui eu o juiz, sem saber de qual condição vinha cada página, avaliando dois tipos de item. É pouco para estatística, e eu não trato como placar. O que sustenta esta seção é o padrão que se repetiu, modal verdadeiro de um lado e imitação do outro. A Figura 3 mostra os dois em código. Para a versão formal do estudo, um segundo juiz independente já está no plano.)
Figura 2 · Dois modais abertos — e a diferença que a foto não mostra
Figura 3 · O que "aparência de acessível" significa, em código
Reprovado às cegas<div class="modal"
role="dialog"
aria-modal="true">
…
</div>
promessa de acessível no atributo;
nenhuma linha de teclado no arquivo.
Tab vaza, Esc não existe, foco se perde
Aprovado às cegas<dialog aria-labelledby="titulo">
…
</dialog>
dialog.showModal()
o elemento nativo do navegador:
fundo inerte, Esc de fábrica,
foco devolvido ao botão de origem
Os agentes reais, página a página — sem amostragem
O julgamento cego acima cobre uma amostra sorteada; o braço dos agentes reais é pequeno o bastante para mostrar tudo. Cinquenta e quatro execuções — Claude Code, Codex e Antigravity, clientes oficiais, cada uma numa pasta virgem, com o A11Y.md entregue pela mesma regra de uma linha que qualquer adotante desse projeto deve usar em seu setup.
Abaixo, as violações graves de cada página, página por página (são as mesmas 27 execuções do placar 100% contra 0%). Cada célula lista as nove páginas do agente naquela condição, da mais limpa para a pior, e cada número é a quantidade de violações graves de uma página:
| Agente | Sem o padrão (9 páginas) | Com A11Y.md (9 páginas) |
|---|---|---|
| Claude Code | 0 · 0 · 0 · 0 · 0 · 1 · 1 · 2 · 4 | 0 · 0 · 0 · 0 · 0 · 0 · 0 · 0 · 0 |
| Codex | 0 · 0 · 0 · 2 · 3 · 5 · 5 · 11 · 11 | 0 · 0 · 0 · 0 · 0 · 0 · 0 · 0 · 1 |
| Antigravity | 0 · 0 · 1 · 1 · 2 · 2 · 3 · 5 · 5 | 0 · 0 · 0 · 0 · 0 · 0 · 0 · 0 · 12* |
| Páginas 100% limpas | 10 de 27 | 25 de 27 |
O asterisco é um achado. As 12 violações da única página não-zerada do Antigravity vêm de uma regra só: ARIA aplicado onde é proibido, repetido 12 vezes. Para quem depende de leitor de tela, esse erro não é abstrato: o atributo proibido faz o leitor anunciar informação errada, ou silenciar onde devia falar. É um controle que mente para a pessoa cega. A correção é uma linha de código; o dano, enquanto ela não vem, se repete a cada visita. Guarde o padrão do erro sistemático, porque ele volta no Estudo 2 com nome e figura.
E duas coisas aconteceram nessas execuções que contador nenhum de violações captura.
A primeira é sobre onde os trabalhos foram parar: Com o A11Y.md presente na pasta do projeto (a pasta onde o site está sendo construído, de onde o usuário espera receber os arquivos), os três agentes construíram ali dentro, como quem trabalha numa obra. Sem nada na pasta, mais de uma vez o agente tratou o pedido como conversa e deixou a página num diretório temporário do sistema, onde o usuário nem saberia procurar. Já o padrão A11Y.md dá ao agente o senso de estar num projeto e utiliza a pasta corretamente.
A segunda é o tempo: Com o A11Y.md, o Claude Code levou 3,8 vezes mais para entregar; o Codex, 1,7; o Antigravity, 2,8. É o tempo de ler, verificar e documentar — o preço de executar o protocolo inteiro. Agora ele é um número, não um palpite, e foi um dos motivos para desenhar o segundo estudo, que vem a seguir.
(Uma nota de método sobre este teste com agentes reais: ele rodou apenas as condições "nada" e "A11Y.md", porque 54 execuções não dão poder estatístico para os controles ativos das 400 gerações. Ele também não prova que os números do estudo principal se repetem aqui, já que máquina e modelo mudam juntos de um teste para o outro. O que ele demonstra é mais simples, e ainda assim valioso: o mesmo efeito, na mesma direção, em agentes reais de três fornecedores diferentes.)
Estudo 2 — um site inteiro, uma sessão só
Aí eu quis saber do mundo real: não um componente de cada vez, mas um site completo numa única sessão, do jeito que qualquer pessoa usa um agente hoje.
Registrei um segundo estudo (de novo, a régua em cartório antes do dado) e mandei os agentes construírem uma livraria de sete telas, trinta vezes. Dois agentes fizeram o trabalho. O Claude Code, rodando o modelo mais capaz do estudo. E o Antigravity, rodando um Gemini Flash — parente direto, um degrau acima, do modelo pequeno da bancada do Estudo 1. O plano registrado previa o Codex no lugar do Antigravity, mas ele esbarrou no limite de uso da assinatura logo na largada, e o registro já previa o substituto e a regra da troca, documentada com data.
Um aviso que vale daqui até o fim: cada agente é comparado apenas com ele mesmo nas três condições. Nada aqui compara um agente com o outro. A aposta registrada dizia que, no uso real, o A11Y.md deixa as telas mais consistentes entre si, e a régua escolhida contava de quantos jeitos diferentes o mesmo componente foi construído ao longo do site. Quanto menos variantes, melhor: era a premissa que congelei antes da coleta. Guarde essa frase, pois o próprio estudo vai corrigi-la adiante.
Figura 4 · Uma jornada = sete telas, uma única sessão
uma das 30 jornadas do estudo: catálogo, busca, livro, carrinho, pedidos, venda e painel
O número veio seco: o A11Y.md não venceu na régua da consistência. Ficou lado a lado com a frase mágica, e num dos agentes a condição "sem nada" produziu as páginas mais uniformes de todas. Fica publicado assim, porque foi assim que a régua mediu.
| Agente | Nada | Frase | A11Y.md |
|---|---|---|---|
| Claude Codesoma das 5 jornadas | 21 | 18 | 18 |
| Antigravitysoma das 5 jornadas | 0 | 20 | 21 |
Mas qual é o mecanismo que gerou tais resultados? Então fui ler as páginas. Todas. E o mecanismo mudou a leitura sem mudar o placar.
O carimbo: uniformidade por pobreza
A uniformidade campeã do "sem nada" era a uniformidade da simploriedade: a mesma página pobre, carimbada vez após vez. Quem não recebe critério não tem motivo para variar. Nem para acertar.
Olhe três telas da jornada campeã de consistência, e depois as mesmas três telas da jornada perfeita com o A11Y.md. De longe, parecem parentes, de tão similares visualmente. A diferença mora no que o olho não alcança, e por isso cada figura traz o seu "por dentro" contado: numa, zero atributos de acessibilidade em três telas; na outra, quarenta e oito.
Figura 5 · A jornada "perfeita" da régua — sem instrução, zero variantes
pedidos · carrinho · painel — a mesma tabela mínima três vezes; nada varia porque nada tenta
por dentro das 3 telas: 37 elementos interativos · 0 atributos ARIA · cabeçalhos sem scope · nenhuma caption
Figura 6 · A jornada perfeita com o A11Y.md — consistente onde deve, rica onde precisa
o mesmo modelo, as mesmas tarefas — zero violações e zero variantes injustificadas
por dentro das 3 telas: 60 elementos interativos · 48 atributos ARIA, verificados: zero violações · cabeçalhos com scope · 2 captions
A adaptação: quando variar é acertar
E a "variação" que a régua descontou do A11Y.md era, na maior parte, adaptação correta. Existe
um aviso invisível chamado aria-sort: ele diz ao leitor de tela "esta coluna está
ordenada, em ordem decrescente". Numa jornada real da condição do A11Y.md, a tabela de pedidos,
que o usuário pode ordenar, carrega esse aviso nos cabeçalhos; já a tabela do carrinho, que não
ordena, não o carrega. É assim que deve ser: anunciar ordenação onde não existe seria mentir
para quem ouve a página. A régua contou isso como "2 variantes" para um mesmo componente
(tabela) e descontou do A11Y.md exatamente o que a acessibilidade manda fazer.
Figura 7 · As "2 variantes" que a régua puniu — mesma jornada, condição A11Y.md
aria-sort: quem usa leitor de tela sabe o que está ordenado e em que direção.aria-sort, porque anunciar ordenação onde não há seria mentir para o usuário.A lição que a régua me deu
Régua congelada não aceita recurso depois do jogo, então o número fica de pé. Mas ele me ensinou a corrigir a premissa que eu mesmo congelei.
Para acessibilidade, consistência nunca foi "ser igual o tempo todo". É ser previsível onde a previsibilidade serve ao usuário, e adaptar onde o contexto exige.
O critério de contar variantes mistura três comportamentos que precisam de nomes separados:
- A constância de quem faz bem sempre.
- A uniformidade de quem faz pouco sempre.
- E a adaptação de quem faz diferente onde o contexto exige.
Fazer menos, com menos qualidade, também varia menos. A régua que congelei para este estudo (a v1) enxerga os três como a mesma coisa. A próxima versão do instrumento (a v2), construída com os exemplos datados deste estudo como casos de teste, vai separá-los como deve ser.
Cadê o CSS (folha de estilo) que estava aqui?
O segundo bloco de achados nasceu de mais um erro meu, o terceiro que este processo pegou.
Ao montar uma ilustração com as telas, notei que elas estavam sem estilo nenhum. Fui atrás e descobri que o servidor do meu verificador rotulava todo arquivo como HTML, e o navegador, ao receber uma folha de estilos com rótulo errado, descarta em silêncio. Resultado: o robô tinha auditado as 210 telas sem o CSS aplicado. Isso importa porque o CSS não é enfeite para a acessibilidade — é nele que vivem tamanhos, margens, espaçamentos e CORES. Sem cor não existe contraste para julgar. Consertei o rótulo e medi tudo de novo. As duas medições ficam publicadas.
Com o CSS no lugar, a história mudou.
No modelo grande, "sem instrução" é um desastre de contraste: numa jornada típica, 45 elementos reprovados, páginas cinza sobre cinza.
Com a frase mágica ou com o A11Y.md, zero.
E zero dos dois lados significa que o robô chegou ao próprio teto. Quando as duas condições zeram, o instrumento não tem mais o que medir, e a diferença que restar entre elas mora no que ele não alcança.
No modelo pequeno, uma régua só não conta a história, porque "contar violações" mistura perguntas diferentes. A Tabela 5 traz cinco réguas, cada uma explicada e rotulada na própria linha.
(Como ler a tabela: o Estudo 2 foi registrado como estudo descritivo. São cinco jornadas por condição em cada agente, e cinco é pouco para prova estatística, então ele estima e descreve em vez de cravar. A régua da consistência é a registrada como principal, e o resultado dela fica de pé. As outras linhas são leituras que eu construí depois de ver as páginas, e estão rotuladas assim. Nenhuma separa as condições com certeza estatística. São direções e mecanismos, não vitórias.)
| Régua | Nada | Frase | A11Y.md | É a régua… |
|---|---|---|---|---|
| Consistência entre telasrégua registrada · primária | carimbo uniforme | empate | empate, com adaptação | de quem mantém |
| Decisões erradasquantos erros diferentes o modelo cometeu · exploratória | 9 | 11 | 8 | de quem conserta |
| Jornadas 100% limpassites inteiros sem nenhuma violação · leitura pós-hoc | 0 de 5 | 0 de 5 | 2 de 5 | de quem entrega |
| Telas com erropares tela×erro: cada erro, contado em cada tela onde aparece · leitura pós-hoc | 33 | 13 | 38 | de quem navega |
| Elementos apontadosquantos botões, textos e itens o robô marca · registrada · secundária | 167 | 42 | 144 | de quem audita |
O gradiente da tabela expõe o mecanismo do erro — e mecanismo, aqui, é o padrão de como o modelo erra, não um termo da metodologia. Quanto mais uma régua pesa a repetição, pior o A11Y.md parece. Quanto mais ela conta decisões, melhor. A explicação está na Figura 8: quase todo o volume do A11Y.md vem de um único molde errado, replicado pelo site inteiro.
A tentação aqui seria uma subtração de conveniência. Tirar do A11Y.md os 98 elementos do atributo único da Figura 8 e declarar empate com a frase. Não vale. A frase mágica também tem o seu erro único que se multiplica, uma jornada com 16 imagens sem alternativa, e subtração honesta se aplica a todos os braços ou a nenhum. Aplicada a todos, ela já existe na tabela e tem nome: é a régua de decisões erradas, onde cada erro conta uma vez, não importa quantas vezes o molde se repita. Nela, o placar é 9 sem nada, 11 com a frase, 8 com o A11Y.md. Mas os erros básicos da web zeraram de um lado só.
As réguas dizem coisas diferentes porque servem a pessoas diferentes. A primeira leitura é a que dói. Para quem navega, que é a pessoa com deficiência, a frase grátis produz hoje menos esbarrões que o A11Y.md neste modelo pequeno. Essa régua vem antes das outras, e é a primeira que o roteiro lá no fim ataca. Dito isso, assumo a minha posição em vez de terminar em cima do muro. Para quem adota e mantém o projeto, as réguas de quem conserta e de quem entrega são as que mais dizem, e nelas a direção favorece o A11Y.md, sem separação estatística neste tamanho de amostra. Quem decide não sou eu. É a régua v2, encomendada com hierarquia e juiz declarados antes da próxima rodada.
A Tabela 6 aprofunda a linha das decisões erradas, respondendo de que natureza cada uma é:
| Natureza | Nada | Frase | A11Y.md |
|---|---|---|---|
| O básico da webimagem sem alternativa, campo sem rótulo | 4 jornadas | 2 jornadasuma com 16 imgs sem alt | zero |
| Contraste de cor | 5 jornadas | 4 jornadas | 3 jornadas |
| ARIA entusiasmadoatributo onde não pode | — | 4 ocorrências | 2 ocorrências |
| Composição avançada quase-certaestrutura rica com um degrau errado | — | — | 1 componenteos 98 elementos moram aqui |
Figura 8 · "Composição quase-certa" em código real — e o conserto de um atributo
O que o modelo montou (jornada real)<ul role="menu" hidden>
<li>
<a role="menuitem">All Categories</a>
</li>
…
o padrão de menu está quase todo lá,
mas o <li> pelado entre o menu e o
menuitem quebra a hierarquia ARIA:
98 elementos apontados nas 7 telas
O que faltava<ul role="menu" hidden>
<li role="none">
<a role="menuitem">All Categories</a>
</li>
…
um atributo por item.
o bug único que derruba 98 elementos
de uma vez: o erro de quem sabia o
padrão e tropeçou no degrau
E a Figura 8 é a regra, não a exceção. Nas 18 jornadas do estudo que tiveram alguma falha, em 12 uma única regra concentra três quartos ou mais dos elementos apontados: erro de agente, quando vem, vem sistemático — um molde errado replicado pelo site inteiro, não caos espalhado. Isso muda o preço do conserto: é um conserto, não uma caça.
O A11Y.md zerou duas das classes de erro mais persistentes das últimas duas décadas, rótulo ausente e alternativa de imagem ausente, em todas as jornadas.
A frase mágica deixou o básico vazar. E os erros que sobraram para o A11Y.md são de outra espécie: erros de quem está construindo algo sofisticado num modelo que quase dá conta.
(O censo WebAIM Million lembra que o maior débito de acessibilidade da web é outro: contraste de cor, presente em 83,9% das páginas. É exatamente onde o A11Y.md ainda falha, e onde o roteiro ataca primeiro.)
E registro a hipótese desconfortável, porque ela merece nome. A explicação rival para a Figura 8 não é "faltou um atributo". É "sobrou ambição". Uma navegação feita de links simples, sem role nenhum, teria zero violações. O erro dos 98 elementos só existe porque o modelo tentou o padrão ARIA sofisticado e parou no meio da escada — e nenhuma jornada sem instrução tenta essa escada.
Se o A11Y.md empurra o modelo pequeno para estruturas que ele não termina, o remédio tem efeito colateral. A área de acessibilidade tem um princípio antigo para isso: ARIA nenhum é melhor que ARIA ruim. A resposta entrou no roteiro, com critério de sucesso declarado: essa classe de erro precisa desaparecer nas próximas rodadas, não ser consertada caso a caso.
A frase mágica e o A11Y.md falham em andares diferentes do prédio.
E a conta de tokens?
O Estudo 2 também existia para fechar uma conta que o Estudo 1 deixou aberta. Pense no A11Y.md como a dose de um remédio. No primeiro estudo, por desenho, ela era readministrada inteira a cada tarefa: dose cheia, toda vez. Isso mede o teto do custo, não o custo de uso, porque ninguém toma o remédio inteiro de novo a cada sintoma. O paciente toma uma vez e deixa o efeito trabalhar ao longo do tempo. No site inteiro do Estudo 2, a posologia é a real: o agente lê o A11Y.md uma vez, no começo da sessão, e o efeito dura a sessão inteira, com o cache do modelo fazendo o resto.
| Regime medido | Nada | Frase | O placebo | A11Y.md |
|---|---|---|---|---|
| Estudo 1 · dose cheia por tarefao teto do custo — mediana por geração | 2,6 mil | 3,0 mil | 50,4 mil | 26,1 mil |
| Estudo 2 · dose única por sessãoo custo real — tokens novos por tela (sessão ÷ 7) | 21 mil | 19 mil | — | 41 mil |
(As duas linhas medem o mesmo modelo pequeno. "Por tela" é o total da sessão dividido pelas 7 telas da jornada. O placebo não entrou no Estudo 2 por decisão registrada: a pergunta que ele responde já estava respondida, e uma jornada custa horas.)
O número, sem maquiagem: com o A11Y.md, cada tela custa mais caro em tokens novos. 2,1 vezes mais no modelo pequeno da tabela. 1,4 vezes no modelo grande, que gasta 46 mil por tela sem instrução e 62 mil com o padrão. Longe do fator de dez que o Estudo 1 sugeria a quem lesse só o teto, mas longe de ser de graça.
De onde vem o sobrepreço
Abri a conta do modelo pequeno em duas rubricas:
- Leitura — todo contexto novo que entra na sessão: documentação, os arquivos do próprio site, o raciocínio. Responde por 128 dos 142 mil tokens extras de uma jornada.
- Escrita — o código e os documentos que saem. Responde por 12 mil.
E aqui mora uma surpresa honesta. A biblioteca inteira do padrão tem cerca de 44 mil tokens e é lida no máximo uma vez, então ela explica no máximo um terço do sobrepreço. O resto é o custo do tratamento mais completo que o padrão prescreve. O agente relê as próprias telas, que ficaram mais ricas. Consulta e atualiza o relatório e o registro de decisões. Pensa mais antes de entregar.
Isso corrige uma expectativa que eu mesmo tinha. Eu esperava que, quanto maior a jornada, mais o custo diluísse, já que a leitura acontece uma vez só. A diluição grande de fato aconteceu, e a Tabela 7 mostra: readministrar a dose a cada tarefa custava 10 vezes o "nada"; a dose única por sessão custa 1,4 a 2. Só que dali em diante a curva não desce até 1. A parte que dilui, a leitura única, é minoria do sobrepreço. Jornadas maiores tendem a um piso, estimado com folga em 1,3 vezes no modelo grande e 1,7 no pequeno, porque o que encarece não é ler a receita, mas sim seguir o tratamento que ela prescreve. Este estudo não mede essa curva, porque todas as jornadas têm 7 telas. Medi-la virou pauta no roteiro.
O mecanismo que segura a conta
A economia do carregamento sob demanda foi medida, não suposta. O agente lê o núcleo (~10 mil tokens) e busca só o guia que a tarefa pede, não o acervo inteiro de ~45 mil. No Estudo 1:
- O guia certo da tabela de gatilhos foi carregado em 88% das gerações. O placebo, com o mesmo mapa, acertou 96% — o índice funciona em qualquer assunto.
- Foram 3,3 leituras de arquivo por geração com o A11Y.md, contra 4,7 do placebo.
- No julgamento humano das leituras extras, 70% das do A11Y.md eram justificadas por regra escrita no próprio padrão (77% no placebo). O resto é iniciativa do modelo, contada e publicada, não punida.
A economia não é o padrão sendo ignorado. É o padrão sendo bem indexado. E é ela que explica o placebo custando o dobro do A11Y.md (50 contra 26 mil) na linha de cima da tabela.
O que os tokens compram
No regime da conta do Estudo 2, a diferença de preço pagou:
- O relatório de verificação e o registro de decisões em 10 de 10 jornadas, contra zero em 20 sem o padrão, as 10 da frase incluídas. São os documentos que auditorias cobram caro para reconstruir depois.
- O básico da web zerado. Isso parece o mínimo a ser feito, mas, como visto, é algo grande.
Os regimes anteriores, cada um na sua moeda, já tinham mostrado o resto: o julgamento humano em 5 de 5 na bancada do Estudo 1, e algum artefato de governança em 27 de 27 execuções dos agentes reais.
Honestamente, esses documentos são somente rastro de processo que contabilizou presença, não qualidade. Nenhum relatório teve o conteúdo auditado ainda, e relatório escrito pela própria IA não é auditoria, nem substitui teste com tecnologia assistiva. Validar essa camada é pauta aberta. Aliás, vale o registro de que todo o protocolo do A11Y.md exige a auditoria humana (human in the loop) e sem ela não afirma acessibilidade.
No que o robô mede, a frase mágica é o genérico da acessibilidade: entrega o mesmo princípio ativo pelo preço de uma linha. O que não vem na caixinha é o resto do pacote. Quem compra só a saída, paga menos.
Quem compra a saída com rastro de processo, governança e memória de decisões, paga entre 40% e 100% a mais em tokens novos (em tokens totais, com o cache cobrado a taxa reduzida, entre 1,5 e 2,6 vezes) mas leva um pacote de governança que a frase mágica não entrega.
O usuário do A11Y.md paga mais tokens e recebe mais do que tokens: recebe processo, registro e memória.
O que esses achados já mudaram no roteiro do A11Y.md
Este estudo termina do jeito que eu queria que terminasse: virando pauta. Seis mudanças já entraram no roteiro das próximas versões, cada uma com o achado que a encomendou.
- Contraste sai do raciocínio e vai para a ferramenta. Se a hipótese está certa, pedir que o modelo calcule contraste é pedir para errar. Duas rotas candidatas, com a decisão em aberto: dar paletas de cores já verificadas para copiar, ou embutir no protocolo uma verificação determinística, chamada sob demanda como os guias já são. A literatura de reparo aponta a segunda — delegar o cálculo à ferramenta em vez de confiar no modelo. E junto vai o teste que separa as duas explicações possíveis, não saber calcular ou preferir o cinza bonito do treino: pedir ao modelo que julgue pares de cores prontos, além de produzi-los. Se julga bem e produz mal, é gosto treinado. Se julga mal, é aritmética.
- Composição ARIA com corrimão, e preferência pelo simples. O erro de 98
elementos foi um degrau (
lisemrole="none"dentro de menu). Os guias passam a mostrar as hierarquias completas dos padrões compostos e, mais importante, a mandar preferir HTML nativo quando o padrão composto não é exigido. Links puros não têm degrau. O critério de sucesso: a classe "composição quase-certa" precisa desaparecer da próxima rodada. - Gatilhos de carregamento rebalanceados. O guia de percepção visual foi lido por 13 de 100 gerações, porque seus gatilhos ("color, palette") não aparecem em pedido nenhum, embora toda página tenha cor. Gatilhos passam a refletir o que toda tarefa faz, não só o que o pedido diz.
- Régua de consistência v2. Separar constância, pobreza uniforme e adaptação correta, usando os exemplos datados deste estudo como casos de teste do próprio instrumento. E com a hierarquia das réguas (qual manda, para quem) registrada antes da próxima rodada, não depois.
- A curva de amortização como desfecho. O custo foi medido num único comprimento de jornada, 7 telas. Saber se o sobrepreço dilui em jornadas maiores pede jornadas de 3, 7 e 14 telas, com o custo por tela como desfecho registrado. A decomposição da conta já dá o palpite: o custo de ler dilui, o custo de caprichar não. A rodada testa.
- Olho humano como etapa de protocolo. Quatro defeitos de instrumento foram achados neste projeto, e os quatro por contato humano com o objeto, nunca por log — três pelo olho nas telas, o quarto por uma pergunta simples diante de uma tabela. Estudos futuros ganham a regra: nenhum lote de medição entra em resultado sem uma amostra sorteada passar por olho humano antes.
O que ainda vem
Duas frentes já registradas continuam abertas. A primeira: os braços de extensão, o mesmo protocolo congelado rodando nas APIs dos modelos de fronteira (Claude e GPT), que são quem responde a pergunta que o modelo pequeno não alcança: o empate da frase mágica sobrevive onde os adotantes realmente vivem? Os pedidos de créditos de pesquisa foram submetidos aos programas da Anthropic e da OpenAI; se vierem, o protocolo roda como está, sem mudar uma vírgula. A segunda: a régua de consistência v2 e a próxima rodada do Estudo 2, com as correções que este relato documenta. Nada pausa esperando resposta de ninguém.
O veredito, em uma passada
- Contra o placebo, confirmado: um terço das violações graves. Documento grande sozinho não faz o serviço; o que trabalha é o documento certo.
- Contra a frase mágica, no que o robô detecta: empate no modelo pequeno, publicado sem desconto. No modelo grande as duas condições zeram, que é o teto do instrumento. A literatura já previa esse resultado, e a diferença do padrão mora onde o robô não mede.
- No julgamento humano cego, o A11Y.md não falhou nenhuma vez (5 de 5, contra 2 de 3 da frase; julguei às cegas, em amostra pequena, e por isso trato como sinal, não como placar), e todos os seus modais usavam o elemento nativo correto.
- Nos agentes reais, o padrão dominou: 25 de 27 páginas 100% limpas contra 10 de 27 sem ele, em três fornecedores — cada um contra a própria linha de base.
- O básico da web foi zerado nas duas escalas: rótulos, nomes e alternativas de imagem, os erros de vinte anos, praticamente desapareceram com o A11Y.md no contexto.
- Processo emerge sozinho: por design, 27 de 27 execuções com agentes reais produziram documentação de processo sem ninguém pedir — relatório em 26, registro de decisões em 21, pelo menos um dos dois em todas. Zero de 27 sem o A11Y.md.
- Consistência deu empate e ensinou: parte da "variação" do A11Y.md é adaptação correta que a régua v1 não sabe reconhecer. A v2 está encomendada.
- O custo é conhecido: 1,4 a 2 vezes mais tokens novos por tela, comprando registro, governança e memória de decisões.
- E o processo pegou os próprios erros: quatro defeitos de instrumento, todos achados, consertados e publicados com as duas medições preservadas. É assim que eu queria que o estudo fosse julgado.
O plano de ficar desnecessário
Termino com a reflexão que este estudo me deu, e que talvez seja a afirmação mais forte do texto inteiro.
O empate com a frase mágica não me assusta. Ele faz parte do plano.
Modelos de linguagem aprendem com a web que existe. Se hoje eles entregam interfaces inacessíveis por padrão, é porque foram treinados numa web inacessível por padrão. Cada produto que nasce acessível agora, seja pelo A11Y.md, seja pelo trabalho diário dos profissionais de acessibilidade, entra na massa de dados que vai treinar os modelos de amanhã. E esses modelos vão entregar telas acessíveis sem que ninguém peça, porque terão aprendido com uma web onde construir assim era simplesmente o jeito de construir.
A pesquisa acadêmica já deu nome a esse mecanismo: um artigo recente do W4A, a conferência de acessibilidade web, pergunta no próprio título como quebrar o ciclo do código gerado que perpetua barreiras. O A11Y.md é a minha resposta operacional a essa pergunta em aberto. E a aposta tem teste, porque tese sem critério de refutação é fé: as mesmas tarefas congeladas deste benchmark, rodadas na condição "sem nada" a cada geração nova de modelos, têm de melhorar release após release — o protocolo já registra esse delta de versão como exploratório. Se a curva não subir, a tese cai, e eu publico a queda.
É por isso que eu quero que o A11Y.md se torne um produto de qualidade desnecessário. Quero que ele tenha os dias contados. O "faça acessível" de hoje já melhora qualquer produto vibe-codado, e isso é uma vitória de todos nós. O de amanhã vai funcionar ainda melhor, alimentado pelo que o A11Y.md e esta comunidade entregam agora. E chega o dia em que nem a frase vai ser preciso dizer, porque a resposta já terá nascido pronta.
A ambição do projeto não é ser eterno. É tornar a acessibilidade banal no fazer, sem pedido especial e sem cerimônia, apenas o jeito normal de construir interfaces. E inegociável no porquê: acessibilidade é um direito, e é justamente por isso que ela precisa virar rotina.
No fim, é a metáfora deste texto se completando: todo remédio de verdade deveria trabalhar pela própria aposentadoria. E, para que fique evidente, a doença nesta metáfora nunca foi a deficiência de ninguém. A doença são os produtos digitais que excluem, e a cura é o ambiente passar a construir certo por padrão. O A11Y.md existe justamente para que um dia ele não precise mais existir.
Eu quero a cura. Não quero vender remédio para sempre.
Confira — não acredite
Tudo o que eu afirmei aqui tem endereço público: os dois protocolos registrados antes de qualquer dado, o conjunto completo com identificador permanente: as 664 páginas geradas (400 do primeiro estudo, 210 telas de jornada do segundo e 54 páginas dos agentes reais), cada laudo, cada captura de tela, cada erro meu documentado com data, porque teve erro meu, quatro, e os quatro foram achados pelo processo funcionando. E o código, aberto de ponta a ponta. E esse convite carrega a parte que eu considero mais importante do trabalho inteiro. Não acredite em mim. Confira.
(E uma pergunta que merece resposta antes de ser feita: rodar tudo de novo não produz os mesmos bytes — modelo de linguagem não oferece semente de repetição, e o estudo não promete isso. Promete o que é mais forte: o processo se repete. Prompts congelados, versão do modelo registrada em cada uma das 1.197 chamadas, e todos os arquivos publicados — qualquer pessoa reanalisa sem reexecutar, e reexecuta do zero se quiser.)
Isso foi um primeiro movimento, de bancada pequena, com limites escritos dentro do próprio estudo, feito por alguém que aprendeu o método enquanto o executava. Os dois maiores limites, ditos sem rodeio:
Primeiro, as dez tarefas vivem dentro do mapa de guias do próprio padrão (16 dos 29 guias nunca foram exercitados por tarefa nenhuma), então estes estudos ainda não separam "melhora a acessibilidade" de "cumpre bem o próprio manual" — tarefas fora do mapa são braço futuro.
Segundo, o robô enxerga apenas uma fração. As estimativas publicadas dão a ferramentas automáticas o alcance de 30% a 57% das barreiras reais, então "zero violações" aqui significa zero do que o robô alcança — nunca "site acessível", nunca experiência vivida. Essa ponte é a Fase 2, registrada: pessoas com deficiência usando produtos de verdade, porque nada neste texto substitui quem usa tecnologia assistiva.
O que vem depois depende de uma pergunta que eu devolvo a você, que usa ou desconfia do projeto: que evidência faria diferença para o seu dia a dia? Ela tem endereço: abra uma issue no repositório com a sua dúvida, e ela entra no roteiro. A próxima rodada de testes começa exatamente onde a sua dúvida estiver.