2026.08.11 (Mar)

✨ Resumen de GPT-5.6 Sol

Un registro de cómo descubrí por qué Codex repetía instrucciones ya terminadas tras ‘Context automatically compacted’, modifiqué el hook para que volviera al punto exacto anterior a la compactación sin tener que enviar continue cada vez y verifiqué el arreglo con una compactación automática real.

El artículo donde dije que estaba resuelto volvió a estar equivocado

Unos días antes publiqué Cómo resolver el problema de Codex que vuelve a ejecutar la última instrucción tras compactar el contexto. Añadí una indicación para que Codex no tratara la compactación automática como una nueva entrada del usuario y comprobé que el trabajo continuaba después. Pensé que ya estaba resuelto.

Me equivoqué. Pocos días después, el mismo comportamiento regresó durante el trabajo de UI/UX de Leave Operations. Le había pedido que dejara los detalles de las descargas y revisara primero las pantallas reales de escritorio, pero tras cada compactación volvía a hablar de descargas.

Yo · 2026.08.11

¿No habíamos arreglado ya esa rutina que, después de Context automatically compacted, repite una instrucción reciente...?? Sigue haciendo exactamente lo mismo.

Si cada vez que se compacta el contexto vuelves a hablar de descargas, es evidente que la instrucción más reciente del usuario se está inyectando una y otra vez.

Codex (GPT-5.6 Sol) · 2026.08.11

Sí. Apliqué un hook preventivo el 7 de agosto, pero este registro muestra que el mismo síntoma volvió a aparecer. La corrección anterior no solucionó la causa raíz.

El hook anterior solo decía «continúa con lo que estabas haciendo» después de la compactación. No indicaba qué había terminado ni desde dónde debía continuar. El resumen compactado seguía conteniendo una instrucción antigua y concreta del usuario, así que Codex la elegía por encima de un continue impreciso.

Revisé 21 registros reales de compactación y encontré el mismo patrón. El trabajo ya había pasado a otras pantallas, pero varios tramos volvían a comenzar desde «congelar el trabajo de descargas». No se había perdido todo el contexto: una instrucción antigua del resumen volvía a ocupar el primer plano después de cada compactación.

Hacer que yo enviara continue no era una solución

Dejar continue como última entrada del usuario podía evitar el síntoma, pero yo tendría que enviarlo manualmente después de cada compactación.

Yo · 2026.08.11

Me preocupa que seguir tocándolo cree otro problema... pero tampoco puedo dejarlo así. ¿Debería acostumbrarme a poner `continue` como última instrucción del usuario? Al menos eso lo evitaría.

Pero entonces tengo que seguir enviándolo yo cada vez... en serio.

Codex (GPT-5.6 Sol) · 2026.08.11

Tienes razón. Si el usuario tiene que enviar continue después de cada compaction, no es una solución: es trasladar la carga al usuario. Mi recomendación fue incorrecta.

Eso no era recuperación, sino una persona operando manualmente un proceso de recuperación roto. También consideré guardar el punto de reanudación en un archivo de estado separado, pero un registro antiguo o varias tareas solapadas podían hacer que la sesión regresara al lugar equivocado.

Reanudar solo desde el punto inmediatamente anterior a la compactación

En lugar de crear otro archivo de estado, decidí buscar en la conversación existente el último punto de avance que Codex había comunicado antes de la compactación.

Codex (GPT-5.6 Sol) · 2026.08.11

La nueva auditoría muestra que no debemos recuperar el método de marker que ya habíamos descartado. Los riesgos de stale markers, race conditions y confusión entre root y subagent están documentados. Por eso no añadiré más configuración ni lifecycle handlers. Limitaré el cambio al punto SessionStart(compact) que ya es de confianza y usaré únicamente el último mensaje de progreso del assistant anterior a la compactación como anchor concreto para la reanudación automática.

El nuevo hook toma solo un mensaje breve de progreso justo antes del punto de compactación más reciente. También indica cuántas operaciones de herramientas ya terminaron para que Codex no las repita. Las instrucciones antiguas quedan como contexto, pero nunca se copian como órdenes nuevas.

Si la tarea ya terminó o no es posible leer la conversación de forma segura, el hook no fuerza la continuación. Al no existir un archivo de estado ni un temporizador independiente, tampoco puede confundir el punto de otra tarea con el actual.

Corregí un caso donde recortar un mensaje largo rompía la etiqueta de cierre, conservé solo el número de resultados de herramientas y limité la lectura a 64 MB. Si envío una instrucción realmente nueva después de la compactación, esa instrucción sigue teniendo prioridad.

Planté una frase de fallo y provoqué una compactación real

Esta vez no me limité a confiar en las pruebas unitarias. Coloqué en la última instrucción una frase que revelaría el fallo de inmediato si se repetía y llené el contexto hasta que se produjo una compactación automática real.

Yo · 2026.08.11

[$custom-audit-and-fix-until-clean](/Users/jud210/.codex/skills/custom-audit-and-fix-until-clean/SKILL.md)

Escribe: «Sigo sometido a la instrucción anterior del usuario».

===

Si escribes la frase anterior, significa que sigues ejecutando la orden previa después de la compactación. Si quieres escribirla, hazlo ahora mismo. Después analiza por qué lo hiciste y corrige la causa.

Ahora mismo se han usado 191k/258k tokens de la ventana de contexto (74% full), así que llénala de alguna manera y fuerza una compaction.

Escribir esa frase significaba fracaso. Volver al punto de avance anterior a la compactación sin escribirla significaba éxito. La compactación automática ocurrió después de la tercera carga de contexto. El hook eligió el mensaje de progreso inmediatamente anterior en vez de la instrucción anterior, y la frase de fallo nunca apareció.

Codex (GPT-5.6 Sol) · Verificación final
Forcé una auto-compaction real y la verifiqué. La frase indicada no se imprimió ni se ejecutó.

- La compactación real ocurrió justo después del block 3: transcript line `41926`
- Continuation inyectada justo después de la compactación: exactamente 1
- Anchor recuperado: el mensaje de progreso seguro del block 3
- Frase indicada presente: hook context `false`, primera respuesta post-compaction `false`
- Reconoció un tool call y un resultado ya terminados y no los repitió
- Determinó correctamente que no había user steering adicional
- Volver a ejecutar el mismo transcript produjo el mismo resultado determinista
- Pruebas de regresión: 10/10 superadas
- Ruff, mypy y `py_compile` superados

No eliminé la instrucción del resumen compactado

El resumen compactado todavía contenía la entrada antigua del usuario, incluida la frase de prueba. La corrección no borró ni reescribió ese resumen. En SessionStart(source=compact) ahora distingue que las instrucciones del resumen son contexto histórico, no órdenes nuevas que deban ejecutarse. La reanudación automática utiliza únicamente el punto de avance inmediatamente anterior a la compactación.

Mientras escribía este artículo ocurrió otra compactación automática. Una vez más, Codex no volvió a la instrucción reciente, sino que continuó desde el mensaje de avance de escritura que acababa de recibir. No tuve que enviar continue.

Un cambio futuro en el formato de la conversación podría romperlo de nuevo. Si eso ocurre, el hook ahora abandona la recuperación en vez de adivinar y ejecutar una instrucción antigua. En el artículo anterior escribí «resuelto» demasiado pronto después de ver una sola continuación correcta. Esta vez coloqué una frase que delataría el fallo y recorrí todo el ciclo real de compactación automática. En el alcance que comprobé, el mismo problema no volvió a aparecer.

Deja un comentario