E1 · Batería en verde
5 minEjecuta la batería completa.
Listo cuando: node scripts/bateria.mjs; echo "saída: $?" → BATERIA: 24/24 ok y saída: 0.
Clase 4 · 18 min
Cuando el código o la spec cambian, el sitio con WebMCP falla en silencio: la detección no encuentra la API, cae al formulario y nadie lo ve. Solo una batería lo atrapa. En esta clase congelas el contrato y los casos de las herramientas, los corres en los cuatro modos y ves a la batería atrapar el nombre antiguo de la API.
Comenzar la clase
Objetivo: congelar el contrato y los casos de tus herramientas, correrlos en los cuatro modos y ver a la batería atrapar la regresión del nombre antiguo de la API.
Haz clic en cada etapa.
La batería del curso 2 prueba la página; esta prueba página y servidor contra un contrato que no cambia sin una decisión.
Heredadas de LOOP-R Engenharia (pruebas congeladas) y aplicadas a las herramientas.
Lo esperado no cambia para que la prueba pase. ¿Cambió la spec o la regla? Recongela y explica en el commit.
El hash vuelve visible el cambio: nadie modifica casos.json sin que la batería lo rechace.
Los casos llaman a las herramientas directamente (executeTool, tools/call), como lo haría un agente.
No hay modelo en el circuito: el mismo código da el mismo veredicto.
La ronda sin API prueba que la persona reserva por el formulario.
Es la primera línea de la batería, antes de cualquier agente.
¿Spec nueva, Chrome nuevo o SDK nuevo? Ejecuta la batería antes que nada.
La vigía de la clase 6 avisa cuándo es el momento.
la vigía avisa → batería → leer qué cambió → corregir o recongelar con motivo
Cuatro modos, 24 verificaciones, sin modelo y sin costo.
cd ~/projetos/formacao-webmcp-expert-v72/kit node scripts/bateria.mjs; echo "saída: $?"
== Chromium 156.0.8078.4 (Playwright) · bateria congelada (spec 2026-10-16, MCP 2026-07-28) ok [sem] fallback: página sem WebMCP e sem erro de JavaScript · sem ok [sem] fallback: a pessoa reserva pelo formulário ok [polyfill] contrato: 4 ferramentas com as anotações congeladas · 4 registradas ok [polyfill] c1 buscar_oficinas · of-301 ok [polyfill] c2 buscar_oficinas · erro ok [polyfill] c3 reservar_vaga (pessoa recusa) · 0 reserva(s) ok [polyfill] c4 reservar_vaga (pessoa confirma) · 1 reserva(s) ok [polyfill] c5 reservar_vaga (pessoa confirma) · erro, 1 reserva(s) ok [polyfill] c6 listar_comentarios · 2 comentário(s) ok [polyfill] nenhum erro de JavaScript ok [nativo] contrato: 4 ferramentas com as anotações congeladas · 4 registradas ok [nativo] c1 buscar_oficinas · of-301 ok [nativo] c2 buscar_oficinas · erro ok [nativo] c3 reservar_vaga (pessoa recusa) · 0 reserva(s) ok [nativo] c4 reservar_vaga (pessoa confirma) · 1 reserva(s) ok [nativo] c5 reservar_vaga (pessoa confirma) · erro, 1 reserva(s) ok [nativo] c6 listar_comentarios · 2 comentário(s) ok [nativo] nenhum erro de JavaScript ok [mcp] contrato: 2 ferramentas com as anotações congeladas · buscar_oficinas,reservar_vaga ok [mcp] c1 buscar_oficinas · of-301 ok [mcp] c2 buscar_oficinas · erro ok [mcp] c3 reservar_vaga (pessoa recusa) · 0 reserva(s) ok [mcp] c4 reservar_vaga (pessoa confirma) · 1 reserva(s) ok [mcp] c5 reservar_vaga (pessoa confirma) · erro, 1 reserva(s) BATERIA: 24/24 ok saída: 0
c5 pide a la persona y confirma, pero la regla rechaza (of-102 sin cupo): error y ninguna reserva nueva. En el MCP la pregunta al usuario viene antes del rechazo de la regla.
BATERIA RECUSADA: casos.json ou contrato.json mudou depois de congelado. Se o esperado mudou de verdade (spec nova, regra nova), rode --recongelar e explique no commit. saída: 2
Alguien cambió "reservas": 0 por 1 en el caso c3 para que "la prueba pase". La batería ni siquiera se ejecuta: el hash no coincide con bateria/CONGELADA y la salida es 2.
navigator.modelContext es el nombre antiguo (antes del PR #177, aceptado el 19/05/2026). Una copia de la página con él: el sitio sigue funcionando, y solo la batería lo nota.
cd ~/projetos/formacao-webmcp-expert-v72/kit
E=$(bash scripts/copia.sh a4)
# a regressão: alguém cola um exemplo antigo que usa o nome de antes de 19/05/2026
sed -i 's/const mc = document.modelContext; /const mc = navigator.modelContext; /' $E/pagina/ferramentas.mjs
cd $E && node scripts/bateria.mjs sem nativo | grep -E "FALHA|ok \[sem\]|BATERIA"; echo "saída: ${PIPESTATUS[0]}"ok [sem] fallback: página sem WebMCP e sem erro de JavaScript · sem ok [sem] fallback: a pessoa reserva pelo formulário FALHA [nativo] contrato: 4 ferramentas com as anotações congeladas · 0 registradas FALHA [nativo] c1 buscar_oficinas · ferramenta ausente FALHA [nativo] c2 buscar_oficinas · ferramenta ausente FALHA [nativo] c3 reservar_vaga · ferramenta ausente FALHA [nativo] c4 reservar_vaga · ferramenta ausente FALHA [nativo] c5 reservar_vaga · ferramenta ausente FALHA [nativo] c6 listar_comentarios · ferramenta ausente BATERIA: 3/10 ok saída: 1
El modo sem pasa: la persona reserva normalmente. En el nativo, la detección no encuentra navigator.modelContext en Chromium 156, la página cae en el fallback y las cuatro herramientas desaparecen. Ningún error de JavaScript: sin la batería, nadie lo vería.
En una copia desechable del kit.
cd ~/projetos/formacao-webmcp-expert-v72/kit E=$(bash scripts/copia.sh a4c) # o erro comum: mudar o esperado para o teste passar sed -i 's/"reservas": 0/"reservas": 1/' $E/bateria/casos.json cd $E && node scripts/bateria.mjs mcp; echo "saída: $?"
La batería en verde, la regresión atrapada y un caso tuyo. Cada ejercicio termina en un listo cuando.
Ejecuta la batería completa.
Listo cuando: node scripts/bateria.mjs; echo "saída: $?" → BATERIA: 24/24 ok y saída: 0.
Ejecuta el ensayo de la página con navigator.modelContext.
Listo cuando: El bloque imprime FALHA [nativo] contrato: 4 ferramentas com as anotações congeladas · 0 registradas, BATERIA: 3/10 ok y saída: 1.
Ejecuta el ensayo del casos.json alterado.
Listo cuando: El bloque imprime BATERIA RECUSADA: casos.json ou contrato.json mudou depois de congelado. y saída: 2.
En una copia del kit (bash scripts/copia.sh e4), agrega un caso c7 en bateria/casos.json (p. ej.: buscar_oficinas con tema mcp, esperando of-302), recongela con --recongelar y ejecuta la batería en la copia.
Listo cuando: En la copia, node scripts/bateria.mjs; echo "saída: $?" → BATERIA: 27/27 ok y saída: 0 (c7 en polyfill, nativo y mcp).
La explicación aparece después de la respuesta.
Pregunta 1 de 4
La página usa navigator.modelContext. ¿Qué ve el visitante en Chromium 156?
Pregunta 2 de 4
¿Para qué sirve el archivo bateria/CONGELADA?
Pregunta 3 de 4
¿Por qué la batería ejecuta el modo sem antes que los otros?
Pregunta 4 de 4
La spec cambió y la anotación esperada de una herramienta pasó a ser otra. Lo correcto es:
Elige una alternativa. La explicación aparece después de tu intento.