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.