ChemaVXandClaude Opus 5 d2882c0fdd estado: comparar twitter:site contra el handle real, no contra @ghost
El chequeo tenía una lista negra de un solo elemento (el default de Ghost)
y por eso se le colaba el caso peor: el sitio ES apuntaba a
@ZonaDeExclusion, un handle que no existe. Un handle ajeno o abandonado es
más grave que el default, porque cualquiera puede reclamarlo y quedarse con
la atribución de las tarjetas de X.

Hay UNA sola cuenta para los dos blogs (@ExclusionZoneEN), así que se
declara como constante y se compara contra ella. También avisa si el meta
desaparece del todo: vaciar el ajuste en Ghost lo quita, y el silencio no
es lo mismo que estar bien.

Cuatro tests, y verificado que el chequeo se ve fallar con el handle
esperado falseado — no es una comparación vacua.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-30 08:57:54 +00:00

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 via ghst-en).
  • seo_validate.py — Tool C: single-post pre-publish validator (seo-check wraps 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.

S
Description
No description provided
Readme
683 KiB
Languages
Python 100%