Bands for the bandFor lookup. Crossing-the-band boundaries is the
granularity controllers and prose check against — most code never
touches the raw illuminance number.
Single source of truth for the lux band vocabulary in TypeScript:
the as const tuple drives the LightBand type union, the
runtime membership check in bandFor (below), and pairs with the
lux tag-table thresholds authored in mud/config/quantity-tags.yaml.
bandFor enforces drift between the YAML and this tuple at runtime.
bandFor, applyBandShift, and compareBand live next to the
LightBand vocabulary — they're vision-modality domain. The
propagation walk that produces a Light value lives in
lib/perception/modalities/VisionModality.ts as the modality's
signalAt; outside consumers dispatch via
PerceptionApi.signalAt(loc, VisionModality).
Bands for the
bandForlookup. Crossing-the-band boundaries is the granularity controllers and prose check against — most code never touches the raw illuminance number.Single source of truth for the lux band vocabulary in TypeScript: the
as consttuple drives theLightBandtype union, the runtime membership check inbandFor(below), and pairs with the lux tag-table thresholds authored inmud/config/quantity-tags.yaml.bandForenforces drift between the YAML and this tuple at runtime.bandFor,applyBandShift, andcompareBandlive next to theLightBandvocabulary — they're vision-modality domain. The propagation walk that produces a Light value lives inlib/perception/modalities/VisionModality.tsas the modality'ssignalAt; outside consumers dispatch viaPerceptionApi.signalAt(loc, VisionModality).