Summary
When two plugins provide the same method name for the same mixin target, the last-loaded plugin silently overwrites the first. There is no warning, no error, and no way for plugin authors or users to know this happened.
Current Behavior
In $processMixins(), methods are collected into a struct keyed by method name. StructAppend with overwrite=true means the last plugin wins silently.
Proposed Behavior
- During
$processMixins(), detect when a method name already exists in the mixin collection for the same target
- In development mode: log a warning listing the collision (plugin A method X overwritten by plugin B method X)
- In production mode: log at debug level only
- Optionally (future): allow
plugin.json to declare explicit overrides to suppress the warning
Files
vendor/wheels/Plugins.cfc:219-274 — modify $processMixins()
Phase
Phase 1 — Cleanup & Foundation (3.x, no breaking changes)
Summary
When two plugins provide the same method name for the same mixin target, the last-loaded plugin silently overwrites the first. There is no warning, no error, and no way for plugin authors or users to know this happened.
Current Behavior
In
$processMixins(), methods are collected into a struct keyed by method name.StructAppendwithoverwrite=truemeans the last plugin wins silently.Proposed Behavior
$processMixins(), detect when a method name already exists in the mixin collection for the same targetplugin.jsonto declare explicit overrides to suppress the warningFiles
vendor/wheels/Plugins.cfc:219-274— modify$processMixins()Phase
Phase 1 — Cleanup & Foundation (3.x, no breaking changes)