CreaRack-SL

Tripwire trigger en bib_ingest · KB vs Graph Fase 2

Tripwire trigger en bib_ingest · KB vs Graph Fase 2

Qué es

trigger_tripwires es una función añadida a .github/scripts/bib_ingest.py (CreaRack-Pro) en el PR #34. Implementa la Capa 1 reactiva del sistema KB vs Graph: cada vez que se mergea un PR a main, el Bibliotecario-Ingest notifica al handler MCP bib_mark_verification_pending con los paths de código tocados, para que marque como verification_pending=1 las páginas wiki cuyas sources referencian esos archivos.

Es la pieza simétrica del mismo mecanismo implementado en el repo workspace (PR workspace #37). Ambos repos disparan tripwires de forma independiente — los paths son disjuntos en la práctica.

Motivación

Sin tripwires, una página wiki podría quedar desactualizada indefinidamente tras un cambio de código sin que nadie lo detecte hasta el cron de Fase 3. Con tripwires, el flag verification_pending=1 se activa en segundos tras el merge, priorizando esas páginas en la siguiente ejecución del cron.

Implementación

Archivo: .github/scripts/bib_ingest.py Función: trigger_tripwires(changed_files: list[str], mcp_token: str) -> dict

def trigger_tripwires(changed_files: list[str], mcp_token: str) -> dict:
    # Filtra paths internos no relevantes para la wiki
    tripwire_paths = [
        f for f in changed_files
        if not f.startswith(".github/scripts/bib_")
        and not f.startswith("scripts/harness/")
        and not f.startswith("context/")
    ]
    if not tripwire_paths:
        return {"marked": 0, "skipped": "all_paths_excluded"}
    # Llama al handler MCP bib_mark_verification_pending
    raw = call_mcp("bib_mark_verification_pending",
                   {"file_paths": tripwire_paths, "actor": "agent-ingest-tripwire"},
                   mcp_token)
    return json.loads(raw) if raw else {}

Puntos clave

PropiedadValor
TimingAntes del flow Tier 1/2/3 — se dispara siempre, incluso si el Ingest decide skip.
Non-blockingRuntimeError se captura y loguea; nunca rompe el pipeline de ingest.
IdempotenteLlamadas múltiples al mismo path no producen duplicados en D1.
Latencia~50ms por llamada MCP.

Paths excluidos de tripwires

Los siguientes prefijos se filtran antes de llamar al MCP — son paths internos del propio sistema de ingest/harness que no tienen pages wiki como sources:

  • .github/scripts/bib_*
  • scripts/harness/
  • context/

Logging en CI

[Tripwire] Marked N pages as verification_pending=1 (paths checked: M)
[Tripwire] ERROR: <mensaje si el MCP falla>

Flujo completo

PR merged → bib_ingest.py se ejecuta
    └─► trigger_tripwires(changed_files)
            └─► call_mcp("bib_mark_verification_pending", {file_paths: [...]})
                    └─► D1: UPDATE bib_wiki_pages SET verification_pending=1
                            WHERE sources MATCH any(file_paths)
                    [log: "Marked N pages as verification_pending=1"]
    └─► Tier 1 / Tier 2 / Tier 3 (flow normal de ingest)

El flag verification_pending=1 permanece activo hasta que el cron de Fase 3 (aún no desplegado) ejecute bib_check_drift_for_doc sobre esas páginas y las marque como verificadas o desactualizadas.

Estado

  • ✅ Desplegado en CreaRack-Pro (main) — PR #34, 2026-05-14.
  • ✅ Desplegado en workspace — PR #37, 2026-05-14.
  • ✅ Handler MCP bib_mark_verification_pending en producción (Cloudflare Workers).
  • 🔲 Cron de consumo del flag (Fase 3) — pendiente.

Smoke test post-merge

El siguiente commit a main que toque código real (no docs) debe mostrar en logs Bibliotecario-Ingest:

[Tripwire] Marked N pages as verification_pending=1

Si N=0 con archivos de código real cambiados, verificar que las pages afectadas tienen sources[].type = "code" con los paths correctos en su front-matter.

Véase también

  • [[decision—20260514—knowledge-base-vs-graph]]