Taken you up on the Subscription page, it is gone in #1005 along with the thing behind it.
You were right that neither was reachable. The settings page redirects to /settings when the licence type is open, and the usage route is deleted unless SUBSCRIPTION_USAGE_MODEL is unique_managed_hosts, which defaults to empty. So nothing was taken away that anyone could open.
What went with it, since the page was only the front of it. The file that chose between the two products, /var/lib/ascender/.tower_version, is written by nothing in the Ascender repositories, so the subscription branch was reachable only on an install carried over from the Tower it was migrated from. Every install that was not has been the open product all along, validating a licence it could never fail and rendering pages it could never show:
get_licenser, which picked the subscription product when that file was present. It returns the open licence now.
- The
Licenser class, its certificate parsing and its expiry arithmetic: 51 lines where the module was 288.
POST /api/v2/config/, which took a manifest. It answers 400 now rather than vanishing.
- The manifest upload wizard, and the gate that sent every route to it when no licence was valid.
server_product_name, and the inventory source that chose redhat.satellite over theforeman.foreman.
The pull request grew two more pieces after that, because removing the licence turned out to leave more dead code than the page did.
The first is the enforcement. check_license and check_org_host_limit in access.py both opened by returning early on an open licence, so neither has done anything on a normal install. Every can_start and can_add that called them carried a validate_license parameter for the callers that wanted to skip the check, and the parameter outlived the check by a wide margin: one call site passed None for it by accident, meaning "no licence check" where it meant to pass no data at all. That parameter is off seventeen signatures now. inventory_import had its own copies, including a remote_tower_license_compare that only the test suite ever called, and the scheduler refused to spawn a scheduled job if the licence probe raised.
The second is the Red Hat analytics upload, which is the other half of Insights. Nineteen /api/v2/analytics/ routes proxied to console.redhat.com and authenticated with the subscription credentials, so with those credentials gone every one of them answers an error. The routes go, the gather_analytics task that shipped the payload goes, and the collectors that only existed to fill it go with it. What stays is the part that was never about Red Hat: config, counts, instance_info, job_counts and job_instance_counts still feed /api/v2/metrics.
Nine settings went with that, INSIGHTS_TRACKING_STATE and the four AUTOMATION_ANALYTICS_* among them, and a conf migration deletes their rows rather than leaving a Red Hat username and password in an upgraded database with no screen left to clear them from.
Two follow-ups in the other repositories, since both of them called routes that are now gone: ascender-collection#309 drops the license and subscriptions modules and the license role, and ascender-kit#74 drops the config properties that read fields the endpoint no longer returns.
The API shape does not move: get_licenser().validate() still returns license_type: open with a valid key, which is what the config view reads and what the UI reads out of it.