fix(runtime): Random.* in any program; value_* called directly brings the value tree

The seeded random numbers lived in the ECS runtime, so a tool or a
program of test blocks got "unknown function rng_range". They are
runtime/native/rng.ludic now, spliced on Random.* or a bare rng_*/seed
call nobody defines, and imported by core.ludic for a game. A bare
value_*/json_* call nothing in the program defines splices the value
tree the way Value.* does. Reseed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Orkun ÇAKILKAYA 2026-09-25 04:59:48 +03:00
parent bf73f7edaf
commit f5e7fe4245
13 changed files with 52262 additions and 51500 deletions

View file

@ -0,0 +1,19 @@
# random_plain.ludic — Random.* in a program with no properties or handlers: the seeded random
# numbers are spliced on their own, and a helper may call rng_range directly. The same seed gives
# the same draws.
#
# Running it prints: 1 1 1
program RandomPlain {
function roll() -> int {
return rng_range(1, 6)
}
entry {
Random.seed(7)
let a = Random.range(1, 6)
let b = roll()
Random.seed(7)
let c = Random.range(1, 6)
let d = roll()
print(`{a == c} {b == d} {a >= 1 and a <= 6}`)
}
}