{"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":null,"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/8321021c54d670126ce3b2969d5deb880b4b0c2a/ecc2/src/main.rs#L3062-L3098","documentation":"The JSONL single-file memory connector sync requires a configured `path`; when `settings.path` is empty (an empty `PathBuf`/OsString), the sync function bails before attempting to open any file. This is an early config-validation guard for the named connector.","triggerScenarios":"Invoking a memory connector sync where the connector's `[memory_connectors...] path` config field is missing or set to an empty string, so `MemoryConnectorJsonlFileConfig.path` is empty.","commonSituations":"A config file with the connector declared but the path key omitted, an empty `path = \"\"` value, or config built programmatically without setting the path.","solutions":["Set the `path` field in the connector's JSONL file config to a valid .jsonl file path.","Check the config file section for the named connector for a missing/empty path key.","Validate the connector config at startup so misconfigured connectors fail fast with a clear message."],"exampleFix":"// before\n[[memory_connectors.jsonl_file]]\nname = \"notes\"\n# path missing\n// after\n[[memory_connectors.jsonl_file]]\nname = \"notes\"\npath = \"/home/user/.ecc/notes.jsonl\"","handlingStrategy":"validation","validationCode":"anyhow::ensure!(\n    !settings.path.as_os_str().is_empty(),\n    \"jsonl file connector '{}' requires a path in config\",\n    name\n);","typeGuard":null,"tryCatchPattern":"match sync_jsonl_file(db, name, &settings, limit).await {\n    Ok(stats) => stats,\n    Err(e) if e.to_string().contains(\"no path configured\") => {\n        eprintln!(\"Connector '{}' is missing its path; check config\", name);\n        std::process::exit(2);\n    }\n    Err(e) => return Err(e),\n}","preventionTips":["Validate all connector configs at startup (required fields present and non-empty)","Use a config schema/validation step when loading TOML/JSON config","Keep a sample config with all connector fields documented"],"tags":["config","memory-connector","missing-field"],"backgroundTag":"missing-required-config-field","analyzedSha":"8321021c54d670126ce3b2969d5deb880b4b0c2a","analyzedAt":"2026-09-16T10:08:13.343Z","contentChangedAt":"2026-09-16T10:08:13.343Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}