CreaRack-SL

Biblioteca · Arquitectura del Knowledge Graph

Biblioteca — Hypercontexto

Concepto

La Biblioteca es un grafo de conocimiento que mapea codigo a documentacion. Permite al agente IA consultar contexto de forma precisa sin cargar toda la documentacion en la ventana de contexto.

Problema que resuelve: En proyectos grandes (500+ endpoints), la documentacion supera la ventana de contexto. La Biblioteca permite consultar solo lo relevante, bajo demanda.

Arquitectura

Codigo fuente
    ↓ (indexacion: OpenAPI + Code + AST + Docs + Chunks)
Knowledge Graph (nodos + edges + confianza + comunidades)
    ↓ (busqueda)
MCP Tools (bib_*)
    ↓ (respuesta)
Claude Code (contexto bajo demanda)

Nodos

TipoEjemploFuente
endpointGET /api/users/OpenAPI
modelUserCode + AST
serviceAuthServiceCode
schemaUserOutOpenAPI
templatedashboard.htmlCode
js_moduleApiService.jsCode
docAUTHENTICATION.mdDoc indexer
moduleracks.modelsAST (archivo fuente)
classRackServiceAST (clase no-modelo)
methodDevice.get_power_usageAST (metodo)
functionrack_listAST (funcion standalone)

Edges (relaciones)

RelacionEjemploConfidence
documentsdoc → endpointEXTRACTED
uses_modelendpoint → modelEXTRACTED
calls_serviceendpoint → serviceEXTRACTED
callsfunction → function (AST call graph)EXTRACTED
importsmodule → module (imports)EXTRACTED
inheritsclass → base classEXTRACTED
containsmodule → class, class → methodEXTRACTED
defines_schemaschema → endpointEXTRACTED
semantically_similar_toconcept → concept (LLM)INFERRED

Confianza en edges

Cada relacion tiene un nivel de confianza:

  • EXTRACTED (score 1.0) — determinista, del AST o indexacion directa
  • INFERRED (score 0.5) — inferido por LLM
  • AMBIGUOUS (score 0.2) — requiere revision humana

El BFS de bib_impact_query soporta filtro min_confidence para excluir edges poco fiables.

Comunidades

Deteccion automatica de clusters via Label Propagation (in-worker, TypeScript):

  • Cohesion: densidad de edges internas vs totales
  • Bridge nodes: nodos con conexiones a 3+ comunidades
  • Coupling report: pares de comunidades con mayor acoplamiento

Code Health (inspirado en TrueCourse)

Tres analisis automaticos sobre el grafo existente:

AnalisisQue detectaPor que importa
CiclosA→B→C→A en imports/calls (DFS)Dependencias circulares impiden modularizar
God nodesNodos con degree >= 15Hotspots que acoplan todo el sistema
Dead codeNodos sin incoming calls/importsCodigo que nadie usa, ruido en el grafo

God nodes se clasifican en:

  • dependency_magnet: muchos incoming (todo depende de el)
  • dependency_spreader: muchos outgoing (depende de todo)
  • balanced: alto degree bidireccional

Precision del detector de dead code

El detector filtra automaticamente patrones de framework (Django/Ninja) que parecen dead code pero estan vivos por diseno:

Filtros SQL (por file_path):

  • middleware/, management/commands/, templatetags/ — wired via settings
  • views.py, htmx_views.py, views_publish* — URL routing
  • signals.py, adapters.py, events.py — framework hooks
  • *_api.py, /api/ — endpoints HTTP (Ninja/DRF)
  • /services/ — service layer (siempre llamado desde endpoints)
  • consumers.py — Django Channels (ASGI routing)
  • tasks.py — Huey/Celery (task scheduler)
  • terminal/agent/ — standalone executables con conditional imports

Filtros metadata (por decorators/bases/nombre):

  • HTTP decorators: get, post, put, patch, delete
  • Framework decorators: receiver, db_task, db_periodic_task
  • Pydantic bases: Schema, ModelSchema, FilterSchema
  • Framework bases: Command, Adapter, AppConfig
  • Dunder methods, ORM methods (save/delete/clean)
  • resolve_* validators, inner functions (decorator/wrapper)
  • Framework decorators preparados (tracked_task, tenant_throttle)

Filtro de ancestros:

  • Si CUALQUIER ancestro (modulo, paquete, clase) tiene incoming imports, el nodo es reachable

Exclusion por tipo:

  • Todos los models (tienen migraciones, vivos por definicion)
  • endpoints, schemas, modules, docs (tipos estructurales)

Stack recomendado

ComponenteRolAlternativas
Cloudflare D1Almacenamiento del grafoSQLite, PostgreSQL
Workers AI (bge-m3)Embeddings para busqueda semanticaOpenAI embeddings
Cloudflare Pages FunctionsMCP serverExpress, FastAPI
Gemini FlashSintesis de respuestas (ask)Claude Haiku
Python ast builtinExtraccion AST (zero deps)tree-sitter (multi-lenguaje)

MCP Tools (29)

Consulta

