ea6c24927a6c1fb81461509d72a1fe20feb64c14
El par Roswell del blog ES se resolvió por la vía que propone la propia regla («retitle to a distinct angle» + «interlink deliberately»), no fusionando: el de mayo es el relato de referencia (3 clics / 152 impresiones en 3 meses) y el de julio cubre otra cosa — el vídeo de 2025 de los Archivos Nacionales, el diario de Marcel y la confesión de Haut — pero se presentaba con título de artículo general y se llevó 1 impresión en 9 días. Retitulado y enlazados en ambos sentidos; siguen compartiendo caso y año, así que topic.collision va a avisar siempre: waiver documentado. Y de paso un fallo mío de ayer: collisions() contaba una vez por FAMILIA en vez de por SITIO, así que un post con waivers en dos familias del mismo blog salía como colisión entre sitios. Este par lo destapó. Verificado en los dos sentidos: vacío ahora, y detecta el duplicado si se inyecta a mano.
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%