[L] Change in dart/sdk[main]: [dart2wasm] Catch JS exceptions with the right tag, improve toString ...

0 views
Skip to first unread message

Ömer Ağacan (Gerrit)

unread,
Dec 18, 2025, 11:15:04 AM (3 days ago) Dec 18
to Nate Biggs, Martin Kustermann, dart2wasm-t...@google.com, rev...@dartlang.org
Attention needed from Martin Kustermann and Nate Biggs

Ömer Ağacan added 1 comment

File pkg/dart2wasm/lib/tags.dart
Line 46, Patchset 15 (Latest): return translator.mainModule.tags.import('WebAssembly', 'JSTag', tagType);
Ömer Ağacan . unresolved

There seems to be some code that messes with the import name here. @nate...@google.com do you know which code this may be? Example error: https://logs.chromium.org/logs/dart/buildbucket/cr-buildbucket/8695131615160763905/+/u/test_results/new_test_failures__logs_

Open in Gerrit

Related details

Attention is currently required from:
  • Martin Kustermann
  • Nate Biggs
Submit Requirements:
  • requirement satisfiedCode-Owners
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: sdk
Gerrit-Branch: main
Gerrit-Change-Id: Ia9347e938af209b8b87752479d35b6236f721acf
Gerrit-Change-Number: 469062
Gerrit-PatchSet: 15
Gerrit-Owner: Ömer Ağacan <ome...@google.com>
Gerrit-Reviewer: Martin Kustermann <kuste...@google.com>
Gerrit-Reviewer: Nate Biggs <nate...@google.com>
Gerrit-Attention: Martin Kustermann <kuste...@google.com>
Gerrit-Attention: Nate Biggs <nate...@google.com>
Gerrit-Comment-Date: Thu, 18 Dec 2025 16:14:59 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
satisfied_requirement
unsatisfied_requirement
open
diffy

Nate Biggs (Gerrit)

unread,
Dec 18, 2025, 9:36:44 PM (3 days ago) Dec 18
to Ömer Ağacan, Martin Kustermann, dart2wasm-t...@google.com, rev...@dartlang.org
Attention needed from Martin Kustermann and Ömer Ağacan

Nate Biggs added 1 comment

File pkg/dart2wasm/lib/tags.dart
Line 46, Patchset 15 (Latest): return translator.mainModule.tags.import('WebAssembly', 'JSTag', tagType);
Ömer Ağacan . unresolved

There seems to be some code that messes with the import name here. @nate...@google.com do you know which code this may be? Example error: https://logs.chromium.org/logs/dart/buildbucket/cr-buildbucket/8695131615160763905/+/u/test_results/new_test_failures__logs_

Nate Biggs

`_importedTags` is a `WasmTagImporter` which will try to minify names (if minification is enabled):
https://github.com/dart-lang/sdk/blob/main/pkg/dart2wasm/lib/translator.dart#L3221

You actually probably don't want to use the Importer here. The Importer is meant to help import/export from other Dart modules (e.g. for deferred loading). It maps "defined" entities to their "imports" in other modules.

So I think it would make sense to just keep a separate `Map<w.ModuleBuilder, w.ImportedTag>` here that tracks the imported tag entity for each module:
```
late final w.FunctionType _exnTagType = translator.typesBuilder
.defineFunction(const [w.RefType.extern(nullable: true)], const []);
w.Tag getJsExceptionTag(w.ModuleBuilder module) => _jsTagsByModule[module] ??=
_defineJsExceptionTag(module);
w.ImportedTag _defineJsExceptionTag(w.ModuleBuilder module) {
return module.tags.import('WebAssembly', 'JSTag', _exnTagType);
}
```
Open in Gerrit

Related details

Attention is currently required from:
  • Martin Kustermann
  • Ömer Ağacan
