When a channel is installed by the manual app installer the branch is set to '' (git.py#L368), which was fine in the past, but now v2.3 requires a branch when updating the channel, or using the update all channels feature (git.py#L223-L253).
Example: git.py#L250
Dict['installed'][bundle]['branch'] returns an empty string, causing a malformed URL.
Side Note: Re-using the migrate channels function does not auto-fill the missing branch info.