Conversation lifecycle
The conversations service exposes metadata subjects and the concluded set.
concludeIn(tx, ids) refuses unknown, owned, root, and main agent conversations.
setMainAgent, setAutomaticSummaries, and generatedTitle update durable conversation state.
generatedTitle only marks a matching metadata title that no earlier call marked.
The beforeInput hook resumes the recipient and its owner/fork ancestors.
This change shares the transaction that places the input.
A write without an input does not resume a conversation.
Unrelated concluded conversations remain concluded.
Summaries do not run in this subset.
summaryModel() returns undefined and requestSummary() does nothing.
The durable automatic-summary preference remains available for the later summary port.
host/tests/core_ext.rs verifies the lifecycle through the real snapshot loader.