[P0] /numeros: CSS visible y TTS improcedente de 3 h 27 min #190
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Incidente
La entrada publicada LA SUMA DE TODOS (post
18036, carta54495) muestra CSS de la sección de donaciones como texto visible y tiene un audio TTS improcedente de 3 h 27 min. Las páginas/cuentas no se locutan.Diagnóstico verificado
post_contentempieza directamente por reglas CSS (.fea-don-wrap{...}) sin etiqueta<style>, por lo que WordPress las renderiza como texto.fea_audio_url,fea_audio_done=1y vozNicoFeadulta2026; el MP3 público mide 190 MiB y fue generado el 16-jul.Corrección autorizada
<style>/</style>; no tocar texto, donaciones ni saldo.tts_produce.py: solopost_type=post, incluso con--ids.Criterios de cierre
/numeros/deja de exponer.fea-don-wrap{...}como texto y conserva la maquetación.--ids 18036lo excluye sin consumir cuota.Hotfix aplicado y verificado
post-18036-content-before.html(178d2033…ece71, la exportación CLI incluía un salto final añadido)post-18036-meta-before.json(8336442…7cb93)<style>y</style>; el resto del cuerpo quedó byte a byte igual.fea_audio_url,fea_audio_voice,fea_audio_doney se fijófea_audio_skip=1./entrada/quarantine/tts/18036.mp3.issue-190.20260802; la ruta pública original ya no existe.Verificaciones
/numeros/: contiene la sección de donaciones y no contiene.fea-don-wrap{en texto visible; no hay elemento<audio>ni referencia atts/18036.mp3.404tras la redirección legacy.18036se rechaza explícitamente comocontenido de cuentas/donaciones, incluso si entra por una cola de IDs. También se mantiene la barrera parapost_type != post.Pendiente solo separar/commitear estos dos cambios de guard dentro del árbol local, que ya tenía modificaciones ajenas en curso.
Prevención versionada
El guard TTS ya está committeado y subido a la rama operativa
feat/tts-backlog-autor:e4d2073—fix(tts): exclude donations and accounting entriespost_typeypost_nameal payload de extracción; excluye tipos nopost, el slugnumerosy marcadores de contenido financiero (fea-don-wrap,fea-ledger,Haz tu donación).#18036: se rechaza antes de cualquier llamada a MiniMax.El árbol de trabajo contenía cambios ajenos, por lo que el commit incluye exclusivamente estos dos ficheros y no arrastra trabajo de otras tareas. El issue queda abierto para revisión/merge de la rama según el flujo editorial.
El CSS visible había vuelto, y en las traducciones no se había ido nunca
Lo vio Inma hoy, 26-ago, en la página en español: la entrada abre con el ladrillo de CSS como
texto. Comprobado en las cinco, y estaban las cinco igual —
post_contentempezando por.fea-don-wrap{max-width:640px...}sin etiqueta<style>:<style>numeros-anteriores-a-junio-2026numeros-en-anteriores-a-junio-2026numeros-fr-anteriores-a-junio-2026numeros-it-anteriores-a-junio-2026numeros-pt-anteriores-a-junio-2026El hotfix del 3-ago se aplicó al
18036; a las cuatro traducciones no llegó, y en el18036había vuelto. La causa más probable es que el contenido se regrabara en la rotación del 26-ago
(cuando el histórico cambió de slug), llevándose por delante las dos etiquetas.
Corregido en las cinco
Con copia previa del
post_contentde cada una. El encapsulado ha sido el mismo en todas: seañaden
<style>y</style>alrededor del bloque inicial y no se toca ni una coma delresto del cuerpo. Dos detalles que no son evidentes y conviene dejar escritos:
Hay que devolver
>a>. El CSS guardado traía 5 entidades HTML(
details.fea-don>summary). Dentro de un<style>el navegador no descodificaentidades, así que esos cinco selectores habrían quedado inválidos y el acordeón se habría
quedado sin estilo: el CSS deja de verse, pero la página tampoco se ve bien. Al encapsular
se decodifican.
Ni una línea en blanco dentro del
<style>.wpautopmete un<p>donde ve una líneaen blanco, y lo hace también dentro de una hoja de estilos. Un
<p>ahí rompe el parseo delCSS de ese punto en adelante, en silencio y sin error. Nos mordió hoy mismo en la página
nueva
/numeros/: el arreglo del responsive se publicó con las tres@mediamuertas hastaque se mandó el CSS compactado. El bloque de estas cinco venía ya en una sola línea, así que
no había riesgo, pero quien lo edite a mano que lo tenga presente.
Verificado en las cinco URLs públicas: el bloque
<style>propio está,0etiquetas<p>dentro,
0entidades sin descodificar, y el CSS ya no aparece como texto. En la española se hacomprobado además que el estilo se aplica de verdad: los 4
details.fea-dontienen su fondo#faf3f4y sufont-weight:700, y el.fea-don-wrapsus 640 px.⚠️ Y el MP3 de las 3 h 27 min también ha vuelto
Esto no lo he tocado, porque es el otro medio issue y prefiero que lo mires tú:
data-post-id="18036"ydata-src="https://www.feadulta.com/wp-content/uploads/tts/18036.mp3".el tamaño que describe este issue.
Last-Modified: Wed, 26 Aug 2026 10:55:35 GMT, o sea de hoy por la mañana. Y Cloudflare loestá cacheando (
cf-cache-status: HIT).Las cuatro traducciones y la página nueva
/numeros/no llevan reproductor.Que el audio se regenerara (o se restaurara) hoy a las 10:55 y que el
<style>desaparecieradel mismo post apuntan a un mismo proceso reescribiendo el
18036esta mañana. Merece la penamirar qué fue, porque mientras siga ahí el guard de
tts_produce.pyno está sirviendo de nadapara este post.
Un apunte sobre ese guard: entre sus marcadores de contenido financiero está la cadena
Haz tu donación, y en la página nueva esa frase ya no existe — ahora es «Haz tuaportación», por la regla editorial de que estas cantidades son ingreso de autónoma y no un
donativo deducible. Lo que hoy protege
/numeros/es el slug y las clasesfea-don-wrap/fea-ledger, no esa cadena. Conviene actualizarla cuando se toque.Contexto de la página nueva y de las traducciones que le faltan: #217.
Causa encontrada y corregida (2026-08-26): el audio volvió por un hueco en
sync_audio_to_prod.py, no por el CSSInvestigado a fondo lo que reportó Inma hoy. Son dos problemas independientes que coincidieron en el tiempo:
El audio (esto sí lo causé yo, hoy): el despliegue de la carta 741 (#216) incluye
#18036en su cluster (es una pieza antigua enlazada desde la carta). Ejecutésync_audio_to_prod.py --carta 56290, que solo compruebafea_audio_done— nunca comprobófea_audio_skip, el flag que el hotfix del 3-ago puso en#18036para excluirlo. Localmente#18036seguía teniendofea_audio_done=1y el mp3 de 190 MiB de antes del hotfix (el hotfix del 3-ago se aplicó solo en prod, nunca se limpió en local), así que el script lo volvió a subir y republicar.Last-Modifiedque vio Inma (10:55:35 GMT) coincide al segundo con mi ejecución.Ya revertido:
sync_audio_to_prod.py --rollback --ids 18036(meta borrado, mp3 fuera de prod, verificado 403 en la URL pública).#18036limpiado (unsetaudio) para que no vuelva a parecer "listo para subir".sync_one()ahora compruebafea_audio_skipantes que nada. Verificado con dry-run contra el cluster real de la 741:#18036: excluido (fea_audio_skip).El CSS (esto no lo causé yo): revisé cada paso de mi despliegue de hoy — ninguno de mis scripts tocó
post_contentde#18036ni de sus 4 traducciones (el clon a prod las excluyó por ya existir; el único paso que las tocó fuesave_translations, que solo hacepll_save_post_translations, sin escribir contenido). La hipótesis de Inma sobre la rotación de slugs al crear la página nueva/numeros/(#217) sigue siendo la pista más plausible para esa parte — no encontré nada en mi despliegue que la explique.Dejo abierto el issue por si Inma quiere verificar el cierre completo, pero el audio queda resuelto y con guard de código, no solo de estado.