Ability Specs not replicating to owning client, despite Granting Ability in Server

I have granted ASC to some NPC characters in their constructor, not PlayerState. I have applied initial effects and granted initial abilities in their BeginPlay.
I am trying to invoke these NPCs’ abilities locally, but clients cannot count any Ability Spec.
Only server machine is able to find these ability specs and invoke these abilities, not any client!

Is this the expected behaviour of GAS?
Do ability specs not replicate, if ASC is not on the PlayerState?
How to invoke these abilities locally, using my player controller?

[CODE]

// =====================
// NPC

ANPC::ANPC()
{
	PrimaryActorTick.bCanEverTick = true;

	grant_ASC_and_attribute_sets();
}

void ANPC::BeginPlay()
{
	Super::BeginPlay();

	ability_system_component->initialize_ability_system_component(
		this,
		this
	);
}

void ANPC::grant_ASC_and_attribute_sets()
{
	ability_system_component = CreateDefaultSubobject<UABILITY_SYSTEM_COMPONENT>(
		TEXT("ability_system_component")
	);
	ability_system_component->SetIsReplicated(true);
	ability_system_component->SetReplicationMode(EGameplayEffectReplicationMode::Mixed);
	SetNetUpdateFrequency(100.f);

	attr_set_A = CreateDefaultSubobject< UATTR_SET_A >(
		TEXT("attr_set_A")
	);
	attr_set_B = CreateDefaultSubobject< UATTR_SET_B >(
		TEXT("attr_set_B")
	);
	attr_set_C = CreateDefaultSubobject< UATTR_SET_C >(
		TEXT("attr_set_C")
	);

}


// ==============================
// ABILITY SYSTEM COMPONENT

void UABILITY_SYSTEM_COMPONENT::initialize_ability_system_component( AActor * owner_actor,  AActor * avatar_actor)
{
	if ( GetOwnerRole() != ROLE_Authority ) return;

	if (is_initialized) return;

	InitAbilityActorInfo(owner_actor, avatar_actor);

	is_initialized = (
		grant_initial_effects()
		&& grant_initial_abilities()
	);

}

bool UABILITY_SYSTEM_COMPONENT::grant_initial_effects()
{
	// Iterate through each class in Array - initial_effect_container: effect_class_
	for ( const auto & effect_class_ : initial_effect_container )
	{
		if ( !(effect_class_ && effect_class_.Get()) )
			continue;

		grant_effect_by_class(&effect_class_, false);

	}

	return true;

}

bool UABILITY_SYSTEM_COMPONENT::grant_initial_abilities()
{
	// Iterate through pair in the Map - ability_slot_tag, ability_class
	for ( const auto & ability_pair_ : initial_ability_container )
	{
		if ( !(
			ability_pair_.Key.IsValid()
			&& ability_pair_.Value
			&& ability_pair_.Value.Get()
		) )
			continue;

		grant_ability_by_class( &(ability_pair_.Value) );

	}

	return true;

}

// Operations

void UABILITY_SYSTEM_COMPONENT::grant_effect_by_class(const TSubclassOf< UGameplayEffect > * effect_class, bool to_target)
{
	if ( GetOwnerRole() != ROLE_Authority ) return;

	FGameplayEffectSpecHandle effect_spec_handle_ = MakeOutgoingSpec(
		*effect_class,
		1.f,
		FGameplayEffectContextHandle()
	);

	if (!to_target)
		ApplyGameplayEffectSpecToSelf(
			*( effect_spec_handle_.Data.Get() ),
			FPredictionKey()
		);

}

void UABILITY_SYSTEM_COMPONENT::grant_ability_by_class(const TSubclassOf< UGA_MASTER > * ability_class)
{
	if ( GetOwnerRole() != ROLE_Authority ) return;

	FGameplayAbilitySpec ability_spec_ = FGameplayAbilitySpec(
		*ability_class,
		1.f
	);

	GiveAbility(ability_spec_);

}

// ------------
// ERROR lies here

void UABILITY_SYSTEM_COMPONENT::perform_ability(FGameplayTag ability_slot, FGameplayEventData & gameplay_event_data)
{
	// Find ability class for ability slot in the Map
	TSubclassOf<UGA_MASTER> * ability_class_ = initial_ability_container.Find(ability_slot);

	FGameplayAbilitySpec * ability_spec_ = FindAbilitySpecFromClass(ability_class_->Get());

	FGameplayTag gg_;

	if ( !(ability_spec_) )
	{
		/**
		 * ERROR: ability spec is NULLPTR in client - Autonomous Proxy
		 * - However, server can invoke these abilities
		 * 
		 */
		GEngine->AddOnScreenDebugMessage(
			-1,
			6.f,
			FColor::Red,
			FString::Printf(
				TEXT("Could not find ability spec for slot - %s"),
				*ability_slot.ToString()
			)
		);
		return;
	}

	TriggerAbilityFromGameplayEvent(
		ability_spec_->Handle,
		nullptr,
		gg_,
		&gameplay_event_data,
		*this
	);
}