ChemaVX 2e552232f3 auditor: el motivo del waiver también necesita el sitio
Los 18 waivers del ES salían como "waived: None": la línea que imprime el
motivo llamaba a accepted_reason sin el sitio, así que lo buscaba en el
diccionario del EN. El waiver se aplicaba bien —eso sí pasaba el sitio—,
pero el informe salía mudo justo donde tiene que justificarse, que es el
único propósito de esa sección.

Y si algún día vuelve a no haber motivo, ahora lo dice: un waiver sin
razón documentada es un fallo, no un hueco que rellenar con None.
2026-07-28 07:42:39 +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%