Shared propagation-walk constants for the 'field' modalities
(vision, smell, sound, and future ESP). Vision was the original
exporter — the walk relocated from the retired LightApi —
but the constants are substrate-shared, not vision-owned. Per
the requirements doc's "Per-modality walks, not a generic
walker" decision, the modalities each implement their own walk
body; what they share is the depth-budget + per-exit attenuation
tuning, which lives here on the substrate's neutral home.
MAX_HOPS = 2 — maximum recursion depth. Smell / sound / vision
each guard with if (depth > MAX_HOPS) return acc.
EXIT_TAU = 1.0 — per-doorless-exit linear attenuation factor.
1.0 means "no extra dimming on exit traversal" — the boundary's
own conduit transmissivity does the work for doored / shuttered
cases.
A per-modality override knob hasn't earned its place yet; if a
future modality needs different depth or attenuation, add a
maxHops() / exitTau() accessor on the modality singleton with
these as defaults.
Shared propagation-walk constants for the
'field'modalities (vision, smell, sound, and future ESP). Vision was the original exporter — the walk relocated from the retiredLightApi— but the constants are substrate-shared, not vision-owned. Per the requirements doc's "Per-modality walks, not a generic walker" decision, the modalities each implement their own walk body; what they share is the depth-budget + per-exit attenuation tuning, which lives here on the substrate's neutral home.MAX_HOPS = 2— maximum recursion depth. Smell / sound / vision each guard withif (depth > MAX_HOPS) return acc.EXIT_TAU = 1.0— per-doorless-exit linear attenuation factor.1.0means "no extra dimming on exit traversal" — the boundary's own conduit transmissivity does the work for doored / shuttered cases.A per-modality override knob hasn't earned its place yet; if a future modality needs different depth or attenuation, add a
maxHops()/exitTau()accessor on the modality singleton with these as defaults.