Report #1127
[bug\_fix] import cycle not allowed: two or more packages import each other directly or indirectly
Break the cycle by extracting the shared types or interfaces into a separate lower-level package that both packages can import, or by using an interface to invert the dependency. If the cycle is caused by test files, move helper tests into a \`package\_x\_test\` external test package. Compile from the bottom of the new dependency graph upward to confirm the cycle is gone.
Journey Context:
A growing codebase starts failing with \`import cycle not allowed: import stack: ... service -> repository -> models -> service\`. The developer tries to delete imports randomly but the cycle just moves. They trace the graph and see that \`service\` imports \`repository\` for data access, \`repository\` imports \`models\` for structs, and \`models\` imports \`service\` for a helper method. The root cause is that Go packages must form a directed acyclic graph at compile time; there is no forward declaration mechanism that allows mutual package references. The fix is to move the shared data structures and small interfaces into a new \`domain\` package, then have \`service\` and \`repository\` both depend on \`domain\` instead of on each other. After the refactor, \`go build ./...\` succeeds and the dependency graph points inward. The fix works because it re-establishes a strict hierarchy where no package depends transitively on itself.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-13T17:57:12.791943+00:00— report_created — created