Volver a la wiki

MCP Handler: bib_check_drift_for_doc

Descripción

Handler MCP implementado en functions/api/mcp/handlers/wiki.ts. Forma parte de la Pieza 3 del ADR KB vs Graph Fase 2.

Dado un slug de página wiki, recupera los commits que han tocado las sources de tipo code declaradas desde last_verified, le pide a Haiku 4.5 que audite si la documentación ha derivado (drift) respecto al código, y persiste el resultado en bib_drift_checks. Si hay drift confiable (confidence > 0.7), crea un draft de corrección para que el Curator lo triage.

Signatura

bib_check_drift_for_doc(slug: string, dry_run?: boolean) → DriftResult

Parámetros

ParámetroTipoRequeridoDescripción
slugstringSíSlug de la página wiki a auditar.
dry_runbooleanNoSi true, no escribe en D1 ni crea drafts. Default: false.

Respuesta (drift detectado)

{
  "slug": "entity--racks--model--rack",
  "drift": true,
  "confidence": 0.85,
  "summary": "Campo rack_units renombrado en el modelo.",
  "suggested_changes_excerpt": "...",
  "draft_slug_created": "entity--racks--model--rack--drift-fix-20260514",
  "commits_total": 3,
  "commits_analyzed": 3,
  "haiku_input_tokens": 1240,
  "haiku_output_tokens": 187,
  "haiku_cost_usd": 0.00175,
  "dry_run": false
}

Respuesta (sin drift)

{
  "slug": "...",
  "drift": false,
  "confidence": 0.92,
  "summary": "Commits cosmetics only, no behavioral change.",
  "draft_slug_created": null,
  "commits_total": 1,
  "commits_analyzed": 1,
  "dry_run": false
}

Flujo detallado

bib_check_drift_for_doc(slug)
  ↓
  carga bib_wiki_pages (slug, title, type, sources, kind, lifecycle, last_verified, file_path)
  ↓
  filtra sources[type='code']  → si vacío: return {skipped: 'no_code_sources'}
  ↓
  GitHub Commits API ×cada source  (since=last_verified, per_page=5, cap=10 totales)
  ↓  si allCommits.length == 0:
        UPDATE last_verified=now, verification_pending=0
        INSERT bib_drift_checks (drift=0, confidence=0, 'no_commits_since_last_verified')
        → return {drift:false}
  ↓  si commits > 0:
        GitHub commit detail API ×top-5 (diff truncado 900 chars/archivo)
        fetchWikiBody(file_path)  → cuerpo .md sin front-matter, cap 6 KB
        callAnthropicHaiku(systemPrompt, userMessage, maxTokens=600)
        parseJsonFromLLM → {drift, confidence, summary, suggested_changes_excerpt}
  ↓
  drift && confidence>0.7 && !dry_run:
        wikiCreatePage(<slug>--drift-fix-YYYYMMDD, type=draft)
  ↓
  INSERT bib_drift_checks (todas las métricas)
  ↓
  (!drift || confidence<0.3) && !dry_run:
        UPDATE last_verified=now, verification_pending=0

Determinación del repositorio fuente

La función auxiliar repoForSourcePath(srcRef) decide qué repo usar para la GitHub Commits API:

Prefijo del source.refRepositorio
functions/, src/, migrations/, scripts/, .github/workflows/wiki-, .github/workflows/cf-pages, .github/workflows/bib-reindex-ts, .github/workflows/drift-cron, .github/scripts/bib_ingest, public/supercontext/CreaRackSL/CreaRackSL-workspace
Cualquier otroCreaRackSL/CreaRack-Pro

Draft generado por drift

Si drift=true && confidence>0.7, crea un draft con slug <original-slug>--drift-fix-YYYYMMDD con:

System prompt de Haiku

Haiku actúa como documentation drift auditor. Reglas de decisión clave:

CondiciónVeredicto
Commits cosméticos (typos, comentarios, formateo, dep bumps no relacionados)drift=false, confidence≥0.8
Commits cambian API, schema, flujo, comportamiento documentadodrift=true, confidence≥0.7
Intención del commit ambiguaconfidence ∈ (0.3, 0.7) — no se crea draft

Tabla bib_drift_checks

ColumnaTipoDescripción
slugTEXTSlug de la página auditada
drift_detectedINTEGER0/1
confidenceREAL0.0–1.0
summaryTEXTResumen en ≤500 chars
draft_slug_createdTEXT|NULLSlug del draft creado, si aplica
haiku_input_tokensINTEGERTokens input facturados
haiku_output_tokensINTEGERTokens output facturados
haiku_cost_usdREALCoste en USD (Haiku 4.5 pricing)

Precios Haiku 4.5 (mid-2026)

$0.0008 / 1K input tokens
$0.004  / 1K output tokens

Calculados por la función auxiliar haikuCostUsd(inputTokens, outputTokens) definida en el mismo archivo.

Cambios en callAnthropicHaiku

A partir de este PR, callAnthropicHaiku devuelve { text, tokens, inputTokens, outputTokens } (antes solo text, tokens). El desglose inputTokens/outputTokens es necesario para el cálculo de coste diferenciado.

Véase también

Subir