## ADDED Requirements ### Requirement: Change-phone SHALL follow transactional full migration The system SHALL rely on `POST /api/c/v1/auth/change-phone` to migrate all valid phone-asset associations in one transaction, and SHALL treat any failure as a rollback of the whole operation. #### Scenario: Successful migration - **WHEN** the old-phone code and the new-phone code are valid and no limit or conflict occurs - **THEN** the change request SHALL succeed - **AND** the response SHALL keep the existing shape (`phone`, `changed_at`) - **AND** the user SHALL return to the previous page and the homepage SHALL refresh the bound state #### Scenario: New number exceeds the association limit - **WHEN** the new number would exceed 10 valid associated assets - **THEN** the whole operation SHALL be rolled back - **AND** the system SHALL display the backend copy: 该手机号最多关联10项有效资产 #### Scenario: New number conflicts with an existing same-asset relation - **WHEN** the new number already has a valid association with an asset being migrated - **THEN** the whole operation SHALL be rolled back - **AND** the system SHALL display the backend copy: 新手机号已存在与待迁移资产相同的有效关联,换绑已回滚 ### Requirement: Change-phone failures SHALL keep the user on the page The system SHALL stay on the change-phone page and show the backend error message when migration fails so the user can correct the input and retry. #### Scenario: Migration failure with message - **WHEN** `change-phone` returns a business error - **THEN** the page SHALL show the returned `msg` - **AND** the page SHALL NOT navigate away