What problem does it solve? Kotlin codebases often accumulate misleading extension functions on String, primitives, collections, Flow, or third-party types, creating false ownership, domain pollution, and import collisions. This Skill provides a decision procedure for placing each function on its correct semantic owner. ## Core Features & Use Cases - Ownership-first decision procedure: Names the semantic owner before choosing syntax, rejecting misleading receivers early with a five-gate checklist. - Function form selection table: Maps meaning to form—member, top-level function, factory, injected service, or extension—based on policy, state, I/O, and dependency criteria. - Refactoring guidance: Covers moving implementations, updating callers and imports, and preserving or deprecating public entry points. - Use Case: When reviewing a PR containing fun String.toUserId(), apply the gates to reject the extension and refactor to UserId.parse(raw) on a value class companion object. ## Quick Start Ask the AI to review a Kotlin function placement, for example: should this date-formatting extension on Long be an extension, a top-level function, or a formatter service?