2512144be5bd2a24baee201402e6303d444f589b
1) remate-watch ya no elige los enlaces internos a ojo. El paso 3 del prompt pregunta primero a seo_semantic (afines), que le da los publicados más parecidos y le marca los que el borrador YA enlaza. Se le dice explícitamente que es una sugerencia y no una orden, y que si nada pasa de ~0,55 lo diga en el informe en vez de forzar un enlace malo: un enlace forzado es peor que ninguno. Para que eso funcione, seo_semantic sabe ahora trabajar con un post que NO está en el corpus: `ghst post list` sin filtro devuelve solo publicados y programados, así que el borrador que remate-watch está preparando no aparecía. Se baja suelto por slug y se embebe al vuelo. Verificado por equivalencia: los vecinos de un post embebido al vuelo son idénticos, hasta el cuarto decimal, a los del mismo post cacheado. 2) canibal-watch: a diario a las 07:00 UTC (una hora después de que publique la cola de agosto). Telegram SOLO si hay algo nuevo. Solo avisa de pares que además NO se enlazan. Un par muy parecido pero cosido con un enlace ya le dice a Google cuál manda; avisar de él es ruido. Los enlazados se guardan igual en el estado, porque hacen falta para detectar que MÁS TARDE pierdan el enlace (una edición que se lleve por delante la jerarquía). Con el filtro, el primer aviso baja de 19 líneas a 5 accionables. Probado por el camino real, arrancándolo con systemctl y no desde una shell con el PATH bueno: primera pasada avisa (5 pares), segunda se calla, y con una regresión simulada en el estado la detecta. No escribe en el blog. Coser o fusionar lo decide Jose. 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%