Skip to content

feat: identify social login users with incomplete metadata backup - #10568

Merged
lwin-kyaw merged 30 commits into
mainfrom
feat/identify-seedless-incomplete-metadata-users
Oct 8, 2026
Merged

lwin-kyaw merged 30 commits into
mainfrom
feat/identify-seedless-incomplete-metadata-users

Conversation

@lwin-kyaw

@lwin-kyaw lwin-kyaw commented Sep 29, 2026 •

Copy link
Copy Markdown
Contributor

Explanation

Social-login users may have an incomplete or incorrect TOPRF metadata backup after a partial backup failure. This change adds read-only detection after a successful unlock so affected users can be measured before a future repair flow.

After submitPassword succeeds, identifyIncompleteMetadataBackup runs asynchronously and:

  • Fetches and parses the remote secret metadata.
  • Selects the primary SRP using legacy v1 ordering or the explicit v2 PrimarySrp type.
  • Compares the remote primary SRP with the local keyring SRP.
  • Tracks Seedless Onboarding Primary SRP Missing or Seedless Onboarding Primary SRP Mismatch events.
  • Includes metadata schema and imported wallet/account counts in analytics properties.
  • Logs fetch, parsing, keyring, and analytics failures without blocking unlock or modifying local/remote data.

The SeedlessOnboardingControllerMessenger now requires:

  • AnalyticsController:trackEvent
  • KeyringController:exportSeedPhrase

The wallet initializer delegates these actions from the root messenger. The seedless onboarding controller also adds the analytics-controller dependency, exposes its ./utils entry point, and refactors secret metadata parsing and migration helpers.

References

Test plan

  • Added coverage for legacy v1 metadata ordering.
  • Added coverage for explicit v2 primary SRP metadata.
  • Added coverage for missing primary SRP and mismatched primary SRP events.
  • Added coverage for malformed metadata, keyring failures, and analytics failures.
  • Verified analytics coverage at 100%.
  • Verified the seedless onboarding controller unit tests pass.

Checklist

  • I've updated the test suite for new or updated code as appropriate.
  • I've updated documentation and JSDoc for new or updated code as appropriate.
  • I've communicated my changes to consumers by updating changelogs for packages I've changed.
  • I've introduced breaking changes and updated the required messenger integrations.

Note

High Risk
Runs on unlock and calls exportSeedPhrase to compare SRPs, with breaking messenger wiring for analytics and keyring export; behavior is read-only but touches wallet recovery secrets.

Overview
Adds read-only detection for social-login wallets whose remote TOPRF backup is missing or wrong for the primary SRP, so affected users can be measured before a future repair.

After a successful submitPassword unlock, the controller kicks off identifyIncompleteMetadataBackup in the background (no await). It fetches remote secret metadata, picks the primary candidate (legacy v1 ordering vs v2 PrimarySrp), compares it to the local keyring SRP via KeyringController:exportSeedPhrase, and emits Seedless Onboarding Primary SRP Missing or Mismatch through AnalyticsController:trackEvent. Failures are logged only; unlock is not blocked and nothing is written locally or remotely. The same flow is exposed as a public messenger action for explicit calls when unlocked.

Breaking: integrators must allow and delegate AnalyticsController:trackEvent and KeyringController:exportSeedPhrase on the seedless messenger (wallet initializer updated). The package adds @metamask/analytics-controller, a ./utils export, and moves secret-metadata parsing/migration helpers plus identification logic into utils/ (including trackIncompleteMetadataBackupEvents). Docs describe the identification plan for production remediation.

Reviewed by Cursor Bugbot for commit 1f496f5. Bugbot is set up for automated code reviews on this repo. Configure here.

@grvgoel81

Copy link
Copy Markdown
Contributor

Looks good for Shapes A/B/C (missing primary, V1 earliest-imported, V2 mislabeled PrimarySrp). Two asks before we treat this as SSOT: (1) fix the mermaid Yes/No on “Primary SRP Different” - it’s inverted vs the prose; (2) specify controller vs client ownership; Keyring compare + profile_id telemetry aren’t in seedless today (AllowedActions = never). Also worth noting identify can’t see users who already rehydrated onto a wrong primary

@lwin-kyaw

Copy link
Copy Markdown
Contributor Author

