Extension Cleanliness Gate
Goal: remove dangling feature edges before more extension work. A feature is clean only when its Python, CSS, JS, routes, assets, static build behavior, and shell hooks are owned by its extension or by an explicit kernel contract.