feat: implement dual-seed PRNG isolation for clinical allocations and subject ID generation - #789
Conversation
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
equipose | 30dc379 | Commit Preview URL Branch Preview URL |
Aug 13 2026, 06:50 PM |
|
…arget language strategies (R, Python, SAS, STATA)
138e197 to
716e8f8
Compare
|
Hi @fderuiter, I have successfully completed the rebase and synchronized the branch state following your step-by-step instructions:
The PR is now fully updated, rebased against the latest |
…77a2-46be-90cc-f7f587e31191
# [1.51.0](v1.50.0...v1.51.0) (2026-08-14) ### Bug Fixes * **ci:** create separate tsconfig for Cloudflare worker and test files to resolve ESLint project service parsing error ([3487dbb](3487dbb)) * **tests:** handle empty CSV outputs in sequence parity checks ([c99941e](c99941e)) ### Features * **edge:** implement HTTP 301 redirects for capitalized valid SPA pages with spec coverage ([a98591f](a98591f)) * implement dual-seed PRNG isolation for clinical allocations and subject ID generation ([#789](#789)) ([8ef4475](8ef4475)) * **r-verify:** re-implement verify_audit_hash.R as dependency-free Base-R utility ([fad9d2c](fad9d2c)) * Structured Syntax Regex Validation & Syntactic Variable Auditing for R and Python ([#788](#788)) ([316c6ca](316c6ca))
|
🎉 This PR is included in version 1.51.0 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |
Dual Seeded PRNG State Isolation
This PR implements dual seeded PRNG state isolation to preserve randomization sequences (block sizing selections, block shuffling, and minimization adaptive weights) when updating subject ID mask templates, preventing cosmetic ID design changes from altering clinical allocation parity.
Key Changes:
randomization-algorithm.ts, derived the secondary seed deterministically (seed + "-id") and initializedrngIdusing it.rngIdto the standard, marginal-only, and minimization path generator engines.generateSubjectIdconsumes exclusively from the isolatedrngIdstream.random_int_id()generator usingmt_state_idin the template initialized withseedHashSecondary. Changed{RND}tokens to draw fromrandom_int_id().rng_id = MT19937(seedHashSecondary)and compiled{RND}tokens to draw fromrng_id.{RND}tokens to draw fromget_rand_int_id.random_int_id()in Mata, and updatedstata_rnd_strto draw from the secondary stream.