{"record":{"id":"b346225c63d8631a","repo":"affaan-m/ECC","slug":"memory-connector-name-has-no-path-configured","errorCode":null,"errorMessage":"memory connector {name} has no path configured","messagePattern":"memory connector (.+?) has no path configured","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"ecc2/src/main.rs","lineNumber":3080,"sourceCode":"        config::MemoryConnectorConfig::DotenvFile(settings) => (\n            \"dotenv_file\".to_string(),\n            settings.path.display().to_string(),\n            false,\n            settings.session_id.clone(),\n            settings.default_entity_type.clone(),\n            settings.default_observation_type.clone(),\n        ),\n    }\n}\n\nfn sync_jsonl_memory_connector(\n    db: &session::store::StateStore,\n    name: &str,\n    settings: &config::MemoryConnectorJsonlFileConfig,\n    limit: usize,\n) -> Result<GraphConnectorSyncStats> {\n    if settings.path.as_os_str().is_empty() {\n        anyhow::bail!(\"memory connector {name} has no path configured\");\n    }\n\n    let file = File::open(&settings.path)\n        .with_context(|| format!(\"open memory connector file {}\", settings.path.display()))?;\n    let reader = BufReader::new(file);\n    let default_session_id = settings\n        .session_id\n        .as_deref()\n        .map(|value| resolve_session_id(db, value))\n        .transpose()?;\n    let source_path = settings.path.display().to_string();\n    let signature = connector_source_signature(&settings.path)?;\n    if db.connector_source_is_unchanged(name, &source_path, &signature)? {\n        return Ok(GraphConnectorSyncStats {\n            connector_name: name.to_string(),\n            skipped_unchanged_sources: 1,\n            ..Default::default()\n        });","sourceCodeStart":3062,"sourceCodeEnd":3098,"githubUrl":"https://github.com/affaan-m/ECC/blob/01e15490f04e29cfefe3896951f43db46994d8ee/ecc2/src/main.rs#L3062-L3098","documentation":"Thrown by `sync_jsonl_memory_connector` when the connector's `settings.path` is empty (`as_os_str().is_empty()`). A JSONL file connector requires a concrete file path to open; an empty path would otherwise produce a confusing OS-level error, so the code bails early with a descriptive message naming the connector. The check runs before `File::open`.","triggerScenarios":"Configuring a `jsonl_file` connector with `path = \"\"` or omitting the `path` key entirely (defaulting to empty). Env-var substitution that resolves to an empty string. A config template that left the path blank.","commonSituations":"Copy-pasting a connector config block and forgetting to fill in the path. Conditional config that drops the path under certain profiles. Migration where the path field was renamed and the old key left empty.","solutions":["Set a concrete file path in the connector config: `path = \"/abs/path/to/log.jsonl\"`.","If using env-var interpolation, ensure the variable is set and non-empty.","Validate config after edits with whatever config-check command ECC exposes, or `ecc graph connectors` to surface the connector."],"exampleFix":"// before\n[memory_connectors.feed]\ntype = \"jsonl_file\"\npath = \"\"\n\n// after\n[memory_connectors.feed]\ntype = \"jsonl_file\"\npath = \"/home/user/.ecc/feed.jsonl\"","handlingStrategy":"validation","validationCode":"// Validate path at config load time\nfn validate_jsonl_connector(name: &str, s: &MemoryConnectorJsonlFileConfig) -> Result<()> {\n    if s.path.as_os_str().is_empty() {\n        anyhow::bail!(\"connector {name}: jsonl_file path is empty\");\n    }\n    Ok(())\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Add a config-validation step at startup that fails fast on empty paths.","Use absolute paths to avoid ambiguity.","Template config files with a placeholder that fails validation until filled in."],"tags":["connector","config","path","jsonl","memory"],"backgroundTag":null,"analyzedSha":"01e15490f04e29cfefe3896951f43db46994d8ee","analyzedAt":"2026-08-13T00:31:08.655Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}