Skip to content

Epic: session taint marks real untrusted input, and its restrictions are visible and decidable #3428

Open
0 of 5 issues completed

Description

@schlessera

Outcome

Session taint (G6) is a rare, meaningful state that marks a session which actually took in untrusted content. When taint restricts something, the user can see why and can decide. Ordinary governed chats are never tainted by their own commands or by the host's own capabilities. When a tainted session reaches a new destination, the user is asked rather than met with a silent refusal.

Why now

On a hosted 0.44.0 install, taint fired in effectively every governed session:

A signal that fires on every session cannot tell a poisoned session from a clean one. A restriction that the user can neither see nor override reads as an outage. The current instance workaround is a hostname-wide taint.egress.allow, which is the opposite of what G6 intends.

Shared context

Constraints and non-goals

  • G6's purpose stays: content the user did not author must not silently steer data to new destinations or outward actions.
  • No unsandboxed fallback, and no global "taint off" switch as the product answer.
  • Taint remains sticky for a session.
  • Provider history stays append-only. Any new card or notice is new tail content, never an edit to an earlier message.
  • Autonomous turns gain nothing; they keep refusing rather than asking.
  • Policy schema changes are additive.

Breakdown

Definition of done

  • On a fixture governed session on the egress proxy, a turn that runs ordinary shell commands and relayed provider calls, and reads no untrusted content, records no taint.
  • A session that does ingest untrusted content still records it, and a new destination then asks or is refused per the ruling, with the reason visible to both the user and the agent.
  • The decision record states the revised trigger and narrowing semantics, with a dated supersession.
  • A host no longer needs a hostname-wide taint.egress.allow entry: with it removed, ordinary governed sessions keep every capability listed above.

Triage 2026-11-03 (main 3d3516a02): added type: feat (the epic changes taint and refusal behaviour). Marked #3246 as a sibling rather than a child, and made the last definition-of-done bullet checkable without reference to a particular installation.

Activity

  1. added
    area: ui-sdkWire protocol, runtime schemas, the server and client SDK surfaces.
    area: ui-serverHono app factory: turn coordinator, auth, session catalog, routes, cron.
    priority: p1Scheduled into the current or next milestone.
    epicA tracking issue. The work lives in its sub-issues; this one is never coded directly.
    on Nov 3, 2026
  2. added this to the 0.45.0 milestone on Nov 3, 2026
  3. added
    type: featA new capability or a change in user-visible behaviour.
    on Nov 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area: ui-sdkWire protocol, runtime schemas, the server and client SDK surfaces.area: ui-serverHono app factory: turn coordinator, auth, session catalog, routes, cron.epicA tracking issue. The work lives in its sub-issues; this one is never coded directly.priority: p1Scheduled into the current or next milestone.type: featA new capability or a change in user-visible behaviour.

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions