@oid I didn't think I was doing any dynamic patching. All three arrays have already been created, $1-array was added using the "Put" menu and the other two, $1-velocity and $1-duration, using [array define]. I'm not creating any new objects while the patch is running, I'm just modifying the properties of an existing object.
Anyway, I added a [namecanvas] object to my abstraction and sent it a "dirty 0' message. That seems to do the trick, even if I deliberately save it anyway. The line declaring the array doesn't get changed from "$1-array" to "nnnn-array" in the patch file, even after a save. I don't understand why this works, but anyway, thanks.