{"record":{"id":"b4f1c878d2469dae","repo":"vxcontrol/pentagi","slug":"failed-to-create-flow-vector-store-log-w","errorCode":null,"errorMessage":"failed to create flow vector store log: %w","messagePattern":"failed to create flow vector store log: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"backend/pkg/controller/flow.go","lineNumber":1189,"sourceCode":"\n\tmlw, err := cnts.mlc.NewFlowMsgLog(ctx, flowID, pub)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to create flow msg log: %w\", err)\n\t}\n\n\tslw, err := cnts.slc.NewFlowSearchLog(ctx, flowID, pub)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to create flow search log: %w\", err)\n\t}\n\n\ttlw, err := cnts.tlc.NewFlowTermLog(ctx, flowID, pub)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to create flow term log: %w\", err)\n\t}\n\n\tvslw, err := cnts.vslc.NewFlowVectorStoreLog(ctx, flowID, pub)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to create flow vector store log: %w\", err)\n\t}\n\n\ttclw, err := cnts.tclc.NewFlowToolCallLog(ctx, flowID, pub)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to create flow tool call log: %w\", err)\n\t}\n\n\tsw, err := cnts.sc.NewFlowScreenshot(ctx, flowID, pub)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to create flow screenshot: %w\", err)\n\t}\n\n\treturn &flowProviderWorkers{\n\t\tmlw:  mlw,\n\t\talw:  alw,\n\t\tslw:  slw,\n\t\ttlw:  tlw,\n\t\tvslw: vslw,","sourceCodeStart":1171,"sourceCodeEnd":1207,"githubUrl":"https://github.com/vxcontrol/pentagi/blob/ea665308baaff015b226f308438a68d929d0f29b/backend/pkg/controller/flow.go#L1171-L1207","documentation":"Fifth step of newFlowProviderWorkers: the vector store log worker is created via cnts.vslc.NewFlowVectorStoreLog(ctx, flowID, pub). Failure wrapped with this message aborts flow startup — the flow's memory/vector-store events (pgvector) cannot be journaled.","triggerScenarios":"NewFlowVectorStoreLog fails during flow startup: DB error on vector-store log initialization, invalid flowID, or the pgvector extension/table is unavailable.","commonSituations":"Postgres running without the pgvector extension installed or wrong version; vector-store table missing after restoring a DB dump without extensions; general DB outage mid-startup; concurrent flow deletion.","solutions":["Verify the pgvector extension is installed: CREATE EXTENSION IF NOT EXISTS vector; and the table exists","Check the wrapped error and Postgres logs for the exact SQL failure","Re-run goose migrations after any DB restore","Confirm DB connectivity and retry flow creation"],"exampleFix":"// before: flow start fails because pgvector is missing\nworkers, err := newFlowProviderWorkers(ctx, flowID, cnts, pub)\n// after: preflight the extension before creating workers\nvar ext bool\nif err := db.QueryRowContext(ctx,\n    \"SELECT EXISTS(SELECT 1 FROM pg_extension WHERE extname='vector')\").Scan(&ext); err != nil {\n    return nil, err\n}\nif !ext {\n    return nil, errors.New(\"pgvector extension not installed\")\n}\nworkers, err = newFlowProviderWorkers(ctx, flowID, cnts, pub)","handlingStrategy":"validation","validationCode":"var ext string\nif err := db.QueryRowContext(ctx, `SELECT extname FROM pg_extension WHERE extname='vector'`).Scan(&ext); err != nil {\n    return errors.New(\"pgvector extension not installed — required for vector store logs\")\n}","typeGuard":"func pgvectorReady(ctx context.Context, db DB) bool {\n    var ext string\n    return db.QueryRowContext(ctx, `SELECT extname FROM pg_extension WHERE extname='vector'`).Scan(&ext) == nil\n}","tryCatchPattern":"vslw, err := cnts.vslc.NewFlowVectorStoreLog(ctx, flowID, pub)\nif err != nil {\n    if strings.Contains(err.Error(), \"vector\") || strings.Contains(err.Error(), \"extension\") {\n        return nil, fmt.Errorf(\"pgvector missing/misconfigured: %w\", err)\n    }\n    return nil, fmt.Errorf(\"failed to create flow vector store log: %w\", err)\n}","preventionTips":["Install pgvector in the Postgres image/instance before first boot (docker-compose does this — custom DBs must too)","Re-run CREATE EXTENSION after restoring dumps into a fresh cluster","Pin a Postgres image version known to work with the required pgvector version","Check the extension at deployment health-check time, not flow start"],"tags":["go","database","pgvector","flow-startup"],"backgroundTag":"pgvector-unavailable","analyzedSha":"ea665308baaff015b226f308438a68d929d0f29b","analyzedAt":"2026-09-01T14:16:31.421Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}