astrid-runtime/astrid · error

capsule content contains a special file

Error message

capsule content contains a special file: {}

What it means

Fired by collect_directory_records when the capsule tree contains a file system entry that is not a regular file, directory, or allowed symlink (e.g. FIFO, socket, device node). Such entries cannot be hashed or verified.

Solutions

  1. Remove the special file (FIFO/socket/device) from the capsule content directory
  2. Rebuild the capsule from a clean source tree
  3. Exclude non-regular files from packaging
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at crates/astrid-build/src/artifact.rs:490 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/b9b43be441dd6792. Report an issue: GitHub.

Appendix: source

Thrown at crates/astrid-build/src/artifact.rs:490

            let metadata = std::fs::metadata(&resolved)?;
            if !metadata.is_file() {
                bail!(
                    "capsule content cannot contain a directory symlink: {}",
                    path.display()
                );
            }
            let relative = path.strip_prefix(root)?;
            let normalized = normalize_relative_path(relative)?;
            let mut file = File::open(&resolved)?;
            records.push(hash_reader(normalized, metadata.len(), &mut file)?);
            continue;
        }
        if file_type.is_dir() {
            collect_directory_records(root, canonical_root, &path, records, envelope)?;
            continue;
        }
        if !file_type.is_file() {
            bail!(
                "capsule content contains a special file: {}",
                path.display()
            );
        }
        let relative = path.strip_prefix(root)?;
        let normalized = normalize_relative_path(relative)?;
        if normalized == PROVENANCE_FILE {
            if envelope.is_some() {
                bail!("capsule directory contains duplicate provenance");
            }
            *envelope = Some(std::fs::read(&path)?);
            continue;
        }
        let mut file = File::open(&path)?;
        let size = file.metadata()?.len();
        records.push(hash_reader(normalized, size, &mut file)?);
    }
    Ok(())

View on GitHub (pinned to affd8760f4)