Looks good for Shapes A/B/C (missing primary, V1 earliest-imported, V2 mislabeled PrimarySrp). Two asks before we treat this as SSOT: (1) fix the mermaid Yes/No on “Primary SRP Different” - it’s inverted vs the prose; (2) specify controller vs client ownership; Keyring compare + profile_id telemetry aren’t in seedless today (AllowedActions = never). Also worth noting identify can’t see users who already rehydrated onto a wrong primary

Thanks for the comment @grvgoel81
I'm planning to put all these logics in the controller only. Yes, ofc, I have to update the AllowedActions.

@lwin-kyaw lwin-kyaw changed the title docs: added docs to identify social login users with incomplete metad… feat: identify social login users with incomplete metadata backup Sep 29, 2026
@lwin-kyaw
lwin-kyaw marked this pull request as ready for review September 29, 2026 17:55
@lwin-kyaw
lwin-kyaw requested review from a team as code owners September 29, 2026 17:55
@lwin-kyaw
lwin-kyaw deployed to default-branch September 29, 2026 17:55 — with GitHub Actions Active

@cursor cursor Bot left a comment •

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stale Bugbot comment from a previous run.

Comment thread packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts Outdated
@lwin-kyaw

Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-preview

@github-actions

Copy link
Copy Markdown
Contributor

Preview builds have been published. Learn how to use preview builds in other projects.

