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.