Volver a la wiki

Automatismos y workflows: el calendario de bots del Supercontexto

Parte de la colección [[concept—workspace—supercontexto-00-vision]]. Cubre: todos los workflows de GitHub Actions y crons de Hetzner, su cadencia, qué hace cada uno y cómo pausarlos.


El panorama general

El Supercontexto funciona gracias a 21 automatismos distribuidos entre dos repos de GitHub y un servidor Hetzner:

graph TD
    subgraph GH_PRO["🐙 GitHub Actions · CreaRack-Pro (5 workflows)"]
        P1["post-merge-ingest\nEn cada push"]
        P2["push-drift\nEn cada push con código"]
        P3["ci.yml\nEn cada PR"]
        P4["agent-pip-audit\nLunes 06:00 UTC"]
        P5["audit-docs-drift\n1er domingo de mes"]
    end

    subgraph GH_WS["🐙 GitHub Actions · workspace (11 workflows)"]
        W1["post-merge-ingest\nEn cada push"]
        W2["bib-reindex-ts\nDiario 00:15 + push .ts"]
        W3["bib-reindex-claude-method\nDiario 00:30"]
        W4["wiki-translate\nDiario 06:00"]
        W5["wiki-catalog\nL+M+V 06:30"]
        W6["wiki-weekly-report\nDomingo 08:00"]
        W7["sync-cascade-detect\nEn cada push wiki .md"]
        W8["wiki-lint.yml\nManual / migrado"]
        W9["wiki-curator.yml\nManual / migrado"]
        W10["drift-cron.yml\nManual / migrado"]
        W11["wiki-utility.yml\nManual"]
    end

    subgraph HETZNER["🖥️ Hetzner Stage · crons systemd"]
        H1["bib_ast.py\nCada 6 horas"]
        H2["drift-cron (REST)\nDiario 04:15 UTC"]
        H3["wiki-lint (MCP)\nDiario 04:30 UTC"]
        H4["wiki-curator (MCP)\nL+J 05:00 UTC"]
    end

Workflows de CreaRack-Pro

post-merge-ingest — El Ingest principal

Trigger: cada push a main o PR mergeada
Cuánto tarda: ~3-5 minutos
Qué hace:

  1. Lee el diff del commit (qué archivos cambiaron)
  2. Pasa el diff a Claude Haiku 4.5 que analiza el significado del cambio
  3. Actualiza el grafo en D1: nuevos nodos, nuevos edges, confidence actualizado
  4. Si hay conocimiento nuevo → crea concept_page en status draft en la wiki
  5. Si falla → abre un issue automático en GitHub con el error