Expand for full list of packages and versions.
@metamask-previews/account-tree-controller@11.0.0-preview-635748c9f
@metamask-previews/accounts-controller@40.0.0-preview-635748c9f
@metamask-previews/address-book-controller@8.0.0-preview-635748c9f
@metamask-previews/advanced-chart-core@1.0.0-preview-635748c9f
@metamask-previews/ai-controllers@2.0.0-preview-635748c9f
@metamask-previews/analytics-controller@3.2.0-preview-635748c9f
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-635748c9f
@metamask-previews/announcement-controller@9.0.0-preview-635748c9f
@metamask-previews/app-metadata-controller@3.0.0-preview-635748c9f
@metamask-previews/approval-controller@10.0.0-preview-635748c9f
@metamask-previews/assets-controller@17.0.0-preview-635748c9f
@metamask-previews/assets-controllers@112.0.4-preview-635748c9f
@metamask-previews/authenticated-user-storage@4.1.0-preview-635748c9f
@metamask-previews/base-controller@10.0.0-preview-635748c9f
@metamask-previews/base-data-service@2.1.0-preview-635748c9f
@metamask-previews/bitcoin-regtest-up@2.0.0-preview-635748c9f
@metamask-previews/bridge-controller@81.3.3-preview-635748c9f
@metamask-previews/bridge-status-controller@76.3.3-preview-635748c9f
@metamask-previews/build-utils@4.0.0-preview-635748c9f
@metamask-previews/chain-agnostic-permission@2.0.0-preview-635748c9f
@metamask-previews/chomp-api-service@6.0.0-preview-635748c9f
@metamask-previews/claims-controller@1.0.2-preview-635748c9f
@metamask-previews/client-controller@2.0.0-preview-635748c9f
@metamask-previews/client-utils@3.0.3-preview-635748c9f
@metamask-previews/compliance-controller@3.0.0-preview-635748c9f
@metamask-previews/composable-controller@13.0.0-preview-635748c9f
@metamask-previews/config-registry-controller@4.0.0-preview-635748c9f
@metamask-previews/connectivity-controller@1.0.0-preview-635748c9f
@metamask-previews/controller-utils@13.0.0-preview-635748c9f
@metamask-previews/core-backend@11.0.0-preview-635748c9f
@metamask-previews/cryptography@0.0.0-preview-635748c9f
@metamask-previews/delegation-controller@4.0.0-preview-635748c9f
@metamask-previews/earn-controller@13.0.2-preview-635748c9f
@metamask-previews/eip-5792-middleware@4.0.1-preview-635748c9f
@metamask-previews/eip-7702-internal-rpc-middleware@1.0.0-preview-635748c9f
@metamask-previews/eip1193-permission-middleware@3.0.0-preview-635748c9f
@metamask-previews/eth-block-tracker@16.0.0-preview-635748c9f
@metamask-previews/eth-json-rpc-middleware@25.0.0-preview-635748c9f
@metamask-previews/eth-json-rpc-provider@7.0.0-preview-635748c9f
@metamask-previews/foundryup@2.0.0-preview-635748c9f
@metamask-previews/gas-fee-controller@27.0.0-preview-635748c9f
@metamask-previews/gator-permissions-controller@6.0.1-preview-635748c9f
@metamask-previews/geolocation-controller@2.0.0-preview-635748c9f
@metamask-previews/java-tron-up@2.0.0-preview-635748c9f
@metamask-previews/json-rpc-engine@11.0.0-preview-635748c9f
@metamask-previews/json-rpc-middleware-stream@9.0.0-preview-635748c9f
@metamask-previews/keyring-controller@28.1.0-preview-635748c9f
@metamask-previews/kyc-controller@0.6.0-preview-635748c9f
@metamask-previews/local-node-utils@2.0.0-preview-635748c9f
@metamask-previews/logging-controller@10.0.0-preview-635748c9f
@metamask-previews/message-manager@15.0.0-preview-635748c9f
@metamask-previews/messenger@3.0.0-preview-635748c9f
@metamask-previews/messenger-cli@1.0.0-preview-635748c9f
@metamask-previews/money-account-api-data-service@2.1.0-preview-635748c9f
@metamask-previews/money-account-balance-service@3.1.1-preview-635748c9f
@metamask-previews/money-account-controller@2.0.0-preview-635748c9f
@metamask-previews/money-account-upgrade-controller@5.1.0-preview-635748c9f
@metamask-previews/money-account-utils@2.1.0-preview-635748c9f
@metamask-previews/multichain-account-service@14.1.0-preview-635748c9f
@metamask-previews/multichain-api-middleware@5.0.0-preview-635748c9f
@metamask-previews/multichain-network-controller@4.0.0-preview-635748c9f
@metamask-previews/multichain-transactions-controller@8.0.0-preview-635748c9f
@metamask-previews/name-controller@10.0.0-preview-635748c9f
@metamask-previews/network-connection-banner-controller@1.0.0-preview-635748c9f
@metamask-previews/network-controller@37.0.0-preview-635748c9f
@metamask-previews/network-enablement-controller@7.0.1-preview-635748c9f
@metamask-previews/notification-services-controller@29.0.2-preview-635748c9f
@metamask-previews/passkey-controller@4.1.0-preview-635748c9f
@metamask-previews/permission-controller@14.0.0-preview-635748c9f
@metamask-previews/permission-log-controller@6.0.0-preview-635748c9f
@metamask-previews/perps-controller@18.0.1-preview-635748c9f
@metamask-previews/phishing-controller@18.1.1-preview-635748c9f
@metamask-previews/platform-api-docs@0.2.1-preview-635748c9f
@metamask-previews/polling-controller@17.0.0-preview-635748c9f
@metamask-previews/preferences-controller@24.0.0-preview-635748c9f
@metamask-previews/profile-metrics-controller@5.1.2-preview-635748c9f
@metamask-previews/profile-sync-controller@33.0.0-preview-635748c9f
@metamask-previews/ramps-controller@26.1.0-preview-635748c9f
@metamask-previews/rate-limit-controller@8.0.0-preview-635748c9f
@metamask-previews/react-data-query@2.0.0-preview-635748c9f
@metamask-previews/remote-feature-flag-controller@7.0.0-preview-635748c9f
@metamask-previews/sample-controllers@6.0.0-preview-635748c9f
@metamask-previews/seedless-onboarding-controller@11.0.1-preview-635748c9f
@metamask-previews/selected-network-controller@27.0.0-preview-635748c9f
@metamask-previews/sentinel-api-service@2.0.0-preview-635748c9f
@metamask-previews/shield-controller@7.0.3-preview-635748c9f
@metamask-previews/signature-controller@40.0.0-preview-635748c9f
@metamask-previews/smart-transactions-controller@27.0.3-preview-635748c9f
@metamask-previews/snap-account-service@4.0.0-preview-635748c9f
@metamask-previews/social-controllers@3.4.0-preview-635748c9f
@metamask-previews/solana-test-validator-up@2.0.0-preview-635748c9f
@metamask-previews/stellar-quickstart-up@0.0.0-preview-635748c9f
@metamask-previews/storage-service@2.0.0-preview-635748c9f
@metamask-previews/subscription-controller@11.0.0-preview-635748c9f
@metamask-previews/transaction-controller@72.0.1-preview-635748c9f
@metamask-previews/transaction-pay-controller@30.0.0-preview-635748c9f
@metamask-previews/user-operation-controller@42.0.1-preview-635748c9f
@metamask-previews/utils@12.0.0-preview-635748c9f
@metamask-previews/wallet@15.1.0-preview-635748c9f
@metamask-previews/wallet-cli@0.0.0-preview-635748c9f

