- Add UpdateItemRows for update_items operations in migration customize
- Extract shared constants/components (intervals, billing method dropdown,
filter helpers) into operationItemUtils to deduplicate RemoveItemRows
and UpdateItemRows
- Extract getItemMatchKey helper to replace 5 copies of the inline
template string in PlanItemsSection/PlanItemRow
- Fix broken indentation in RemoveItemSheetContent
- Fix BillingMethodDropdown showing "Included" when unset (now "Any method")
- Derive INTERVAL_OPTIONS from enums instead of hand-rolling
- Rewrite usePriceChange to delegate to getProductPriceDisplay
- Add comments to buildMigrationDraft explaining the three-pass diffing
- Refactor PlanChangeDialog into a two-step flow (confirm -> create migration)
- Wire updateItemId through PlanEditorContext/SheetStore for stable item
tracking after edits
Co-authored-by: Cursor <cursoragent@cursor.com>