symfonic.capabilities.memory.conversation_fork¶
conversation_fork ¶
Owner-authorized transcript forks; no Agent invocation or session markers.
The host must authorize both sessions. Positional identities use explicit tenant/principal/session fields; native identities require an app-supplied session kind and preserve every owner boundary, including case/workspace.
ConversationForkPort ¶
Bases: Protocol
fork
async
¶
Atomically reserve a new destination, snapshot rows, and persist a receipt.
A retry with the same owner/fork_id must retain source, destination and committed cutoff. Another request cannot adopt an occupied destination. Missing sources are refused. Only durable transcript rows are copied. Session erasure retains a receipt tombstone: retries refuse a forgotten destination. Owner-wide erasure removes receipt metadata and transcript together. Hosts must retain their normal session authorization policy.
Source code in src/symfonic/capabilities/memory/conversation_fork.py
ConversationForkRequest
dataclass
¶
ConversationForkRequest(owner: MemoryScope, source: ConversationKey, destination: ConversationKey, fork_id: str, session_kind: str | None = None)
validate ¶
Validate again at storage admission, before acquiring a connection.
Source code in src/symfonic/capabilities/memory/conversation_fork.py
ConversationForkResult
dataclass
¶
Stable committed snapshot metadata, returned unchanged on retries.