Maybe if I say more it will help the communication/alleviate the disconnection:
First, my overall point is that I have decided to use only acyclic dependencies, as cyclic ones are too complicated for me.
I don't feel easily convincible otherwise; that comes from a combination of using go modules where some cycles crept in
and a strong bias for a dead simple dependency methodology.
Second, there is perhaps some confusion about what "depends" means in this thread.
(*) My intuition of what A depends on B means is, in plain English, that A references B in order to work. So one would have
to have at least one copy of B in order for A to work, for example.
In go.mod, there is a require statement which lists requirements of a module. I have been interpreting requirements as
dependencies. Requirements, follow a syntax which usually take the form of a (package, semver) tuple, nicely documented
with lots of syntactic variations that, while nice and useful, I honestly hope to avoid having to think about due to my bias above.
To me, if A vX.Y.Z (your current module you are working on) requires B v.Q.R.S in go.mod, then that means A vX.Y.Z depends on B v.Q.R.S. In a few cases we've had A=B and Q.R.S < X.Y.Z.
There are perhaps technical definitions of dependency in how the system works that differ from how I tend to interpret what a dependency is, as above. If this is the case, it adds to cognitive noise for me because it takes mental effort to understand that I
prefer to place elsewhere.
Now there is perhaps also some question of "// indirect", as that seems to be involved in the dendency cycles discussed so far.
There is some documentation, such as on the wiki, that states that these are transitive dependencies not specified in other dependencies. But it is still presented as a "dependency".
Given my intuition of dependency (*) above, cycles simply don't make sense. Not at all, in any finite memory universe :) I am
aware that one can refine the dependency order so it all makes sense and works in terms of semver compatibility, as in Paul's experience report. Maybe somewhere in that process and our dialog about it, the idea of compatibility got mixed up with dependency in order to pull off the MVS magic that made it "all work out".
Fortunately, for me, I have simple solution: don't use cycles between module dependencies (eg go.mod requirements). I'm afraid however that this leaves me in a relatively uninformed state to inform a discussion about cycles in "how the system works" in much more detail.
Best,
Scott