So far the object referencing in a patch is robust to name changes, and implementation changes as there is a UUID reference kept.
Lately a few cases have appeared that challenge library maintenance. Some examples:
* DrJustice found improvements to some filter objects like "filter/vcf3", cutoff in the original objects is artificially limited to only 12kHz.
* philoop noticed a typo in the "delay/write sdram" attribute list
Fixing by altering the existing objects means breaking users' patches, the selected attribute is string matched, in absence of a match the first option is the default. A different filter will cause an existing patch to sound different, and can also be considered broken rather than an improvement.
I believe it is desirable to propagate improvements to objects, but breaking users' patches should be avoided.
Moving the existing (unfixed) object to something like "obsolete/filter/vcf3" and "obsolete/delay/write sdram" would preserve patches and adding a bugfixed objects with the original name to the library would preserve patch functionality.
But that does not really promote migration to fixed objects, we don't want to keep dragging along all obsolete objects forever.
So I'd like to open a discussion on how to "retire" objects.
I'd be useful to
* provide the user the choice between loading the upgraded or obsolete version of an object
* provide the user with an explanation the expected impact of an upgrade
* making automatic adjustments to a patch would be beautiful but also opens a can of worms I believe.
By simply moving an object to an "obsolete" directory, a direct (UUID) reference to the new replacement object, and the possibility to explain the user the expected impact are missing. Does that motivate a new "obsolete object" file type? Or extend the existing object file type with a forward UUID reference and expected-impact text field?
So I open this thread and invite comments and discussion of possible approaches...