Skip to content

chore(deps): bump pip from 25.3 to 26.0#8798

Open
dependabot[bot] wants to merge 1 commit intomainfrom
dependabot/pip/pip-26.0
Open

chore(deps): bump pip from 25.3 to 26.0#8798
dependabot[bot] wants to merge 1 commit intomainfrom
dependabot/pip/pip-26.0

Conversation

@dependabot
Copy link
Contributor

@dependabot dependabot bot commented on behalf of github Feb 3, 2026

Bumps pip from 25.3 to 26.0.

Changelog

Sourced from pip's changelog.

26.0 (2026-01-30)

Deprecations and Removals

  • Remove support for non-bare project names in egg fragments. Affected users should use the Direct URL requirement syntax <https://packaging.python.org/en/latest/specifications/version-specifiers/#direct-references>. ([#13157](https://github.com/pypa/pip/issues/13157) <https://github.com/pypa/pip/issues/13157>)

Features

  • Display pip's command-line help in colour, if possible. ([#12134](https://github.com/pypa/pip/issues/12134) <https://github.com/pypa/pip/issues/12134>_)

  • Support installing dependencies declared with inline script metadata (:pep:723) with --requirements-from-script. ([#12891](https://github.com/pypa/pip/issues/12891) <https://github.com/pypa/pip/issues/12891>_)

  • Add --all-releases and --only-final options to control pre-release and final release selection during package installation. ([#13221](https://github.com/pypa/pip/issues/13221) <https://github.com/pypa/pip/issues/13221>_)

  • Add --uploaded-prior-to option to only consider packages uploaded prior to a given datetime when the upload-time field is available from a remote index. ([#13625](https://github.com/pypa/pip/issues/13625) <https://github.com/pypa/pip/issues/13625>_)

  • Add --use-feature inprocess-build-deps to request that build dependencies are installed within the same pip install process. This new mechanism is faster, supports --no-clean and --no-cache-dir reliably, and supports prompting for authentication.

    Enabling this feature will also enable --use-feature build-constraints. This feature will become the default in a future pip version. ([#9081](https://github.com/pypa/pip/issues/9081) <https://github.com/pypa/pip/issues/9081>_)

  • pip cache purge and pip cache remove now clean up empty directories and legacy files left by older pip versions. ([#9058](https://github.com/pypa/pip/issues/9058) <https://github.com/pypa/pip/issues/9058>_)

Bug Fixes

  • Fix selecting pre-release versions when only pre-releases match. For example, package>1.0 with versions 1.0, 2.0rc1 now installs 2.0rc1 instead of failing. ([#13746](https://github.com/pypa/pip/issues/13746) <https://github.com/pypa/pip/issues/13746>_)
  • Revisions in version control URLs now must be percent-encoded. For example, use git+https://example.com/repo.git@issue%231 to specify the branch issue#1. If you previously used a branch name containing a % character in a version control URL, you now need to replace it with %25 to ensure correct percent-encoding. ([#13407](https://github.com/pypa/pip/issues/13407) <https://github.com/pypa/pip/issues/13407>_)
  • Preserve original casing when a path is displayed. ([#6823](https://github.com/pypa/pip/issues/6823) <https://github.com/pypa/pip/issues/6823>_)
  • Fix bash completion when the $IFS variable has been modified from its default. ([#13555](https://github.com/pypa/pip/issues/13555) <https://github.com/pypa/pip/issues/13555>_)
  • Precompute Python requirements on each candidate, reducing time of long resolutions. ([#13656](https://github.com/pypa/pip/issues/13656) <https://github.com/pypa/pip/issues/13656>_)
  • Skip redundant work converting version objects to strings when using the importlib.metadata backend. ([#13660](https://github.com/pypa/pip/issues/13660) <https://github.com/pypa/pip/issues/13660>_)
  • Fix pip index versions to honor only-binary/no-binary options. ([#13682](https://github.com/pypa/pip/issues/13682) <https://github.com/pypa/pip/issues/13682>_)
  • Fix fallthrough logic for options, allowing overriding global options with defaults from user config. ([#13703](https://github.com/pypa/pip/issues/13703) <https://github.com/pypa/pip/issues/13703>_)
  • Use a path-segment prefix comparison, not char-by-char. ([#13777](https://github.com/pypa/pip/issues/13777) <https://github.com/pypa/pip/issues/13777>_)

Vendored Libraries

... (truncated)

Commits

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    You can disable automated security fix PRs for this repo from the Security Alerts page.

@dependabot dependabot bot added dependencies Pull requests that update a dependency file python Pull requests that update Python code labels Feb 3, 2026
@dependabot dependabot bot requested a review from a team as a code owner February 3, 2026 00:15
@dependabot dependabot bot added dependencies Pull requests that update a dependency file python Pull requests that update Python code labels Feb 3, 2026
@dataops-ci-bot

This comment has been minimized.

@dependabot dependabot bot force-pushed the dependabot/pip/pip-26.0 branch from 4d067aa to b97f749 Compare February 3, 2026 17:30
@dataops-ci-bot

This comment has been minimized.

@dependabot dependabot bot force-pushed the dependabot/pip/pip-26.0 branch from b97f749 to 65056f2 Compare February 4, 2026 07:15
@dataops-ci-bot

This comment has been minimized.

@dependabot dependabot bot force-pushed the dependabot/pip/pip-26.0 branch from 65056f2 to ab8d69c Compare February 5, 2026 07:16
@dataops-ci-bot

This comment has been minimized.

@dependabot dependabot bot force-pushed the dependabot/pip/pip-26.0 branch from ab8d69c to 4e23c25 Compare February 6, 2026 07:15
@dataops-ci-bot

This comment has been minimized.

@dependabot dependabot bot force-pushed the dependabot/pip/pip-26.0 branch from 4e23c25 to c6a3ef3 Compare February 9, 2026 07:30
@dataops-ci-bot

This comment has been minimized.

@dependabot dependabot bot force-pushed the dependabot/pip/pip-26.0 branch from c6a3ef3 to 2ca5d6a Compare February 10, 2026 07:15
@dataops-ci-bot

This comment has been minimized.

@dependabot dependabot bot force-pushed the dependabot/pip/pip-26.0 branch from 2ca5d6a to 3b2fa7b Compare February 11, 2026 07:15
@dataops-ci-bot

This comment has been minimized.

@dependabot dependabot bot force-pushed the dependabot/pip/pip-26.0 branch from 3b2fa7b to 844d572 Compare February 12, 2026 07:15
@dataops-ci-bot

This comment has been minimized.

Bumps [pip](https://github.com/pypa/pip) from 25.3 to 26.0.
- [Changelog](https://github.com/pypa/pip/blob/main/NEWS.rst)
- [Commits](pypa/pip@25.3...26.0)

---
updated-dependencies:
- dependency-name: pip
  dependency-version: '26.0'
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot bot force-pushed the dependabot/pip/pip-26.0 branch from 844d572 to cd35952 Compare February 13, 2026 07:15
@dataops-ci-bot
Copy link

Integration report for "chore(deps): bump pip from 25.3 to 26.0"

sql.diff

Click to expand!
Only in /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/org_mozilla_firefox_vpn/health: schema.yaml
Only in /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/org_mozilla_focus/broken_site_report: schema.yaml
Only in /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/org_mozilla_focus/metrics: schema.yaml
Only in /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/org_mozilla_focus_beta/activation: schema.yaml
Only in /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/org_mozilla_ios_fennec/events: schema.yaml
Only in /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/org_mozilla_ios_fennec/nimbus: schema.yaml
Only in /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/org_mozilla_ios_fennec/sync: schema.yaml
Only in /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/org_mozilla_ios_fennec/tabs_sync: schema.yaml
Only in /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/org_mozilla_ios_firefox/addresses_sync: schema.yaml
Only in /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/org_mozilla_ios_firefox/logins_sync: schema.yaml
Only in /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/org_mozilla_ios_firefox/sync: schema.yaml
Only in /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/org_mozilla_ios_firefoxbeta/bookmarks_sync: schema.yaml
Only in /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/org_mozilla_ios_firefoxbeta/nimbus: schema.yaml
Only in /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/org_mozilla_ios_firefoxbeta/temp_baseline: schema.yaml
Only in /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/org_mozilla_ios_firefoxvpn/events: schema.yaml
Only in /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/org_mozilla_ios_firefoxvpn/vpnsession: schema.yaml
Only in /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/org_mozilla_ios_lockbox/metrics: schema.yaml
Only in /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/org_mozilla_klar/metrics: schema.yaml
diff -bur --no-dereference --new-file /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/firefox_ios/addresses_sync/schema.yaml /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/firefox_ios/addresses_sync/schema.yaml
--- /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/firefox_ios/addresses_sync/schema.yaml	2026-02-13 07:28:10.000000000 +0000
+++ /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/firefox_ios/addresses_sync/schema.yaml	2026-02-13 07:23:22.000000000 +0000
@@ -7,21 +7,23 @@
   mode: NULLABLE
   type: STRING
   description: Normalized channel name
-- mode: NULLABLE
-  name: additional_properties
+- name: additional_properties
   type: STRING
+  mode: NULLABLE
   description: A JSON string containing any payload properties not present in the
     schema
-- mode: NULLABLE
-  name: client_info
+- name: client_info
   type: RECORD
+  mode: NULLABLE
   fields:
   - name: android_sdk_version
     type: STRING
+    mode: NULLABLE
     description: The optional Android specific SDK version of the software running
       on this hardware device.
   - name: app_build
     type: STRING
+    mode: NULLABLE
     description: The build identifier generated by the CI system (e.g. "1234/A").
       For language bindings that provide automatic detection for this value, (e.g.
       Android/Kotlin), in the unlikely event that the build identifier can not be
@@ -30,89 +32,114 @@
       `Unknown`.
   - name: app_channel
     type: STRING
+    mode: NULLABLE
     description: The channel the application is being distributed on.
   - name: app_display_version
     type: STRING
+    mode: NULLABLE
     description: The user visible version string (e.g. "1.0.3").  In the unlikely
       event that the display version can not be retrieved, it is set to "inaccessible".
   - name: architecture
     type: STRING
+    mode: NULLABLE
     description: The architecture of the device, (e.g. "arm", "x86").
   - name: build_date
     type: STRING
+    mode: NULLABLE
     description: The date & time the application was built
   - name: client_id
     type: STRING
+    mode: NULLABLE
     description: A UUID uniquely identifying the client.
   - name: device_manufacturer
     type: STRING
+    mode: NULLABLE
     description: The manufacturer of the device the application is running on. Not
       set if the device manufacturer can't be determined (e.g. on Desktop).
   - name: device_model
     type: STRING
+    mode: NULLABLE
     description: The model of the device the application is running on. On Android,
       this is Build.MODEL, the user-visible marketing name, like "Pixel 2 XL". Not
       set if the device model can't be determined (e.g. on Desktop).
   - name: first_run_date
     type: STRING
+    mode: NULLABLE
     description: The date of the first run of the application.
   - name: locale
     type: STRING
+    mode: NULLABLE
     description: The locale of the application during initialization (e.g. "es-ES").
       If the locale can't be determined on the system, the value is ["und"](https://unicode.org/reports/tr35/#Unknown_or_Invalid_Identifiers),
       to indicate "undetermined".
   - name: os
     type: STRING
+    mode: NULLABLE
     description: 'The name of the operating system. Possible values: Android, iOS,
       Linux, Darwin, Windows, FreeBSD, NetBSD, OpenBSD, Solaris, unknown'
   - name: os_version
     type: STRING
+    mode: NULLABLE
     description: The user-visible version of the operating system (e.g. "1.2.3").
       If the version detection fails, this metric gets set to `Unknown`.
   - name: telemetry_sdk_build
     type: STRING
+    mode: NULLABLE
     description: The version of the Glean SDK
   - name: windows_build_number
     type: INTEGER
+    mode: NULLABLE
     description: The optional Windows build number, reported by Windows (e.g. 22000)
       and not set for other platforms
   - name: session_count
     type: INTEGER
+    mode: NULLABLE
     description: An optional running counter of the number of sessions for a client.
   - name: session_id
     type: STRING
+    mode: NULLABLE
     description: An optional UUID uniquely identifying the client's current session.
   - name: attribution
     type: RECORD
+    mode: NULLABLE
     fields:
     - name: campaign
       type: STRING
+      mode: NULLABLE
       description: The attribution campaign (e.g. 'mozilla-org').
     - name: content
       type: STRING
+      mode: NULLABLE
       description: The attribution content (e.g. 'firefoxview').
     - name: medium
       type: STRING
+      mode: NULLABLE
       description: The attribution medium (e.g. 'organic' for a search engine).
     - name: source
       type: STRING
+      mode: NULLABLE
       description: The attribution source (e.g. 'google-play').
     - name: term
       type: STRING
+      mode: NULLABLE
       description: The attribution term (e.g. 'browser with developer tools for android').
     - name: ext
       type: JSON
+      mode: NULLABLE
   - name: distribution
     type: RECORD
+    mode: NULLABLE
     fields:
     - name: name
       type: STRING
+      mode: NULLABLE
       description: The distribution name (e.g. 'MozillaOnline').
     - name: ext
       type: JSON
-- mode: NULLABLE
-  name: document_id
+      mode: NULLABLE
+- name: document_id
   type: STRING
+  mode: NULLABLE
   description: The document ID specified in the URI when the client sent this message
 - name: events
   type: RECORD
@@ -120,114 +147,148 @@
   fields:
   - name: category
     type: STRING
+    mode: NULLABLE
   - name: extra
     type: RECORD
     mode: REPEATED
     fields:
     - name: key
       type: STRING
+      mode: NULLABLE
     - name: value
       type: STRING
+      mode: NULLABLE
   - name: name
     type: STRING
+    mode: NULLABLE
   - name: timestamp
     type: INTEGER
-- mode: NULLABLE
-  name: metadata
+    mode: NULLABLE
+- name: metadata
   type: RECORD
+  mode: NULLABLE
   fields:
   - name: geo
     type: RECORD
+    mode: NULLABLE
     fields:
     - name: city
       type: STRING
+      mode: NULLABLE
     - name: country
       type: STRING
+      mode: NULLABLE
       description: An ISO 3166-1 alpha-2 country code
     - name: db_version
       type: STRING
+      mode: NULLABLE
       description: The specific geo database version used for this lookup
     - name: subdivision1
       type: STRING
+      mode: NULLABLE
       description: First major country subdivision, typically a state, province, or
         county
     - name: subdivision2
       type: STRING
+      mode: NULLABLE
       description: Second major country subdivision; not applicable for most countries
     description: Results of a geographic lookup based on the client's IP address
   - name: header
     type: RECORD
+    mode: NULLABLE
     fields:
     - name: date
       type: STRING
+      mode: NULLABLE
       description: Date HTTP header
     - name: dnt
       type: STRING
+      mode: NULLABLE
       description: DNT (Do Not Track) HTTP header
     - name: x_debug_id
       type: STRING
+      mode: NULLABLE
       description: X-Debug-Id HTTP header
     - name: x_foxsec_ip_reputation
       type: STRING
+      mode: NULLABLE
       description: X-Foxsec-IP-Reputation header
     - name: x_lb_tags
       type: STRING
+      mode: NULLABLE
       description: X-LB-Tags HTTP header
     - name: x_pingsender_version
       type: STRING
+      mode: NULLABLE
       description: X-PingSender-Version HTTP header
     - name: x_source_tags
       type: STRING
+      mode: NULLABLE
       description: X-Source-Tags HTTP header
     - name: x_telemetry_agent
       type: STRING
+      mode: NULLABLE
       description: X-Telemetry-Agent HTTP header
     - name: parsed_date
       type: TIMESTAMP
+      mode: NULLABLE
     - name: parsed_x_source_tags
       type: STRING
       mode: REPEATED
     - name: parsed_x_lb_tags
       type: RECORD
+      mode: NULLABLE
       fields:
       - name: tls_version
         type: STRING
+        mode: NULLABLE
       - name: tls_cipher_hex
         type: STRING
+        mode: NULLABLE
     description: Headers included in the client's HTTP request
   - name: isp
     type: RECORD
+    mode: NULLABLE
     fields:
     - name: db_version
       type: STRING
+      mode: NULLABLE
       description: The specific geo ISP database version used for this lookup
     - name: name
       type: STRING
+      mode: NULLABLE
       description: The name of the ISP associated with the client's IP address
     - name: organization
       type: STRING
+      mode: NULLABLE
       description: The name of a specific business entity associated with the client's
         IP address when available; otherwise the ISP name
     description: Results of ISP lookup based on the client's IP address
   - name: user_agent
     type: RECORD
+    mode: NULLABLE
     fields:
     - name: browser
       type: STRING
+      mode: NULLABLE
     - name: os
       type: STRING
+      mode: NULLABLE
     - name: version
       type: STRING
+      mode: NULLABLE
     description: Parsed components of the client's user agent string
-- mode: NULLABLE
-  name: metrics
+- name: metrics
   type: RECORD
+  mode: NULLABLE
   fields:
   - name: counter
     type: RECORD
+    mode: NULLABLE
     fields:
     - name: addresses_sync_outgoing_batches
       type: INTEGER
+      mode: NULLABLE
       description: 'Records the number of batches needed to upload all outgoing records.
         The Sync server has a hard limit on the number of records (and request body
         bytes) on the number of records that can fit into a single batch, and large
@@ -236,6 +297,7 @@
         '
     - name: addresses_sync_v2_outgoing_batches
       type: INTEGER
+      mode: NULLABLE
       description: 'Records the number of batches needed to upload all outgoing records.
         The Sync server has a hard limit on the number of records (and request body
         bytes) on the number of records that can fit into a single batch, and large
@@ -244,39 +306,49 @@
         '
   - name: datetime
     type: RECORD
+    mode: NULLABLE
     fields:
     - name: addresses_sync_finished_at
       type: TIMESTAMP
+      mode: NULLABLE
       description: 'Records when the addresses sync finished. This includes the time
         to download, apply, and upload all records.
 
         '
     - name: raw_addresses_sync_finished_at
       type: STRING
+      mode: NULLABLE
     - name: addresses_sync_started_at
       type: TIMESTAMP
+      mode: NULLABLE
       description: 'Records when the addresses sync started.
 
         '
     - name: raw_addresses_sync_started_at
       type: STRING
+      mode: NULLABLE
     - name: addresses_sync_v2_finished_at
       type: TIMESTAMP
+      mode: NULLABLE
       description: 'Records when the addresses sync finished. This includes the time
         to download, apply, and upload all records.
 
         '
     - name: raw_addresses_sync_v2_finished_at
       type: STRING
+      mode: NULLABLE
     - name: addresses_sync_v2_started_at
       type: TIMESTAMP
+      mode: NULLABLE
       description: 'Records when the addresses sync started.
 
         '
     - name: raw_addresses_sync_v2_started_at
       type: STRING
+      mode: NULLABLE
   - name: labeled_counter
     type: RECORD
+    mode: NULLABLE
     fields:
     - name: addresses_sync_incoming
       type: RECORD
@@ -284,8 +356,10 @@
       fields:
       - name: key
         type: STRING
+        mode: NULLABLE
       - name: value
         type: INTEGER
+        mode: NULLABLE
       description: 'Records incoming addresses record counts. `applied` is the number
         of incoming records that were successfully stored or updated in the local
         database. `failed_to_apply` is the number of records that were ignored due
@@ -298,8 +372,10 @@
       fields:
       - name: key
         type: STRING
+        mode: NULLABLE
       - name: value
         type: INTEGER
+        mode: NULLABLE
       description: 'Records outgoing addresses record counts. `uploaded` is the number
         of records that were successfully sent to the server. `failed_to_upload` is
         the number of records that weren''t uploaded, and will be retried on the next
@@ -312,8 +388,10 @@
       fields:
       - name: key
         type: STRING
+        mode: NULLABLE
       - name: value
         type: INTEGER
+        mode: NULLABLE
       description: 'Records incoming addresses record counts. `applied` is the number
         of incoming records that were successfully stored or updated in the local
         database. `failed_to_apply` is the number of records that were ignored due
@@ -326,8 +404,10 @@
       fields:
       - name: key
         type: STRING
+        mode: NULLABLE
       - name: value
         type: INTEGER
+        mode: NULLABLE
       description: 'Records outgoing addresses record counts. `uploaded` is the number
         of records that were successfully sent to the server. `failed_to_upload` is
         the number of records that weren''t uploaded, and will be retried on the next
@@ -340,8 +420,10 @@
       fields:
       - name: key
         type: STRING
+        mode: NULLABLE
       - name: value
         type: INTEGER
+        mode: NULLABLE
       description: 'Counts the number of times a metric was set with an invalid label.
 
         The labels are the `category.name` identifier of the metric.
@@ -353,8 +435,10 @@
       fields:
       - name: key
         type: STRING
+        mode: NULLABLE
       - name: value
         type: INTEGER
+        mode: NULLABLE
       description: 'Counts the number of times a metric was set a value that overflowed.
 
         The labels are the `category.name` identifier of the metric.
@@ -366,8 +450,10 @@
       fields:
       - name: key
         type: STRING
+        mode: NULLABLE
       - name: value
         type: INTEGER
+        mode: NULLABLE
       description: 'Counts the number of times a timing metric was used incorrectly.
 
         The labels are the `category.name` identifier of the metric.
@@ -379,8 +465,10 @@
       fields:
       - name: key
         type: STRING
+        mode: NULLABLE
       - name: value
         type: INTEGER
+        mode: NULLABLE
       description: 'Counts the number of times a metric was set to an invalid value.
 
         The labels are the `category.name` identifier of the metric.
@@ -388,6 +476,7 @@
         '
   - name: labeled_string
     type: RECORD
+    mode: NULLABLE
     fields:
     - name: addresses_sync_failure_reason
       type: RECORD
@@ -395,8 +484,10 @@
       fields:
       - name: key
         type: STRING
+        mode: NULLABLE
       - name: value
         type: STRING
+        mode: NULLABLE
       description: 'Records why the addresses sync failed: either due to an authentication
         error, unexpected exception, or other error. The error strings are truncated
         and sanitized to omit PII, like URLs and file system paths.
@@ -408,8 +499,10 @@
       fields:
       - name: key
         type: STRING
+        mode: NULLABLE
       - name: value
         type: STRING
+        mode: NULLABLE
       description: 'Records why the addresses sync failed: either due to an authentication
         error, unexpected exception, or other error. The error strings are truncated
         and sanitized to omit PII, like URLs and file system paths.
@@ -417,19 +510,23 @@
         '
   - name: string
     type: RECORD
+    mode: NULLABLE
     fields:
     - name: addresses_sync_uid
       type: STRING
+      mode: NULLABLE
       description: 'The user''s hashed Firefox Account ID.
 
         '
     - name: addresses_sync_v2_uid
       type: STRING
+      mode: NULLABLE
       description: 'The user''s hashed Firefox Account ID.
 
         '
     - name: glean_client_annotation_experimentation_id
       type: STRING
+      mode: NULLABLE
       description: 'An experimentation identifier derived and provided by the application
 
         for the purpose of experimentation enrollment.
@@ -437,79 +534,93 @@
         '
   - name: string_list
     type: RECORD
+    mode: NULLABLE
     fields:
     - name: glean_ping_uploader_capabilities
       type: STRING
       mode: REPEATED
-- mode: NULLABLE
-  name: normalized_app_name
+- name: normalized_app_name
   type: STRING
+  mode: NULLABLE
   description: Set to "Other" if this message contained an unrecognized app name
-- mode: NULLABLE
-  name: normalized_country_code
+- name: normalized_country_code
   type: STRING
+  mode: NULLABLE
   description: An ISO 3166-1 alpha-2 country code
-- mode: NULLABLE
-  name: normalized_os
+- name: normalized_os
   type: STRING
+  mode: NULLABLE
   description: Set to "Other" if this message contained an unrecognized OS name
-- mode: NULLABLE
-  name: normalized_os_version
+- name: normalized_os_version
   type: STRING
-- mode: NULLABLE
-  name: ping_info
+  mode: NULLABLE
+- name: ping_info
   type: RECORD
+  mode: NULLABLE
   fields:
   - name: end_time
     type: STRING
+    mode: NULLABLE
   - name: experiments
     type: RECORD
     mode: REPEATED
     fields:
     - name: key
       type: STRING
+      mode: NULLABLE
     - name: value
       type: RECORD
+      mode: NULLABLE
       fields:
       - name: branch
         type: STRING
+        mode: NULLABLE
       - name: extra
         type: RECORD
+        mode: NULLABLE
         fields:
         - name: enrollment_id
           type: STRING
+          mode: NULLABLE
         - name: type
           type: STRING
+          mode: NULLABLE
   - name: ping_type
     type: STRING
+    mode: NULLABLE
   - name: reason
     type: STRING
+    mode: NULLABLE
   - name: seq
     type: INTEGER
+    mode: NULLABLE
   - name: start_time
     type: STRING
+    mode: NULLABLE
   - name: parsed_start_time
     type: TIMESTAMP
+    mode: NULLABLE
   - name: parsed_end_time
     type: TIMESTAMP
-- mode: NULLABLE
-  name: sample_id
+    mode: NULLABLE
+- name: sample_id
   type: INTEGER
+  mode: NULLABLE
   description: Hashed version of client_id (if present) useful for partitioning; ranges
     from 0 to 99
-- mode: NULLABLE
-  name: submission_timestamp
+- name: submission_timestamp
   type: TIMESTAMP
+  mode: NULLABLE
   description: Time when the ingestion edge server accepted this message
-- mode: NULLABLE
-  name: app_version_major
+- name: app_version_major
   type: NUMERIC
-- mode: NULLABLE
-  name: app_version_minor
+  mode: NULLABLE
+- name: app_version_minor
   type: NUMERIC
-- mode: NULLABLE
-  name: app_version_patch
+  mode: NULLABLE
+- name: app_version_patch
   type: NUMERIC
-- mode: NULLABLE
-  name: is_bot_generated
+  mode: NULLABLE
+- name: is_bot_generated
   type: BOOLEAN
+  mode: NULLABLE
diff -bur --no-dereference --new-file /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/firefox_ios/addresses_sync/view.sql /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/firefox_ios/addresses_sync/view.sql
--- /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/firefox_ios/addresses_sync/view.sql	2026-02-13 07:28:10.000000000 +0000
+++ /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/firefox_ios/addresses_sync/view.sql	2026-02-13 07:23:22.000000000 +0000
@@ -64,82 +64,10 @@
   "org_mozilla_ios_firefoxbeta" AS normalized_app_id,
   "beta" AS normalized_channel,
   additional_properties,
-  STRUCT(
-    client_info.android_sdk_version,
-    client_info.app_build,
-    client_info.app_channel,
-    client_info.app_display_version,
-    client_info.architecture,
-    client_info.build_date,
-    client_info.client_id,
-    client_info.device_manufacturer,
-    client_info.device_model,
-    client_info.first_run_date,
-    client_info.locale,
-    client_info.os,
-    client_info.os_version,
-    client_info.telemetry_sdk_build,
-    client_info.windows_build_number,
-    client_info.session_count,
-    client_info.session_id,
-    STRUCT(
-      client_info.attribution.campaign,
-      client_info.attribution.content,
-      client_info.attribution.medium,
-      client_info.attribution.source,
-      client_info.attribution.term,
-      client_info.attribution.ext
-    ) AS `attribution`,
-    STRUCT(client_info.distribution.name, client_info.distribution.ext) AS `distribution`
-  ) AS `client_info`,
+  client_info,
   document_id,
-  ARRAY(
-    SELECT
-      STRUCT(
-        events.category,
-        ARRAY(
-          SELECT
-            STRUCT(extra.key, extra.value)
-          FROM
-            UNNEST(events.extra) AS `extra`
-        ) AS `extra`,
-        events.name,
-        events.timestamp
-      )
-    FROM
-      UNNEST(events) AS `events`
-  ) AS `events`,
-  STRUCT(
-    STRUCT(
-      metadata.geo.city,
-      metadata.geo.country,
-      metadata.geo.db_version,
-      metadata.geo.subdivision1,
-      metadata.geo.subdivision2
-    ) AS `geo`,
-    STRUCT(
-      metadata.header.date,
-      metadata.header.dnt,
-      metadata.header.x_debug_id,
-      metadata.header.x_foxsec_ip_reputation,
-      metadata.header.x_lb_tags,
-      metadata.header.x_pingsender_version,
-      metadata.header.x_source_tags,
-      metadata.header.x_telemetry_agent,
-      metadata.header.parsed_date,
-      metadata.header.parsed_x_source_tags,
-      STRUCT(
-        metadata.header.parsed_x_lb_tags.tls_version,
-        metadata.header.parsed_x_lb_tags.tls_cipher_hex
-      ) AS `parsed_x_lb_tags`
-    ) AS `header`,
-    STRUCT(metadata.isp.db_version, metadata.isp.name, metadata.isp.organization) AS `isp`,
-    STRUCT(
-      metadata.user_agent.browser,
-      metadata.user_agent.os,
-      metadata.user_agent.version
-    ) AS `user_agent`
-  ) AS `metadata`,
+  events,
+  metadata,
   STRUCT(
     STRUCT(
       metrics.counter.addresses_sync_outgoing_batches,
@@ -156,74 +84,18 @@
       metrics.datetime.raw_addresses_sync_v2_started_at
     ) AS `datetime`,
     STRUCT(
-      ARRAY(
-        SELECT
-          STRUCT(addresses_sync_incoming.key, addresses_sync_incoming.value)
-        FROM
-          UNNEST(metrics.labeled_counter.addresses_sync_incoming) AS `addresses_sync_incoming`
-      ) AS `addresses_sync_incoming`,
-      ARRAY(
-        SELECT
-          STRUCT(addresses_sync_outgoing.key, addresses_sync_outgoing.value)
-        FROM
-          UNNEST(metrics.labeled_counter.addresses_sync_outgoing) AS `addresses_sync_outgoing`
-      ) AS `addresses_sync_outgoing`,
-      ARRAY(
-        SELECT
-          STRUCT(addresses_sync_v2_incoming.key, addresses_sync_v2_incoming.value)
-        FROM
-          UNNEST(metrics.labeled_counter.addresses_sync_v2_incoming) AS `addresses_sync_v2_incoming`
-      ) AS `addresses_sync_v2_incoming`,
-      ARRAY(
-        SELECT
-          STRUCT(addresses_sync_v2_outgoing.key, addresses_sync_v2_outgoing.value)
-        FROM
-          UNNEST(metrics.labeled_counter.addresses_sync_v2_outgoing) AS `addresses_sync_v2_outgoing`
-      ) AS `addresses_sync_v2_outgoing`,
-      ARRAY(
-        SELECT
-          STRUCT(glean_error_invalid_label.key, glean_error_invalid_label.value)
-        FROM
-          UNNEST(metrics.labeled_counter.glean_error_invalid_label) AS `glean_error_invalid_label`
-      ) AS `glean_error_invalid_label`,
-      ARRAY(
-        SELECT
-          STRUCT(glean_error_invalid_overflow.key, glean_error_invalid_overflow.value)
-        FROM
-          UNNEST(
-            metrics.labeled_counter.glean_error_invalid_overflow
-          ) AS `glean_error_invalid_overflow`
-      ) AS `glean_error_invalid_overflow`,
-      ARRAY(
-        SELECT
-          STRUCT(glean_error_invalid_state.key, glean_error_invalid_state.value)
-        FROM
-          UNNEST(metrics.labeled_counter.glean_error_invalid_state) AS `glean_error_invalid_state`
-      ) AS `glean_error_invalid_state`,
-      ARRAY(
-        SELECT
-          STRUCT(glean_error_invalid_value.key, glean_error_invalid_value.value)
-        FROM
-          UNNEST(metrics.labeled_counter.glean_error_invalid_value) AS `glean_error_invalid_value`
-      ) AS `glean_error_invalid_value`
+      metrics.labeled_counter.addresses_sync_incoming,
+      metrics.labeled_counter.addresses_sync_outgoing,
+      metrics.labeled_counter.addresses_sync_v2_incoming,
+      metrics.labeled_counter.addresses_sync_v2_outgoing,
+      metrics.labeled_counter.glean_error_invalid_label,
+      metrics.labeled_counter.glean_error_invalid_overflow,
+      metrics.labeled_counter.glean_error_invalid_state,
+      metrics.labeled_counter.glean_error_invalid_value
     ) AS `labeled_counter`,
     STRUCT(
-      ARRAY(
-        SELECT
-          STRUCT(addresses_sync_failure_reason.key, addresses_sync_failure_reason.value)
-        FROM
-          UNNEST(
-            metrics.labeled_string.addresses_sync_failure_reason
-          ) AS `addresses_sync_failure_reason`
-      ) AS `addresses_sync_failure_reason`,
-      ARRAY(
-        SELECT
-          STRUCT(addresses_sync_v2_failure_reason.key, addresses_sync_v2_failure_reason.value)
-        FROM
-          UNNEST(
+      metrics.labeled_string.addresses_sync_failure_reason,
             metrics.labeled_string.addresses_sync_v2_failure_reason
-          ) AS `addresses_sync_v2_failure_reason`
-      ) AS `addresses_sync_v2_failure_reason`
     ) AS `labeled_string`,
     STRUCT(
       metrics.string.addresses_sync_uid,
@@ -236,27 +108,7 @@
   normalized_country_code,
   normalized_os,
   normalized_os_version,
-  STRUCT(
-    ping_info.end_time,
-    ARRAY(
-      SELECT
-        STRUCT(
-          experiments.key,
-          STRUCT(
-            experiments.value.branch,
-            STRUCT(experiments.value.extra.enrollment_id, experiments.value.extra.type) AS `extra`
-          ) AS `value`
-        )
-      FROM
-        UNNEST(ping_info.experiments) AS `experiments`
-    ) AS `experiments`,
-    ping_info.ping_type,
-    ping_info.reason,
-    ping_info.seq,
-    ping_info.start_time,
-    ping_info.parsed_start_time,
-    ping_info.parsed_end_time
-  ) AS `ping_info`,
+  ping_info,
   sample_id,
   submission_timestamp,
   app_version_major,
@@ -270,82 +122,10 @@
   "org_mozilla_ios_fennec" AS normalized_app_id,
   "nightly" AS normalized_channel,
   additional_properties,
-  STRUCT(
-    client_info.android_sdk_version,
-    client_info.app_build,
-    client_info.app_channel,
-    client_info.app_display_version,
-    client_info.architecture,
-    client_info.build_date,
-    client_info.client_id,
-    client_info.device_manufacturer,
-    client_info.device_model,
-    client_info.first_run_date,
-    client_info.locale,
-    client_info.os,
-    client_info.os_version,
-    client_info.telemetry_sdk_build,
-    client_info.windows_build_number,
-    client_info.session_count,
-    client_info.session_id,
-    STRUCT(
-      client_info.attribution.campaign,
-      client_info.attribution.content,
-      client_info.attribution.medium,
-      client_info.attribution.source,
-      client_info.attribution.term,
-      client_info.attribution.ext
-    ) AS `attribution`,
-    STRUCT(client_info.distribution.name, client_info.distribution.ext) AS `distribution`
-  ) AS `client_info`,
+  client_info,
   document_id,
-  ARRAY(
-    SELECT
-      STRUCT(
-        events.category,
-        ARRAY(
-          SELECT
-            STRUCT(extra.key, extra.value)
-          FROM
-            UNNEST(events.extra) AS `extra`
-        ) AS `extra`,
-        events.name,
-        events.timestamp
-      )
-    FROM
-      UNNEST(events) AS `events`
-  ) AS `events`,
-  STRUCT(
-    STRUCT(
-      metadata.geo.city,
-      metadata.geo.country,
-      metadata.geo.db_version,
-      metadata.geo.subdivision1,
-      metadata.geo.subdivision2
-    ) AS `geo`,
-    STRUCT(
-      metadata.header.date,
-      metadata.header.dnt,
-      metadata.header.x_debug_id,
-      metadata.header.x_foxsec_ip_reputation,
-      metadata.header.x_lb_tags,
-      metadata.header.x_pingsender_version,
-      metadata.header.x_source_tags,
-      metadata.header.x_telemetry_agent,
-      metadata.header.parsed_date,
-      metadata.header.parsed_x_source_tags,
-      STRUCT(
-        metadata.header.parsed_x_lb_tags.tls_version,
-        metadata.header.parsed_x_lb_tags.tls_cipher_hex
-      ) AS `parsed_x_lb_tags`
-    ) AS `header`,
-    STRUCT(metadata.isp.db_version, metadata.isp.name, metadata.isp.organization) AS `isp`,
-    STRUCT(
-      metadata.user_agent.browser,
-      metadata.user_agent.os,
-      metadata.user_agent.version
-    ) AS `user_agent`
-  ) AS `metadata`,
+  events,
+  metadata,
   STRUCT(
     STRUCT(
       metrics.counter.addresses_sync_outgoing_batches,
@@ -362,74 +142,18 @@
       metrics.datetime.raw_addresses_sync_v2_started_at
     ) AS `datetime`,
     STRUCT(
-      ARRAY(
-        SELECT
-          STRUCT(addresses_sync_incoming.key, addresses_sync_incoming.value)
-        FROM
-          UNNEST(metrics.labeled_counter.addresses_sync_incoming) AS `addresses_sync_incoming`
-      ) AS `addresses_sync_incoming`,
-      ARRAY(
-        SELECT
-          STRUCT(addresses_sync_outgoing.key, addresses_sync_outgoing.value)
-        FROM
-          UNNEST(metrics.labeled_counter.addresses_sync_outgoing) AS `addresses_sync_outgoing`
-      ) AS `addresses_sync_outgoing`,
-      ARRAY(
-        SELECT
-          STRUCT(addresses_sync_v2_incoming.key, addresses_sync_v2_incoming.value)
-        FROM
-          UNNEST(metrics.labeled_counter.addresses_sync_v2_incoming) AS `addresses_sync_v2_incoming`
-      ) AS `addresses_sync_v2_incoming`,
-      ARRAY(
-        SELECT
-          STRUCT(addresses_sync_v2_outgoing.key, addresses_sync_v2_outgoing.value)
-        FROM
-          UNNEST(metrics.labeled_counter.addresses_sync_v2_outgoing) AS `addresses_sync_v2_outgoing`
-      ) AS `addresses_sync_v2_outgoing`,
-      ARRAY(
-        SELECT
-          STRUCT(glean_error_invalid_label.key, glean_error_invalid_label.value)
-        FROM
-          UNNEST(metrics.labeled_counter.glean_error_invalid_label) AS `glean_error_invalid_label`
-      ) AS `glean_error_invalid_label`,
-      ARRAY(
-        SELECT
-          STRUCT(glean_error_invalid_overflow.key, glean_error_invalid_overflow.value)
-        FROM
-          UNNEST(
-            metrics.labeled_counter.glean_error_invalid_overflow
-          ) AS `glean_error_invalid_overflow`
-      ) AS `glean_error_invalid_overflow`,
-      ARRAY(
-        SELECT
-          STRUCT(glean_error_invalid_state.key, glean_error_invalid_state.value)
-        FROM
-          UNNEST(metrics.labeled_counter.glean_error_invalid_state) AS `glean_error_invalid_state`
-      ) AS `glean_error_invalid_state`,
-      ARRAY(
-        SELECT
-          STRUCT(glean_error_invalid_value.key, glean_error_invalid_value.value)
-        FROM
-          UNNEST(metrics.labeled_counter.glean_error_invalid_value) AS `glean_error_invalid_value`
-      ) AS `glean_error_invalid_value`
+      metrics.labeled_counter.addresses_sync_incoming,
+      metrics.labeled_counter.addresses_sync_outgoing,
+      metrics.labeled_counter.addresses_sync_v2_incoming,
+      metrics.labeled_counter.addresses_sync_v2_outgoing,
+      metrics.labeled_counter.glean_error_invalid_label,
+      metrics.labeled_counter.glean_error_invalid_overflow,
+      metrics.labeled_counter.glean_error_invalid_state,
+      metrics.labeled_counter.glean_error_invalid_value
     ) AS `labeled_counter`,
     STRUCT(
-      ARRAY(
-        SELECT
-          STRUCT(addresses_sync_failure_reason.key, addresses_sync_failure_reason.value)
-        FROM
-          UNNEST(
-            metrics.labeled_string.addresses_sync_failure_reason
-          ) AS `addresses_sync_failure_reason`
-      ) AS `addresses_sync_failure_reason`,
-      ARRAY(
-        SELECT
-          STRUCT(addresses_sync_v2_failure_reason.key, addresses_sync_v2_failure_reason.value)
-        FROM
-          UNNEST(
+      metrics.labeled_string.addresses_sync_failure_reason,
             metrics.labeled_string.addresses_sync_v2_failure_reason
-          ) AS `addresses_sync_v2_failure_reason`
-      ) AS `addresses_sync_v2_failure_reason`
     ) AS `labeled_string`,
     STRUCT(
       metrics.string.addresses_sync_uid,
@@ -442,27 +166,7 @@
   normalized_country_code,
   normalized_os,
   normalized_os_version,
-  STRUCT(
-    ping_info.end_time,
-    ARRAY(
-      SELECT
-        STRUCT(
-          experiments.key,
-          STRUCT(
-            experiments.value.branch,
-            STRUCT(experiments.value.extra.enrollment_id, experiments.value.extra.type) AS `extra`
-          ) AS `value`
-        )
-      FROM
-        UNNEST(ping_info.experiments) AS `experiments`
-    ) AS `experiments`,
-    ping_info.ping_type,
-    ping_info.reason,
-    ping_info.seq,
-    ping_info.start_time,
-    ping_info.parsed_start_time,
-    ping_info.parsed_end_time
-  ) AS `ping_info`,
+  ping_info,
   sample_id,
   submission_timestamp,
   app_version_major,
diff -bur --no-dereference --new-file /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/firefox_ios/bookmarks_sync/view.sql /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/firefox_ios/bookmarks_sync/view.sql
--- /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/firefox_ios/bookmarks_sync/view.sql	2026-02-13 07:28:10.000000000 +0000
+++ /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/firefox_ios/bookmarks_sync/view.sql	2026-02-13 07:23:30.000000000 +0000
@@ -67,10 +67,82 @@
   "org_mozilla_ios_firefoxbeta" AS normalized_app_id,
   "beta" AS normalized_channel,
   additional_properties,
-  client_info,
+  STRUCT(
+    client_info.android_sdk_version,
+    client_info.app_build,
+    client_info.app_channel,
+    client_info.app_display_version,
+    client_info.architecture,
+    client_info.build_date,
+    client_info.client_id,
+    client_info.device_manufacturer,
+    client_info.device_model,
+    client_info.first_run_date,
+    client_info.locale,
+    client_info.os,
+    client_info.os_version,
+    client_info.telemetry_sdk_build,
+    client_info.windows_build_number,
+    client_info.session_count,
+    client_info.session_id,
+    STRUCT(
+      client_info.attribution.campaign,
+      client_info.attribution.content,
+      client_info.attribution.medium,
+      client_info.attribution.source,
+      client_info.attribution.term,
+      client_info.attribution.ext
+    ) AS `attribution`,
+    STRUCT(client_info.distribution.name, client_info.distribution.ext) AS `distribution`
+  ) AS `client_info`,
   document_id,
-  events,
-  metadata,
+  ARRAY(
+    SELECT
+      STRUCT(
+        events.category,
+        ARRAY(
+          SELECT
+            STRUCT(extra.key, extra.value)
+          FROM
+            UNNEST(events.extra) AS `extra`
+        ) AS `extra`,
+        events.name,
+        events.timestamp
+      )
+    FROM
+      UNNEST(events) AS `events`
+  ) AS `events`,
+  STRUCT(
+    STRUCT(
+      metadata.geo.city,
+      metadata.geo.country,
+      metadata.geo.db_version,
+      metadata.geo.subdivision1,
+      metadata.geo.subdivision2
+    ) AS `geo`,
+    STRUCT(
+      metadata.header.date,
+      metadata.header.dnt,
+      metadata.header.x_debug_id,
+      metadata.header.x_foxsec_ip_reputation,
+      metadata.header.x_lb_tags,
+      metadata.header.x_pingsender_version,
+      metadata.header.x_source_tags,
+      metadata.header.x_telemetry_agent,
+      metadata.header.parsed_date,
+      metadata.header.parsed_x_source_tags,
+      STRUCT(
+        metadata.header.parsed_x_lb_tags.tls_version,
+        metadata.header.parsed_x_lb_tags.tls_cipher_hex
+      ) AS `parsed_x_lb_tags`
+    ) AS `header`,
+    STRUCT(metadata.isp.db_version, metadata.isp.name, metadata.isp.organization) AS `isp`,
+    STRUCT(
+      metadata.user_agent.browser,
+      metadata.user_agent.os,
+      metadata.user_agent.version
+    ) AS `user_agent`
+  ) AS `metadata`,
   STRUCT(
     STRUCT(
       metrics.counter.bookmarks_sync_outgoing_batches,
@@ -87,20 +159,93 @@
       metrics.datetime.raw_bookmarks_sync_v2_started_at
     ) AS `datetime`,
     STRUCT(
-      metrics.labeled_counter.bookmarks_sync_incoming,
-      metrics.labeled_counter.bookmarks_sync_outgoing,
-      metrics.labeled_counter.bookmarks_sync_remote_tree_problems,
-      metrics.labeled_counter.bookmarks_sync_v2_incoming,
-      metrics.labeled_counter.bookmarks_sync_v2_outgoing,
-      metrics.labeled_counter.bookmarks_sync_v2_remote_tree_problems,
-      metrics.labeled_counter.glean_error_invalid_label,
-      metrics.labeled_counter.glean_error_invalid_overflow,
-      metrics.labeled_counter.glean_error_invalid_state,
-      metrics.labeled_counter.glean_error_invalid_value
+      ARRAY(
+        SELECT
+          STRUCT(bookmarks_sync_incoming.key, bookmarks_sync_incoming.value)
+        FROM
+          UNNEST(metrics.labeled_counter.bookmarks_sync_incoming) AS `bookmarks_sync_incoming`
+      ) AS `bookmarks_sync_incoming`,
+      ARRAY(
+        SELECT
+          STRUCT(bookmarks_sync_outgoing.key, bookmarks_sync_outgoing.value)
+        FROM
+          UNNEST(metrics.labeled_counter.bookmarks_sync_outgoing) AS `bookmarks_sync_outgoing`
+      ) AS `bookmarks_sync_outgoing`,
+      ARRAY(
+        SELECT
+          STRUCT(bookmarks_sync_remote_tree_problems.key, bookmarks_sync_remote_tree_problems.value)
+        FROM
+          UNNEST(
+            metrics.labeled_counter.bookmarks_sync_remote_tree_problems
+          ) AS `bookmarks_sync_remote_tree_problems`
+      ) AS `bookmarks_sync_remote_tree_problems`,
+      ARRAY(
+        SELECT
+          STRUCT(bookmarks_sync_v2_incoming.key, bookmarks_sync_v2_incoming.value)
+        FROM
+          UNNEST(metrics.labeled_counter.bookmarks_sync_v2_incoming) AS `bookmarks_sync_v2_incoming`
+      ) AS `bookmarks_sync_v2_incoming`,
+      ARRAY(
+        SELECT
+          STRUCT(bookmarks_sync_v2_outgoing.key, bookmarks_sync_v2_outgoing.value)
+        FROM
+          UNNEST(metrics.labeled_counter.bookmarks_sync_v2_outgoing) AS `bookmarks_sync_v2_outgoing`
+      ) AS `bookmarks_sync_v2_outgoing`,
+      ARRAY(
+        SELECT
+          STRUCT(
+            bookmarks_sync_v2_remote_tree_problems.key,
+            bookmarks_sync_v2_remote_tree_problems.value
+          )
+        FROM
+          UNNEST(
+            metrics.labeled_counter.bookmarks_sync_v2_remote_tree_problems
+          ) AS `bookmarks_sync_v2_remote_tree_problems`
+      ) AS `bookmarks_sync_v2_remote_tree_problems`,
+      ARRAY(
+        SELECT
+          STRUCT(glean_error_invalid_label.key, glean_error_invalid_label.value)
+        FROM
+          UNNEST(metrics.labeled_counter.glean_error_invalid_label) AS `glean_error_invalid_label`
+      ) AS `glean_error_invalid_label`,
+      ARRAY(
+        SELECT
+          STRUCT(glean_error_invalid_overflow.key, glean_error_invalid_overflow.value)
+        FROM
+          UNNEST(
+            metrics.labeled_counter.glean_error_invalid_overflow
+          ) AS `glean_error_invalid_overflow`
+      ) AS `glean_error_invalid_overflow`,
+      ARRAY(
+        SELECT
+          STRUCT(glean_error_invalid_state.key, glean_error_invalid_state.value)
+        FROM
+          UNNEST(metrics.labeled_counter.glean_error_invalid_state) AS `glean_error_invalid_state`
+      ) AS `glean_error_invalid_state`,
+      ARRAY(
+        SELECT
+          STRUCT(glean_error_invalid_value.key, glean_error_invalid_value.value)
+        FROM
+          UNNEST(metrics.labeled_counter.glean_error_invalid_value) AS `glean_error_invalid_value`
+      ) AS `glean_error_invalid_value`
     ) AS `labeled_counter`,
     STRUCT(
-      metrics.labeled_string.bookmarks_sync_failure_reason,
+      ARRAY(
+        SELECT
+          STRUCT(bookmarks_sync_failure_reason.key, bookmarks_sync_failure_reason.value)
+        FROM
+          UNNEST(
+            metrics.labeled_string.bookmarks_sync_failure_reason
+          ) AS `bookmarks_sync_failure_reason`
+      ) AS `bookmarks_sync_failure_reason`,
+      ARRAY(
+        SELECT
+          STRUCT(bookmarks_sync_v2_failure_reason.key, bookmarks_sync_v2_failure_reason.value)
+        FROM
+          UNNEST(
       metrics.labeled_string.bookmarks_sync_v2_failure_reason
+          ) AS `bookmarks_sync_v2_failure_reason`
+      ) AS `bookmarks_sync_v2_failure_reason`
     ) AS `labeled_string`,
     STRUCT(
       metrics.string.bookmarks_sync_uid,
@@ -114,7 +259,27 @@
   normalized_country_code,
   normalized_os,
   normalized_os_version,
-  ping_info,
+  STRUCT(
+    ping_info.end_time,
+    ARRAY(
+      SELECT
+        STRUCT(
+          experiments.key,
+          STRUCT(
+            experiments.value.branch,
+            STRUCT(experiments.value.extra.enrollment_id, experiments.value.extra.type) AS `extra`
+          ) AS `value`
+        )
+      FROM
+        UNNEST(ping_info.experiments) AS `experiments`
+    ) AS `experiments`,
+    ping_info.ping_type,
+    ping_info.reason,
+    ping_info.seq,
+    ping_info.start_time,
+    ping_info.parsed_start_time,
+    ping_info.parsed_end_time
+  ) AS `ping_info`,
   sample_id,
   submission_timestamp,
   app_version_major,
diff -bur --no-dereference --new-file /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/firefox_ios/events/view.sql /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/firefox_ios/events/view.sql
--- /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/firefox_ios/events/view.sql	2026-02-13 07:28:10.000000000 +0000
+++ /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/firefox_ios/events/view.sql	2026-02-13 07:23:32.000000000 +0000
@@ -82,17 +82,121 @@
   "org_mozilla_ios_fennec" AS normalized_app_id,
   "nightly" AS normalized_channel,
   additional_properties,
-  client_info,
+  STRUCT(
+    client_info.android_sdk_version,
+    client_info.app_build,
+    client_info.app_channel,
+    client_info.app_display_version,
+    client_info.architecture,
+    client_info.client_id,
+    client_info.device_manufacturer,
+    client_info.device_model,
+    client_info.first_run_date,
+    client_info.locale,
+    client_info.os,
+    client_info.os_version,
+    client_info.telemetry_sdk_build,
+    client_info.build_date,
+    client_info.windows_build_number,
+    client_info.session_count,
+    client_info.session_id,
+    STRUCT(
+      client_info.attribution.campaign,
+      client_info.attribution.content,
+      client_info.attribution.medium,
+      client_info.attribution.source,
+      client_info.attribution.term,
+      client_info.attribution.ext
+    ) AS `attribution`,
+    STRUCT(client_info.distribution.name, client_info.distribution.ext) AS `distribution`
+  ) AS `client_info`,
   document_id,
-  events,
-  metadata,
+  ARRAY(
+    SELECT
+      STRUCT(
+        events.category,
+        ARRAY(
+          SELECT
+            STRUCT(extra.key, extra.value)
+          FROM
+            UNNEST(events.extra) AS `extra`
+        ) AS `extra`,
+        events.name,
+        events.timestamp
+      )
+    FROM
+      UNNEST(events) AS `events`
+  ) AS `events`,
+  STRUCT(
+    STRUCT(
+      metadata.geo.city,
+      metadata.geo.country,
+      metadata.geo.db_version,
+      metadata.geo.subdivision1,
+      metadata.geo.subdivision2
+    ) AS `geo`,
+    STRUCT(
+      metadata.header.date,
+      metadata.header.dnt,
+      metadata.header.x_debug_id,
+      metadata.header.x_pingsender_version,
+      metadata.header.x_source_tags,
+      metadata.header.x_telemetry_agent,
+      metadata.header.x_foxsec_ip_reputation,
+      metadata.header.x_lb_tags,
+      metadata.header.parsed_date,
+      metadata.header.parsed_x_source_tags,
   STRUCT(
+        metadata.header.parsed_x_lb_tags.tls_version,
+        metadata.header.parsed_x_lb_tags.tls_cipher_hex
+      ) AS `parsed_x_lb_tags`
+    ) AS `header`,
+    STRUCT(metadata.isp.db_version, metadata.isp.name, metadata.isp.organization) AS `isp`,
     STRUCT(
-      metrics.labeled_counter.glean_error_invalid_label,
-      metrics.labeled_counter.glean_error_invalid_overflow,
-      metrics.labeled_counter.glean_error_invalid_state,
-      metrics.labeled_counter.glean_error_invalid_value,
+      metadata.user_agent.browser,
+      metadata.user_agent.os,
+      metadata.user_agent.version
+    ) AS `user_agent`
+  ) AS `metadata`,
+  STRUCT(
+    STRUCT(
+      ARRAY(
+        SELECT
+          STRUCT(glean_error_invalid_label.key, glean_error_invalid_label.value)
+        FROM
+          UNNEST(metrics.labeled_counter.glean_error_invalid_label) AS `glean_error_invalid_label`
+      ) AS `glean_error_invalid_label`,
+      ARRAY(
+        SELECT
+          STRUCT(glean_error_invalid_overflow.key, glean_error_invalid_overflow.value)
+        FROM
+          UNNEST(
+            metrics.labeled_counter.glean_error_invalid_overflow
+          ) AS `glean_error_invalid_overflow`
+      ) AS `glean_error_invalid_overflow`,
+      ARRAY(
+        SELECT
+          STRUCT(glean_error_invalid_state.key, glean_error_invalid_state.value)
+        FROM
+          UNNEST(metrics.labeled_counter.glean_error_invalid_state) AS `glean_error_invalid_state`
+      ) AS `glean_error_invalid_state`,
+      ARRAY(
+        SELECT
+          STRUCT(glean_error_invalid_value.key, glean_error_invalid_value.value)
+        FROM
+          UNNEST(metrics.labeled_counter.glean_error_invalid_value) AS `glean_error_invalid_value`
+      ) AS `glean_error_invalid_value`,
+      ARRAY(
+        SELECT
+          STRUCT(
+            inactive_tabs_tray_toggle_inactive_tab_tray.key,
+            inactive_tabs_tray_toggle_inactive_tab_tray.value
+          )
+        FROM
+          UNNEST(
       metrics.labeled_counter.inactive_tabs_tray_toggle_inactive_tab_tray
+          ) AS `inactive_tabs_tray_toggle_inactive_tab_tray`
+      ) AS `inactive_tabs_tray_toggle_inactive_tab_tray`
     ) AS `labeled_counter`,
     STRUCT(
       metrics.counter.firefox_home_page_history_highlights_item_opened,
@@ -106,7 +210,27 @@
   normalized_country_code,
   normalized_os,
   normalized_os_version,
-  ping_info,
+  STRUCT(
+    ping_info.end_time,
+    ARRAY(
+      SELECT
+        STRUCT(
+          experiments.key,
+          STRUCT(
+            experiments.value.branch,
+            STRUCT(experiments.value.extra.type, experiments.value.extra.enrollment_id) AS `extra`
+          ) AS `value`
+        )
+      FROM
+        UNNEST(ping_info.experiments) AS `experiments`
+    ) AS `experiments`,
+    ping_info.ping_type,
+    ping_info.reason,
+    ping_info.seq,
+    ping_info.start_time,
+    ping_info.parsed_start_time,
+    ping_info.parsed_end_time
+  ) AS `ping_info`,
   sample_id,
   submission_timestamp,
   app_version_major,
diff -bur --no-dereference --new-file /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/firefox_ios/logins_sync/schema.yaml /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/firefox_ios/logins_sync/schema.yaml
--- /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/firefox_ios/logins_sync/schema.yaml	2026-02-13 07:28:10.000000000 +0000
+++ /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/firefox_ios/logins_sync/schema.yaml	2026-02-13 07:23:24.000000000 +0000
@@ -7,21 +7,23 @@
   mode: NULLABLE
   type: STRING
   description: Normalized channel name
-- mode: NULLABLE
-  name: additional_properties
+- name: additional_properties
   type: STRING
+  mode: NULLABLE
   description: A JSON string containing any payload properties not present in the
     schema
-- mode: NULLABLE
-  name: client_info
+- name: client_info
   type: RECORD
+  mode: NULLABLE
   fields:
   - name: android_sdk_version
     type: STRING
+    mode: NULLABLE
     description: The optional Android specific SDK version of the software running
       on this hardware device.
   - name: app_build
     type: STRING
+    mode: NULLABLE
     description: The build identifier generated by the CI system (e.g. "1234/A").
       For language bindings that provide automatic detection for this value, (e.g.
       Android/Kotlin), in the unlikely event that the build identifier can not be
@@ -30,89 +32,114 @@
       `Unknown`.
   - name: app_channel
     type: STRING
+    mode: NULLABLE
     description: The channel the application is being distributed on.
   - name: app_display_version
     type: STRING
+    mode: NULLABLE
     description: The user visible version string (e.g. "1.0.3").  In the unlikely
       event that the display version can not be retrieved, it is set to "inaccessible".
   - name: architecture
     type: STRING
+    mode: NULLABLE
     description: The architecture of the device, (e.g. "arm", "x86").
   - name: build_date
     type: STRING
+    mode: NULLABLE
     description: The date & time the application was built
   - name: client_id
     type: STRING
+    mode: NULLABLE
     description: A UUID uniquely identifying the client.
   - name: device_manufacturer
     type: STRING
+    mode: NULLABLE
     description: The manufacturer of the device the application is running on. Not
       set if the device manufacturer can't be determined (e.g. on Desktop).
   - name: device_model
     type: STRING
+    mode: NULLABLE
     description: The model of the device the application is running on. On Android,
       this is Build.MODEL, the user-visible marketing name, like "Pixel 2 XL". Not
       set if the device model can't be determined (e.g. on Desktop).
   - name: first_run_date
     type: STRING
+    mode: NULLABLE
     description: The date of the first run of the application.
   - name: locale
     type: STRING
+    mode: NULLABLE
     description: The locale of the application during initialization (e.g. "es-ES").
       If the locale can't be determined on the system, the value is ["und"](https://unicode.org/reports/tr35/#Unknown_or_Invalid_Identifiers),
       to indicate "undetermined".
   - name: os
     type: STRING
+    mode: NULLABLE
     description: 'The name of the operating system. Possible values: Android, iOS,
       Linux, Darwin, Windows, FreeBSD, NetBSD, OpenBSD, Solaris, unknown'
   - name: os_version
     type: STRING
+    mode: NULLABLE
     description: The user-visible version of the operating system (e.g. "1.2.3").
       If the version detection fails, this metric gets set to `Unknown`.
   - name: telemetry_sdk_build
     type: STRING
+    mode: NULLABLE
     description: The version of the Glean SDK
   - name: windows_build_number
     type: INTEGER
+    mode: NULLABLE
     description: The optional Windows build number, reported by Windows (e.g. 22000)
       and not set for other platforms
   - name: session_count
     type: INTEGER
+    mode: NULLABLE
     description: An optional running counter of the number of sessions for a client.
   - name: session_id
     type: STRING
+    mode: NULLABLE
     description: An optional UUID uniquely identifying the client's current session.
   - name: attribution
     type: RECORD
+    mode: NULLABLE
     fields:
     - name: campaign
       type: STRING
+      mode: NULLABLE
       description: The attribution campaign (e.g. 'mozilla-org').
     - name: content
       type: STRING
+      mode: NULLABLE
       description: The attribution content (e.g. 'firefoxview').
     - name: medium
       type: STRING
+      mode: NULLABLE
       description: The attribution medium (e.g. 'organic' for a search engine).
     - name: source
       type: STRING
+      mode: NULLABLE
       description: The attribution source (e.g. 'google-play').
     - name: term
       type: STRING
+      mode: NULLABLE
       description: The attribution term (e.g. 'browser with developer tools for android').
     - name: ext
       type: JSON
+      mode: NULLABLE
   - name: distribution
     type: RECORD
+    mode: NULLABLE
     fields:
     - name: name
       type: STRING
+      mode: NULLABLE
       description: The distribution name (e.g. 'MozillaOnline').
     - name: ext
       type: JSON
-- mode: NULLABLE
-  name: document_id
+      mode: NULLABLE
+- name: document_id
   type: STRING
+  mode: NULLABLE
   description: The document ID specified in the URI when the client sent this message
 - name: events
   type: RECORD
@@ -120,114 +147,148 @@
   fields:
   - name: category
     type: STRING
+    mode: NULLABLE
   - name: extra
     type: RECORD
     mode: REPEATED
     fields:
     - name: key
       type: STRING
+      mode: NULLABLE
     - name: value
       type: STRING
+      mode: NULLABLE
   - name: name
     type: STRING
+    mode: NULLABLE
   - name: timestamp
     type: INTEGER
-- mode: NULLABLE
-  name: metadata
+    mode: NULLABLE
+- name: metadata
   type: RECORD
+  mode: NULLABLE
   fields:
   - name: geo
     type: RECORD
+    mode: NULLABLE
     fields:
     - name: city
       type: STRING
+      mode: NULLABLE
     - name: country
       type: STRING
+      mode: NULLABLE
       description: An ISO 3166-1 alpha-2 country code
     - name: db_version
       type: STRING
+      mode: NULLABLE
       description: The specific geo database version used for this lookup
     - name: subdivision1
       type: STRING
+      mode: NULLABLE
       description: First major country subdivision, typically a state, province, or
         county
     - name: subdivision2
       type: STRING
+      mode: NULLABLE
       description: Second major country subdivision; not applicable for most countries
     description: Results of a geographic lookup based on the client's IP address
   - name: header
     type: RECORD
+    mode: NULLABLE
     fields:
     - name: date
       type: STRING
+      mode: NULLABLE
       description: Date HTTP header
     - name: dnt
       type: STRING
+      mode: NULLABLE
       description: DNT (Do Not Track) HTTP header
     - name: x_debug_id
       type: STRING
+      mode: NULLABLE
       description: X-Debug-Id HTTP header
     - name: x_foxsec_ip_reputation
       type: STRING
+      mode: NULLABLE
       description: X-Foxsec-IP-Reputation header
     - name: x_lb_tags
       type: STRING
+      mode: NULLABLE
       description: X-LB-Tags HTTP header
     - name: x_pingsender_version
       type: STRING
+      mode: NULLABLE
       description: X-PingSender-Version HTTP header
     - name: x_source_tags
       type: STRING
+      mode: NULLABLE
       description: X-Source-Tags HTTP header
     - name: x_telemetry_agent
       type: STRING
+      mode: NULLABLE
       description: X-Telemetry-Agent HTTP header
     - name: parsed_date
       type: TIMESTAMP
+      mode: NULLABLE
     - name: parsed_x_source_tags
       type: STRING
       mode: REPEATED
     - name: parsed_x_lb_tags
       type: RECORD
+      mode: NULLABLE
       fields:
       - name: tls_version
         type: STRING
+        mode: NULLABLE
       - name: tls_cipher_hex
         type: STRING
+        mode: NULLABLE
     description: Headers included in the client's HTTP request
   - name: isp
     type: RECORD
+    mode: NULLABLE
     fields:
     - name: db_version
       type: STRING
+      mode: NULLABLE
       description: The specific geo ISP database version used for this lookup
     - name: name
       type: STRING
+      mode: NULLABLE
       description: The name of the ISP associated with the client's IP address
     - name: organization
       type: STRING
+      mode: NULLABLE
       description: The name of a specific business entity associated with the client's
         IP address when available; otherwise the ISP name
     description: Results of ISP lookup based on the client's IP address
   - name: user_agent
     type: RECORD
+    mode: NULLABLE
     fields:
     - name: browser
       type: STRING
+      mode: NULLABLE
     - name: os
       type: STRING
+      mode: NULLABLE
     - name: version
       type: STRING
+      mode: NULLABLE
     description: Parsed components of the client's user agent string
-- mode: NULLABLE
-  name: metrics
+- name: metrics
   type: RECORD
+  mode: NULLABLE
   fields:
   - name: counter
     type: RECORD
+    mode: NULLABLE
     fields:
     - name: logins_sync_outgoing_batches
       type: INTEGER
+      mode: NULLABLE
       description: 'Records the number of batches needed to upload all outgoing records.
         The Sync server has a hard limit on the number of records (and request body
         bytes) on the number of records that can fit into a single batch, and large
@@ -236,6 +297,7 @@
         '
     - name: logins_sync_v2_outgoing_batches
       type: INTEGER
+      mode: NULLABLE
       description: 'Records the number of batches needed to upload all outgoing records.
         The Sync server has a hard limit on the number of records (and request body
         bytes) on the number of records that can fit into a single batch, and large
@@ -244,39 +306,49 @@
         '
   - name: datetime
     type: RECORD
+    mode: NULLABLE
     fields:
     - name: logins_sync_finished_at
       type: TIMESTAMP
+      mode: NULLABLE
       description: 'Records when the passwords sync finished. This includes the time
         to download, apply, and upload all records.
 
         '
     - name: raw_logins_sync_finished_at
       type: STRING
+      mode: NULLABLE
     - name: logins_sync_started_at
       type: TIMESTAMP
+      mode: NULLABLE
       description: 'Records when the passwords sync started.
 
         '
     - name: raw_logins_sync_started_at
       type: STRING
+      mode: NULLABLE
     - name: logins_sync_v2_finished_at
       type: TIMESTAMP
+      mode: NULLABLE
       description: 'Records when the passwords sync finished. This includes the time
         to download, apply, and upload all records.
 
         '
     - name: raw_logins_sync_v2_finished_at
       type: STRING
+      mode: NULLABLE
     - name: logins_sync_v2_started_at
       type: TIMESTAMP
+      mode: NULLABLE
       description: 'Records when the passwords sync started.
 
         '
     - name: raw_logins_sync_v2_started_at
       type: STRING
+      mode: NULLABLE
   - name: labeled_counter
     type: RECORD
+    mode: NULLABLE
     fields:
     - name: glean_error_invalid_label
       type: RECORD
@@ -284,8 +356,10 @@
       fields:
       - name: key
         type: STRING
+        mode: NULLABLE
       - name: value
         type: INTEGER
+        mode: NULLABLE
       description: 'Counts the number of times a metric was set with an invalid label.
 
         The labels are the `category.name` identifier of the metric.
@@ -297,8 +371,10 @@
       fields:
       - name: key
         type: STRING
+        mode: NULLABLE
       - name: value
         type: INTEGER
+        mode: NULLABLE
       description: 'Counts the number of times a metric was set a value that overflowed.
 
         The labels are the `category.name` identifier of the metric.
@@ -310,8 +386,10 @@
       fields:
       - name: key
         type: STRING
+        mode: NULLABLE
       - name: value
         type: INTEGER
+        mode: NULLABLE
       description: 'Counts the number of times a timing metric was used incorrectly.
 
         The labels are the `category.name` identifier of the metric.
@@ -323,8 +401,10 @@
       fields:
       - name: key
         type: STRING
+        mode: NULLABLE
       - name: value
         type: INTEGER
+        mode: NULLABLE
       description: 'Counts the number of times a metric was set to an invalid value.
 
         The labels are the `category.name` identifier of the metric.
@@ -336,8 +416,10 @@
       fields:
       - name: key
         type: STRING
+        mode: NULLABLE
       - name: value
         type: INTEGER
+        mode: NULLABLE
       description: 'Records incoming passwords record counts. `applied` is the number
         of incoming passwords entries that were successfully stored or updated in
         the local database. `failed_to_apply` is the number of entries that were ignored
@@ -351,8 +433,10 @@
       fields:
       - name: key
         type: STRING
+        mode: NULLABLE
       - name: value
         type: INTEGER
+        mode: NULLABLE
       description: 'Records outgoing passwords record counts. `uploaded` is the number
         of records that were successfully sent to the server. `failed_to_upload` is
         the number of records that weren''t uploaded, and will be retried on the next
@@ -365,8 +449,10 @@
       fields:
       - name: key
         type: STRING
+        mode: NULLABLE
       - name: value
         type: INTEGER
+        mode: NULLABLE
       description: 'Records incoming passwords record counts. `applied` is the number
         of incoming passwords entries that were successfully stored or updated in
         the local database. `failed_to_apply` is the number of entries that were ignored
@@ -380,8 +466,10 @@
       fields:
       - name: key
         type: STRING
+        mode: NULLABLE
       - name: value
         type: INTEGER
+        mode: NULLABLE
       description: 'Records outgoing passwords record counts. `uploaded` is the number
         of records that were successfully sent to the server. `failed_to_upload` is
         the number of records that weren''t uploaded, and will be retried on the next
@@ -390,6 +478,7 @@
         '
   - name: labeled_string
     type: RECORD
+    mode: NULLABLE
     fields:
     - name: logins_sync_failure_reason
       type: RECORD
@@ -397,8 +486,10 @@
       fields:
       - name: key
         type: STRING
+        mode: NULLABLE
       - name: value
         type: STRING
+        mode: NULLABLE
       description: 'Records why the passwords sync failed: either due to an authentication
         error, unexpected exception, or other error. The error strings are truncated
         and sanitized to omit PII, like usernames and passwords.
@@ -410,8 +501,10 @@
       fields:
       - name: key
         type: STRING
+        mode: NULLABLE
       - name: value
         type: STRING
+        mode: NULLABLE
       description: 'Records why the passwords sync failed: either due to an authentication
         error, unexpected exception, or other error. The error strings are truncated
         and sanitized to omit PII, like usernames and passwords.
@@ -419,19 +512,23 @@
         '
   - name: string
     type: RECORD
+    mode: NULLABLE
     fields:
     - name: logins_sync_uid
       type: STRING
+      mode: NULLABLE
       description: 'The user''s hashed Firefox Account ID.
 
         '
     - name: logins_sync_v2_uid
       type: STRING
+      mode: NULLABLE
       description: 'The user''s hashed Firefox Account ID.
 
         '
     - name: glean_client_annotation_experimentation_id
       type: STRING
+      mode: NULLABLE
       description: 'An experimentation identifier derived and provided by the application
 
       

⚠️ Only part of the diff is displayed.

Link to full diff

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file python Pull requests that update Python code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant