Generations, snapshots, and transforms
PAPER publishes standard-layout, trivially copyable value records. It transfers no engine node, graph, clip, Havok body or allocation ownership.
Cache invalidators
paperProviderGeneration: owner/provider lifecycle.worldGeneration,skeletonGeneration,rockProviderGeneration: upstream runtime identity.weaponGenerationKey: all weapon-specific assumptions.catalogSequence: one stable catalog used by copy calls.snapshotSequence: one coherent frame/diagnostic snapshot.frameIndex: ordering, not identity.
Bounded page recipe
Query state, retain its sequence, copy pages with the same sequence, and advance
by outCopied. If any page returns StaleSnapshot, discard the entire aggregate
and restart from current state. Never join pages from different sequences.
Initialize public outputs with {} so the current size/version defaults remain
present. Preserve zeroed reserved fields in consumer-created inputs.
Coordinate spaces
PaperTransformV1 contains a 3×3 rotation, game-unit translation, and uniform
scale. PaperReloadQsTransformV1 contains translation xyz, quaternion xyzw and
independent xyz scale.
Reload records distinguish node-local and weapon-local values. Animation tracks
declare RigBoneLocal or WeaponRootLocal. A transform is meaningful only with
its space, weapon generation and snapshot/catalog identity.