From c31e5c5a3465036596f2dc8d4d7d1609b56b3771 Mon Sep 17 00:00:00 2001 From: littensy <56808540+littensy@users.noreply.github.com> Date: Wed, 30 Sep 2026 19:06:38 -0700 Subject: [PATCH] fix(charm-sync): run addSignalsToClient outside tracking scope --- packages/charm-sync/src/server.luau | 2 +- packages/charm-sync/test/server.test.luau | 27 +++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/packages/charm-sync/src/server.luau b/packages/charm-sync/src/server.luau index 4e07941..0494804 100644 --- a/packages/charm-sync/src/server.luau +++ b/packages/charm-sync/src/server.luau @@ -61,7 +61,7 @@ local function trackSignal(key: string, getter: () -> T, identifier: unknown) local rawInitialValue = toRaw(initialValue) local snapshot = if initialValue ~= rawInitialValue then utils.deepCopy(rawInitialValue) else initialValue - local dispose = Charm.effect(function() + local dispose = Charm.untracked(Charm.effect, function() local newValue = getter() local rawValue = toRaw(newValue) local isReactive = newValue ~= rawValue diff --git a/packages/charm-sync/test/server.test.luau b/packages/charm-sync/test/server.test.luau index 380fbb0..d43e7b8 100644 --- a/packages/charm-sync/test/server.test.luau +++ b/packages/charm-sync/test/server.test.luau @@ -405,4 +405,31 @@ test.describe("historical", function() end) end) +test("addSignalsToClient should ignore tracking context", function() + local counter = Charm.atom(0) + local payloads: { any }? + + server.connect(function(_client, _payloads) + payloads = _payloads + end) + + local dispose = Charm.effectScope(function() + server.addSignalsToClient("PLAYER_ID", { counter = counter }) + end) + + server.flush() + assert(payloads, "Expected payloads to be sent") + assert(payloads[1].type == "init", "Expected first payload to be init") + assert(payloads[1].data.counter == 0, "Expected init payload to contain atom 'counter'") + + dispose() + + payloads = nil + counter(1) + server.flush() + assert(payloads, "Expected payloads to be sent") + assert(payloads[1].type == "patch", "Expected first payload to be patch") + assert(payloads[1].data.counter == 1, "Expected patch payload to contain atom 'counter'") +end) + return {}