Skip to content

Task-Implement DeterministicRng and run seed contract #22

@learncold

Description

@learncold

Summary

run seed, system seed, fixed-step seed의 파생 규칙을 명확히 정의하고, EngineStepContext.derivedSeed가 항상 동일 입력에서 동일하게 재현되도록 DeterministicRng 계약을 구현한다.

Parent Issue

#1

Area

Engine

Target Sprint

Sprint 1

Why Needed

현재 EngineConfig.baseSeed는 존재하지만 실제 runtime에서는 EngineStepContext.derivedSeed가 고정값으로 남아 있다. 또한 seed 파생 단위가 run 중심인지, system 중심인지, fixed-step 중심인지 명확하지 않아 이후 domain system이 난수를 사용하기 시작하면 재현성 기준이 흔들릴 수 있다.

Scope

  • baseSeed, runIndex, fixedStepIndex를 기준으로 한 기본 seed 파생 규칙을 정의한다.
  • 필요하면 system별 stream 분리를 지원할 수 있는 확장 포인트를 정리하되, 현재 runtime 기본 계약은 명확히 고정한다.
  • DeterministicRng의 reseed/next/derive API를 engine 내부 계약으로 구현한다.
  • EngineRuntime::stepFrame()EngineStepContext.derivedSeed에 실제 파생값을 채우도록 연결한다.
  • 재현성 테스트를 추가한다.

Out of Scope

  • domain-specific stochastic behavior 설계
  • scenario variation seed 정책
  • external random library 도입

Core Design Criteria

  • 동일한 baseSeed, runIndex, fixedStepIndex 조합에서는 항상 같은 파생 seed가 나온다.
  • 기본 runtime 계약은 엔진 공통 단위로 정의하고, domain별 해석은 그 위에 쌓는다.
  • seed 파생 규칙은 lifecycle reset 이후에도 다시 같은 결과를 재현해야 한다.

Acceptance Criteria

  • 동일한 baseSeed와 동일한 실행 순서에서 각 fixed step의 derivedSeed가 동일하다.
  • 서로 다른 baseSeed 또는 서로 다른 run에서는 구분되는 seed stream을 가진다.
  • EngineStepContext.derivedSeed가 더 이상 상수값으로 남지 않는다.
  • 기존 테스트 전체가 통과한다.

Related Docs

  • docs/architecture/프로젝트 구조.md
  • uml/engine-overview.puml
  • uml/engine-runtime-core.puml

Dependencies / Blockers

  • #12의 runtime step context 흐름 위에 연결된다.
  • #96의 lifecycle reset 규칙과 함께 재현성 기준을 맞춰야 한다.

Repository Checks

  • I checked for an existing related issue or epic before creating or updating this task.
  • I will keep the issue title aligned with the repository naming convention.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    Status

    No status

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions