phase 4: fix execution FK violation — create entity row before insert
- phase3.go: RequestExecution now calls InsertEntity before InsertExecution (executions.entity_id references entities.id via FK constraint). - mcp/server.go: request_execution MCP tool same fix — inserts entities row with slug 'exec:<target>:<id8>' before executions insert. - docker-compose.yml: fix seed OIKOS_SEEDS_DIR from /app/seeds to /seeds (distroless image COPY destination).
This commit is contained in:
@@ -42,7 +42,7 @@ services:
|
|||||||
condition: service_completed_successfully
|
condition: service_completed_successfully
|
||||||
environment:
|
environment:
|
||||||
OIKOS_DATABASE_URL: postgres://oikos:${OIKOS_DB_PASSWORD:-oikos_dev}@postgres:5432/oikos?sslmode=disable
|
OIKOS_DATABASE_URL: postgres://oikos:${OIKOS_DB_PASSWORD:-oikos_dev}@postgres:5432/oikos?sslmode=disable
|
||||||
OIKOS_SEEDS_DIR: /app/seeds
|
OIKOS_SEEDS_DIR: /seeds
|
||||||
command: ["seed"]
|
command: ["seed"]
|
||||||
restart: "no"
|
restart: "no"
|
||||||
|
|
||||||
|
|||||||
@@ -504,6 +504,18 @@ func (s *Server) RequestExecution(ctx context.Context, req gen.RequestExecutionR
|
|||||||
defer tx.Rollback(ctx)
|
defer tx.Rollback(ctx)
|
||||||
|
|
||||||
q := sqlcgen.New(tx)
|
q := sqlcgen.New(tx)
|
||||||
|
|
||||||
|
execSlug := "exec:" + id.String()[:8]
|
||||||
|
if _, err := q.InsertEntity(ctx, sqlcgen.InsertEntityParams{
|
||||||
|
ID: id,
|
||||||
|
Slug: execSlug,
|
||||||
|
Type: "execution",
|
||||||
|
Name: req.Body.Action + " on " + req.Body.Target,
|
||||||
|
Attributes: []byte("{}"),
|
||||||
|
}); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
if err := q.InsertExecution(ctx, sqlcgen.InsertExecutionParams{
|
if err := q.InsertExecution(ctx, sqlcgen.InsertExecutionParams{
|
||||||
EntityID: id,
|
EntityID: id,
|
||||||
TargetEntityID: &targetID,
|
TargetEntityID: &targetID,
|
||||||
|
|||||||
@@ -243,6 +243,16 @@ func newServer(pool *db.Pool, agentID uuid.UUID) *mcp.Server {
|
|||||||
}
|
}
|
||||||
correlationID := uuid.New().String()
|
correlationID := uuid.New().String()
|
||||||
|
|
||||||
|
execSlug := "exec:" + targetSlug + ":" + id.String()[:8]
|
||||||
|
|
||||||
|
_, err = pool.Exec(ctx, `
|
||||||
|
INSERT INTO entities (id, slug, type, name, attributes)
|
||||||
|
VALUES ($1, $2, 'execution', $3, '{}')`,
|
||||||
|
id, execSlug, action+" on "+targetSlug)
|
||||||
|
if err != nil {
|
||||||
|
return textResult(fmt.Sprintf("insert entity: %v", err)), nil
|
||||||
|
}
|
||||||
|
|
||||||
_, err = pool.Exec(ctx, `
|
_, err = pool.Exec(ctx, `
|
||||||
INSERT INTO executions (entity_id, target_entity_id, action, risk_class,
|
INSERT INTO executions (entity_id, target_entity_id, action, risk_class,
|
||||||
status, correlation_id, agent_id)
|
status, correlation_id, agent_id)
|
||||||
|
|||||||
Reference in New Issue
Block a user