Files
fn_registry/.claude/rules/sources.md
T
egutierrez ef86aae8fb feat: source attribution para funciones externas
Sistema de extracción de funciones desde repos externos. Agrega campos
source_repo, source_license y source_file en functions y types (migración 006).
Incluye manifest sources/sources.yaml, regla sources.md, parser con campos
de atribución, y template actualizado con los nuevos campos.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 14:23:53 +02:00

2.2 KiB

Extraccion de funciones desde repos externos (sources/)

Workflow

  1. Clonar repo en sources/<nombre> (gitignored, solo el manifest sources/sources.yaml se versiona)
  2. El agente analiza el repo y propone funciones candidatas
  3. Las funciones se copian y adaptan al formato del registry (.go/.py/.sh/.ts + .md con frontmatter)
  4. fn index las registra. El manifest se actualiza con las funciones extraidas.

Filtro de calidad (obligatorio antes de extraer)

Una funcion externa solo se extrae si cumple TODOS estos criterios:

  • Firma generica: no depende de tipos internos del repo origen ni de config hardcodeada
  • Sin estado global: no usa variables globales, singletons, ni init() con side effects
  • Dependencias minimas: solo stdlib o dependencias ya presentes en fn_registry
  • Pura si es posible: si la funcion puede ser pura, debe extraerse como pura
  • Sin credenciales: no contiene secrets, API keys, ni paths absolutos
  • Testeable: la logica debe poder validarse con tests unitarios
  • No duplicada: consultar registry.db con FTS5 antes de extraer para evitar duplicados
  • Licencia compatible: el repo debe tener licencia permisiva (MIT, Apache 2.0, BSD, etc.)

Adaptacion al extraer

  • Renombrar a snake_case siguiendo la convencion del registry
  • Adaptar firma para usar tipos nativos (no tipos internos del repo)
  • Crear .md con frontmatter completo incluyendo source_repo, source_license, source_file
  • Actualizar sources/sources.yaml con la extraccion

Campos de atribucion en frontmatter

source_repo: "https://github.com/user/project"
source_license: "MIT"
source_file: "pkg/original_file.go"

Estos campos se indexan en registry.db y permiten consultar:

SELECT id, source_repo, source_license FROM functions WHERE source_repo != '';

Lenguajes soportados para extraccion

Cualquier lenguaje puede analizarse como fuente. El destino depende de la naturaleza de la funcion:

  • Algoritmos/logica pura → Go (functions/{domain}/) o Python (python/functions/{domain}/)
  • Scripts/utilidades sistema → Bash (bash/functions/{domain}/)
  • UI/frontend → TypeScript (frontend/functions/{domain}/)
  • C/Rust/otros → Traducir a Go o Python, manteniendo la semantica original