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

  1. Check the key against KNOWN_BEHAVIORAL_KEYS in crates/buzz-persona/src/validate.rs:121 and correct or remove it
  2. If the key was renamed across versions, migrate it to the current name so the default actually applies
  3. 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

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


AI-assisted analysis of block/buzz@934f3325c3 (2026-08-20). Data as JSON: /api/errors/e6bb3995c40b8af7. Report an issue: GitHub.