acdream/docs/research/2026-07-25-slice-h-a3-attached-pose-reconcile.md

45 lines
1.8 KiB
Markdown

# Slice H-a3 — equipped-child post-network reconciliation
## Preserved ordering
Retail live-object presentation still has two authority boundaries:
1. the complete parent-first attachment update after animation;
2. post-network spatial reconciliation after accepted inbound mutations.
The second boundary was not deleted or delayed.
## Change
`EntityEffectPoseRegistry` now carries a monotonic change version for the
current pose-owner lifetime. It advances only when root, indexed parts, part
availability, or cell changes.
Each attached projection remembers the exact parent entity, pose version,
draw/ancestor visibility, and parent cell used for its last composition.
- The animation-order pass remains a complete parent-first walk.
- The post-network pass keeps transition retries but skips a child whose
remembered parent presentation is unchanged.
- A changed root recomposes its direct child; publishing that child's pose
advances its version, so descendants update later in the same parent-first
pass.
- Hidden/NoDraw ancestry and cell changes participate even when the geometric
pose itself is unchanged.
- Pose failure still withdraws the same complete subtree.
The per-frame transition retry path no longer allocates dictionary `ToArray`
snapshots. It copies key/value pairs into retained typed scratch lists, keeping
the old snapshot-before-callback semantics.
## Gate
- Existing equip/unparent/reparent/rollback/pose-loss/teardown tests pass.
- A root → child → grandchild test proves unchanged post-network reconcile
performs zero compositions and a changed root performs exactly two in
parent-first order.
- 1,000 stable post-network reconciles allocate zero managed bytes on the
calling thread.
Release gate: 3,783 App tests passed / 3 skipped; 8,267 complete-solution
tests passed / 5 skipped.