Using leaky abstractions is another example of what never works. And representing a dependency graph as a sequence is a leaky abstraction: if A is above B, this means that A_does not_ depend on B, but not that B depends on A.

As for “defaults matter” — agree with this, but it also matters how far do you want to go with enforcement of something you think is right. If you are wrong about what’s right, a few limitations you put will reject a large group of others who don’t think the same way you do.

IMO, a good policy in this case is to give community a chance to decide what to prefer — e.g. by a project-level option telling whether an order is explicitly defined, or F# should figure it out. And only after A/B testing make a decision with such a significant impact (or simply keep the both options, if there will be a kind of split).

CTO @ ServiceTitan.com, creator of https://github.com/servicetitan/Stl.Fusion