CultLib 7760219b+ registers a document only if each list element class has a [CultElementId] string member.
Found by registering every document type: AutomationControlFrame, AutomationPacketReceipt, CultMeshStreamDescriptor,
CultCachePatchDatabaseEntry, PatchClaimCard, SpeechClaimCard, PrimitiveTimelineFact, SpeechScoreMetric, SpeechRenderArtifact,
SpeechTimingReceipt, SpeechWorkerPayloadArtifact. Each gets a trailing keyed ElementId (default empty, minted on write; derived
from Path/Id/StreamId/Sequence where the type already has a unique natural key). Wire is additive.
Tests: a store written by the 42dce361 pin (fixture) reopens with stable unique ids and survives a write; derived packet ids.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
CultLib #90 makes [CultIndex] unique at commit and load. The daemon's PatchId and SessionId
members, and the speech store's RequestId and PayloadId, are shared by many rows, so they
become [CultRole]; the CommandId of each receipt stays [CultIndex] (a receipt's key derives
from its CommandId alone). Needs CultLib >= 7760219b: does not build at the 42dce361 pin.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>