Hmbown/CodeWhale · error · anyhow::Error

failed to parse permissions at {}; file contents were omitte

Error message

failed to parse permissions at {}; file contents were omitted

What it means

read_permissions_state parses the permissions state file (permissions.toml) into the typed PermissionsToml when loading or mutating permissions. This error means that file is invalid TOML or its values have the wrong types; contents are omitted from the message, only the path is quoted.

Source

Thrown at crates/config/src/lib.rs:6044

fn load_sibling_permissions(config_path: &Path) -> Result<PermissionsToml> {
    let permissions_path = checked_permissions_path_for_config_path(config_path)?;
    let (_, _, permissions) = read_permissions_state(&permissions_path)?;
    Ok(permissions)
}

fn read_permissions_state(path: &Path) -> Result<(bool, String, PermissionsToml)> {
    let file_exists = checked_path_exists(path)?;
    let raw = if file_exists {
        read_checked_permissions_file(path)?
    } else {
        String::new()
    };
    let permissions = if raw.trim().is_empty() {
        PermissionsToml::default()
    } else {
        toml::from_str(&raw).map_err(|_| {
            anyhow::anyhow!(
                "failed to parse permissions at {}; file contents were omitted",
                quote_os_path(path)
            )
        })?
    };
    Ok((file_exists, raw, permissions))
}

fn parse_permissions_document(path: &Path, raw: &str) -> Result<toml_edit::DocumentMut> {
    if raw.trim().is_empty() {
        Ok(toml_edit::DocumentMut::new())
    } else {
        raw.parse::<toml_edit::DocumentMut>().map_err(|_| {
            anyhow::anyhow!(
                "failed to edit permissions at {}; file contents were omitted",
                quote_os_path(path)
            )
        })

View on GitHub (pinned to 8880682c63)

Solutions

  1. Validate the permissions file with a TOML linter and fix the reported construct
  2. Compare against a freshly generated permissions document to see the expected shape
  3. If grants can be re-issued, back up and move the file aside so permissions rebuild from defaults, then re-allow grants
Defensive patterns

Strategy: validation

Validate before calling

// Pre-check the permissions file before loading or editing:
fn permissions_file_is_valid(path: &std::path::Path) -> bool {
    std::fs::read_to_string(path)
        .map(|raw| raw.trim().is_empty() || toml::from_str::<toml::Value>(&raw).is_ok())
        .unwrap_or(false)
}

Try / catch

On Err, offer a repair flow for the quoted path (validator, or reset with explicit consent since re-grants are needed). Do not delete the file automatically; grants are user decisions.

Prevention

When it happens

Trigger: Any permissions read or edit while the permissions file contains invalid TOML syntax or keys whose values do not match the expected schema (for example an array where a table is expected).

Common situations: Hand-edited permissions file; a partial write after a crash; a Codewhale version changing the permissions schema and leaving the old file unreadable.

Understand the failure class

Related errors


AI-assisted analysis of Hmbown/CodeWhale@8880682c63 (2026-08-16). Data as JSON: /api/errors/f954cc33814f24ac. Report an issue: GitHub.