Seed-as-input: thread the manifest seed into a seeded source/RNG so a run is seed-determined #66
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
RunManifest.seed exists (aura-engine/src/report.rs) but is a dead field today —
0everywhere, never threaded into anything that perturbs a run. C12 names seed-as-input as what reconciles Monte-Carlo with C1: a run is bit-identical for a fixed seed, and the seed is a captured input like any other (C1/C11), not hidden nondeterminism.Build the precondition for the Monte-Carlo family: a seeded source / RNG whose output is fully determined by the seed, wired so that bootstrap threads the seed in and it reaches RunManifest.seed. The seeded synthetic OHLC generator in RustAst's
rtl/streams/register.rsis the reference shape.Acceptance (RED-first)
Contracts
C12 (seed-as-input), C1 (determinism is preserved by an explicit seed input, not broken). Prerequisite for the Monte-Carlo family.
Design constraint (World-II eager-agnostic firewall — refs #71)
The seeded source is a PRODUCER, not a materialized Vec: spec the seed->stream contract as
Fn(u64) -> impl Source(theSourcetrait from #71), neverfn seeded_prices(seed) -> Vec<(Timestamp, Scalar)>. Thatseed -> Vecshape would become THE definition of a seeded source and calcify eager into the whole Monte-Carlo family (#68 re-seeds N times). A first impl MAY collect to aVecSourceinternally; the contract itself must not nameVec.Fork B (settled): the seed lives at the recording/data-generation edge, outside the engine graph, and is recorded into
RunManifest.seedat the manifest-construction site. Depends on #71 (theSourceseam).Landed in
c9f0e43(seeded source + live RunManifest.seed) and audited drift-clean in cycle 0042 (b920362). Seed now perturbs the run, is recorded in RunManifest.seed, and is bit-identical for a fixed seed. Closing.