I think I know what is going on.
The command is reaching back too far. While it is doing what it should in the next level lower , it is also releasing the level below that. So if anything at a lower level was not fully constrained, the "make flexible will reach back THROUGH the next level down, and find that unconstrained part, and release IT too.
So if a subassembly of level "A" is made free in level "A", what should happen is that any unconstrained motion allowed at level "B" is now allowed when at level "A". But any unconstrained motion allowed in , say, level"C" should NOT be allowed. At least not unless it is made free in Level "B".
WITHOUT being made free, there is a "default constraint" on the level "B" parts, so they do not move. Making free in level "A" should release THAT LEVEL (the level A "default constrained" parts), but should go no further.
What actually happens now is that not only are level "A" default constraints released, but default constraints in level "B" below that are also released, meaning for parts in level "C", IF the constraint against the motion does not exist at level "C". I do not know how far back it will go, my example only has that many applicable layers.
So, if a part is in an assembly at level "C", and is not constrained, what SHOULD happen is that it is by default retained in position at level "B" and any higher levels with respect to that assembly. It may move if that level "B" allows it to move as part of the overall level "B" assembly, but it should not move with respect to the level "B" assembly.
But because the "make flexible" is reaching back 2 or more levels, instead of just one, that part at level "C" is allowed to be INDIVIDUALLY unconstrained at level "A", even though it is not actually movable at level "B" due to the .
This should not be "intended behavior" (or at least not "allowed behavior"), because the parts are being "default constrained", they actually will NOT MOVE at level "B", and the "make flexible" should respect that. If it will not move at level "B", then it should not move at level "A" if made flexible. Only those parts allowed to move at level "B" should be released at level "A" by the "make flexible".
But the command releases all things that are not actually constrained at "B", even if a test at "B" will show them not to move. The "default" constraint at "B" is not respected by the "make flexible".
I think it is not what should happen, but it does.
It is indeed effectively reaching back at least two levels and allowing the non-constraint at "C" to be made flexible at "A".
All the make free should do is release ONE LEVEL of "default constraints". That is what everyone says it should do.
SO, while the parts should all be constrained when put in, and this can be blamed on the user to that extent, it seems that the program is actually not following what is described, since it effectively reaches back more levels than it is stated to do.