ToolProposito
bib_context_queryBriefing de un modulo (modelos, endpoints, docs)
bib_impact_queryQue docs afecta un cambio de archivo (con min_confidence)
bib_search_nodesBuscar nodos por nombre/tipo/app
bib_get_nodeDetalle de un nodo con relaciones (incluye confidence)
bib_app_summaryResumen de una app
bib_list_endpointsListar endpoints con filtros
bib_doc_coverageQue tiene y que falta documentacion
bib_call_graphTrazar callers/callees de una funcion
bib_stale_reportNodos desactualizados
bib_statsEstado general (nodos, edges, confidence, comunidades)

Busqueda semantica (Archivo Maestro)

ToolProposito
bib_search_semanticBusqueda vectorial por embeddings
bib_askPregunta en lenguaje natural → respuesta sintetizada
bib_index_chunksIndexar documentos con embeddings

Comunidades (Graphify)

ToolProposito
bib_compute_communitiesDetectar clusters via Label Propagation
bib_get_communityDetalle de una comunidad o comunidad de un nodo
bib_coupling_reportAcoplamiento entre comunidades, bridge nodes

Code Health (TrueCourse-inspired)

ToolProposito
bib_cycle_reportDependencias circulares (DFS en imports/calls)
bib_god_nodesNodos con degree >= 15 (hotspots arquitectonicos)
bib_dead_codeNodos sin incoming calls/imports (posible dead code)

Indexacion

ToolProposito
bib_index_openapiIndexar endpoints desde OpenAPI JSON
bib_index_codeIndexar modelos/servicios en batch (con confidence)
bib_index_astIndexar AST Python (clases, funciones, imports, calls)
bib_index_docsIndexar documentos markdown en batch
bib_full_reindexGuia de reindexacion completa (6 fases)

Mantenimiento

ToolProposito
bib_register_nodeRegistrar nuevo nodo (upsert)
bib_create_edgeCrear relacion (con confidence EXTRACTED/INFERRED/AMBIGUOUS)
bib_remove_edgeEliminar relacion
bib_register_docRegistrar documento con metadatos
bib_report_changeMarcar docs para revision tras commit

Flujo obligatorio en cada commit

PasoCuandoTool
1. ContextoAntes de editarbib_context_query(topic="<app>")
2. ImpactoAntes de commitbib_impact_query(file_path="<ruta>")
3. ReporteDespues de commitbib_report_change(file_path="<ruta>")

Reindexacion (6 fases)

  1. bib_index_openapi — endpoints + schemas del OpenAPI JSON
  2. bib_index_code — modelos, servicios, signals
  3. bib_index_ast — clases, funciones, imports, call graphs (Python AST)
  4. bib_index_docs — documentos markdown
  5. bib_index_chunks — embeddings para busqueda semantica
  6. bib_compute_communities — deteccion de clusters

Extractor AST

Script Python que usa ast builtin (zero deps):

python scripts/bib_ast.py --stats                # Solo estadisticas
python scripts/bib_ast.py --output ast.json       # JSON a archivo
python scripts/bib_ast.py --apps racks,monitoring  # Solo ciertas apps
python scripts/bib_ast.py --incremental --push     # Solo archivos cambiados

Extrae: modulos, clases (detecta Django models por herencia), metodos, funciones, imports, herencia, call graphs. Cache SHA256 por archivo para modo incremental.

Resultados reales

En CreaRack Pro (Abril 2026):

  • ~3100 nodos indexados (496 endpoints, 198 schemas, 79 modelos, 168 docs, 256 modulos, 308 clases, 588 metodos, 981 funciones)
  • ~7500 edges (3339 calls, 1956 contains, 641 imports, 15 inherits, 1577 anteriores)
  • 1489 chunks con embeddings
  • Busqueda semantica sobre 58 paginas de wiki
  • Comunidades auto-detectadas via Label Propagation
  • Confianza EXTRACTED/INFERRED/AMBIGUOUS en cada edge

Widget: Salud del Sistema

Dashboard widget (React) que muestra 3 indicadores de salud:

IndicadorQue muestraSemaforo
Backup D1Ultimo export + filas totalesVerde <48h, Rojo >48h
Biblioteca% nodos actualizados (stale check diario)Verde >=80%, Naranja >=50%, Rojo <50%
GrafoNodos, comunidades, cohesion mediaVerde >=80%, Naranja >=50%, Rojo <50%

Archivos:

  • health-widget.tsx — Componente React (copiar a src/components/dashboard/)
  • health-api.ts — GET endpoint que alimenta el widget (copiar a functions/api/maintenance/status.ts)
  • stale-check-api.ts — POST endpoint para health check diario via cron

Prerequisitos: tablas activity_log, bib_nodes, bib_edges, bib_communities.


Origen: Graphify

Ideas adaptadas de safishamsi/graphify:

  1. AST profundo con ast builtin (en vez de tree-sitter) — zero deps, Python-only
  2. Confianza en edges — score 0.0-1.0 por relacion
  3. Deteccion de comunidades — Label Propagation en TypeScript (in-worker, <100ms)

Véase también

  • [[ia-tech—metodo—claude-method-guide]]
  • [[ia-tech—metodo—quick-start]]
  • [[ia-tech—metodo—harness-engineering]]
  • [[crearack-tech—guides—biblioteca-staff-guide]]
  • [[crearack-tech—method—harness-guide]]