>(...)adaptivity never seems to work out well for me(...)
For most my colleagues it also does not work. For me it works... mainly because I am a programmer who is doing mechanical design.
There is a rock hard fool proof work-flow with adaptivity which, in my experience, rarely breaks. I use it a lot in complex designs which really have to be adaptive and it can, altough with a lot manual "open - update - save" propagate complex design changes.
The primary idea is to make small, primitive "adaptor" assemblies in which just parts which must be adaptive do appear. Only ONE part in such assembly must be adaptive, and changes made on part may NOT touch any geometry which is used to form assembly relationships. The only exception from that rule I found working is to be able to dig holes in mated surfaces.
Once this "adaptor" is used to add some modifications to part You must NOT use this part directly in other assemblies. Instead create a derived part and use it. The bonus is, that such a derived part may be adaptive too, but in an another "adaptor" assembly. And so on.
This way You build a chain "base part" -> "part with hole" -> "part with hole and rim" and etc, each geometry change having own "adaptor". If a reference part in "base part" changes, just open appropriate adaptor and update it. And propagate updates upwards (sadly Inventor does not see it).
Notice, with that approach both part which adapts and part to which it is adaptive to may grow in complexity, yet adaptivity is not broken because they mate in following manner:
in "Adaptor 0":
"base part A" ---> adapts to --> "base part B" -->produces--> "part A with hole"
in "Adaptor 1"
"base part B"--->derived-to->"part B with hole-mate ring"--> adapts to -->"part A with hole"-->produces-->"part B with hole-mate ring"
...
and so on, and so on.
At first glance looks like overkill, but it is easy and functional. In my case the end of part chain look like:
...->"part to be assembled"->"part with changes for milling" or
...->"part to be assembled"->"part with additions for 3Dprinting" what helps a lot with dealing with machining issues. For an example my 3D printer prints holes 0,2mm smaller than designed. With that approach I can fix it without altering base part seen in assembly.
In my opinion Inventor is really poorly designed when it comes to adaptivity.
There are two sources of problem. First, it is an inability to let u help it and give names to edges. With that it could just track edge by name, not by geometry. Second it is the inability to let us to make a joint/mate or project part geometry from the state other than last in part tree and name this state.
Using "derived parts" provides such a "named barriers" which solves 99% of adaptivity problems. At the cost of creating helper assemblies, which, I must admit is significant in work-hours. But not more expensive than broken adaptive part, which, obviously, breaks at the end of large project, or not using adaptivity at all and correcting all dimensions by hand.
For hunting "where part is adaptive" I did myself a macro, which is a conglomerate of many information found in this forum (but not in Autodesk manuals). I let myself to attach it, as zip, since this forum refuses to accept .bas files.