615f279323
Tipo Log con niveles debug/info/warn/error, source, entity_id y execution_id opcionales. Migración 003_logs.sql y funciones InsertLog, GetLog, ListLogs con filtros combinables. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
180 lines
6.0 KiB
Go
180 lines
6.0 KiB
Go
package fn_operations
|
|
|
|
import "time"
|
|
|
|
// EntityStatus represents the lifecycle state of an entity.
|
|
type EntityStatus string
|
|
|
|
const (
|
|
StatusActive EntityStatus = "active"
|
|
StatusStale EntityStatus = "stale"
|
|
StatusCorrupted EntityStatus = "corrupted"
|
|
StatusArchived EntityStatus = "archived"
|
|
)
|
|
|
|
// RelationStatus represents the lifecycle state of a relation.
|
|
type RelationStatus string
|
|
|
|
const (
|
|
RelDesigned RelationStatus = "designed"
|
|
RelImplemented RelationStatus = "implemented"
|
|
RelTested RelationStatus = "tested"
|
|
RelRunning RelationStatus = "running"
|
|
RelDeprecated RelationStatus = "deprecated"
|
|
)
|
|
|
|
// Direction represents the directionality of a relation.
|
|
type Direction string
|
|
|
|
const (
|
|
DirUnidirectional Direction = "unidirectional"
|
|
DirBidirectional Direction = "bidirectional"
|
|
DirInverse Direction = "inverse"
|
|
)
|
|
|
|
// Entity is a concrete instance of a registry type within a project context.
|
|
type Entity struct {
|
|
ID string `json:"id"`
|
|
Name string `json:"name"`
|
|
TypeRef string `json:"type_ref"`
|
|
Status EntityStatus `json:"status"`
|
|
Description string `json:"description"`
|
|
Domain string `json:"domain"`
|
|
Tags []string `json:"tags"`
|
|
Source string `json:"source"`
|
|
Metadata map[string]any `json:"metadata"`
|
|
Notes string `json:"notes"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
}
|
|
|
|
// Relation describes how one entity connects to or transforms into another.
|
|
type Relation struct {
|
|
ID string `json:"id"`
|
|
Name string `json:"name"`
|
|
FromEntity string `json:"from_entity"`
|
|
ToEntity string `json:"to_entity"`
|
|
Via string `json:"via"`
|
|
Description string `json:"description"`
|
|
Purity string `json:"purity"`
|
|
Direction Direction `json:"direction"`
|
|
Weight *float64 `json:"weight"`
|
|
Status RelationStatus `json:"status"`
|
|
StartedAt *time.Time `json:"started_at"`
|
|
EndedAt *time.Time `json:"ended_at"`
|
|
Order *int `json:"order"`
|
|
Tags []string `json:"tags"`
|
|
Notes string `json:"notes"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
}
|
|
|
|
// RelationInput represents one input entity in a multi-input relation.
|
|
type RelationInput struct {
|
|
ID string `json:"id"`
|
|
RelationID string `json:"relation_id"`
|
|
EntityID string `json:"entity_id"`
|
|
Role string `json:"role"`
|
|
Order *int `json:"order"`
|
|
}
|
|
|
|
// ExecutionStatus represents the result of a pipeline execution.
|
|
type ExecutionStatus string
|
|
|
|
const (
|
|
ExecSuccess ExecutionStatus = "success"
|
|
ExecFailure ExecutionStatus = "failure"
|
|
ExecPartial ExecutionStatus = "partial"
|
|
)
|
|
|
|
// Severity classifies the impact of an assertion failure.
|
|
type Severity string
|
|
|
|
const (
|
|
SeverityCritical Severity = "critical"
|
|
SeverityWarning Severity = "warning"
|
|
SeverityInfo Severity = "info"
|
|
)
|
|
|
|
// AssertionResultStatus represents the outcome of an assertion evaluation.
|
|
type AssertionResultStatus string
|
|
|
|
const (
|
|
ResultPass AssertionResultStatus = "pass"
|
|
ResultFail AssertionResultStatus = "fail"
|
|
ResultSkip AssertionResultStatus = "skip"
|
|
)
|
|
|
|
// Execution records a pipeline run with its metrics and outcome.
|
|
type Execution struct {
|
|
ID string `json:"id"`
|
|
PipelineID string `json:"pipeline_id"`
|
|
RelationID string `json:"relation_id"`
|
|
Status ExecutionStatus `json:"status"`
|
|
StartedAt time.Time `json:"started_at"`
|
|
EndedAt *time.Time `json:"ended_at"`
|
|
DurationMs *int64 `json:"duration_ms"`
|
|
RecordsIn *int64 `json:"records_in"`
|
|
RecordsOut *int64 `json:"records_out"`
|
|
Error string `json:"error"`
|
|
Metrics map[string]any `json:"metrics"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
}
|
|
|
|
// Assertion is a formal quality rule evaluated against an entity.
|
|
type Assertion struct {
|
|
ID string `json:"id"`
|
|
EntityID string `json:"entity_id"`
|
|
Name string `json:"name"`
|
|
Kind string `json:"kind"` // free text: range, null, statistical, consistency, freshness, ...
|
|
Rule string `json:"rule"`
|
|
Severity Severity `json:"severity"`
|
|
Description string `json:"description"`
|
|
Active bool `json:"active"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
}
|
|
|
|
// AssertionResult records one evaluation of an assertion.
|
|
type AssertionResult struct {
|
|
ID string `json:"id"`
|
|
AssertionID string `json:"assertion_id"`
|
|
ExecutionID string `json:"execution_id"`
|
|
Status AssertionResultStatus `json:"status"`
|
|
Value map[string]any `json:"value"`
|
|
Message string `json:"message"`
|
|
EvaluatedAt time.Time `json:"evaluated_at"`
|
|
}
|
|
|
|
// LogLevel represents the severity of a log entry.
|
|
type LogLevel string
|
|
|
|
const (
|
|
LogDebug LogLevel = "debug"
|
|
LogInfo LogLevel = "info"
|
|
LogWarn LogLevel = "warn"
|
|
LogError LogLevel = "error"
|
|
)
|
|
|
|
// Log is a free-form operational event within a project context.
|
|
type Log struct {
|
|
ID string `json:"id"`
|
|
Level LogLevel `json:"level"`
|
|
Source string `json:"source"` // who: agent, pipeline, reactive_loop, function name...
|
|
EntityID string `json:"entity_id"` // optional context
|
|
ExecutionID string `json:"execution_id"` // optional context
|
|
Message string `json:"message"`
|
|
Metadata map[string]any `json:"metadata"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
}
|
|
|
|
// TypeSnapshot is an immutable copy of a registry type at point of use.
|
|
type TypeSnapshot struct {
|
|
ID string `json:"id"`
|
|
Version string `json:"version"`
|
|
Lang string `json:"lang"`
|
|
Algebraic string `json:"algebraic"`
|
|
Definition string `json:"definition"`
|
|
Description string `json:"description"`
|
|
SnappedAt time.Time `json:"snapped_at"`
|
|
}
|