M0-12
Time-of-day and weather controller with GM toggles
Evidence
From logs/evidence/M0-12/. Click a thumbnail for the full image.
No evidence files in logs/evidence/M0-12/.
Tests
$ pnpm --filter @zoen/wiki exec playwright test --only-changedNotes
2026-10-08 00:55 UTC · Split by the size rule (context meter over 150k after reading): M0-12 = engine-free sky core + data + xunit; M0-12B = Unity part. Built packages/core-cs/Zoen.Core/World: TimeWeatherRules/TimeWeatherReader (time-weather.json incl. gm option lists), SkyModel (pure, allocation-free: phase+blend, 24h clock, auto weather per minHold slot by seeded SplitMix64/FNV-1a weighted pick, 60 s blend at slot start), IServerClock + SkyState (anchor+speed, re-anchored on change, no time scale), LocalSkyAuthority (local stub of the zone server clock authority; GM commands are requests to it), GmSkyCommands (/gm time <phase|HH:MM> lands mid-phase, /gm cycle <on|off|x1|x10|x60> on resumes last speed, /gm weather <state|auto> forced at once), GmAccess (dev-only local GM flag until M6: compiled into test builds, launch option gm=off disables, release builds omit it). Proposed data in time-weather.json: clock.dawnStartsAt 05:00; weatherChange.weights clear 6/dust_haze 3/overcast 3/rain 2/sandstorm 1; weatherChange.heaviness clear<overcast<dust_haze<rain<sandstorm. Tests: core xunit 88/88 (45 new in Zoen.Core.Tests/TimeWeatherTests.cs), verify --changed all green, data tests 170/170. M0-12B holds: Unity SkyController in Boot (URP sun/moon, flat ambient + night floor, exp2 fog kept from stripping, solid sky, weather particles within budget: Low 0, share 0.1 of PERFORMANCE.md totals), look keyframes + telegraph contrast threshold as proposed data, placeholder telegraph (no-fog shader) + contrast probe, GM panel (UI Toolkit buttons + field, dev flag only), overlay phase+weather line, EditMode/PlayMode tests, Web/macOS/Android rebuild + smokes 0 errors, review-matrix contact sheet + four-phase strip in logs/evidence/M0-12B/. Unity has not imported the new core files yet (it writes their .meta files on next open).
