main local (WSL) y origin/main sin historial comun: 46 commits sin reconciliar #194
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?
Hallazgo
Trabajando en el fix de los scripts
sync_*_to_prod.pypara el Hetzner nuevo (ramafix/hetzner-prod-sync-scripts, ya mergeada amain), descubrí que elmainlocal de~/joomla-migration(en el PC de Rafa, WSL) yorigin/main(este repo, Gitea) son dos historias sin ancestro común:origin/mainviene de la reconciliación de julio (Sincronizar mu-plugins/ y scripts/ con el estado real del sitio, PR #179, 2026-07-16): aplanó la estructura y volcó el estado REAL del sitio en vez de reproducir el historial completo.mainlocal nunca se rebaseó/fast-forward sobre esa reconciliación. Sigue una línea propia con 46 commits que nunca llegaron a Gitea, desde elInitial commitoriginal de la migración Joomla→WP hasta un commit reciente69e849d "Sync: guardar en el historial el trabajo de las ultimas semanas que solo vivia en el disco".Alcance real (primera pasada, sin verificar a fondo)
Comparando solo los directorios que SÍ vive en
origin/main(scripts/,docs/,mu-plugins/,tests/):La mayoría de las líneas en rojo son
mu-plugins/*.phpque elmainlocal nunca tuvo (no es contenido divergente, es ausencia — origin/main ya es la versión viva del sitio). Lo que sí parece aporte real y no reconciliado:docs/— adiciones limpias, sin conflicto aparente:guia-publicacion-carta-inma.md,guia-tts-traduccion-inma.md,handoff-carta-46956-2026-06-17.md,handoff-tecnico-rafa-issues-174-175-2026-07-15.md,revision-issues-2026-07-15.md,revision-issues-live-gitea-2026-07-15.md,plan-buscador-avanzado-nativo.md,plan-buscador-typesense.md,benchmarks/gemma4-12b-vs-4b.md,actualizar-wordpress-desde-joomla-prod.md.scripts/— YA RESUELTO:sync_translations_to_prod.py,sync_audio_to_prod.py,sync_carta_from_prod.py(commit638f5b7, apuntan al Hetzner nuevo). El resto descripts/en origin/main ya coincide con el estado local — probablemente porque la reconciliación de julio ya capturó esas versiones desde el sitio real.Sin verificar todavía: si alguno de los 46 commits (buscador avanzado nativo #8, TTS multi-voz por autor #152, eventos GA4, endpoint crear-autor #166, verify_carta_lang_links.php, etc.) contiene lógica que NO llegó a desplegarse nunca a prod y que por tanto no está capturada en el snapshot de
origin/main— o si todo eso ya vive en producción y el snapshot de julio ya lo recogió, y el gap es solo documentación + los 3 scripts ya arreglados.Lista completa de los 46 commits solo-en-local
Petición
Necesito un análisis (sin tocar el repo remoto, sin merges ni pushes — solo lectura e informe) que responda:
origin/main(vía el snapshot de julio) y por tanto no aportan nada nuevo?origin/maindado que no comparte historial (cherry-pick a mano, cita de fichero suelto, o reescribir sobre la base actual)?docs/— confirmar que son adiciones limpias sin conflicto y listarlos con una frase de qué documentan.Repo:
/home/rafa/joomla-migration(WSL). Referencias:origin/main, rama localmain(NO tocar, es la fuente del gap), ramafix/hetzner-prod-sync-scripts(ya mergeada, solo referencia).Análisis del gap
mainlocal ↔origin/main(solo lectura, sin tocar el repo)Hallazgo previo, importante: nada corre riesgo real de "vivir solo en este disco"
Antes de entrar en las 4 preguntas: comprobé
git branch -ay hay dos ramas remotas que nadie mencionaba en el hallazgo original —origin/local-fullyorigin/local-completo-2026-07-16. Ambas apuntan exactamente al mismo commit que la punta demainlocal (69e849d, mismo hash,git diff --stat main origin/local-fullvacío,git merge-base= el propio69e849d).Es decir: los 46 commits íntegros ya están empujados a Gitea, solo que no en
mainsino en esas dos ramas de respaldo (con toda pinta de haberse subido como backup en el mismo momento de la reconciliación de julio, antes de aplanarmaincon el PR #179). Así que el marco "se perdería si nadie hace nada" del punto 2 de la petición no aplica en sentido estricto — nada está solo en el disco de este PC. El problema real es de reconciliación/visibilidad (nada vive enmain, la rama que la gente mira), no de pérdida de datos.Dicho esto, respondo las 4 preguntas tal como se pidieron, comparando contenido real byte a byte (
git show <ref>:<ruta> | md5sum) en vez de fiarme del nombre de los commits.1. Commits ya reflejados en
origin/main(rescatarlos no aporta nada)Metodología: por cada fichero que estos commits tocan en
mu-plugins/,scripts/ytests/, comparé el contenido final enmainlocal contra el mismo fichero enorigin/main.Resultado:
fea-support-campaign/template.php) que existen en ambos lados son idénticos byte a byte. Incluye explícitamentefea-search-advanced.phpyfea-search-fulltext.phpdel commite2f23ac(verifiqué que NO es una coincidencia de nombre: el contenido con los filtros FULLTEXT, formulario avanzado, i18n, etc. ya está enorigin/maintal cual).test_subir_avatar_api.sh, existe solo enorigin/main, porque pertenece a la feature #175 que nunca pasó pormainlocal — dirección contraria, no es un gap).Con eso, estos commits (o la parte de ellos que toca esos 3 directorios) no aportan nada al rescatarlos, porque su resultado final ya vive en
origin/main:18522a0,c6f16ba,7965928,f857734(superado incluso: origin ya movió todo a la wiki),382a6a6,54132b7,d21e7f1,89fcd10,6467285,08d2032,6791afd(los scripts que aporta),863a3c6,9ac857b,0da0c0e,0bc58bf(los scripts),70831f1,d5475ed,e26b279,a2aefd8,3d3ca03,6d9afaa,84ec916,8ea4d51,63e0057,e2f23ac,82ca122,db0d0a0(el código; el script sync ver punto 2),7188adf,f059ed1,f747ec3(el código; el script sync ver punto 2),2504666, y la parte de código de69e849d(docenas de scripts y mu-plugins nuevos, todos confirmados idénticos:fea-beta-feedback.php,fea-cloudflare-realip.php,fea-legacy-redirect.php,fea-gsc-verification.php,fea-support-campaign.php,fea-ui.php,fea-menu-i18n.php,fea-pensamientos.php,fea-recopilatorios.php,fea-avatar-cachebust.php,fea-carta-id-api.php,fea-compact-entry-spacing.php,fea-disable-comments.php,fea-hide-bad-tag.php, y toda la tanda de scripts de traducción/TTS/lecturas).Caso especial —
56ee158,66ee943, la parte no-doc de69e849d,0bc58bf(el.txt) ye2f23ac(losshot_*.cjs): tocantools/e2e/, que no está en el alcance de origin/main (ver nota al final del punto 2). No aportan "nada nuevo a origin/main" simplemente porque origin/main nunca trackeó ese directorio, no porque el contenido ya esté allí.Fuera de esta clasificación, por no tocar ninguno de los 4 directorios que vive
origin/main:668d973(initial commit, 1925 ficheros — es el dump completo del WordPress migrado;origin/mainnunca trackeówordpress/, así que no hay "reflejo" que comparar, es simplemente fuera de alcance por diseño).39431c9,587d718,e2ea90d— housekeeping debackups//archive//wordpress/(borrados y reorganización, nada que rescatar).3ddfd8d—docker-compose.yml(servicio Joomla PHP 8.3 local).378ff65— ficheros core de WordPress (wp-login.php, etc.), fuera de alcance por diseño (WP core no se versiona enorigin/main).27aad22— merge vacío de contenido propio.2. Contenido real NO reflejado en
origin/mainTras comparar contenido (no nombres), lo único con diferencias reales son:
a) Los 10 ficheros de
docs/— ver punto 4, es contenido 100% nuevo,origin/mainno tiene nada equivalente.b) Los 3 scripts de sync a prod (
sync_audio_to_prod.py,sync_carta_from_prod.py,sync_translations_to_prod.py, tocados pordb0d0a0,f747ec3y el propio69e849d) sí difieren, pero al revés de lo que parece un "gap": la versión deorigin/main(commit638f5b7, ya identificado en el hallazgo original como "YA RESUELTO") es la que está por delante — apunta al Hetzner nuevo, usa auth por clave SSH y añade el wrapper_remote_wrap/docker execpara el contenedor Coolify. La versión demainlocal es la antigua, apuntando a CDMON (134.0.10.170) con workaround del glibc roto y, más grave, con una contraseña de producción hardcodeada en texto plano en el propio fichero (PROD_PASS = os.environ.get("FEA_PROD_PASS", "$FEA_PROD_SSH_PASS (redactado)")). Rescatar esta versión sería un retroceso funcional y una regresión de seguridad — no hay nada que rescatar aquí, al contrario.c) Fuera del alcance estricto de
origin/mainpor diseño (la reconciliación de julio deliberadamente solo trackeadocs/,mu-plugins/,scripts/,tests/— según la propia memoria del proyecto, "estructura plana mantenida a propósito"), pero que sí representa trabajo de ingeniería real que no vive en ningún sitio "oficial":tools/e2e/— suite de QA con Playwright + visión Gemma 4 local (commits56ee158,66ee943,0bc58bf,e2f23ac,69e849d): ~40 ficheros (run.js,ask-vision.js,verify/conenum_urls.php,classify_gaps.py,link_audit.py,llm_review.py, capturasshot_*.cjs). No es funcionalidad de sitio, es tooling de verificación local — no se despliega a prod, así que el snapshot de julio nunca lo iba a capturar.docker-compose.yml(commit3ddfd8d) — definición del servicio Joomla PHP 8.3 local.Como se explicó arriba, esto tampoco está en riesgo real de pérdida: vive íntegro en
origin/local-full/origin/local-completo-2026-07-16. Es una decisión de alcance del repo, no un olvido — pero si en algún momento se quiere quetools/e2e/sea "oficial" enmain, habría que decidirlo explícitamente (añadir un 5º directorio al alcance de la reconciliación).3. Forma más segura de llevar lo del punto 2 a
origin/mainSolo aplica a los 10 ficheros de
docs/(lo demás, como se ha visto, o ya está allí, o es un retroceso, o es una decisión de alcance pendiente de decidir con calma, no una migración de código).No usar cherry-pick de los commits originales. Dos razones:
mainlocal sobreorigin/mainobligaría a git a intentar un merge de 3 vías contra un padre queorigin/mainno tiene en su historia; en el mejor caso funciona como aplicación de parche "a ciegas", en el peor da conflictos espurios en contexto que no existe al otro lado.docs/guia-publicacion-carta-inma.md: creado en6c0e366, modificado después en69e849d). Cherry-pickear solo el commit de creación dejaría el fichero desactualizado; habría que encadenar cherry-picks en orden y con éxito en los 2, con más superficie de fallo para ningún beneficio.Método recomendado — copiar el estado final directamente:
Son adiciones limpias (confirmado en el punto 4: ninguna ruta colisiona con algo que ya exista en
origin/main), así que este PR se puede mergear sin resolver ningún conflicto.4. Los 10 ficheros de
docs/— confirmación y qué documenta cada unoConfirmado con
git diff --stat origin/main main -- docs/: son 10 adiciones limpias, ninguna colisiona con un fichero existente enorigin/mainni requiere merge. (Hay un 11º cambio en ese diff,docs/plans/2026-07-16-subir-avatar-api-175.md, pero es al revés: existe solo enorigin/main, no enmainlocal — no es parte del gap.)docs/actualizar-wordpress-desde-joomla-prod.mddocs/benchmarks/gemma4-12b-vs-4b.mddocs/guia-publicacion-carta-inma.mddocs/guia-tts-traduccion-inma.mddocs/handoff-carta-46956-2026-06-17.mddocs/handoff-tecnico-rafa-issues-174-175-2026-07-15.mddocs/plan-buscador-avanzado-nativo.mddocs/plan-buscador-typesense.mddocs/revision-issues-2026-07-15.mddocs/revision-issues-live-gitea-2026-07-15.mdgitea.feadulta.comcon la numeración correcta de issues (#166, #168, #170, #174, #175).Resumen ejecutivo
origin/local-full/origin/local-completo-2026-07-16(mismo hash que la punta demainlocal).origin/main, capturado por el snapshot de julio.origin/mainpor delante (Hetzner) — nada que rescatar, y la versión local tiene una contraseña en claro que mejor no resucitar.docs/, adiciones limpias sin conflicto — método recomendado: copiar el estado final congit show main:docs/X > docs/Xsobre una rama nueva basada enorigin/main, no cherry-pick.tools/e2e/(suite QA) ydocker-compose.yml(servicio Joomla local) no están en el alcance actual deorigin/mainpor decisión deliberada de la reconciliación de julio — decidir si conviene incorporarlos como 5º directorio con calma, no como parte de este rescate.Análisis realizado en modo solo lectura: sin
push, sinmerge, sin tocarmain/origin/main/working tree. No se creó ninguna rama local (bastó congit show/git diffsobre refs existentes).Resuelto
Rescatados los 10 ficheros de docs/ (guias, handoffs, planes del buscador, benchmark Gemma, revisiones de issues) en el commit
5055e92, ya en main.No hace falta ninguna otra accion sobre el resto de las 46 commits: el analisis confirmo que su contenido ya esta reflejado en origin/main via el snapshot de julio (PR #179), y ademas quedan respaldadas intactas en las ramas remotas local-full / local-completo-2026-07-16 por si hiciera falta consultarlas en el futuro.
Nota aparte: uno de los docs rescatados (handoff-carta-46956-2026-06-17.md) traia dos credenciales del servidor CDMON antiguo en texto plano (password SSH y password cPanel/FTP); las redacte antes de commitear -- ver .env, nunca en docs versionados.