Quick answer: Godot 4 preload() failing on resources that reference each other? GDScript loader detects cycles; restructure or use lazy load via ResourceLoader.load_threaded.
Item resource references its 'crafted_from' chain. preload chain hits a cycle; project won't compile.
Break the cycle
Move shared data to a third resource both reference. The cycle becomes a star; preload resolves.
Lazy-load instead
var dep = ResourceLoader.load(path)Runtime load doesn't trigger compile-time cycle detection.
Use Resource UIDs
Reference by UID rather than path. UIDs are resolved lazily; the cycle becomes a data structure, not a compile error.
“preload is eager. Eager loading can't follow cycles.”
Audit preload usage. Most preloads can be lazy-loaded; the immediate-load benefit is rarely worth the cycle risk.