Using external data
You cannot really store any data inside a Gameplay Ability once its granted to get it back when its executed because depending on your execution policy a new instance will be created.
See Tranek Docs: Passing Data to Abilities To activate a GA by event see this section
Activation
Here we will follow the path of UAbilitySystemComponent::TryActivateAbility to see when we check for the requirements.
UAbilitySystemComponent::TryActivateAbility calls UAbilitySystemComponent::InternalTryActivateAbility which calls UGameplayAbility::CanActivateAbility. This function will run a lof of checks including UGameplayAbility::DoesAbilitySatisfyTagRequirements which calls the CheckForRequired and CheckForBlocked lambdas.