No persistent fields. Perception is verb-shape only v1.
Composition constraint: Perceiver requires Sensor to be
present on the same host. The perception verbs (look /
scry / locate) render scenes to the perceiver's own
channel via handleMessage, which lives on Sensor. The
public-shape interface declares Perceiver extends Sensor
so the type narrowing in MixinApi.isPerceiver exposes the
Sensor surface; without runtime co-composition the narrowing
would lie. MixinConstructor doesn't carry an enforceable
bound here (loose by design — see lib/mixin.ts), so the
check rides on __validateComposition__ and fires at first
registration.
Verbs of perception.
selfonly — the perceiver issues these. No target-side contributions:Visibleis pure target shape, not a verb source. The looker has the verbs because they're a Perceiver; the lookable thing supplies a description and keywords.findrides here too: it's a snapshot-shaped sibling oflook(enumerate without binding focus). Discovery wiring islook's — perception, not focus management.The four single-sense verbs (
smell/listen/feel/taste) and the gestaltsenseride the same actor-side bucket — they're perception verbs in the contact family, gated per-verb byrequires*sensorium validators (seelib/command/validators/).