No se dispara cuando el commit empieza por wiki( (commits del propio Bibliotecario) para evitar bucles.


push-drift — Detector de drift en tiempo real

Trigger: cada push a main que toque archivos de código (no docs)
Cuánto tarda: ~1 minuto
Qué hace: llama a /api/biblioteca/drift-run en el workspace para que el Pulse refleje inmediatamente qué docs quedan desactualizadas tras el commit.

Trabaja en tándem con el cron diario de drift (04:15 UTC en Hetzner): el push-drift da inmediatez, el cron diario es la red de seguridad.


ci.yml — CI estándar

Trigger: cada PR contra main
Cuánto tarda: ~5-8 minutos
Qué hace: ruff (linter Python) + biome (linter JS) + build Docker + tests pytest


agent-pip-audit — Auditoría de seguridad del Local Agent

Trigger: push que toca el lockfile del Local Agent + lunes 06:00 UTC semanal
Qué hace: ejecuta pip-audit contra terminal/agent/requirements-agent.lock para detectar CVEs en las dependencias empaquetadas en el .exe que se distribuye a clientes.

Si encuentra vulnerabilidades → el workflow falla y hay que actualizar el lockfile.


audit-docs-drift — Auditoría mensual de docs

Trigger: primer domingo de cada mes a las 08:00 UTC
Qué hace: ejecuta scripts/audit_docs_drift.py que compara:

Si encuentra drift “hard” → abre un issue automático. Si es drift “soft” → lo registra en el log del run pero no crea issue.


Workflows del workspace

post-merge-ingest (workspace) — Ingest del workspace

Idéntico al de CreaRack-Pro, pero analiza commits del repo del workspace. Indexa cambios en la wiki, funciones TypeScript, scripts, etc.

Diferencia clave: filtra también commits sync-cascade(*) para no crear bucles cuando el Sync Cascade genera sus PRs.


bib-reindex-ts — Reindexación TypeScript

Trigger: push que toca .ts/.tsx/.mjs + diario 00:15 UTC
Cuánto tarda: ~2 minutos
Qué hace: ejecuta scripts/bib_ast_ts.mjs que parsea el AST de TypeScript del workspace y actualiza los nodos en D1. No usa LLM — es parseo sintáctico puro, muy rápido y preciso.


bib-reindex-claude-method — Reindexación del método del equipo

Trigger: diario 00:30 UTC
Cuánto tarda: ~3 minutos
Qué hace: clona el repo privado claude-method (con deploy key SSH dedicada) y ejecuta bib_ingest_claude_method.mjs para indexar sus 49 documentos Markdown. Esto hace que el Oráculo de EL pueda responder preguntas sobre el harness, los onboardings y las guías del equipo.


wiki-translate — Traducción automática ES→EN

Trigger: diario 06:00 UTC
Cuánto tarda: ~5-10 minutos
Qué hace: detecta páginas crearack--*.md más nuevas que su traducción EN, las traduce con Gemma 4 26B y hace commit de las traducciones a src/content/wiki-en/.

Corre en su propio workflow (separado del build de CF Pages) para que un fallo de la API de Gemma no bloquee los deploys.


Trigger: lunes + miércoles + viernes 06:30 UTC
Cuánto tarda: ~1 minuto
Qué hace: ejecuta scripts/generate-wiki-catalog.py --write que regenera src/content/wiki/catalog.md con todas las páginas de la wiki clasificadas por tipo, tag y fecha. El catálogo es una vista derivada del corpus — se puede regenerar en cualquier momento sin pérdida.


wiki-weekly-report — Informe semanal

Trigger: domingos 08:00 UTC
Cuánto tarda: ~1 minuto
Qué hace: genera un informe Markdown con el estado de la semana (commits, concept_pages creadas/publicadas/descartadas, salud del grafo, docs stale) y lo publica en public/supercontext/reports/weekly--YYYY-MM-DD.md.


sync-cascade-detect — Propagación de cambios entre docs vinculadas

Trigger: push que toca cualquier .md en src/content/wiki/
Cuánto tarda: ~2-5 minutos
Qué hace: detecta qué slugs wiki se modificaron, consulta qué mirrors tienen via el campo mirrors: del frontmatter, y ejecuta scripts/sync_cascade.mjs que propone actualizaciones usando Haiku 4.5 y abre PRs draft con los cambios sugeridos.

No se dispara para commits del propio Bibliotecario (wiki(*)o sync-cascade(*)).


Crons en Hetzner Stage

Los crons “pesados” (los que consumen muchos minutos de GH Actions) se migraron al servidor Hetzner Stage en mayo 2026 (Plan Servicios Fase C · ADR decision--20260516--fase-c-crons-stage-ligera). La razón: ahorrar minutos de GitHub Actions y tener más control sobre los timeouts.

Viven en /etc/cron.d/biblioteca-crons del servidor Stage (crearack-staging.netbird.cloud):

CronCadenciaScriptQué hace
bib_ast.pyCada 6 horaspython scripts/bib_ast.py --push --statsReindexación AST Python de CreaRack-Pro
drift-cronDiario 04:15 UTCREST /api/biblioteca/drift-runDetección de drift docs ↔ código
wiki-lintDiario 04:30 UTCMCP wiki_lint_bulk + wiki_lint_contradictionsPáginas stale, huérfanas, contradicciones
wiki-curatorLunes + jueves 05:00 UTCMCP wiki_curator_reviewRevisar drafts y publicar/descartar

El calendario completo (hora Madrid CEST)

Hora MadridQué correDónde
02:15bib-reindex-ts (GH Actions)workspace
02:30bib-reindex-claude-method (GH Actions)workspace
06:15bib_ast.py · Python AST reindexHetzner Stage
06:15drift-cron · detección driftHetzner Stage
06:30wiki-lint · stale + contradiccionesHetzner Stage
07:00 (L+J)wiki-curator · revisar draftsHetzner Stage
08:00wiki-translate (GH Actions)workspace
08:30 (L+M+V)wiki-catalog (GH Actions)workspace
10:00 (domingos)wiki-weekly-report (GH Actions)workspace
10:00 (1er domingo)audit-docs-drift (GH Actions)CreaRack-Pro
En cada pushpost-merge-ingest (GH Actions)ambos repos
En cada push de códigopush-drift (GH Actions)CreaRack-Pro
En cada push de wiki .mdsync-cascade-detect (GH Actions)workspace

Cómo pausar todos los bots

Toggle global (Curator + Lint + Utility + Drift + bib-reindex-ts)

# Pausar
gh variable set BIBLIOTECARIO_PAUSADO --body true --repo CreaRackSL/CreaRackSL-workspace

# Reanudar
gh variable set BIBLIOTECARIO_PAUSADO --body false --repo CreaRackSL/CreaRackSL-workspace

Toggle de Sync Cascade (solo)

# Pausar
gh variable set SYNC_CASCADE_PAUSADO --body true --repo CreaRackSL/CreaRackSL-workspace

# Reanudar
gh variable set SYNC_CASCADE_PAUSADO --body false --repo CreaRackSL/CreaRackSL-workspace

Los crons de Hetzner

Para pausar los crons de Hetzner hay que SSH al servidor Stage y comentar/descomentar líneas en /etc/cron.d/biblioteca-crons:

ssh root@crearack-staging.netbird.cloud
nano /etc/cron.d/biblioteca-crons
# Comentar la línea del cron que quieras pausar

Ver el estado en tiempo real

workspace.crearack.com/biblioteca/pulse tiene un widget de estado de crons que muestra:


Véase también

Subir