{"record":{"id":"867f63e418a1558e","repo":"astrid-runtime/astrid","slug":"var-names-no-env-field-in-key","errorCode":null,"errorMessage":"--var names no [env] field in {}: {key}","messagePattern":"--var names no \\[env\\] field in (.+?): (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/astrid-cli/src/commands/capsule/install_daemon.rs","lineNumber":427,"sourceCode":"    items: &[String],\n) -> anyhow::Result<Vec<DaemonEnvValue>> {\n    let mut parsed = HashMap::new();\n    for item in items {\n        let (key, value) = item\n            .split_once('=')\n            .ok_or_else(|| anyhow::anyhow!(\"--var must be KEY=VALUE (got {item:?})\"))?;\n        if key.is_empty() || key.contains('\\0') || key.contains(':') {\n            bail!(\"--var has an invalid key (got {key:?})\");\n        }\n        if parsed.insert(key.to_owned(), value.to_owned()).is_some() {\n            bail!(\"--var '{key}' was supplied more than once\");\n        }\n    }\n\n    let mut values = Vec::with_capacity(parsed.len());\n    for (key, value) in parsed {\n        let definition = manifest.env.get(&key).ok_or_else(|| {\n            anyhow::anyhow!(\n                \"--var names no [env] field in {}: {key}\",\n                manifest.package.name\n            )\n        })?;\n        let kind = if definition.env_type.eq_ignore_ascii_case(\"secret\") {\n            if value.len() > 64 * 1024 {\n                bail!(\"secret value for {key} exceeds 65536-byte limit\");\n            }\n            EnvValueKind::Secret\n        } else {\n            if value.len() > 1 << 20 {\n                bail!(\"environment value for {key} exceeds 1048576-byte limit\");\n            }\n            EnvValueKind::Text\n        };\n        if !definition.enum_values.is_empty()\n            && !definition\n                .enum_values","sourceCodeStart":409,"sourceCodeEnd":445,"githubUrl":"https://github.com/astrid-runtime/astrid/blob/affd8760f44190dbdfbec23403f4c4b642c33112/crates/astrid-cli/src/commands/capsule/install_daemon.rs#L409-L445","documentation":"After parsing `--var` items, `validate_values` checks each key against the capsule manifest's `[env]` table. Any key that is not declared in the manifest is rejected, because the daemon only injects env vars the capsule explicitly declares (typed and manifest-bound).","triggerScenarios":"Calling `validate_values` (via daemon local install) with a `--var` key absent from the capsule manifest's `[env]` section — typo'd key, deprecated/renamed key, or a var belonging to a different capsule.","commonSituations":"Renaming an env field in the manifest while scripts still pass the old name; copying install commands between different capsules; guessing var names instead of reading the manifest's `[env]` section.","solutions":["Check the capsule manifest `[env]` section and use an exact declared key name","Remove the `--var` if it is not needed by this capsule","Update scripts after capsule manifest key renames"],"exampleFix":"// before (manifest [env] declares LOG_LEVEL, not LOGLEVEL)\n--var LOGLEVEL=debug\n// after\n--var LOG_LEVEL=debug","handlingStrategy":"validation","validationCode":"// Read the capsule manifest and check keys before install:\n// let declared: HashSet<_> = manifest.env.keys().collect();\n// let ok = var_keys.iter().all(|k| declared.contains(*k));","typeGuard":null,"tryCatchPattern":"match result {\n    Err(e) if e.to_string().starts_with(\"--var names no [env] field\") => {\n        eprintln!(\"Key not declared in capsule manifest [env]; check spelling and manifest version.\");\n    }\n    other => other?,\n}","preventionTips":["Cross-check --var keys against the capsule manifest's [env] section","Update scripts when capsule manifests rename env fields","Keep manifests and install scripts versioned together"],"tags":["cli","capsule","manifest","env","validation"],"backgroundTag":"invalid-config-value","analyzedSha":"affd8760f44190dbdfbec23403f4c4b642c33112","analyzedAt":"2026-09-09T21:28:12.402Z","contentChangedAt":"2026-09-09T21:28:12.402Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}