affaan-m/ECC · error
memory connector has no path configured
Error message
memory connector {name} has no path configured What it means
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.
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.
Example fix
// before [[memory_connectors.jsonl_file]] name = "notes" # path missing // after [[memory_connectors.jsonl_file]] name = "notes" path = "/home/user/.ecc/notes.jsonl"
Defensive patterns
Strategy: validation
Validate before calling
anyhow::ensure!(
!settings.path.as_os_str().is_empty(),
"jsonl file connector '{}' requires a path in config",
name
); Try / catch
match sync_jsonl_file(db, name, &settings, limit).await {
Ok(stats) => stats,
Err(e) if e.to_string().contains("no path configured") => {
eprintln!("Connector '{}' is missing its path; check config", name);
std::process::exit(2);
}
Err(e) => return Err(e),
} Prevention
- 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
When it happens
Trigger: 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.
Common situations: A config file with the connector declared but the path key omitted, an empty `path = ""` value, or config built programmatically without setting the path.
Understand the failure class
Background: "is required", "must be set", "missing required field": configuration validation errors across open-source libraries — this error's family across 36 libraries.
Related errors
- memory connector path is not a directory
- agent profile inheritance cycle
- An install config path is required
- application config exceeds local size limit
- Asset request_id/modality does not match the bundle
AI-assisted analysis of affaan-m/ECC@8321021c54 (2026-09-16).
Data as JSON: /api/errors/b346225c63d8631a.
Report an issue: GitHub.
Appendix: source
Thrown at ecc2/src/main.rs:3080
config::MemoryConnectorConfig::DotenvFile(settings) => (
"dotenv_file".to_string(),
settings.path.display().to_string(),
false,
settings.session_id.clone(),
settings.default_entity_type.clone(),
settings.default_observation_type.clone(),
),
}
}
fn sync_jsonl_memory_connector(
db: &session::store::StateStore,
name: &str,
settings: &config::MemoryConnectorJsonlFileConfig,
limit: usize,
) -> Result<GraphConnectorSyncStats> {
if settings.path.as_os_str().is_empty() {
anyhow::bail!("memory connector {name} has no path configured");
}
let file = File::open(&settings.path)
.with_context(|| format!("open memory connector file {}", settings.path.display()))?;
let reader = BufReader::new(file);
let default_session_id = settings
.session_id
.as_deref()
.map(|value| resolve_session_id(db, value))
.transpose()?;
let source_path = settings.path.display().to_string();
let signature = connector_source_signature(&settings.path)?;
if db.connector_source_is_unchanged(name, &source_path, &signature)? {
return Ok(GraphConnectorSyncStats {
connector_name: name.to_string(),
skipped_unchanged_sources: 1,
..Default::default()
});View on GitHub (pinned to 8321021c54)