Surtido: split Ruta A fundido en main (2026-09-14)
Contexto: user pidió fundir experiments con main “split pero sin ámbar”: la Ruta A (dos paneles lista|lector) integrada en el home HN de main, manteniendo la estética crema/serif, sin el CRT ámbar de experiments-ambar, y sin tocar el asgi completo (radio, cursos, fuentes, ediciones).
# Commit 061e033 (main), push + vercel --prod (Ready in 19s)
## Cambios
- asgi.py: +GET /ediciones (lista de reporte/*.json desc) y
+GET /ediciones/{fecha} (render_html del boletín), con 404 real
(_pagina ahora acepta status=). Nav ganó "Ediciones" (entre Inicio y Fuentes).
- asgi.py: +GET /leer/lectura?u= → JSONResponse con Cache-Control:no-store.
- leer.py: portados de experiments-ambar (sin ámbar): _VIDEO_RE, _video_id,
_transcripto_youtube, _extracto_lectura, _cache_lectura, _guardar_lectura,
_EN_MARCADORES, _parece_es, lectura_json. Tipo: _resumen_extractivo → string,
parrafos → list. Forma del JSON: {url,hash,titulo,es,resumen,parrafos,
fuente,generado}.
- hn.py: split lista|lector en el home (Ruta A):
- Layout: .feed (izq) + aside.lector#lector (der). .fuentes-panel sigue,
sin columna extra. Filas con data-url / data-titulo / data-medio.
- Desktop (≥1000px): grid minmax(0,1fr) minmax(340px,460px), lector
sticky (max-height 100vh-100px), visible por default.
- Mobile (<1000px): .lector como overlay fixed full-screen (z-60,
height 100dvh), se abre con click/pushState, esc/volver lo cierra.
- Teclado: j/k (o arrows) navegan, Enter abre, o = ir a la fuente,
esc/q cierra, 1 colapsa.
- Filtro por medio: <select id=filtro-medio> en .colider; cambia a
hide/show filas y resetea índice.
- Lectura vía fetch('/leer/lectura?u=') → render con .lect-vacio
inicial, h2.lect-titulo, p.lect-resumen, links (son -origen al salto,
original a la source), párrafos en #lect-parrafos. Maneja error con
fallback "queda vinculado" + botón ir a la fuente (post-deploy: el botón
"origen" no desborda, .lect-media lo separa).
## Verificado
- curl local + Playwright (390x844 y 1280x800): 20 rows, overflow=0,
click abre lector, esc cierra, sin pageerrors.
- /ediciones, /ediciones/2026-09-14 (200), fecha inválida → 404.
- /leer/lectura valida URL (400 si no), titulo+parrafos OK.
- Prod: /health ok, inicio 200, /ediciones 200.
## Aprendido / pendiente
- .gitignore: +reporte/leer_cache/ (los .lectura.json son generados y Vercel
tiene FS efímero → no versionar).
- reporte/traducciones.json cambió por las traducciones de los 20 items del
home (se versiona, es canonical).
- Post-deploy: comprobación manual de que el botón "origen" no desborda en el
overlay chico y que back gesture (popstate) cierra en iOS (solo probado en
chromium local).
- experiments-ambar: NO se deployó; main es la fuente de verdad now.
Ruta del commit: repo local main 061e033, ramas experiments/experiments-ambar
quedan como referencia histórica.