Comment on lines +73 to +79
await trackEventSafely({
name: SeedlessPrimarySrpMismatchEventName,
properties: {},
sensitiveProperties: {},
saveDataRecording: false,
hasProperties: false,
});

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Both SeedlessPrimarySrpMismatchEventName and SeedlessPrimarySrpMissingEventName emit with properties: {}. Without a profile_id, metaMetricsId, or keyringId, you can only count affected users, cannot identify who they are for manual remediation. This defeats the purpose of the detection for incident response.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Without a profile_id, metaMetricsId,

We're calling the AnalyticsController:trackEvent directly, both of these will be assigned by the controller.
I've also updated with the relevant properties here dc77a1e

Comment thread packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts Outdated
Comment thread packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts Outdated
Comment thread packages/seedless-onboarding-controller/src/utils/secret-data-utils.ts Outdated
@github-actions

github-actions Bot commented Oct 6, 2026

Copy link
Copy Markdown
Contributor

Preview builds have been published. Learn how to use preview builds in other projects.

Expand for full list of packages and versions.
@metamask-previews/account-tree-controller@11.0.1-preview-2bc848240
@metamask-previews/accounts-controller@40.0.0-preview-2bc848240
@metamask-previews/address-book-controller@8.0.0-preview-2bc848240
@metamask-previews/advanced-chart-core@1.0.0-preview-2bc848240
@metamask-previews/ai-controllers@2.0.0-preview-2bc848240
@metamask-previews/analytics-controller@4.0.0-preview-2bc848240
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-2bc848240
@metamask-previews/announcement-controller@9.0.0-preview-2bc848240
@metamask-previews/app-metadata-controller@3.0.0-preview-2bc848240
@metamask-previews/approval-controller@10.0.0-preview-2bc848240
@metamask-previews/assets-controller@18.0.1-preview-2bc848240
@metamask-previews/assets-controllers@112.1.2-preview-2bc848240
@metamask-previews/authenticated-user-storage@4.1.0-preview-2bc848240
@metamask-previews/base-controller@10.0.0-preview-2bc848240
@metamask-previews/base-data-service@2.1.0-preview-2bc848240
@metamask-previews/bitcoin-regtest-up@2.0.0-preview-2bc848240
@metamask-previews/bridge-controller@82.0.2-preview-2bc848240
@metamask-previews/bridge-status-controller@76.3.5-preview-2bc848240
@metamask-previews/build-utils@4.0.0-preview-2bc848240
@metamask-previews/chain-agnostic-permission@2.0.0-preview-2bc848240
@metamask-previews/chomp-api-service@6.0.1-preview-2bc848240
@metamask-previews/claims-controller@1.0.3-preview-2bc848240
@metamask-previews/client-controller@2.0.0-preview-2bc848240
@metamask-previews/client-utils@3.0.4-preview-2bc848240
@metamask-previews/compliance-controller@3.0.0-preview-2bc848240
@metamask-previews/composable-controller@13.0.0-preview-2bc848240
@metamask-previews/config-registry-controller@5.0.0-preview-2bc848240
@metamask-previews/connectivity-controller@1.0.0-preview-2bc848240
@metamask-previews/controller-utils@13.0.0-preview-2bc848240
@metamask-previews/core-backend@12.0.1-preview-2bc848240
@metamask-previews/cryptography@1.1.0-preview-2bc848240
@metamask-previews/delegation-controller@4.0.0-preview-2bc848240
@metamask-previews/earn-controller@13.0.2-preview-2bc848240
@metamask-previews/eip-5792-middleware@4.0.1-preview-2bc848240
@metamask-previews/eip-7702-internal-rpc-middleware@1.0.0-preview-2bc848240
@metamask-previews/eip1193-permission-middleware@3.0.0-preview-2bc848240
@metamask-previews/eth-block-tracker@16.0.0-preview-2bc848240
@metamask-previews/eth-json-rpc-middleware@25.0.0-preview-2bc848240
@metamask-previews/eth-json-rpc-provider@7.0.0-preview-2bc848240
@metamask-previews/foundryup@2.0.0-preview-2bc848240
@metamask-previews/gas-fee-controller@27.0.0-preview-2bc848240
@metamask-previews/gator-permissions-controller@6.0.1-preview-2bc848240
@metamask-previews/geolocation-controller@2.0.0-preview-2bc848240
@metamask-previews/java-tron-up@2.0.0-preview-2bc848240
@metamask-previews/json-rpc-engine@11.0.0-preview-2bc848240
@metamask-previews/json-rpc-middleware-stream@9.0.0-preview-2bc848240
@metamask-previews/keyring-controller@28.1.0-preview-2bc848240
@metamask-previews/kyc-controller@0.6.1-preview-2bc848240
@metamask-previews/local-node-utils@2.0.0-preview-2bc848240
@metamask-previews/logging-controller@10.0.0-preview-2bc848240
@metamask-previews/message-manager@15.0.0-preview-2bc848240
@metamask-previews/messenger@3.0.0-preview-2bc848240
@metamask-previews/messenger-cli@1.0.0-preview-2bc848240
@metamask-previews/money-account-api-data-service@2.1.0-preview-2bc848240
@metamask-previews/money-account-balance-service@3.1.2-preview-2bc848240
@metamask-previews/money-account-controller@2.0.0-preview-2bc848240
@metamask-previews/money-account-upgrade-controller@5.1.0-preview-2bc848240
@metamask-previews/money-account-utils@2.1.0-preview-2bc848240
@metamask-previews/multichain-account-service@14.1.0-preview-2bc848240
@metamask-previews/multichain-api-middleware@5.0.0-preview-2bc848240
@metamask-previews/multichain-network-controller@4.0.0-preview-2bc848240
@metamask-previews/multichain-transactions-controller@8.0.0-preview-2bc848240
@metamask-previews/name-controller@10.0.0-preview-2bc848240
@metamask-previews/network-connection-banner-controller@1.0.0-preview-2bc848240
@metamask-previews/network-controller@37.0.1-preview-2bc848240
@metamask-previews/network-enablement-controller@7.0.2-preview-2bc848240
@metamask-previews/notification-services-controller@29.0.3-preview-2bc848240
@metamask-previews/passkey-controller@4.1.0-preview-2bc848240
@metamask-previews/permission-controller@14.0.0-preview-2bc848240
@metamask-previews/permission-log-controller@6.0.0-preview-2bc848240
@metamask-previews/perps-controller@19.0.0-preview-2bc848240
@metamask-previews/phishing-controller@18.2.0-preview-2bc848240
@metamask-previews/platform-api-docs@0.2.1-preview-2bc848240
@metamask-previews/polling-controller@17.0.0-preview-2bc848240
@metamask-previews/preferences-controller@24.0.0-preview-2bc848240
@metamask-previews/profile-controller@1.0.1-preview-2bc848240
@metamask-previews/profile-metrics-controller@5.1.3-preview-2bc848240
@metamask-previews/profile-sync-controller@34.0.0-preview-2bc848240
@metamask-previews/ramps-controller@26.2.0-preview-2bc848240
@metamask-previews/rate-limit-controller@8.0.0-preview-2bc848240
@metamask-previews/react-data-query@2.0.0-preview-2bc848240
@metamask-previews/remote-feature-flag-controller@7.0.0-preview-2bc848240
@metamask-previews/sample-controllers@6.0.0-preview-2bc848240
@metamask-previews/seedless-onboarding-controller@11.0.1-preview-2bc848240
@metamask-previews/selected-network-controller@27.0.0-preview-2bc848240
@metamask-previews/sentinel-api-service@2.0.0-preview-2bc848240
@metamask-previews/shield-controller@7.0.4-preview-2bc848240
@metamask-previews/signature-controller@40.0.0-preview-2bc848240
@metamask-previews/smart-transactions-controller@27.1.0-preview-2bc848240
@metamask-previews/snap-account-service@4.0.0-preview-2bc848240
@metamask-previews/social-controllers@3.6.0-preview-2bc848240
@metamask-previews/solana-test-validator-up@2.0.0-preview-2bc848240
@metamask-previews/stellar-quickstart-up@0.0.0-preview-2bc848240
@metamask-previews/storage-service@2.0.0-preview-2bc848240
@metamask-previews/subscription-controller@12.0.1-preview-2bc848240
@metamask-previews/transaction-controller@72.1.0-preview-2bc848240
@metamask-previews/transaction-pay-controller@30.0.1-preview-2bc848240
@metamask-previews/user-operation-controller@42.0.1-preview-2bc848240
@metamask-previews/utils@12.0.0-preview-2bc848240
@metamask-previews/wallet@16.0.1-preview-2bc848240
@metamask-previews/wallet-cli@0.0.0-preview-2bc848240

