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 choosing the correct function form so behavior lives on its accurate semantic owner. ## Core Features & Use Cases - Ownership-first decision procedure: A five-step workflow that names the semantic owner, rejects misleading receivers, selects the function form, migrates callers, and verifies compatibility. - Extension gating rules: Strict criteria for when extensions on String, primitives, collections, Flow, framework, or third-party receivers are acceptable. - Form selection table: Maps meaning to member functions, top-level functions, factory/parse methods, injected services, or extensions. - Use Case: When reviewing a PR that adds Long.toDisplayDate(), apply the gates to reject the extension and move time-zone/locale policy into a dedicated formatter collaborator. ## Quick Start Ask the assistant to review a Kotlin function or proposed extension and decide whether it should be a member, top-level function, factory, service, or extension.