Not understanding how ReplicatedFirst is failing to fire this event

I’m trying to make a local script where items in a shop which are stored in boxes are cloned into a scrolling frame which has a UIGridLayout. The problem is, is that this ReplicatedFirst script doesn’t work at all and the local script in my gui never receives the signal. I’ve tried this in the local script I have in my gui and it works but I want to know why it doesn’t work when I fire it to the gui script.

ReplicatedFirst local script:

if game:IsLoaded() == false then game.Loaded:Wait() end
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Bindables = ReplicatedStorage.Bindables
local Compartments = ReplicatedStorage.Compartments

for i = 1,#Compartments:GetChildren() do
	Bindables.RenderShop:Fire(Compartments:FindFirstChild(tostring(i)))
end

gui script:

Bindables.RenderShop.Event:Connect(function(compartment)
	local comp = compartment:Clone()
	comp.Parent = scrollingframe
end)

Since this is replicatedfirst, this code is running before any code loaded in the playergui even exists yet. Maybe try out waiting for the gui script to exist.

I did the:

if game:IsLoaded() == false then game.Loaded:Wait() end

though

Try waiting for the bindables and compartments to load.

Unlike RemoteEvents, BindableEvents do not have an invocation queue that stores :Fire() calls until a listener processes them. This means that if your ReplicatedFirst script fires the event before your Gui script has connected a listener, the event just gets dropped.

You can circumvent this by having your Gui script first send a ping that the ReplicatedFirst script listens for before sending its own information, but is there a particular reason you cannot simply access the information directly from the Gui script to avoid needing the BindableEvent in the first place?