Comment on lines 927 to 941
globalPassword,
maxKeyChainLength = 5,
}: {
globalPassword: string;
maxKeyChainLength?: number;
}): Promise<void> {
return await this.#withControllerLock(async () => {
return await this.#executeWithTokenRefresh(async () => {
const currentDeviceAuthPubKey = this.#recoverAuthPubKey();
await this.#submitGlobalPassword({
targetAuthPubKey: currentDeviceAuthPubKey,
globalPassword,
maxKeyChainLength,
});
}, 'submitGlobalPassword');

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Users who unlock via the global password path (Mobile) are never scanned. Inside #submitGlobalPassword, decryptedVaultData with its toprfEncryptionKey and toprfAuthKeyPair is available - the same ingredients used in submitPassword. The detection needs to be wired in here too.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've exposed a new public method, identifyIncompleteMetadataBackup to track the analytics, for this case.

We can't do this in the controller side because currently, in Password sync cases, the wallet unlock, KeyringController:submitPassword is done in the client side.
So, you should call identifyIncompleteMetadataBackup method after wallet is unlocked with global password.

Normal unlock should be still tracked by the controller internally.

Eventually, after we move every orchestration inside the controller, we will mark this method, identifyIncompleteMetadataBackup as internal private method.

);

// Sort: PrimarySrp first, then by client timestamp (oldest first).
results.sort((a, b) => SecretMetadata.compare(a, b, 'asc'));

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SecretMetadata.compare returns 0 when both items have dataType === PrimarySrp (the V2 corruption shape from this incident). That makes the relative order between them dependent on the TOPRF node fetch order, which is not stable across unlocks. findIndex then picks whichever ends up first. For a user with two PrimarySrp-tagged items where the wrong one is first, areUint8ArraysEqual in identifyIncompleteMetadataBackup returns true and the user is silently classified as healthy.

