Pin CultLib abd1a92e; [CultRole] audit; ElementId on every list element type #35

Merged
aqua merged 4 commits from aqua/cultindex-audit into main 2026-11-11 08:31:23 +00:00

2026-11-11

Aqua
ElementIdTests: pin the StreamId derivation
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-11 08:31:21 +00:00
Aqua
Pin CultLib abd1a92e; ElementId on every list element type
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>
2026-11-11 08:24:27 +00:00
Aqua
Docs: many-row members are [CultRole], not [CultIndex] (CultLib #90)
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>
2026-11-11 03:56:11 +00:00