Submit Requirements:
  • requirement satisfiedCode-Owners
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: sdk
Gerrit-Branch: main
Gerrit-Change-Id: Ia9347e938af209b8b87752479d35b6236f721acf
Gerrit-Change-Number: 469062
Gerrit-PatchSet: 15
Gerrit-Owner: Ömer Ağacan <ome...@google.com>
Gerrit-Reviewer: Martin Kustermann <kuste...@google.com>
Gerrit-Reviewer: Nate Biggs <nate...@google.com>
Gerrit-Attention: Ömer Ağacan <ome...@google.com>
Gerrit-Attention: Martin Kustermann <kuste...@google.com>
Gerrit-Comment-Date: Fri, 19 Dec 2025 02:36:41 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: Ömer Ağacan <ome...@google.com>
satisfied_requirement
unsatisfied_requirement
open
diffy

Nate Biggs (Gerrit)

unread,
Dec 18, 2025, 10:03:16 PM (3 days ago) Dec 18
to Ömer Ağacan, Martin Kustermann, dart2wasm-t...@google.com, rev...@dartlang.org
Attention needed from Martin Kustermann and Ömer Ağacan

Nate Biggs added 1 comment

Patchset-level comments
File-level comment, Patchset 15 (Latest):
Nate Biggs . unresolved

As this is, I think this will break Flutter apps.

The Flutter JS fallback logic isn't checking that these instructions are supported. So someone on an older browser might load a Flutter app and get served WASM that their browser can't execute.

Same thing for another framework like Jaspr, they all need to update their fallback logic to account for this.

Part of this is updating the `support.js` we emit. But I think Flutter might not be using that file so we should be careful there.

Open in Gerrit

Related details

Attention is currently required from:
  • Martin Kustermann
  • Ömer Ağacan
Submit Requirements:
  • requirement satisfiedCode-Owners
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: sdk
Gerrit-Branch: main
Gerrit-Change-Id: Ia9347e938af209b8b87752479d35b6236f721acf
Gerrit-Change-Number: 469062
Gerrit-PatchSet: 15
Gerrit-Owner: Ömer Ağacan <ome...@google.com>
Gerrit-Reviewer: Martin Kustermann <kuste...@google.com>
Gerrit-Reviewer: Nate Biggs <nate...@google.com>
Gerrit-Attention: Ömer Ağacan <ome...@google.com>
Gerrit-Attention: Martin Kustermann <kuste...@google.com>
Gerrit-Comment-Date: Fri, 19 Dec 2025 03:03:13 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
satisfied_requirement
unsatisfied_requirement
open
diffy

Nate Biggs (Gerrit)

unread,
Dec 18, 2025, 10:40:28 PM (3 days ago) Dec 18
to Ömer Ağacan, Martin Kustermann, dart2wasm-t...@google.com, rev...@dartlang.org
Attention needed from Martin Kustermann and Ömer Ağacan

Nate Biggs added 4 comments

Patchset-level comments
Nate Biggs . unresolved

As this is, I think this will break Flutter apps.

The Flutter JS fallback logic isn't checking that these instructions are supported. So someone on an older browser might load a Flutter app and get served WASM that their browser can't execute.

Same thing for another framework like Jaspr, they all need to update their fallback logic to account for this.

Part of this is updating the `support.js` we emit. But I think Flutter might not be using that file so we should be careful there.

Nate Biggs

I guess there isn't any new instruction here per se but there is a new type. Same argument still applies I think.

File pkg/dart2wasm/lib/code_generator.dart
Line 1010, Patchset 15 (Latest): b.ref_as_non_null();
Nate Biggs . unresolved

See below about making `javaScriptErrorStackTraceGetter` return non-nullable value. Should be able to delete this cast.

File pkg/dart2wasm/lib/tags.dart
Line 46, Patchset 15 (Latest): return translator.mainModule.tags.import('WebAssembly', 'JSTag', tagType);
Ömer Ağacan . unresolved

There seems to be some code that messes with the import name here. @nate...@google.com do you know which code this may be? Example error: https://logs.chromium.org/logs/dart/buildbucket/cr-buildbucket/8695131615160763905/+/u/test_results/new_test_failures__logs_

