POS UI extension (pos.home.tile.render) deploys & app installs, but tile never surfaces in smart grid — only app web-link shows

Custom app built in the Dev Dashboard with a POS UI extension. The extension deploys and bundles successfully, the app shows as installed, but in the POS smart-grid “Add tile → Apps” list, only the app’s web-link appears (app name + “go to app website”) — the pos.home.tile.render tile never surfaces as an addable tile.

App config:

  • embedded = false, use_legacy_install_flow = false

  • application_url points to my hosted backend

  • Store is on POS Pro

Extension config:

  • type = "ui_extension", api_version = "2026-04"

  • Targets: pos.home.tile.render + pos.home.modal.render (both → single src/index.tsx, Preact + web-components model)

  • Deploys clean on CLI 4.1.0

What I’ve tried (all unsuccessful):

  • Both type = "pos_ui_extension" and type = "ui_extension"

  • [pos] embedded set true (app appears as web-link only), false (app disappears from the list), and removed

  • application_url pointed at a static storefront, then a live backend

  • Created a fresh extension with a new handle/UID to rule out stale registration — no change

  • POS Pro confirmed; cleared POS app cache, logged out/in, reinstalled POS (Android)

  • Confirmed in the admin POS editor (not just device) — same: only the app web-link, no tile

  • The Dev Dashboard “Install app” link redirects to application_url and the install handshake appears not to complete (app is headless — no OAuth backend; the extension calls my API directly)

Question: Why does the pos.home.tile.render target not surface as an addable smart-grid tile, when the extension deploys successfully and the app is installed? Is this server-side registration, or does a headless custom (non-App-Store) app need a specific install/distribution step for its POS tile to register? I can share my app client ID and store domain privately if a staff member can check the registration/install state.