Kraken’s nightly architectural scan flagged ServerBoss.kt and ClientNodeManager.kt in shared/commonMain as having upward dependencies on server-specific types (ServerNodeManager, ServerIdentity), claiming krill.zone.shared.krillapp.server.* was a server-module import violating the shared ← server dependency direction.
False positive. The package name krill.zone.shared.krillapp.server is a sub-package within shared/commonMain/kotlin/krill/zone/shared/krillapp/server/, containing shared domain abstractions like the ServerTask fun interface. Kraken’s structural scanner confused this with the :server Gradle module’s package krill.zone.server.*, which is a completely separate namespace. No import of krill.zone.server.* exists anywhere in shared/.
No code change was needed. The architecture was already correct:
shared/build.gradle.kts has no project(":server") dependency.grep -rn "import krill.zone.server\." shared/src/ returns zero results.NodeHttp comes from krill-sdk (krill-oss); FileOperations and NodeObserver are interfaces in shared.ServerNodeManager and ServerIdentity live in krill.zone.server.* and are not imported by shared.If Kraken files a module-layering lead involving krill.zone.shared.krillapp.* sub-packages, verify that the flagged import prefix is krill.zone.server.* (the server module) before treating it as a violation. The krill.zone.shared.krillapp.server.* sub-package is a legitimate shared abstraction layer containing processor interfaces and domain types that are server-side in concept but shared in placement.