CreaRack-SL

MCP Tool · wiki_lint_contradictions

MCP Tool: wiki_lint_contradictions

Descripción

Tool MCP del Bibliotecario-Lint (Supercontexto Fase 5). Detecta contradicciones semánticas entre pares de páginas wiki activas que pertenecen a la misma community_id. Usa Claude 3 Haiku para clasificar cada par como contradict, complementary o unrelated.

Las contradicciones confirmadas se persisten en la tabla D1 bib_wiki_contradictions (con dry_run=false).

Signatura

wikiLintContradictions(
  db: D1Database,
  args: {
    mode?: 'incremental' | 'full';   // default 'incremental'
    recent_days?: number;             // default 7 (solo en modo incremental)
    max_pairs_per_community?: number; // default 15
    max_total_pairs?: number;         // default 100
    dry_run?: boolean;                // default true
  },
  env: Env
): Promise<string>  // JSON serializado

Ubicación: functions/api/mcp/handlers/wiki.ts → función wikiLintContradictions

Modos de operación

incremental (default)

Solo evalúa pares donde al menos una de las dos páginas es “reciente” (su last_verified o created_at cae dentro de los últimos recent_days días). Optimizado para el cron diario: procesa pocas páginas, coste mínimo.

full

Evalúa todos los pares dentro de cada community. Usado por el cron semanal de consolidación para garantizar que no se escapen contradicciones antiguas.

Input Schema (MCP)

{
  "mode": "incremental",
  "recent_days": 7,
  "max_pairs_per_community": 10,
  "max_total_pairs": 40,
  "dry_run": true
}

Output

{
  "mode": "incremental",
  "pairs_checked": 12,
  "contradictions_found": 2,
  "contradictions_inserted": 0,
  "total_tokens": 960,
  "dry_run": true,
  "results": [
    {
      "page_a": "entity--racks--model--rack",
      "page_b": "feature--monitoring--cns-v1",
      "community_id": 3,
      "verdict": "contradict",
      "subject": "comportamiento bajo carga",
      "claim_a": "Rack se evalúa síncronamente en cada request",
      "claim_b": "CNS evalúa el estado de forma completamente asíncrona",
      "reason": "Afirmaciones incompatibles sobre el modelo de ejecución",
      "tokens_used": 480,
      "inserted": false
    }
  ]
}

Pipeline interno

1. SELECT pages WHERE status='active' AND community_id IS NOT NULL
2. Agrupar por community_id
3. Generar pares candidatos según modo
4. Por cada par:
   a. fetchSnippet(page_a) — GH Contents API, ≤2000 chars, cacheado en Map
   b. fetchSnippet(page_b)
   c. Si algún snippet está vacío → skip
   d. callAnthropicHaiku(contradictionPrompt, userMsg, max_tokens=400)
   e. parseJsonFromLLM → {verdict, subject, claim_a, claim_b, reason}
   f. Si verdict='contradict' AND !dry_run → INSERT bib_wiki_contradictions
5. Agregar resultados y loguear en bib_wiki_log

Prompt de Haiku

El prompt del sistema instruye a Haiku a responder con un único JSON en una línea:

{"verdict":"contradict","subject":"tema","claim_a":"cita A","claim_b":"cita B","reason":"breve"}

Criterio conservador: en caso de duda → "complementary". Solo se reportan contradicciones claras.

Idempotencia

Antes de insertar una contradicción, el tool:

  1. Ordena el par alfabéticamente: [a.slug, b.slug].sort()
  2. Verifica si ya existe en bib_wiki_contradictions con status='open' para el mismo page_a_slug, page_b_slug y subject
  3. Solo inserta si no existe → evita duplicados en ejecuciones repetidas

Tabla D1: bib_wiki_contradictions

INSERT INTO bib_wiki_contradictions (page_a_slug, page_b_slug, claim_a, claim_b, subject)
VALUES (?, ?, ?, ?, ?)
-- claim_a/b truncados a 500 chars, subject a 200 chars

Variables de entorno requeridas

VariableObligatoriaUso
ANTHROPIC_API_KEYSíLlamadas a Claude 3 Haiku
GH_PATNo (pero recomendada)Fetch de snippets de wiki desde GitHub

Si ANTHROPIC_API_KEY no está configurado, el tool retorna {"error": "ANTHROPIC_API_KEY not configured"}.

Registro MCP (index.ts)

wiki_lint_contradictions: { action: 'lint', entity_type: 'wiki_contradiction' }

Coste estimado

EscenarioParesCoste aprox.
Cron diario (incremental, max 40 pares)≤40~$0.08
Cron semanal (full, max 200 pares)≤200~$0.40
Review manual (dry_run=true, 40 pares)≤40~$0.08

Evitar relanzar en bucle — el coste se acumula linealmente con el número de pares.

Roadmap / Limitaciones conocidas

  • wiki_resolve_contradiction aún no existe — mejora futura para resolver contradicciones individualmente desde la wiki.
  • Los snippets se limitan a 2000 chars del inicio del fichero. Páginas muy largas pueden tener contradicciones en secciones no leídas.
  • Si GH_PAT no está disponible, todos los pares se saltean (no hay contenido que comparar).

Véase también

  • [[feature—supercontext—bibliotecario-lint-fase-5]] — fase del Supercontexto que introdujo esta tool
  • [[feature—biblioteca—wiki-lint-contradictions-pagination]] — mejora posterior de paginación sobre esta misma tool
  • [[entity—mcp—tool—wiki-lint-bulk]] — tool hermana del Bibliotecario-Lint (stale/orphans) que corre en el mismo cron
  • [[concept—biblioteca—supercontexto]] — arquitectura global del sistema de bibliotecarios latentes
  • [[feature—biblioteca—graphify]] — detección de comunidades que agrupa pares candidatos para el Lint