it was working a few hours ago and i've been spending those hours trying to fix this issue but i couldn't figure out why it wasn't working. i tried using require() on some other private modules like ArceusInator's GLib (which is what i based my module on) and they worked completely.

here's the code in the MainModule:

local modules = {}

for _, child in pairs(script:GetChildren()) do
	if child:IsA('ModuleScript') then
		modules[child.Name] = require(child)
	end
end

setmetatable(modules, {
	__index = function(t, index)
		if index == 'Script' then
			local scriptClone = script:Clone()
			scriptClone.Name = 'Functions'
			return scriptClone
		end
		
		if type(index) == 'string' then
			local module = script:FindFirstChild(index)
			if module then
				modules[module.Name] = require(module)
			end
		end
		
		return rawget(modules, index)
	end,
	__call = function(t)
		return t.Script
	end
})

return modules

and what i do to require() it:

local functionScript = require(--[[my private module id]]).Script
functionScript.Parent = tool
functionScript.Name = 'Functions'
local functions = require(functionScript)