Table of Contents
Ciclo por cada carta semanal nueva
Flujo recurrente que se dispara cuando se publica una carta nueva en Joomla (feadulta.com, ew4r_content catid 27/40/41, state=1).
Repo: /home/rafa/joomla-migration/. WP local: contenedores Docker wordpress-web / wordpress-mysql.
Pasos
1. Migrar el delta a WP local (carta + sus artículos K2)
python3 scripts/import_new_k2_items.py— artículos (LAST_K2_IDywp_iddinámicos, sin offset).python3 scripts/import_new_cartas.py— carta +_carta_idpor fecha, detección dinámica dewp_id.- Scripts corregidos 2026-06-17: eliminado el offset fijo +26040,
LAST_*dinámicos,LAST_INSERT_ID()→MAX(ID), pass SSH actualizada,mysql --skip-ssl.fix_imported_k2_metas.pyes redundante (no usar).
2. Revisión en local
Revisar antes de tocar producción.
3. Desplegar el delta ES a prod
Con el OK de la revisión.
4. Traducción (EN/FR/IT/PT) del contenido nuevo
Para carta nueva: usar Haiku directo (rápido + calidad), NO Gemma.
FEA_ENGINE=haiku python3 scripts/translate_post.py --carta <ID> --langs en,fr,it,pt --status draft
- El flag
FEA_ENGINE=haiku(añadido atranslate_post.pyel 2026-06-17) enruta atranslate_haiku.translate(), envía el artículo entero sin trocear (contexto 200k) y registra el modeloclaude-haiku-4-5. - API key en
/home/rafa/portfolio-tracker/.env. - Idempotente (state en
/tmp/feadulta-translate-state.json), salta posts no-ES y traducciones ya existentes. - Coste ~0.6–0.8 € por carta (~60 traducciones).
- Artículos que ya vienen en varios idiomas desde Joomla se importan como posts sueltos sin enlace Polylang → hay que enlazarlos como grupo de traducción (
pll_save_post_translations).
4b. OBLIGATORIO tras traducir: arreglar enlaces internos de la carta
El cuerpo de la carta trae enlaces Joomla legacy relativos es/buscadoravanzado/item/<k2_id>-<slug>.html que no funcionan (al verlos en /fea/en/... el navegador los resuelve como relativos y redirige a /fea/en). Están rotos también en la ES.
fix_carta_links.php NO sirve para esto (ignora .html y solo toca posts con localhost:8081). Usar:
# dry-run
docker exec -e CARTA=<id> wordpress-web php /tmp/fix_carta_joomla_links.php
# aplicar (backup en /tmp/fix_carta_links_bak/)
docker exec -e APPLY=1 -e CARTA=<id> wordpress-web php /tmp/fix_carta_joomla_links.php
scripts/fix_carta_joomla_links.php (creado 2026-06-17) mapea cada item/<id> por la meta _fgj2wp_old_k2_id → permalink WP del artículo en el idioma de cada carta (la ES + sus 4 traducciones, vía pll_get_post_translations). Quedan sin mapear los enlaces a contenido no migrado (secciones tablon-de-anuncios/noticias-de-alcance, ítems fuera del delta, multimedia) — se dejan intactos.
5. TTS (audio voz Nico, MiniMax HD)
Con prioridad sobre el contenido antiguo del gap: locutar primero la carta nueva y sus artículos antes de seguir vaciando la cola histórica. Requiere ajustar el orden de cola en scripts/tts_produce.py (hoy tiene el gap hardcodeado). Enlazar fea_audio_url / fea_audio_done y subir el mp3 a prod.
Notas operativas
- TTS: el plan MiniMax rinde ~6 audios por ventana de cuota (
rc=2056al agotarse, se resetea en horas);rc=1039= rate TPM por minuto (mitigado con pausa de 35s entre trozos de cartas largas,FEA_CHUNK_PAUSE). Para acelerar de verdad: comprar créditos MiniMax. - Artículos de evangelio nuevos: les falta
_cita_evangelio(shortcodes de evangelio) — asignar si procede. - Los IDs ES coinciden local↔prod (clave para el sync de traducciones).
Historial
- 2026-06-17 — Carta 46956 «Entre todos»: delta migrado, carta publicada (issue #87, era timezone
future), cluster multiidioma 46951–46955 enlazado, 60 traducciones Haiku en draft (0 errores), 100 enlaces internos arreglados en las 5 cartas.