astrid-runtime/astrid · error

legacy capsule authority receipt is not a regular file

Error message

legacy capsule authority receipt is not a regular file: {}

What it means

Fired by retire_legacy_authority_receipt when the active receipt's symlink metadata shows it is a symlink or not a regular file. A redirected or non-regular receipt could point at content outside the authority directory.

Solutions

  1. Remove the bogus symlink/non-file and reinstall the capsule to regenerate the receipt
  2. Investigate how the receipt was replaced (tampering or crashed migration)
  3. Never link authority receipts; they must be regular files
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at crates/astrid-capsule-install/src/authority.rs:259 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of astrid-runtime/astrid@affd8760f4 (2026-09-09). Data as JSON: /api/errors/12a6162461815d65. Report an issue: GitHub.

Appendix: source

Thrown at crates/astrid-capsule-install/src/authority.rs:259

            Err(error) => {
                return Err(error).with_context(|| {
                    format!(
                        "inspect legacy capsule authority {label} {}",
                        path.display()
                    )
                });
            },
        }
    }

    let metadata = std::fs::symlink_metadata(&paths.active).with_context(|| {
        format!(
            "legacy capsule authority receipt disappeared before retirement: {}",
            paths.active.display()
        )
    })?;
    if metadata.file_type().is_symlink() || !metadata.is_file() {
        bail!(
            "legacy capsule authority receipt is not a regular file: {}",
            paths.active.display()
        );
    }
    astrid_core::platform_fs::verify_no_redirects(&paths.active).with_context(|| {
        format!(
            "verify legacy capsule authority receipt {}",
            paths.active.display()
        )
    })?;
    let actual = std::fs::read(&paths.active)
        .with_context(|| format!("read legacy capsule authority {}", paths.active.display()))?;
    if actual != expected_bytes {
        bail!(
            "legacy capsule authority receipt changed before retirement: {}",
            paths.active.display()
        );
    }

View on GitHub (pinned to affd8760f4)