Documentar flujo recurrente de carta semanal nueva

2026-06-17 21:05:06 -04:00
parent c91c14e268
commit 7752045b02
+57
@@ -0,0 +1,57 @@
# 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_ID` y `wp_id` dinámicos, sin offset).
- `python3 scripts/import_new_cartas.py` — carta + `_carta_id` por fecha, detección dinámica de `wp_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.py` es 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.**
```bash
FEA_ENGINE=haiku python3 scripts/translate_post.py --carta <ID> --langs en,fr,it,pt --status draft
```
- El flag `FEA_ENGINE=haiku` (añadido a `translate_post.py` el 2026-06-17) enruta a `translate_haiku.translate()`, envía el artículo entero sin trocear (contexto 200k) y registra el modelo `claude-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.60.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:
```bash
# 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=2056` al 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 4695146955 enlazado, 60 traducciones Haiku en draft (0 errores), 100 enlaces internos arreglados en las 5 cartas.