block/buzz · warning · ValidationDiagnostic::Warning
plugin.json defaults: unknown key "{key}"
Error message
plugin.json defaults: unknown key "{key}" What it means
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.
Source
Thrown at crates/buzz-persona/src/validate.rs:330
let obj = match json.as_object() {
Some(o) => o,
None => return,
};
// Top-level unknown keys.
let known_manifest: HashSet<&str> = KNOWN_MANIFEST_KEYS.iter().copied().collect();
for key in obj.keys() {
if !known_manifest.contains(key.as_str()) {
report.warn(format!("plugin.json unknown key \"{key}\""));
}
}
// Unknown keys in `defaults`.
if let Some(defaults) = obj.get("defaults").and_then(|v| v.as_object()) {
let known_behavioral: HashSet<&str> = KNOWN_BEHAVIORAL_KEYS.iter().copied().collect();
for key in defaults.keys() {
if !known_behavioral.contains(key.as_str()) {
report.warn(format!("plugin.json defaults: unknown key \"{key}\""));
}
}
// Unknown keys in `defaults.triggers` (or legacy `defaults.respond_to`).
let triggers_obj = defaults
.get("triggers")
.or_else(|| defaults.get("respond_to"))
.and_then(|v| v.as_object());
if let Some(rt) = triggers_obj {
let known_rt: HashSet<&str> = KNOWN_RESPOND_TO_KEYS.iter().copied().collect();
for key in rt.keys() {
if !known_rt.contains(key.as_str()) {
report.warn(format!(
"plugin.json defaults.triggers: unknown key \"{key}\""
));
}
}
}View on GitHub (pinned to 934f3325c3)
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
Example fix
// before (plugin.json)
"defaults": { "top_p": 0.9, "temperature": 0.7 }
// after
"defaults": { "temperature": 0.7 } Defensive patterns
Strategy: validation
Validate before calling
const KNOWN_BEHAVIORAL_KEYS = new Set([
"subscribe", "triggers", "respond_to", "model", "temperature",
"max_context_tokens", "thread_replies", "broadcast_replies",
]); // sync with crates/buzz-persona/src/validate.rs
for (const key of Object.keys(manifest.defaults ?? {})) {
if (!KNOWN_BEHAVIORAL_KEYS.has(key)) throw new Error(`plugin.json defaults: unknown key: ${key}`);
} Type guard
const isKnownBehavioralKey = (k: string): k is BehavioralKey => KNOWN_BEHAVIORAL_KEYS.has(k as BehavioralKey);
Prevention
- 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
When it happens
Trigger: 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'.
Common situations: 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.
Related errors
- plugin.json unknown key "{key}"
- plugin.json defaults.triggers: unknown key "{key}"
- skill {label}: name "{name_str}" differs from directory name
- moderation notice recipient must be a 32-byte pubkey, got {}
- bundled model-capabilities.json must parse
AI-assisted analysis of block/buzz@934f3325c3 (2026-08-20).
Data as JSON: /api/errors/e6bb3995c40b8af7.
Report an issue: GitHub.