{"record":{"id":"f3e68326d0020f6f","repo":"zeroclaw-labs/zeroclaw","slug":"channel-plugin-metadata-changed-while-recreating-a","errorCode":null,"errorMessage":"channel plugin metadata changed while recreating an interrupted instance","messagePattern":"channel plugin metadata changed while recreating an interrupted instance","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/zeroclaw-plugins/src/wasm_channel.rs","lineNumber":158,"sourceCode":"    /// Rebuild an interrupted warm instance from the host-owned component,\n    /// scope, generation-scoped config snapshot, and limits, reattaching the\n    /// queued inbound backlog. A message the interrupted call had already\n    /// dequeued through `inbound-poll` is not requeued: inbound delivery to\n    /// the guest is at-most-once across an interruption, and only the\n    /// still-queued backlog survives reconstruction.\n    /// This does not lock `state`, so the shared call boundary may invoke it\n    /// while holding the slot lock.\n    async fn reinstantiate(&self) -> Result<(Store<PluginState>, ChannelPlugin)> {\n        let instance = self\n            .factory\n            .instantiate(&self.endpoint, self.inbound.clone())\n            .await?;\n        if instance.capabilities != self.capabilities\n            || instance.self_handle != self.cached_self_handle\n            || instance.self_addressed_mention != self.cached_self_addressed_mention\n            || instance.multi_message_delay_ms != self.cached_multi_message_delay_ms\n        {\n            anyhow::bail!(\n                \"channel plugin metadata changed while recreating an interrupted instance\"\n            );\n        }\n        Ok(instance.state)\n    }\n\n    /// Handle to this channel's inbound queue. A host-run listener clones it and\n    /// calls [`InboundQueue::enqueue`] for each received message; the plugin\n    /// drains them through its imported `inbound` interface.\n    pub fn inbound(&self) -> InboundQueue {\n        self.inbound.clone()\n    }\n}\n\nimpl ChannelInstanceFactory {\n    async fn instantiate(\n        &self,\n        endpoint: &PluginChannelEndpoint,","sourceCodeStart":140,"sourceCodeEnd":176,"githubUrl":"https://github.com/zeroclaw-labs/zeroclaw/blob/88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc/crates/zeroclaw-plugins/src/wasm_channel.rs#L140-L176","documentation":"Error \"channel plugin metadata changed while recreating an interrupted instance\" thrown in zeroclaw-labs/zeroclaw.","triggerScenarios":"Thrown at crates/zeroclaw-plugins/src/wasm_channel.rs:158 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Reinstall or restart the channel plugin cleanly; do not change its metadata while an interrupted instance is being recreated."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc","analyzedAt":"2026-08-23T01:07:41.857Z","schemaVersion":2},"datasetVersion":"2026-08-23T08:06:27.607Z"}