Quick answer: Unity compile failing with cyclic reference between asmdefs after splitting code into packages? Extract shared interfaces into a third assembly that neither side depends on the other.
Refactored gameplay into Game.Combat and Game.AI. Both reference each other's types - Unity refuses to compile either.
Pull out an interface layer
Create Game.Combat.Abstractions. Move just the interfaces (IDamageable, ITargetable). Combat and AI both reference Abstractions; neither references the other.
Use events to decouple
For one-direction calls, raise UnityEvents through a ScriptableObject channel. The publisher doesn't reference the subscriber's asmdef.
Audit with the dependency graph
Unity 2023+ shows the asmdef graph under Window > Analysis > Assembly Definition. Cycles draw red.
“asmdef boundaries are a contract - cycles mean the contract was never agreed.”
Resist the urge to merge the two assemblies back. The cycle is telling you a real ownership question; the merge hides it.