Markup-augmenter contribution. senseStripAugmenter reads the
per-call filter from AugmentOpts and the viewer's sensorium
(derived from BodyPlan.getModalities()), and drops
<sense channel="X">…</sense> regions and <detail sense="X">
wrappings whose channel isn't in filter ∩ sensorium.
Lives on VisibleMixin (not DetailedMixin) because <sense>
regions can appear in any Visible-mixed long, with or without
detail authoring. Ordering: VisibleMixin sits above Detailed
in the typical composition chain, so the parent-first walker
runs senseStripAugmenter BEFORE wrapDetailKeysAugmenter —
strip-then-wrap is correct because wrapping inside a region
destined for the strip is wasted work.
Persistent fields declared by this mixin. Used by PersistApi for automatic synchronization.
Live-query subscribable fields. Each descriptor's
dependsOnFields defaults to [descriptor.name] (descriptor
name = source field name), so the FieldChangedEvent fires
from setShortDescription / setLongDescription trigger
re-projection automatically. The ShadowChangedEvent entries
cover future hood / disguise shadows that override visible
appearance without firing a field change.
Visible is target-shape only — no verb contributions. See the mixin docstring for why
look.yamlbelongs on Perceiver'sselfbucket, not on Visible's target-side buckets.