Nate Biggs

`_importedTags` is a `WasmTagImporter` which will try to minify names (if minification is enabled):
https://github.com/dart-lang/sdk/blob/main/pkg/dart2wasm/lib/translator.dart#L3221

You actually probably don't want to use the Importer here. The Importer is meant to help import/export from other Dart modules (e.g. for deferred loading). It maps "defined" entities to their "imports" in other modules.

So I think it would make sense to just keep a separate `Map<w.ModuleBuilder, w.ImportedTag>` here that tracks the imported tag entity for each module:
```
late final w.FunctionType _exnTagType = translator.typesBuilder
.defineFunction(const [w.RefType.extern(nullable: true)], const []);
w.Tag getJsExceptionTag(w.ModuleBuilder module) => _jsTagsByModule[module] ??=
_defineJsExceptionTag(module);
w.ImportedTag _defineJsExceptionTag(w.ModuleBuilder module) {
return module.tags.import('WebAssembly', 'JSTag', _exnTagType);
}
```
Nate Biggs

This also requires making sure all the other module instantiation points are passing in the WebAssembly object. I think most are via `baseImports` in `runtime_blob.dart`. But it seems like the dynamic module instantiation might not be (see line 243 in `runtime_blob.dart`).

File sdk/lib/_internal/wasm/lib/errors_patch.dart
Line 70, Patchset 15 (Latest): StackTrace? get stackTrace =>
Nate Biggs . unresolved

Can we type this as non-nullable? It should be okay if an override has a narrower type (i.e. without null).

Open in Gerrit

Related details

Attention is currently required from:
  • Martin Kustermann
  • Ömer Ağacan
Submit Requirements:
  • requirement satisfiedCode-Owners
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: sdk
Gerrit-Branch: main
Gerrit-Change-Id: Ia9347e938af209b8b87752479d35b6236f721acf
Gerrit-Change-Number: 469062
Gerrit-PatchSet: 15
Gerrit-Owner: Ömer Ağacan <ome...@google.com>
Gerrit-Reviewer: Martin Kustermann <kuste...@google.com>
Gerrit-Reviewer: Nate Biggs <nate...@google.com>
Gerrit-Attention: Ömer Ağacan <ome...@google.com>
Gerrit-Attention: Martin Kustermann <kuste...@google.com>
Gerrit-Comment-Date: Fri, 19 Dec 2025 03:40:25 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: Ömer Ağacan <ome...@google.com>
Comment-In-Reply-To: Nate Biggs <nate...@google.com>
satisfied_requirement
unsatisfied_requirement
open
diffy

Ömer Ağacan (Gerrit)

unread,
Dec 19, 2025, 3:55:46 AM (3 days ago) Dec 19
to Nate Biggs, Martin Kustermann, dart2wasm-t...@google.com, rev...@dartlang.org
Attention needed from Martin Kustermann and Nate Biggs

Ömer Ağacan added 3 comments

Patchset-level comments

As this is, I think this will break Flutter apps.

The Flutter JS fallback logic isn't checking that these instructions are supported. So someone on an older browser might load a Flutter app and get served WASM that their browser can't execute.

Same thing for another framework like Jaspr, they all need to update their fallback logic to account for this.

Part of this is updating the `support.js` we emit. But I think Flutter might not be using that file so we should be careful there.

Nate Biggs

I guess there isn't any new instruction here per se but there is a new type. Same argument still applies I think.

Ömer Ağacan

There are no new stuff in this CL. The new instructions are in another CL.

The only new thing in terms of Wasm features in this CL is the new tag that we import. It's not a feature on its own and there's no easy way to find out when browsers added that tag, but given that it's a part of the legacy exception handling I think it should be safe to assume that most browsers should be supporting the new tag for a while now.

File pkg/dart2wasm/lib/code_generator.dart
Line 1010, Patchset 15: b.ref_as_non_null();
Nate Biggs . resolved

