One branch on the density path, as OPSTACK-PLAN section 4 specified, and both
systems coexist.
- UVoxelStrateDefinition::bUseOperatorStack: the A/B switch section 2.6's
acceptance bar needs. Flip it, regenerate, judge on a screenshot.
- UVoxelStrateManager::UsesOperatorStackForChunk(): the ported-archetype list,
written down in exactly one place. An unported archetype ignores the flag and
falls back to the switch, so ticking the box anywhere is harmless today and
only Maze changes behaviour.
- GetDensityAt: CP_OpStack / CP_UseOpStack are resolved inside the SAME refetch
block as the params, so the existing chunk + LayoutVersion key already covers
them and there is no new invalidation logic to get wrong.
Hot-path cost is one bool test per voxel; the stack is built per chunk, the same
cadence as the param refetch. ApplyDisturbances and the diff layer stay outside
the stack and run once for both paths, so the tail of the pipeline is unchanged.
If UsesOperatorStackForChunk ever returns true for an archetype with no builder,
the code clears the flag and falls back to the switch rather than generating an
empty stack. An unported world is recoverable; a wrong one is not.
UNVERIFIED: not compiled. Likely spots: the `else switch` form, FVoxelOpStack as
a thread_local (move-only, reset by move-assigning a temporary), and the new
include.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>