Currently Roblox will cache the results of UserOwnsGamePassAsync. This is a pain and just forces developers to manually track when players buy a gamepass. The results should not be cached and should return the most recent status on whether or not the gamepass is owned.
For example I have a car that requires a gamepass to own. The player tries to spawn it so I check if they own it and they dont, so they get prompted to buy the gamepass. They buy it but the result of UserOwnsGamePassAsync is cached so now I have to set up a whole different system to track gamepass purchases. There’s no good reason to cache UserOwnsGamePassAsync, Roblox can afford the network costs.