Forgive me if this is expected behavior, since I can duplicate it on my old node-red v1.1.3 and my new v3.0.2. The closest thing I could find to this is Deploying the state machine node does not change its status, but the conversation was focusing more on moving the x y positions of the nodes, as opposed to cutting or adding wires between nodes.
versions:
flow:
[{"id":"ee7e5037ca3d539f","type":"inject","z":"6b049aecc3440879","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":180,"y":60,"wires":[["269eb4aedfdb023f","09ecfefc179ae373"]]},{"id":"269eb4aedfdb023f","type":"function","z":"6b049aecc3440879","name":"","func":"node.status({ fill: \"green\", shape: \"dot\", text: msg.payload });\nreturn msg;","outputs":1,"noerr":0,"initialize":"// Code added here will be run once\n// whenever the node is started.\nnode.status({fill:\"red\",shape:\"ring\",text:\"on start\"});","finalize":"","libs":[],"x":380,"y":60,"wires":[["4d48ff70390bfe7f","32192cd6d5e99d19"]]},{"id":"09ecfefc179ae373","type":"debug","z":"6b049aecc3440879","name":"debug 1","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":380,"y":160,"wires":[]},{"id":"4d48ff70390bfe7f","type":"function","z":"6b049aecc3440879","name":"","func":"node.status({ fill: \"green\", shape: \"dot\", text: msg.payload });\nreturn msg;","outputs":1,"noerr":0,"initialize":"// Code added here will be run once\n// whenever the node is started.\nnode.status({fill:\"red\",shape:\"ring\",text:\"on start\"});","finalize":"","libs":[],"x":580,"y":60,"wires":[["7b0ee7d94de7c72d","04102efe40a57d23"]]},{"id":"32192cd6d5e99d19","type":"debug","z":"6b049aecc3440879","name":"debug 2","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":580,"y":160,"wires":[]},{"id":"7b0ee7d94de7c72d","type":"function","z":"6b049aecc3440879","name":"","func":"node.status({ fill: \"green\", shape: \"dot\", text: msg.payload });\nreturn msg;","outputs":1,"noerr":0,"initialize":"// Code added here will be run once\n// whenever the node is started.\nnode.status({fill:\"red\",shape:\"ring\",text:\"on start\"});","finalize":"","libs":[],"x":780,"y":60,"wires":[["9191606abe28f31a"]]},{"id":"04102efe40a57d23","type":"debug","z":"6b049aecc3440879","name":"debug 3","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":780,"y":160,"wires":[]},{"id":"9191606abe28f31a","type":"debug","z":"6b049aecc3440879","name":"debug 4","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":980,"y":160,"wires":[]}]
If you look at the following screenshots, you will see that the node in the flow that had its output wire cut is the only node that does not get re-deployed when choosing modified flows. If this is to be considered a problem, then it is not specific to the function node. When testing on my custom nodes that had the output wire modified, the close event is not triggered for the individual node whose only change was an output wire being added or removed.
-
deploy flow
-
inject timestamp to modify state
-
cut a wire (notice no blue dot to indicate change on any node)
-
re-deploy modified flows (notice which node did not get re-deployed)
If the expectation that cutting a node's output wire is not modifying the node, then why would the other nodes in the flow get re-deployed other than the node that had it output wire cut?