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

  1. Set the `path` field in the connector's JSONL file config to a valid .jsonl file path.
  2. Check the config file section for the named connector for a missing/empty path key.
  3. 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

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


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)