The dual-PrimarySrp case should be detected explicitly here e.g., check if more than one PrimarySrp-tagged item exists after the sort and surface that as a distinct error or return value so the caller can emit a separate analytics event for it, rather than silently picking one.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@grvgoel81 , I've replied to this same comment here, #10568 (comment) :)

@cursor cursor Bot left a comment •

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stale Bugbot comment from a previous run.

Comment thread packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts Outdated
@lwin-kyaw

Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-preview

@github-actions

github-actions Bot commented Oct 6, 2026

Copy link
Copy Markdown
Contributor

Preview builds have been published. Learn how to use preview builds in other projects.

Expand for full list of packages and versions.
@metamask-previews/account-tree-controller@11.0.1-preview-f25af532e
@metamask-previews/accounts-controller@40.0.0-preview-f25af532e
@metamask-previews/address-book-controller@8.0.0-preview-f25af532e
@metamask-previews/advanced-chart-core@1.0.0-preview-f25af532e
@metamask-previews/ai-controllers@2.0.0-preview-f25af532e
@metamask-previews/analytics-controller@4.0.0-preview-f25af532e
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-f25af532e
@metamask-previews/announcement-controller@9.0.0-preview-f25af532e
@metamask-previews/app-metadata-controller@3.0.0-preview-f25af532e
@metamask-previews/approval-controller@10.0.0-preview-f25af532e
@metamask-previews/assets-controller@18.0.1-preview-f25af532e
@metamask-previews/assets-controllers@112.1.2-preview-f25af532e
@metamask-previews/authenticated-user-storage@4.1.0-preview-f25af532e
@metamask-previews/base-controller@10.0.0-preview-f25af532e
@metamask-previews/base-data-service@2.1.0-preview-f25af532e
@metamask-previews/bitcoin-regtest-up@2.0.0-preview-f25af532e
@metamask-previews/bridge-controller@82.0.2-preview-f25af532e
@metamask-previews/bridge-status-controller@76.3.5-preview-f25af532e
@metamask-previews/build-utils@4.0.0-preview-f25af532e
@metamask-previews/chain-agnostic-permission@2.0.0-preview-f25af532e
@metamask-previews/chomp-api-service@6.0.1-preview-f25af532e
@metamask-previews/claims-controller@1.0.3-preview-f25af532e
@metamask-previews/client-controller@2.0.0-preview-f25af532e
@metamask-previews/client-utils@3.0.4-preview-f25af532e
@metamask-previews/compliance-controller@3.0.0-preview-f25af532e
@metamask-previews/composable-controller@13.0.0-preview-f25af532e
@metamask-previews/config-registry-controller@5.0.0-preview-f25af532e
@metamask-previews/connectivity-controller@1.0.0-preview-f25af532e
@metamask-previews/controller-utils@13.0.0-preview-f25af532e
@metamask-previews/core-backend@12.0.1-preview-f25af532e
@metamask-previews/cryptography@1.1.0-preview-f25af532e
@metamask-previews/delegation-controller@4.0.0-preview-f25af532e
@metamask-previews/earn-controller@13.0.2-preview-f25af532e
@metamask-previews/eip-5792-middleware@4.0.1-preview-f25af532e
@metamask-previews/eip-7702-internal-rpc-middleware@1.0.0-preview-f25af532e
@metamask-previews/eip1193-permission-middleware@3.0.0-preview-f25af532e
@metamask-previews/eth-block-tracker@16.0.0-preview-f25af532e
@metamask-previews/eth-json-rpc-middleware@25.0.0-preview-f25af532e
@metamask-previews/eth-json-rpc-provider@7.0.0-preview-f25af532e
@metamask-previews/foundryup@2.0.0-preview-f25af532e
@metamask-previews/gas-fee-controller@27.0.0-preview-f25af532e
@metamask-previews/gator-permissions-controller@6.0.1-preview-f25af532e
@metamask-previews/geolocation-controller@2.0.0-preview-f25af532e
@metamask-previews/java-tron-up@2.0.0-preview-f25af532e
@metamask-previews/json-rpc-engine@11.0.0-preview-f25af532e
@metamask-previews/json-rpc-middleware-stream@9.0.0-preview-f25af532e
@metamask-previews/keyring-controller@28.1.0-preview-f25af532e
@metamask-previews/kyc-controller@0.6.1-preview-f25af532e
@metamask-previews/local-node-utils@2.0.0-preview-f25af532e
@metamask-previews/logging-controller@10.0.0-preview-f25af532e
@metamask-previews/message-manager@15.0.0-preview-f25af532e
@metamask-previews/messenger@3.0.0-preview-f25af532e
@metamask-previews/messenger-cli@1.0.0-preview-f25af532e
@metamask-previews/money-account-api-data-service@2.1.0-preview-f25af532e
@metamask-previews/money-account-balance-service@3.1.2-preview-f25af532e
@metamask-previews/money-account-controller@2.0.0-preview-f25af532e
@metamask-previews/money-account-upgrade-controller@5.1.0-preview-f25af532e
@metamask-previews/money-account-utils@2.1.0-preview-f25af532e
@metamask-previews/multichain-account-service@14.1.0-preview-f25af532e
@metamask-previews/multichain-api-middleware@5.0.0-preview-f25af532e
@metamask-previews/multichain-network-controller@4.0.0-preview-f25af532e
@metamask-previews/multichain-transactions-controller@8.0.0-preview-f25af532e
@metamask-previews/name-controller@10.0.0-preview-f25af532e
@metamask-previews/network-connection-banner-controller@1.0.0-preview-f25af532e
@metamask-previews/network-controller@37.0.1-preview-f25af532e
@metamask-previews/network-enablement-controller@7.0.2-preview-f25af532e
@metamask-previews/notification-services-controller@29.0.3-preview-f25af532e
@metamask-previews/passkey-controller@4.1.0-preview-f25af532e
@metamask-previews/permission-controller@14.0.0-preview-f25af532e
@metamask-previews/permission-log-controller@6.0.0-preview-f25af532e
@metamask-previews/perps-controller@19.0.0-preview-f25af532e
@metamask-previews/phishing-controller@18.2.0-preview-f25af532e
@metamask-previews/platform-api-docs@0.2.1-preview-f25af532e
@metamask-previews/polling-controller@17.0.0-preview-f25af532e
@metamask-previews/preferences-controller@24.0.0-preview-f25af532e
@metamask-previews/profile-controller@1.0.1-preview-f25af532e
@metamask-previews/profile-metrics-controller@5.1.3-preview-f25af532e
@metamask-previews/profile-sync-controller@34.0.0-preview-f25af532e
@metamask-previews/ramps-controller@26.2.0-preview-f25af532e
@metamask-previews/rate-limit-controller@8.0.0-preview-f25af532e
@metamask-previews/react-data-query@2.0.0-preview-f25af532e
@metamask-previews/remote-feature-flag-controller@7.0.0-preview-f25af532e
@metamask-previews/sample-controllers@6.0.0-preview-f25af532e
@metamask-previews/seedless-onboarding-controller@11.0.1-preview-f25af532e
@metamask-previews/selected-network-controller@27.0.0-preview-f25af532e
@metamask-previews/sentinel-api-service@2.0.0-preview-f25af532e
@metamask-previews/shield-controller@7.0.4-preview-f25af532e
@metamask-previews/signature-controller@40.0.0-preview-f25af532e
@metamask-previews/smart-transactions-controller@27.1.0-preview-f25af532e
@metamask-previews/snap-account-service@4.0.0-preview-f25af532e
@metamask-previews/social-controllers@3.6.0-preview-f25af532e
@metamask-previews/solana-test-validator-up@2.0.0-preview-f25af532e
@metamask-previews/stellar-quickstart-up@0.0.0-preview-f25af532e
@metamask-previews/storage-service@2.0.0-preview-f25af532e
@metamask-previews/subscription-controller@12.0.1-preview-f25af532e
@metamask-previews/transaction-controller@72.1.0-preview-f25af532e
@metamask-previews/transaction-pay-controller@30.0.1-preview-f25af532e
@metamask-previews/user-operation-controller@42.0.1-preview-f25af532e
@metamask-previews/utils@12.0.0-preview-f25af532e
@metamask-previews/wallet@16.0.1-preview-f25af532e
@metamask-previews/wallet-cli@0.0.0-preview-f25af532e

