Skip to content

Sessioner och Taint ​

Sessioner är den grundläggande enheten för konversationstillstånd i Triggerfish. Varje session spårar oberoende en taint-nivå — ett klassificeringsvattenström som registrerar den högsta känsligheten hos data som nåtts under sessionen. Taint driver policymotonrs utdatabeslut: om en session är taintad vid CONFIDENTIAL kan ingen data från den sessionen flöda till en kanal klassificerad under CONFIDENTIAL.

Session-taint-modell ​

Hur Taint fungerar ​

När en session kommer åt data vid en klassificeringsnivå taintas hela sessionen vid den nivån. Taint följer tre regler:

  1. Per konversation: Varje session har sin egen oberoende taint-nivå
  2. Bara eskalering: Taint kan öka, aldrig minska inom en session
  3. Fullständig återställning rensar allt: Taint OCH konversationshistorik rensas tillsammans
Taint-eskalering: PUBLIC → INTERNAL → CONFIDENTIAL → RESTRICTED. Taint kan bara eskalera, aldrig minska.

SÄKERHET Taint kan aldrig selektivt minskas. Det finns ingen mekanism för att "av-tainta" en session utan att rensa hela konversationshistoriken. Det förhindrar kontextläckage — om sessionen minns att ha sett konfidentiell data måste taint återspegla det. :::

Varför Taint inte kan minska ​

Även om den klassificerade datan inte längre visas innehåller LLM:ens kontextfönster den fortfarande. Modellen kan referera till, sammanfatta eller upprepa klassificerad information i framtida svar. Det enda säkra sättet att sänka taint är att eliminera kontexten helt — vilket är exakt vad en fullständig återställning gör.

Sessionstyper ​

Triggerfish hanterar flera sessionstyper, var och en med oberoende taint-spårning:

SessionstypBeskrivningInitial TaintBevaras vid omstarter
MainPrimär direkt konversation med ägarenPUBLICJa
KanalEn per ansluten kanal (Telegram, Slack osv.)PUBLICJa
BakgrundSkapad för autonoma uppgifter (cron, webhooks)PUBLICUnder uppgiftens varaktighet
AgentPer-agentsessioner för multi-agent-routningPUBLICJa
GruppGruppchatt-sessionerPUBLICJa

Bakgrundssessioner börjar alltid med PUBLIC taint, oavsett föräldrasessionens taint-nivå. Det här är av design — cron-jobb och webhook-utlösta uppgifter ska inte ärva taint från vilken session som råkade skapa dem. :::

Taint-eskaleringsexempel ​

Här är ett komplett flöde som visar taint-eskalering och det resulterande policyblocket:

Taint-eskaleringsexempel: session börjar PUBLIC, eskalerar till CONFIDENTIAL efter Salesforce-åtkomst, blockerar sedan utdata till PUBLIC WhatsApp-kanal

Fullständig återställningsmekanism ​

En sessionsåterställning är det enda sättet att sänka taint. Det är en avsiktlig, destruktiv operation:

  1. Arkivera linjegrafipost — All lineage-data från sessionen bevaras i revisionslagret
  2. Rensa konversationshistorik — Hela kontextfönstret raderas
  3. Återställ taint till PUBLIC — Sessionen börjar om från scratch
  4. Kräv användarbekräftelse — SESSION_RESET-hooken kräver uttrycklig bekräftelse innan exekvering

Efter en återställning är sessionen oskiljbar från en ny session. Agenten har inget minne av den tidigare konversationen. Det här är det enda sättet att garantera att klassificerad data inte kan läcka via LLM:ens kontext.

Inter-sessionskommunikation ​

När en agent skickar data mellan sessioner med sessions_send gäller samma nedskrivningsregler:

Källsessions-taintMålsessionskanalBeslut
PUBLICPUBLIC-kanalALLOW
CONFIDENTIALCONFIDENTIAL-kanalALLOW
CONFIDENTIALPUBLIC-kanalBLOCK
RESTRICTEDCONFIDENTIAL-kanalBLOCK

Sessionsverktyg tillgängliga för agenten:

