feat: funciones core — detect_cycle, generate_id, rewrite_rule

Tres funciones puras para el dominio core: detección de ciclos en grafos
dirigidos (DFS), generación de IDs determinísticos, y reescritura de
reglas con pattern matching.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-30 14:24:00 +02:00
parent c72ae15429
commit b5a6711c64
6 changed files with 239 additions and 0 deletions
+38
View File
@@ -0,0 +1,38 @@
---
name: detect_cycle
kind: function
lang: go
domain: core
version: "1.0.0"
purity: impure
signature: "func DetectCycle(conn *sql.DB, table, fromCol, toCol, filterCol, fromNode, toNode string) error"
description: "Detecta ciclos en un grafo dirigido almacenado en SQLite usando BFS antes de insertar una arista."
tags: [graph, cycle, bfs, sqlite, validation]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: "error_go_core"
imports: ["database/sql"]
tested: false
tests: []
test_file_path: ""
file_path: "functions/core/detect_cycle.go"
---
## Ejemplo
```go
// Verificar si agregar A -> B crearia un ciclo en la tabla "relations"
err := DetectCycle(db, "relations", "from_entity", "to_entity", "via", "A", "B")
if err != nil {
// ciclo detectado
}
// Sin filtro — considerar todas las aristas
err = DetectCycle(db, "edges", "source", "target", "", "X", "Y")
```
## Notas
Usa BFS desde toNode siguiendo aristas existentes. Si alcanza fromNode, la nueva arista crearia un ciclo. El parametro filterCol permite ignorar aristas semanticas (no causales) — pasar "" para considerar todas.