@cursor cursor Bot left a comment •

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stale Bugbot comment from a previous run.

Comment thread packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts Outdated
grvgoel81
grvgoel81 previously approved these changes Oct 7, 2026

@grvgoel81 grvgoel81 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approving. Remaining action item: the Mobile side needs to wire up identifyIncompleteMetadataBackup after submitGlobalPassword unlock; global-password users won't be scanned until that call site is added.

grvgoel81
grvgoel81 previously approved these changes Oct 8, 2026
@lwin-kyaw
lwin-kyaw enabled auto-merge October 8, 2026 06:06

### Changed

- **BREAKING:** Delegate `AnalyticsController:trackEvent` and `KeyringController:exportSeedPhrase` from the wallet root messenger to `SeedlessOnboardingController`. ([#10568](https://github.com/MetaMask/core/pull/10568))

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is more in line with other changelog entries.

Suggested change
- **BREAKING:** Delegate `AnalyticsController:trackEvent` and `KeyringController:exportSeedPhrase` from the wallet root messenger to `SeedlessOnboardingController`. ([#10568](https://github.com/MetaMask/core/pull/10568))
- **BREAKING:** Grant `SeedlessOnboardingController` access to `AnalyticsController:trackEvent` and `KeyringController:exportSeedPhrase` ([#10568](https://github.com/MetaMask/core/pull/10568))

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 1f496f5. Configure here.

@lwin-kyaw
lwin-kyaw added this pull request to the merge queue Oct 8, 2026
Merged via the queue into main with commit 9a274af Oct 8, 2026
347 checks passed
@lwin-kyaw
lwin-kyaw deleted the feat/identify-seedless-incomplete-metadata-users branch October 8, 2026 09:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants