The stable channel does exist in this case, but we say it is closed at the moment, which means we need to fallback to a channel of more conservative risk. Since stable is the most conservative risk, it’s okay to not show the channel if it is closed or we’ll need to fail if an install is attempted, because there’s really nothing we can do to satisfy the request that wouldn’t put the user into unexpected territory. That said, if only the candidate channel was closed but there was a stable version, installing candidate would still work because snapd picks up the snap from the stable channel.
It’s simpler to think about it in terms of tolerance. When people say “I’m happy to take the release candidate”, they are also happy to take the final stable version once it does come out, rather than being stuck on an old release candidate forever.
The channels documentation has more details about all of that: