{"record":{"id":"6ac222ccff21b9a4","repo":"astrid-runtime/astrid","slug":"contains-no-distro-toml","errorCode":null,"errorMessage":"{} contains no Distro.toml","messagePattern":"(.+?) contains no Distro\\.toml","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/astrid-cli/src/commands/distro/seal.rs","lineNumber":183,"sourceCode":"        &capsule.source,\n        (!capsule.version.is_empty()).then_some(capsule.version.as_str()),\n        capsule.tag.as_deref(),\n        Some(&capsule.name),\n        dest,\n    )\n    .await\n    .map(Some)\n}\n\n/// Resolve a seal `distro` argument to a `Distro.toml` path.\nfn resolve_manifest_path(distro: &str) -> anyhow::Result<PathBuf> {\n    let p = Path::new(distro);\n    if p.is_dir() {\n        let candidate = p.join(\"Distro.toml\");\n        if candidate.is_file() {\n            return Ok(candidate);\n        }\n        bail!(\"{} contains no Distro.toml\", p.display());\n    }\n    if p.is_file() {\n        return Ok(p.to_path_buf());\n    }\n    bail!(\n        \"seal requires a local Distro.toml path or its directory; {distro:?} is not a file or directory\"\n    )\n}\n\n/// Load a 32-byte raw ed25519 secret key from `path`. Never logged.\nfn load_signing_key(path: &Path) -> anyhow::Result<astrid_crypto::KeyPair> {\n    let bytes = std::fs::read(path)\n        .with_context(|| format!(\"failed to read signing key {}\", path.display()))?;\n    if bytes.len() != 32 {\n        bail!(\n            \"signing key {} must be exactly 32 raw bytes (got {})\",\n            path.display(),\n            bytes.len()","sourceCodeStart":165,"sourceCodeEnd":201,"githubUrl":"https://github.com/astrid-runtime/astrid/blob/affd8760f44190dbdfbec23403f4c4b642c33112/crates/astrid-cli/src/commands/distro/seal.rs#L165-L201","documentation":"resolve_manifest_path accepts either a direct path to a Distro.toml file or a directory containing one. When given a directory that does not contain a Distro.toml file, it bails with this message naming the directory.","triggerScenarios":"`astrid seal <dir>` where <dir> exists but has no Distro.toml inside; passing the wrong project directory (e.g. a parent or a src/ subdirectory).","commonSituations":"Running seal from the wrong checkout or a subdirectory; a project whose manifest was renamed (e.g. Astrid.toml) or not yet created; typo'd path to a directory that exists but isn't a project root.","solutions":["Pass the directory that actually contains Distro.toml, or the Distro.toml path itself","`cd` into the project root (where Distro.toml lives) before running seal","Create the Distro.toml in the directory if this is a new project, or fix the manifest name"],"exampleFix":"// before\nastrid seal ./src\n// after\nastrid seal .   # directory containing Distro.toml","handlingStrategy":"validation","validationCode":"let p = std::path::Path::new(distro);\nlet ok = p.is_file() || (p.is_dir() && p.join(\"Distro.toml\").is_file());\nif !ok { anyhow::bail!(\"{} is not a Distro.toml or a directory containing one\", distro); }","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Run seal from the project root where Distro.toml lives","Pass the explicit Distro.toml path in scripts and CI","Keep the manifest named Distro.toml at the project root"],"tags":["cli","manifest","file-not-found"],"backgroundTag":"config-file-not-found","analyzedSha":"affd8760f44190dbdfbec23403f4c4b642c33112","analyzedAt":"2026-09-09T21:28:12.402Z","contentChangedAt":"2026-09-09T21:28:12.402Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}