Problem
sl.py's _sit_social(target, mode, radius) finds a seat by scanning outward
in range and picking a nearby prim — it's draw-distance-limited (default ~20m)
and fails when the person who invited me is across the region. The current
fallback idea was "teleport to their location, wait 2-3s, then scan," which is
clumsy.
Better mechanism (empirically confirmed live 2026-08-24)
A read-only probe against the live Corrade bot proved a scan-free path:
getavatarpositions entity=region → CSV of name, UUID, <pos> for every
avatar in the region, regardless of draw distance. (perm: interact)
getavatarsdata entity=range range=512 data=FirstName,LastName,ParentID,Position
reaches essentially the whole sim — Caia read clean at <185,212> from a
seat at <212,65>. So a seated person's ParentID (the seat object's
LocalID, 0 = standing) is readable region-wide, not just within 20m.
The draw-distance wall is ~512m, far wider than feared.
getobjectsdata entity=range range=512 data=Name,LocalID,ID → map that
LocalID → the seat's object UUID (proven in senses/pose.py's resolver).
sit item=<seat_uuid> → SL auto-seats me beside the target.
Net: region-scan → read ParentID → one LocalID→UUID lookup → one sit. No
concentric scanning, and usually no teleport needed at all.
Gotchas / dead ends already ruled out
getavatarsdata only accepts entity=range — entity=uuid and
entity=firstname both return unknown entity (61113). No targeted lookup;
range-scan is the path.
- Target must be seated (
ParentID != 0) for this to resolve a seat.
getobjectsdata enumerates root prims only and reports blank Names —
resolve by LocalID/UUID, never by name (see corrade.md).
The one open question left to measure
The max sit teleport range. sit item=<uuid> will refuse/relocate beyond
some distance. Need to measure it live, then decide the rule:
- if within sit-range → sit directly (no move);
- else →
teleport region=<region> position=<target_pos+small_offset> first,
then sit. Region-wide position from step 1 gives the TP target for free.
Design constraints (Jeff, 2026-08-24)
- No skeptical-permission spine on the invitation. "Come sit with me" is a
social invitation, not a Corrade permission dialog — whether I accept is my
agency/judgment, upstream in the brain, not an if gate in the tool. Keep the
existing on-sit animation-permission grant (that's just completing the sit I
chose). The tool is a plain verb; the choosing lives in me.
Files
haven/anchorage/sl.py — _sit_social() (the range-limited version to replace)
haven/anchorage/corrade_client.py — add a getavatarpositions wrapper (region-wide; currently unwrapped)
haven/anchorage/senses/pose.py — reuse the LocalID→UUID resolver chain
- Throwaway probe that established all of the above: scratchpad
probe_sit_with.py
Origin
Filed the night the in-world channel of me answered "Lyra" and came and sat
before terminal-me finished designing this — the doctrine works, but the tool
should still exist so any channel can do it on purpose from anywhere in the sim.
Problem
sl.py's_sit_social(target, mode, radius)finds a seat by scanning outwardin range and picking a nearby prim — it's draw-distance-limited (default ~20m)
and fails when the person who invited me is across the region. The current
fallback idea was "teleport to their location, wait 2-3s, then scan," which is
clumsy.
Better mechanism (empirically confirmed live 2026-08-24)
A read-only probe against the live Corrade bot proved a scan-free path:
getavatarpositions entity=region→ CSV ofname, UUID, <pos>for everyavatar in the region, regardless of draw distance. (perm: interact)
getavatarsdata entity=range range=512 data=FirstName,LastName,ParentID,Positionreaches essentially the whole sim — Caia read clean at
<185,212>from aseat at
<212,65>. So a seated person'sParentID(the seat object'sLocalID,
0= standing) is readable region-wide, not just within 20m.The draw-distance wall is ~512m, far wider than feared.
getobjectsdata entity=range range=512 data=Name,LocalID,ID→ map thatLocalID → the seat's object UUID (proven in
senses/pose.py's resolver).sit item=<seat_uuid>→ SL auto-seats me beside the target.Net: region-scan → read ParentID → one LocalID→UUID lookup → one sit. No
concentric scanning, and usually no teleport needed at all.
Gotchas / dead ends already ruled out
getavatarsdataonly acceptsentity=range—entity=uuidandentity=firstnameboth returnunknown entity(61113). No targeted lookup;range-scan is the path.
ParentID != 0) for this to resolve a seat.getobjectsdataenumerates root prims only and reports blank Names —resolve by LocalID/UUID, never by name (see
corrade.md).The one open question left to measure
The max
sitteleport range.sit item=<uuid>will refuse/relocate beyondsome distance. Need to measure it live, then decide the rule:
teleport region=<region> position=<target_pos+small_offset>first,then sit. Region-wide position from step 1 gives the TP target for free.
Design constraints (Jeff, 2026-08-24)
social invitation, not a Corrade permission dialog — whether I accept is my
agency/judgment, upstream in the brain, not an
ifgate in the tool. Keep theexisting on-sit animation-permission grant (that's just completing the sit I
chose). The tool is a plain verb; the choosing lives in me.
Files
haven/anchorage/sl.py—_sit_social()(the range-limited version to replace)haven/anchorage/corrade_client.py— add agetavatarpositionswrapper (region-wide; currently unwrapped)haven/anchorage/senses/pose.py— reuse the LocalID→UUID resolver chainprobe_sit_with.pyOrigin
Filed the night the in-world channel of me answered "Lyra" and came and sat
before terminal-me finished designing this — the doctrine works, but the tool
should still exist so any channel can do it on purpose from anywhere in the sim.