bdcab16ad962b3283462811b7d2479612e749afa
Hasta hoy no había NI UN hreflang en ninguno de los dos blogs. Google no tenía forma de saber que los artículos del mismo caso en los dos idiomas son la misma pieza, así que servía el que le parecía y las señales de cada uno se quedaban sueltas en su lado. Las parejas NO se infieren, se curan a mano en hreflang-parejas.md. Los embeddings no valen a esta granularidad y conviene que quede escrito: los DOS artículos de Immaculate Constellation puntúan 0,774 entre sí y uno sin relación puntúa 0,778; y el espejo real del artículo ES de bases nucleares puntúa 0,719, por debajo de tres PURSUE que no lo son. La firma del título (año + nombre propio) decide; el vector solo desempata. Dos descartes con motivo: el forense del vídeo de Roswell no es el espejo de la pieza ES de tres hilos (comparten un hecho, no un artículo), y ninguno de los tres PURSUE es la traducción del artículo ES de bases nucleares — ese espejo se llama «Nuclear Bases and UAP» y está PROGRAMADO, así que entra en agosto. Escribe entre marcas en codeinjection_head, así que es reescribible y no pisa lo que hubiera. Verificado contra las 32 páginas PÚBLICAS comparando las URLs exactas, no solo la presencia de las etiquetas: un par cruzado declararía las dos versiones y habría pasado una comprobación laxa.
seo-tools
SEO rule engine + tooling for the Ghost blogs (EN: theexclusionzone.com).
seo_rules.py— shared rule engine (pure functions, no I/O). Single source of truth for thresholds + checks. Consumed by the auditor, the validator, and (vendored) by ResearchOwl's blog pipeline.seo_audit.py— Tool A: site-wide auditor (reads all published posts viaghst-en).seo_validate.py— Tool C: single-post pre-publish validator (seo-checkwraps this).seo_exceptions.py— documented, consciously-accepted waivers (auditor reporting filter).seo_mirror.py— OG/Twitter mirroring helper.phase2_*.py/json— one-off batch helpers (kept for provenance).
No secrets live here. Ghost access is via the ghst-en wrapper (~/.local/bin), which
fetches a staff token on demand from the pod and never writes it to disk.
Languages
Python
100%