{"version":"2.1.247","anchor":"plugins-cannot-forge-another-plugin-s-buttons-or-rewrite-the","canonical_anchor":"plugins-cannot-forge-another-plugin-s-buttons-or-rewrite-the","heading":"Plugins cannot forge another plugin's buttons or rewrite the render envelope","tier":"notice","area":"Plugins","scope":null,"heads_up":null,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.247\/e\/plugins-cannot-forge-another-plugin-s-buttons-or-rewrite-the","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.247","markdown":"### Plugins cannot forge another plugin's buttons or rewrite the render envelope\n\nPlugins can no longer forge another plugin's buttons or rewrite the rendering envelope around them.\n\n**What**\n\nPlugin hooks that alter the UI are now validated. A hook that returns a button it did not itself draw throws, and any rewrite must keep the surface, component and request id the engine set, keep the plugin identity, and preserve the origin on a user-message row. Hooks that answer with an origin or a wait the engine never set are rejected the same way.\n\n**Details**\n\n- Applies to the chain of hooks plugins register on rendered UI, not to a specific plugin type.\n- The rejection names which field changed and states that the envelope belongs to the engine.\n\n**Evidence**\n\n`a changed ${r} (the envelope is the engine's; a rewrite keeps surface, component and requestId)`\n\n- Area: Plugins\n- Tier: You'll notice\n- Useful: 2\/5\n- Signal: 3\/5"}