Síntoma
El Oráculo (synthesizeAnswer() en archivo-core.ts) ocasionalmente retorna un muro de comillas repetidas:
La """…""" Auditoria Suprema """…
Este es un segunda forma de degeneración de Gemma 4 (modelo estocástico): el modelo emite cientos de veces el carácter " seguidas. El mecanismo de rescate greedy de JSON (#96) captura esta cadena tal cual, y al decodificar \" → ", el muro persiste en la respuesta final.
Por qué la defensa anterior no lo cogía
La defensa clampRepetition() (introducida en #94) operaba a nivel de palabras (dividiendo por espacios). Un muro de comillas como """""" es un único token sin espacios, por lo que escapaba a esa detección.
Clasificación: Esta es una instancia del footgun s109 — un defecto estocástico del modelo que requiere defensa en tiempo de ejecución, no en entrenamiento.
Fix (PR #98)
Se introdujo una defensa de carácter:
-
Regex de detección: Cualquier carácter que se repita 25+ veces seguidas es tratado como respuesta corrupta:
if (answer && /(.)\1{24,}/.test(answer)) { degraded = true; answer = genericFallback(); } -
Fallback honesto: Se devuelve un mensaje genérico amable (en el idioma detectado) indicando que la pregunta es muy amplia, en lugar de contaminación de datos.
-
Refactor de fallback: Extraído a función
genericFallback()(reutilizable en catch del parse JSON y en esta defensa). -
Flag
degraded=true: Indica al cliente que la respuesta no debe reenviarse como history (por #97).
Validación
- ✅ Muro de comillas detectado correctamente
- ✅ Comillas legítimas en frases (
"auditoría exhaustiva") no afectadas (no alcanzan 25 seguidas) - ✅ Separadores markdown cortos (
"") intactos - ✅ Typecheck: verde
Cobertura de defensas contra degeneración (ahora completa)
| Tipo de defecto | Defensa | PR |
|---|---|---|
| Repetición de palabras | clampRepetition() | #94 |
| JSON ininteligible + code fences | Rescate greedy | #96 |
| Respuesta degradada contamina history | Flag degraded=true | #97 |
| Repetición de carácter (muros) | Regex + fallback | #98 |
Juntas forman una red defensiva multinivel contra los footguns estocásticos del modelo.
Nota de arquitectura: El handler
archivo-core.tscontiene lógica crítica de sintetización del Oráculo pero aún no tieneentity_pagedocumentada. Sería recomendable crearentity--functions--handler--archivo-coreen un futuro ingest para visibilidad arquitectónica.
Véase también
- [[incident—20260605—oraculo-history-contamination-s109]]
- [[incident—20260605—gemma-4-help-loop]]
- [[feature—biblioteca—anti-degeneracion-gemma-4]]