4609a21f21f3b97dcc80412ee17795a3efaee45b
Recalibrado contra los datos reales del primer día, que desmintieron dos supuestos del diseño. El umbral de 150 impresiones dejaba fuera TODO: el mejor caso de los dos blogs eran las 125 de Varginha en EN. El vigilante se habría callado para siempre, la peor avería en algo que solo habla cuando hay noticias. Baja a 40, y entre 40 y 150 las líneas salen marcadas con «~» porque ahí el CTR es orientativo, no firme. Y el CTR no es la palanca a este volumen: con ~180 impresiones semanales en EN, convertir el 10% de todas serían 78 clics al mes. El informe pasa a liderar con cobertura — impresiones, páginas que reciben alguna, consultas distintas, posición ponderada, y qué páginas empiezan o dejan de aparecer — y avisa también cuando eso se mueve (±25% de impresiones o ±3 páginas), no solo cuando hay CTR desperdiciado. De propina, un fallo que solo se vio ejecutando el servicio dos veces seguidas: avisaba las dos. Las listas nuevas ordenan un set de URLs por impresiones y los empates los desempataba el orden de iteración del conjunto, que Python aleatoriza por proceso; la huella cambiaba sin que cambiara un solo dato. Todas las ordenaciones llevan ya desempate por clave. Verificado: mismo texto con PYTHONHASHSEED 1, 2 y 3, y la segunda ejecución del servicio se calla.
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%