See below about making `javaScriptErrorStackTraceGetter` return non-nullable value. Should be able to delete this cast.

Ömer Ağacan

I updated its type but it's an override so its type doesn't change.

File sdk/lib/_internal/wasm/lib/errors_patch.dart
Line 70, Patchset 15: StackTrace? get stackTrace =>
Nate Biggs . resolved

Can we type this as non-nullable? It should be okay if an override has a narrower type (i.e. without null).

Ömer Ağacan

Done

Open in Gerrit

Related details

Attention is currently required from:
  • Martin Kustermann
  • Nate Biggs
Submit Requirements:
  • requirement satisfiedCode-Owners
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: sdk
Gerrit-Branch: main
Gerrit-Change-Id: Ia9347e938af209b8b87752479d35b6236f721acf
Gerrit-Change-Number: 469062
Gerrit-PatchSet: 15
Gerrit-Owner: Ömer Ağacan <ome...@google.com>
Gerrit-Reviewer: Martin Kustermann <kuste...@google.com>
Gerrit-Reviewer: Nate Biggs <nate...@google.com>
Gerrit-Attention: Martin Kustermann <kuste...@google.com>
Gerrit-Attention: Nate Biggs <nate...@google.com>
Gerrit-Comment-Date: Fri, 19 Dec 2025 08:55:40 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: Nate Biggs <nate...@google.com>
satisfied_requirement
unsatisfied_requirement
open
diffy

Ömer Ağacan (Gerrit)

unread,
Dec 19, 2025, 4:59:22 AM (3 days ago) Dec 19
to Nate Biggs, Martin Kustermann, dart2wasm-t...@google.com, rev...@dartlang.org
Attention needed from Martin Kustermann and Nate Biggs

Ömer Ağacan added 1 comment

File pkg/dart2wasm/lib/tags.dart
Line 46, Patchset 15: return translator.mainModule.tags.import('WebAssembly', 'JSTag', tagType);
Ömer Ağacan . unresolved

There seems to be some code that messes with the import name here. @nate...@google.com do you know which code this may be? Example error: https://logs.chromium.org/logs/dart/buildbucket/cr-buildbucket/8695131615160763905/+/u/test_results/new_test_failures__logs_

Nate Biggs

`_importedTags` is a `WasmTagImporter` which will try to minify names (if minification is enabled):
https://github.com/dart-lang/sdk/blob/main/pkg/dart2wasm/lib/translator.dart#L3221

You actually probably don't want to use the Importer here. The Importer is meant to help import/export from other Dart modules (e.g. for deferred loading). It maps "defined" entities to their "imports" in other modules.

So I think it would make sense to just keep a separate `Map<w.ModuleBuilder, w.ImportedTag>` here that tracks the imported tag entity for each module:
```
late final w.FunctionType _exnTagType = translator.typesBuilder
.defineFunction(const [w.RefType.extern(nullable: true)], const []);
w.Tag getJsExceptionTag(w.ModuleBuilder module) => _jsTagsByModule[module] ??=
_defineJsExceptionTag(module);
w.ImportedTag _defineJsExceptionTag(w.ModuleBuilder module) {
return module.tags.import('WebAssembly', 'JSTag', _exnTagType);
}
```
Nate Biggs

This also requires making sure all the other module instantiation points are passing in the WebAssembly object. I think most are via `baseImports` in `runtime_blob.dart`. But it seems like the dynamic module instantiation might not be (see line 243 in `runtime_blob.dart`).

Ömer Ağacan

We could use the importer and import from the main module, or import directly.

  • The main module could export the imported `WebAssembly.JSTag` tag with a minified name and others could import.
  • Or each module could import `WebAssembly.JSTag`.

I think the first option should generate smaller binaries. "WebAssembly" (11 bytes) and "JSTag" (5 bytes) are 16 bytes in total. It could reduce to two bytes when imported from the main module.

Main module will also have to export the tag so that'll add a few bytes, but it's one time cost for the whole package (unlike imports which will be in many or maybe even most of the modules).

