symfonic.capabilities.memory.conversation_generation¶
conversation_generation ¶
Erase generations for a standalone anchored transcript (CORE-171, CORE-199 P3-4).
An exact NativeConversationHistory over an anchored PostgresConversationLog
composed with memory that is not raw graph-only PostgreSQL v1 gets no
TurnGenerations: nothing memory-side can prove its writes. The transcript
still can. Before the turn reads, the history captures the generations covering
its conversation from the log's own database; the final append re-proves them
under the cursor lock, which an admin forget's advance conflicts with. A turn
that read before an acknowledged forget therefore refuses to publish after it.
The capture is per kernel run, keyed weakly on its issued lineage, and the
first one is final, as in turn_generation. A run started inside another
re-proves every ancestor's capture on the same log before it captures its own,
so a child started after a forget of its parent's conversation refuses too.
The anchor, not this token, is what keeps a restored database from serving a
forgotten transcript; a recovered or caller-supplied transcript refuses here
because no persisted generation covers it. Only that exact composition can
be fenced, so an anchored log under a subclass of either refuses at binding
rather than serving turns no generation re-proves.
ConversationGenerations ¶
The transcript token each live run captured; fail-closed, never replaced.
Source code in src/symfonic/capabilities/memory/conversation_generation.py
capture
async
¶
Observe the log's generations before the turn reads; a carried transcript refuses.
Source code in src/symfonic/capabilities/memory/conversation_generation.py
prove_runs
async
staticmethod
¶
The kernel's run-start preflight: each capture of runs on its own log.
Source code in src/symfonic/capabilities/memory/conversation_generation.py
token ¶
bind_conversation ¶
conversation with a registry when it is an exact history over an anchored log.