1f07e88c122b8aec2326fee5aed336f3cacc5222
La infografía de Socorro salió con «Lt. Colonel Hector Quintanilla» cuando el artículo dice «Major» las cinco veces que lo nombra. El rango NO lo inventó el modelo que maqueta: venía en el guion, y el verificador lo dejó pasar por dos motivos independientes. 1. RE_ARRANQUE veía el punto de «Lt.» y daba por hecho que «Colonel» iba en mayúscula por empezar frase, así que la eximía de comprobar. La única palabra capaz de cazar el error era justo la que se saltaba. Ahora una lista de abreviaturas conocidas anula esa exención. 2. _en_articulo comparaba por SUBCADENA: «Lt» daba positivo por estar dentro de built, adults y consultant. Pasa a exigir frontera de palabra por la izquierda — se conserva la laxitud por la derecha para que «Zamora's» del artículo siga casando con «Zamora» del guion. Y se añade la comprobación que faltaba, cargos_fuera(): los cargos y rangos se verifican en FRASE ENTERA. El fallo real no fue una palabra inventada sino una COMBINACIÓN falsa de dos palabras que sí estaban por separado, y eso un verificador token a token no puede verlo nunca. Medido antes de dejarlo puesto, sobre los DOS guiones reales de hoy (156 líneas): caza la avería, deja pasar la versión corregida, y cero falsos positivos de cargo. Por el camino de producción, filtra() tira solo las dos frases que llevan el rango malo y no toca el resto. Once tests. Incluye los dos lados: que pode lo que debe y que NO pode lo que no debe, porque un verificador que se pasa deja el guion cojo y obliga a rehacerlo a mano. También: hreflang-parejas.md con los slugs nuevos de los dos remates de hoy (socorro-1964-zamora-ufo-landing y cash-landrum-1980-demanda-ovni-tribunal-federal), corregidos por el propio agente del remate al leer la nota que lo pedía. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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%