Rest of the encoding should be the same in both cases (the function type needs to be defined in each of the modules).

I think this code already implements the first option, but there should be some bug when splitting modules because the tag is being imported in submodules even when they're never used in the submodules. I'll investigate.

Open in Gerrit

Related details

Attention is currently required from:
  • Martin Kustermann
  • Nate Biggs
Submit Requirements:
  • requirement satisfiedCode-Owners
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: sdk
Gerrit-Branch: main
Gerrit-Change-Id: Ia9347e938af209b8b87752479d35b6236f721acf
Gerrit-Change-Number: 469062
Gerrit-PatchSet: 16
Gerrit-Owner: Ömer Ağacan <ome...@google.com>
Gerrit-Reviewer: Martin Kustermann <kuste...@google.com>
Gerrit-Reviewer: Nate Biggs <nate...@google.com>
Gerrit-Attention: Martin Kustermann <kuste...@google.com>
Gerrit-Attention: Nate Biggs <nate...@google.com>
Gerrit-Comment-Date: Fri, 19 Dec 2025 09:59:16 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
satisfied_requirement
unsatisfied_requirement
open
diffy

Ömer Ağacan (Gerrit)

unread,
Dec 19, 2025, 5:37:04 AM (2 days ago) Dec 19
to Nate Biggs, Martin Kustermann, dart2wasm-t...@google.com, rev...@dartlang.org
Attention needed from Martin Kustermann and Nate Biggs

Ömer Ağacan added 1 comment

File pkg/dart2wasm/lib/tags.dart
Line 46, Patchset 15: return translator.mainModule.tags.import('WebAssembly', 'JSTag', tagType);
Ömer Ağacan . resolved

There seems to be some code that messes with the import name here. @nate...@google.com do you know which code this may be? Example error: https://logs.chromium.org/logs/dart/buildbucket/cr-buildbucket/8695131615160763905/+/u/test_results/new_test_failures__logs_

Nate Biggs

`_importedTags` is a `WasmTagImporter` which will try to minify names (if minification is enabled):
https://github.com/dart-lang/sdk/blob/main/pkg/dart2wasm/lib/translator.dart#L3221

You actually probably don't want to use the Importer here. The Importer is meant to help import/export from other Dart modules (e.g. for deferred loading). It maps "defined" entities to their "imports" in other modules.

So I think it would make sense to just keep a separate `Map<w.ModuleBuilder, w.ImportedTag>` here that tracks the imported tag entity for each module:
```
late final w.FunctionType _exnTagType = translator.typesBuilder
.defineFunction(const [w.RefType.extern(nullable: true)], const []);
w.Tag getJsExceptionTag(w.ModuleBuilder module) => _jsTagsByModule[module] ??=
_defineJsExceptionTag(module);
w.ImportedTag _defineJsExceptionTag(w.ModuleBuilder module) {
return module.tags.import('WebAssembly', 'JSTag', _exnTagType);
}
```
Nate Biggs

This also requires making sure all the other module instantiation points are passing in the WebAssembly object. I think most are via `baseImports` in `runtime_blob.dart`. But it seems like the dynamic module instantiation might not be (see line 243 in `runtime_blob.dart`).

Ömer Ağacan

We could use the importer and import from the main module, or import directly.

  • The main module could export the imported `WebAssembly.JSTag` tag with a minified name and others could import.
  • Or each module could import `WebAssembly.JSTag`.

I think the first option should generate smaller binaries. "WebAssembly" (11 bytes) and "JSTag" (5 bytes) are 16 bytes in total. It could reduce to two bytes when imported from the main module.

Main module will also have to export the tag so that'll add a few bytes, but it's one time cost for the whole package (unlike imports which will be in many or maybe even most of the modules).

Rest of the encoding should be the same in both cases (the function type needs to be defined in each of the modules).

I think this code already implements the first option, but there should be some bug when splitting modules because the tag is being imported in submodules even when they're never used in the submodules. I'll investigate.