VerktygBeskrivningTaint-påverkan
sessions_listLista aktiva sessioner med filterIngen taint-ändring
sessions_historyHämta utskrift för en sessionTaint ärvs från refererad session
sessions_sendSkicka meddelande till en annan sessionFöremål för nedskrivningskontroll
sessions_spawnSkapa bakgrundsuppgiftssessionNy session startar med PUBLIC
session_statusKontrollera aktuellt sessionstillstånd och metadataIngen taint-ändring

Datalinjegrafi ​

Varje dataelement som bearbetas av Triggerfish bär provenansmetadata — en komplett post om var data kom ifrån, hur den transformerades och vart den gick. Linjegrafi är revisionsspåret som gör klassificeringsbeslut verifierbara.

Linjegrafipoststruktur ​

json
{
  "lineage_id": "lin_789xyz",
  "content_hash": "sha256:a1b2c3d4...",
  "origin": {
    "source_type": "integration",
    "source_name": "salesforce",
    "record_id": "opp_00123ABC",
    "record_type": "Opportunity",
    "accessed_at": "2025-01-29T10:23:45Z",
    "accessed_by": "user_456",
    "access_method": "plugin_query"
  },
  "classification": {
    "level": "CONFIDENTIAL",
    "reason": "source_system_default",
    "assigned_at": "2025-01-29T10:23:45Z",
    "can_be_downgraded": false
  },
  "transformations": [
    {
      "type": "extraction",
      "description": "Valda fält: name, amount, stage",
      "timestamp": "2025-01-29T10:23:46Z",
      "agent_id": "agent_123"
    },
    {
      "type": "summarization",
      "description": "LLM sammanfattade 3 poster till pipelineöversikt",
      "timestamp": "2025-01-29T10:23:47Z",
      "input_lineage_ids": ["lin_789xyz", "lin_790xyz", "lin_791xyz"],
      "agent_id": "agent_123"
    }
  ],
  "current_location": {
    "session_id": "sess_456",
    "context_position": "assistant_response_3"
  }
}

Linjegrafiregistreringsregler ​

HändelseLinjegrafiåtgärd
Data läst från integrationSkapa linjegrafipost med ursprung
Data transformerad av LLMLägg till transformation, länka indatalinjegrafer
Data aggregerad från flera källorSlå ihop linjegrafi, klassificering = max(indata)
Data skickad till kanalRegistrera mål, verifiera klassificering
SessionsåterställningArkivera linjegrafipost, rensa från kontext

Aggregeringsklassificering ​

När data från flera källor kombineras (t.ex. en LLM-sammanfattning av poster från olika integrationer) ärver det aggregerade resultatet den maximala klassificeringen av alla indata:

Indata 1: INTERNAL    (intern wiki)
Indata 2: CONFIDENTIAL (Salesforce-post)
Indata 3: PUBLIC      (väder-API)

Aggregerad utdataklassificering: CONFIDENTIAL (max av indata)

Företagsdriftsättningar kan konfigurera valfria nedgraderingsregler för statistiska aggregat (medelvärden, antal, summor av 10+ poster) eller certifierad anonymiserad data. Alla nedgraderingar kräver explicita policyregler, loggas med full motivering och är föremål för revisionsöversyn. :::

Revisionskapaciteter ​

Linjegrafi möjliggör fyra kategorier av revisionsfrågor:

  • Framåtspårning: "Vad hände med data från Salesforce-post X?" — följer data framåt från ursprung till alla destinationer
  • Bakåtspårning: "Vilka källor bidrog till denna utdata?" — spårar en utdata tillbaka till alla dess källposter
  • Klassificeringsberättigande: "Varför är det här märkt CONFIDENTIAL?" — visar klassificeringsanledningskedjan
  • Efterlevnadsexport: Fullständig förvaringskedja för juridisk eller regulatorisk granskning

Taint-persistens ​

Session-taint bevaras via StorageProvider under taint:-namnrymden. Det innebär att taint överlever daemon-omstarter — en session som var CONFIDENTIAL före en omstart är fortfarande CONFIDENTIAL efteråt.

Linjegrafipost bevaras under lineage:-namnrymden med efterlevnadsdrivet bevarande (standard 90 dagar).