feat: executions, assertions y bucle reactivo en fn_operations
Añade Execution, Assertion, AssertionResult al paquete fn_operations. Motor de evaluación de assertions con reescritura SQL automática. Bucle reactivo: ExecuteAndReact evalúa assertions y cambia status de entities (corrupted/stale) + auto-crea proposals en registry. CLI fn ops: assertion (add/list/show/delete/eval) y execution (add/list/show). Migración 002_executions_assertions.sql con FTS para assertions. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
-- Executions, assertions, and assertion_results tables.
|
||||
-- Closes the autonomous improvement loop: execute -> assert -> analyze.
|
||||
|
||||
CREATE TABLE IF NOT EXISTS executions (
|
||||
id TEXT PRIMARY KEY,
|
||||
pipeline_id TEXT NOT NULL,
|
||||
relation_id TEXT NOT NULL DEFAULT '',
|
||||
status TEXT NOT NULL CHECK(status IN ('success','failure','partial')),
|
||||
started_at TEXT NOT NULL,
|
||||
ended_at TEXT,
|
||||
duration_ms INTEGER,
|
||||
records_in INTEGER,
|
||||
records_out INTEGER,
|
||||
error TEXT NOT NULL DEFAULT '',
|
||||
metrics TEXT NOT NULL DEFAULT '{}',
|
||||
created_at TEXT NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS assertions (
|
||||
id TEXT PRIMARY KEY,
|
||||
entity_id TEXT NOT NULL REFERENCES entities(id),
|
||||
name TEXT NOT NULL,
|
||||
kind TEXT NOT NULL,
|
||||
rule TEXT NOT NULL,
|
||||
severity TEXT NOT NULL DEFAULT 'warning' CHECK(severity IN ('critical','warning','info')),
|
||||
description TEXT NOT NULL DEFAULT '',
|
||||
active INTEGER NOT NULL DEFAULT 1,
|
||||
created_at TEXT NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS assertion_results (
|
||||
id TEXT PRIMARY KEY,
|
||||
assertion_id TEXT NOT NULL REFERENCES assertions(id),
|
||||
execution_id TEXT NOT NULL DEFAULT '',
|
||||
status TEXT NOT NULL CHECK(status IN ('pass','fail','skip')),
|
||||
value TEXT NOT NULL DEFAULT '{}',
|
||||
message TEXT NOT NULL DEFAULT '',
|
||||
evaluated_at TEXT NOT NULL
|
||||
);
|
||||
|
||||
CREATE VIRTUAL TABLE IF NOT EXISTS assertions_fts USING fts5(
|
||||
id,
|
||||
name,
|
||||
description,
|
||||
rule,
|
||||
content='assertions',
|
||||
content_rowid='rowid'
|
||||
);
|
||||
|
||||
CREATE TRIGGER IF NOT EXISTS assertions_ai AFTER INSERT ON assertions BEGIN
|
||||
INSERT INTO assertions_fts(rowid, id, name, description, rule)
|
||||
VALUES (new.rowid, new.id, new.name, new.description, new.rule);
|
||||
END;
|
||||
|
||||
CREATE TRIGGER IF NOT EXISTS assertions_ad AFTER DELETE ON assertions BEGIN
|
||||
INSERT INTO assertions_fts(assertions_fts, rowid, id, name, description, rule)
|
||||
VALUES ('delete', old.rowid, old.id, old.name, old.description, old.rule);
|
||||
END;
|
||||
|
||||
CREATE TRIGGER IF NOT EXISTS assertions_au AFTER UPDATE ON assertions BEGIN
|
||||
INSERT INTO assertions_fts(assertions_fts, rowid, id, name, description, rule)
|
||||
VALUES ('delete', old.rowid, old.id, old.name, old.description, old.rule);
|
||||
INSERT INTO assertions_fts(rowid, id, name, description, rule)
|
||||
VALUES (new.rowid, new.id, new.name, new.description, new.rule);
|
||||
END;
|
||||
Reference in New Issue
Block a user