Files
ironclaw/scripts/reborn_webui_v2_live_qa
Benjamin Kurrek 0f771d4915 feat(channels): presence admission + ephemeral per-ping threads; delete owner-vs-actor (#7397)
Reworks how the bot handles being in a Slack channel or Telegram group,
replacing the shared-thread model with ephemeral-per-ping threads, and removes
the owner-vs-actor concept from run scope.

- Presence is the admission (no per-extension allowlist). Each ping mints a
  fresh pinger-owned thread, event-idempotent (redeliveries replay, no orphan
  threads), pre-loaded with channel/thread history hydration. Reply placement
  via `can_reply_in_threads`; authority-bearing prompts (approval/auth) go
  privately to the pinger; unpaired users get an addressed-only nudge. DMs keep
  their persistent per-user thread.
- Per-event reply targets: each run replies via its own reply target, so
  impersonation is blocked, authority-bearing payloads resolve only for the
  pinger, and a stale/cross-event reply ref is denied.
- With owner == actor everywhere, the owner-vs-actor apparatus is deleted:
  `ResolvedBinding.owner_user_id`, the run_delivery two-scope split, the
  scattered actor-first keying patches, and the dead `ProcessGateOwnerMatch`.
  The run-user resolution machinery (the actor-first ladder, `TurnThreadOwner`,
  `TurnActor`) is kept and reframed — WebChat (=caller), triggers (=creator),
  subagents (=inherited), and system runs (=SYSTEM) resolve their user
  differently; the `Ownerless -> SYSTEM` host path is preserved.
- Untrusted channel-context sanitizer strips bidi/zero-width `Cf` characters,
  not just `Cc` controls.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-10 12:21:24 +00:00
..