R150: Cached Snapshot Child Descriptors
Indexed snapshot child access can avoid a sidecar lookup for every edge by caching immutable record and child-run descriptor pointers in the opaque node handle.
Mechanism and Invariants
All handle construction routes use the same cached representation. Random Child resolves a run directly when chunked and the flat record otherwise; identity includes the snapshot graph, preserving same-graph sharing/cycles and separating versions. Materialize expands runs directly. The descriptor remains immutable and belongs to the graph. Handles grow from 16 to 24 bytes on measured arm64; caller-owned collections and node-valued Fields pay that cost.
Scope and State
Default Document snapshot handles for all three engine backends, including flat and shared-run graphs. Generated Go/TypeScript have no SnapshotNode path.
Reference Control
No cache-off same-source control is maintained.
pego_snapshot_child_chunks_reference disables run sharing while retaining
cached handles; it cannot attribute caching alone.
Evidence and Implementation
Record 099 reports indexed-read ratios of 0.39–0.41 against historical main without the cache; that comparison also changes child-run storage and cannot isolate caching. Same-source read ratios 0.89–0.95 concern run sharing with caching held fixed. Materialization comparisons against historical main are noisy. The handle size increase is a concrete cost even where timing is unmeasured.
Evidence records: 099.
Source owners: SnapshotNode, snapshotHandle and Child.
The comparison policy distinguishes same-source controls, historical changes and full checkpoints.