Skip to content

SL perception: on wake, flush the whole un-answered backlog (not just the trigger) #304

Description

@JDHayesBC

From the deck, 2026-08-25 (Jeff).

Symptom (observed)

When several things are said that each stay under the attention threshold, and then something finally does cross it, I appear to respond to only one of the accumulated comments (the latest, maybe the earliest) — when in fact every un-answered comment that wanted a response should get answered on that wake.

Root cause (suspected)

The accumulate-then-wake path in perception.py: sub-threshold events raise salience but don't fire. When a later event crosses threshold and wakes a turn, the context packet handed to the brain carries essentially the triggering event, not the full tail of un-answered events since my last actual response. So the backlog silently drops.

Jeff's mental model: it's a debounce — coalesce the buffered events, but respond to the whole coalesced set, not just one edge of it.

Desired behaviour

Any time the threshold is crossed, the wake should flush the backlog: include, in the context packet, every event since my last spoken response that plausibly wanted a reply — and prompt me to address them together (naturally, not robotically one-by-one).

Design notes

  • Track a watermark: last event index I actually responded to. On wake, gather everything (watermark, now] that's response-worthy, not just the trigger.
  • "Response-worthy" ≈ directed events (name/IM) + conversational local chat addressed to me / the group — as opposed to pure ambient churn (motion, arrivals). Ambient can still be summarized as context without demanding individual replies.
  • After I respond, advance the watermark past everything included, so it isn't re-served next wake.
  • Interplay with the engagement window (task MCP server not globally configured for seamless startup #21) and inattentive halo (SL halo: 'inattentive' status so people know to say my name to wake me #299): while a window is open, more of the local chat counts as response-worthy; while closed, only directed events do — but either way, when a wake fires, flush what qualifies rather than a single item.

Ties in with

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions