{"record":{"id":"e6bb3995c40b8af7","repo":"block/buzz","slug":"plugin-json-defaults-unknown-key-key","errorCode":null,"errorMessage":"plugin.json defaults: unknown key \"{key}\"","messagePattern":"plugin\\.json defaults: unknown key \"(.+?)\"","errorType":"validation","errorClass":"ValidationDiagnostic::Warning","httpStatus":null,"severity":"warning","filePath":"crates/buzz-persona/src/validate.rs","lineNumber":330,"sourceCode":"    let obj = match json.as_object() {\n        Some(o) => o,\n        None => return,\n    };\n\n    // Top-level unknown keys.\n    let known_manifest: HashSet<&str> = KNOWN_MANIFEST_KEYS.iter().copied().collect();\n    for key in obj.keys() {\n        if !known_manifest.contains(key.as_str()) {\n            report.warn(format!(\"plugin.json unknown key \\\"{key}\\\"\"));\n        }\n    }\n\n    // Unknown keys in `defaults`.\n    if let Some(defaults) = obj.get(\"defaults\").and_then(|v| v.as_object()) {\n        let known_behavioral: HashSet<&str> = KNOWN_BEHAVIORAL_KEYS.iter().copied().collect();\n        for key in defaults.keys() {\n            if !known_behavioral.contains(key.as_str()) {\n                report.warn(format!(\"plugin.json defaults: unknown key \\\"{key}\\\"\"));\n            }\n        }\n\n        // Unknown keys in `defaults.triggers` (or legacy `defaults.respond_to`).\n        let triggers_obj = defaults\n            .get(\"triggers\")\n            .or_else(|| defaults.get(\"respond_to\"))\n            .and_then(|v| v.as_object());\n        if let Some(rt) = triggers_obj {\n            let known_rt: HashSet<&str> = KNOWN_RESPOND_TO_KEYS.iter().copied().collect();\n            for key in rt.keys() {\n                if !known_rt.contains(key.as_str()) {\n                    report.warn(format!(\n                        \"plugin.json defaults.triggers: unknown key \\\"{key}\\\"\"\n                    ));\n                }\n            }\n        }","sourceCodeStart":312,"sourceCodeEnd":348,"githubUrl":"https://github.com/block/buzz/blob/934f3325c3fdaa3a6f23134b74518139aac8ca3f/crates/buzz-persona/src/validate.rs#L312-L348","documentation":"Advisory lint during persona pack validation: the defaults block in plugin.json contains a key outside KNOWN_BEHAVIORAL_KEYS (subscribe, triggers, respond_to, model, temperature, max_context_tokens, thread_replies, broadcast_replies). Reported as a warning; loading continues and the unknown default is ignored.","triggerScenarios":"Setting a behavioral default that this buzz-persona version does not know — e.g. a renamed model parameter, an LLM-specific knob, or a key from a newer spec; misspelling an accepted key like 'temperatue'.","commonSituations":"Spec drift after upgrading/downgrading buzz-persona; copying behavioral config from other agent frameworks; silent no-ops where an intended default (say a renamed trigger setting) never takes effect.","solutions":["Check the key against KNOWN_BEHAVIORAL_KEYS in crates/buzz-persona/src/validate.rs:121 and correct or remove it","If the key was renamed across versions, migrate it to the current name so the default actually applies","Upgrade buzz-persona if the key is genuinely newer"],"exampleFix":"// before (plugin.json)\n\"defaults\": { \"top_p\": 0.9, \"temperature\": 0.7 }\n\n// after\n\"defaults\": { \"temperature\": 0.7 }","handlingStrategy":"validation","validationCode":"const KNOWN_BEHAVIORAL_KEYS = new Set([\n  \"subscribe\", \"triggers\", \"respond_to\", \"model\", \"temperature\",\n  \"max_context_tokens\", \"thread_replies\", \"broadcast_replies\",\n]); // sync with crates/buzz-persona/src/validate.rs\nfor (const key of Object.keys(manifest.defaults ?? {})) {\n  if (!KNOWN_BEHAVIORAL_KEYS.has(key)) throw new Error(`plugin.json defaults: unknown key: ${key}`);\n}","typeGuard":"const isKnownBehavioralKey = (k: string): k is BehavioralKey => KNOWN_BEHAVIORAL_KEYS.has(k as BehavioralKey);","tryCatchPattern":null,"preventionTips":["Treat unknown defaults as probable no-ops — verify each key actually takes effect in the loaded persona","After version upgrades, re-validate packs and migrate renamed behavioral keys","Use the validator (load_pack + advisory checks) as the pack authoring gate"],"tags":["rust","plugin-json","defaults","lint","persona","validation"],"backgroundTag":"unknown-manifest-key","analyzedSha":"934f3325c3fdaa3a6f23134b74518139aac8ca3f","analyzedAt":"2026-08-20T04:38:24.874Z","contentChangedAt":"2026-08-20T04:38:24.874Z","schemaVersion":2},"datasetVersion":"2026-09-08T15:18:49.778Z"}