Session:14:09
(uarup — recuperación total de media WhatsApp vía ingest desde el
teléfono)
Root cause LID resuelto: la cuenta fue migrada
server-side de PN a LID (WhatsApp privacy rollout, no es decisión del
cliente — creds tienen ambos id+lid). El teléfono re-keyea la media
propia durante la migración del thread → las respuestas de re-upload
fallan el MAC check GCM. Confirmado upstream en Baileys #2714 (cerrado
stale sin fix ni camino de protocolo).
Review Rule of 5 al manejo LID en exporter.ts:
convergió con 2 findings accionables — EDGE-001 (cache de fallos
permanentes) y EDGE-002 (fallback a phone-JID).
Implementado: (1) failures.jsonl
sidecar por chat + export --force — sólo fallos permanentes
(mac-mismatch/gone) se cachean; (2) fallback me.id en
updateMediaMessageWithLid cuando el request LID-targeted es
rechazado (3) o tiemea out; (3) tests nuevos (31 pass).
Ingesta desde el teléfono
(media-ingest): nuevo comando — conecta por adb,
matchea mensajes almacenados contra archivos de
WhatsApp/Media por fileLength exacto + ventana
de fecha ±1 día (UTC vs medianoche local) + extensión. Gotchas: WA
nombra archivos con fecha de envío local; subdir
Sent/ guarda los propios; audio/mp4 mime ↔︎
.aac en disco requiere regla loose de audio;
find -printf sobre adb es rápido, stat por archivo no.
Resultados: EMHVE 176/176 (incluye
los 2 zips de "Exportar chat" con 149 archivos de backup); Notas CHCM
73/110 (37 dead ends: 34 gone-beyond-retention remotos de 2025 + 3
mac-mismatch); Por mis pagos 35/35; MONITORIA 38/38 ya estaba;
la-vida-privada-de-los-arboles 1/1.
Bug arreglado en el camino: file-exists check ahora
precede al failure-cache skip en downloadAttachment (los
archivos recuperados por ingest se referencian en transcripts a pesar de
entradas stale).
Beads inicializado: ticket abierto para colisión de
mediaFileName (dos docs con mismo nombre remoto → un
archivo; los zips duplicados quedaron en sidecar
exports/).
Commits:f5f6a1c (cache + fallback),
211759a (media-ingest), d4fc6dd (beads). Todos
pusheados.
Next: arreglar colisión de mediaFileName (dedupe
por msgId); considerar soporte ptvMessage (view-once) en isMediaMessage;
correr media-ingest sobre el resto de chats grandes; usar los zips de
export como fuente extra si faltara algo.