Skip to content

sit_with: region-wide seat resolution (replace concentric-circle scan) #298

Description

@JDHayesBC

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:

  1. getavatarpositions entity=region → CSV of name, UUID, <pos> for every
    avatar in the region, regardless of draw distance. (perm: interact)
  2. 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.
  3. getobjectsdata entity=range range=512 data=Name,LocalID,ID → map that
    LocalID → the seat's object UUID (proven in senses/pose.py's resolver).
  4. 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=rangeentity=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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions