From 3682205580c80a73bd8642ed173a3b9ac9969da8 Mon Sep 17 00:00:00 2001 From: EugeneTes Date: Fri, 12 Jun 2026 13:57:20 +0000 Subject: [PATCH] fix: collision-free (seed,label) encoding in rollFor (review) --- src/sim/rng.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/sim/rng.js b/src/sim/rng.js index eebeace..2b6d4a4 100644 --- a/src/sim/rng.js +++ b/src/sim/rng.js @@ -24,5 +24,7 @@ export function makeRng(seed) { // This is the whole hidden-variable mechanism: outcomes are fixed // the moment their label exists, revealed whenever first asked for. export function rollFor(seed, label) { - return makeRng(hash32(seed + ':' + label))(); + // Length-prefix the seed so (seed, label) -> string is injective + // even though seeds and labels themselves contain ':'. + return makeRng(hash32(seed.length + ':' + seed + ':' + label))(); }