Ömer Ağacan

Done

Open in Gerrit

Related details

Attention is currently required from:
  • Martin Kustermann
  • Nate Biggs
Submit Requirements:
  • requirement satisfiedCode-Owners
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: sdk
Gerrit-Branch: main
Gerrit-Change-Id: Ia9347e938af209b8b87752479d35b6236f721acf
Gerrit-Change-Number: 469062
Gerrit-PatchSet: 17
Gerrit-Owner: Ömer Ağacan <ome...@google.com>
Gerrit-Reviewer: Martin Kustermann <kuste...@google.com>
Gerrit-Reviewer: Nate Biggs <nate...@google.com>
Gerrit-Attention: Martin Kustermann <kuste...@google.com>
Gerrit-Attention: Nate Biggs <nate...@google.com>
Gerrit-Comment-Date: Fri, 19 Dec 2025 10:37:00 +0000
satisfied_requirement
unsatisfied_requirement
open
diffy

Nate Biggs (Gerrit)

unread,
Dec 19, 2025, 11:44:54 AM (2 days ago) Dec 19
to Ömer Ağacan, Martin Kustermann, dart2wasm-t...@google.com, rev...@dartlang.org
Attention needed from Martin Kustermann and Ömer Ağacan

Nate Biggs voted and added 3 comments

Votes added by Nate Biggs

Code-Review+1

3 comments

Patchset-level comments
Nate Biggs . resolved

As this is, I think this will break Flutter apps.

The Flutter JS fallback logic isn't checking that these instructions are supported. So someone on an older browser might load a Flutter app and get served WASM that their browser can't execute.

Same thing for another framework like Jaspr, they all need to update their fallback logic to account for this.

Part of this is updating the `support.js` we emit. But I think Flutter might not be using that file so we should be careful there.

Nate Biggs

I guess there isn't any new instruction here per se but there is a new type. Same argument still applies I think.

Ömer Ağacan

There are no new stuff in this CL. The new instructions are in another CL.

The only new thing in terms of Wasm features in this CL is the new tag that we import. It's not a feature on its own and there's no easy way to find out when browsers added that tag, but given that it's a part of the legacy exception handling I think it should be safe to assume that most browsers should be supporting the new tag for a while now.

Nate Biggs

Ah my bad, I was conflating this CL with your other one.

File pkg/dart2wasm/lib/code_generator.dart
Line 1010, Patchset 15: b.ref_as_non_null();
Nate Biggs . resolved

See below about making `javaScriptErrorStackTraceGetter` return non-nullable value. Should be able to delete this cast.

Ömer Ağacan

I updated its type but it's an override so its type doesn't change.

Nate Biggs

I forgot that function types are invariant across the board so we can't give the override a better type.

File pkg/dart2wasm/lib/tags.dart
Line 45, Patchset 20 (Latest): .defineFunction([w.RefType.extern(nullable: true)], const []);
Nate Biggs . unresolved

nit: This can be const.

Open in Gerrit

Related details

Attention is currently required from:
  • Martin Kustermann
  • Ömer Ağacan
Submit Requirements:
  • requirement satisfiedCode-Owners
  • requirement satisfiedCode-Review
  • requirement satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: sdk
Gerrit-Branch: main
Gerrit-Change-Id: Ia9347e938af209b8b87752479d35b6236f721acf
Gerrit-Change-Number: 469062
Gerrit-PatchSet: 20
Gerrit-Owner: Ömer Ağacan <ome...@google.com>
Gerrit-Reviewer: Martin Kustermann <kuste...@google.com>
Gerrit-Reviewer: Nate Biggs <nate...@google.com>
Gerrit-Attention: Ömer Ağacan <ome...@google.com>
Gerrit-Attention: Martin Kustermann <kuste...@google.com>
Gerrit-Comment-Date: Fri, 19 Dec 2025 16:44:51 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: Yes
satisfied_requirement
open
diffy
Reply all
Reply to author
Forward
0 new messages