The following are some notes on the subject that need to be scenarioized.
During the course of diagram editing, the following kinds of invalid conditions can be created. Probably most predominantly the signature of a node is changed such that uses of the operation in some place other than where it's changed go invalid. From a dfd editing perspective, the rule is that changing the signature of a node in any diagram changes the fmsl definition of that op's signature. So this means is that we can change an op's signature from more than one place in a multi-canvas dfd. The underlying op definition is that which corresponds to the most recently changed dfd.
Another kind of invalidation may happen when a node or edge name is changed. What we might do to prevent this (perhaps totally) is to disallow changing the name of a node to an existing node with a different signature than that shown in the dfd.
I don't know right this minute if there are other ways dfd editing can invalidate the underlying spec. I'm not (really) falling off here, it's just that it's kind of late and can't think through clearly what other kinds of spec-invalidating things can happen during dfd editing.
When we run Tools->Validate, we just let the chips fly where they may. Specifically, we have op defs that correspond to the most recent dfd edits. If an op is used inconsistently in more than one place (within the normal scoping rules of fmsl), then the checker detects the error in the normal way.
What we now have to come up with is the way fmsl checking errors are displayed in the dfds. Here's a crack at the invalid cases that arise, where we care from the dfd perspective:
We do indeed need to deal with the case where we load a spec that is initially invalid. I think we should handle it in pretty much the same way as the docgen tool. Specifically:
If the user chooses "Proceed with Load", a second warning dialog will pop up explaining that validation will continue to fail, unless (somehow) dfd editing fixes the entering errors.( Proceed with Load ) ( Cancel Load ) ( Show Errors ... )