# M03-RND-FACADE-ENVIRONMENT-001 — Renderer environment snapshot boundary ## Ownership - Target: M03 - Program: RND - Owner/Agent ID: sindo-main-codex - Branch: `work/sindo-main-codex/m03-facade-environment` - Lease expires UTC: 2026-07-18 - Integrator: M03 milestone integrator ## Outcome Add an immutable world-environment snapshot accepted by `WorldRenderFacade`, delegate it to the existing DBC sky controller, and migrate deterministic render checkpoint time setup away from direct sky-controller property mutation. ## Non-goals - Change Light/Area/Skybox DBC selection, interpolation, fog, sun or shader rules. - Add weather, indoor lighting, new clock semantics or build-12340 parity claims. - Extract the sky service or move its Environment/Node/RID ownership. - Change runtime scene defaults, cache formats, streaming behavior or target status. ## Paths - Exclusive: `src/render/environment/world_environment_snapshot.gd`, `src/tools/verify_world_environment_snapshot.gd`, this claim - Shared/hotspots: `src/render/world_render_facade.gd`, `src/scenes/sky/wow_sky_controller.gd`, both runtime streaming scenes, `src/tools/capture_render_checkpoints.gd`, `src/tools/verify_world_render_facade.gd`, `docs/modules/world-renderer.md`, `docs/modules/README.md`, `RENDER.md`, `targets/03-renderer-facade.md` - Generated/ignored: `.godot`, native DLL, generated resources, caches and proprietary renderer corpus ## Contracts and data - Public API: immutable `WorldEnvironmentSnapshot` and `WorldRenderFacade.apply_environment_snapshot` - Snapshot input: finite time-of-day hours normalized into one 24-hour day - Adapter: explicit `world_environment_controller_path`; facade/controller retain no ownership of caller snapshot - Schema/cache/coordinate contracts and runtime defaults: unchanged - Consumer: deterministic renderer checkpoint capture; future world-state adapter ## Dependencies - Requires: integrated M03 facade/ground-query master `cb103e1` - Blocks: completion of the facade environment checklist slice and later sky extraction - External state: none for contract tests; visual comparison still needs proprietary corpus ## Verification - Commands: dedicated cold snapshot contract, facade delegation/wiring regression, capture source-boundary regression, renderer manifest/dry-run and repository gates - Fixtures: normalization, non-finite rejection, missing/wrong controller, exact snapshot delegation and existing runtime scene wiring - Fidelity evidence: preserve existing fixed-time application and all DBC-derived visual logic; seven checkpoint plans remain valid - Performance budget: one immutable value allocation per environment update and constant-time main-thread delegation ## Documentation deliverables - Inline public API docs: snapshot, facade adapter and sky-controller application - Module specification: update existing world-renderer specification - Data-flow diagram: snapshot producer through facade into DBC sky controller - Sequence/state/dependency diagrams: application/failure path and ownership notes - Source map/status updates: world-renderer module, module registry if needed, `RENDER.md` ## Simplicity and naming - Important names introduced: `WorldEnvironmentSnapshot`, `apply_environment_snapshot` - Simplest considered solution: one immutable time snapshot over the existing sky implementation - Rejected complexity/abstractions: generic weather graph, duplicated lighting DTO, event bus, service container or alternate Environment owner - Unavoidable complexity and justification: facade resolves a separate scene-owned sky controller because the streamer does not own outdoor environment rendering - Measured optimization evidence: not applicable; bounded constant-time adapter ## Status - State: claimed - Done: contract scope and ownership published - Next: implement value, facade/controller adapter, migration, tests and docs - Blocked by: ## Handoff - Commit: - Results: - Remaining risks: - Documentation updated: