Three strategies: LinkedSchemaChange (metadata-only), VSchemaChangeDirectly (rewrite, no sort), VLocalSchemaChangeWithSorting (full rewrite with sort).
Required: base_tablet push_lock → new_tablet push_lock → base_tablet header_lock → new_tablet header_lock
Staged flow: (1) dual-write rowsets skip immediate bitmap calc → (2) converted rowsets catch up bitmaps → (3) new publish blocked during incremental catch-up → (4) state switches to TABLET_RUNNING.
return_columns derived before dropped columns merged? (Dropped columns needed for delete-predicate evaluation)ignore_schema_change_check stays an explicit escape hatch, not normal production behavior?