Add UnlabaledLeafNodeEvaluation#182872
Conversation
There was a problem hiding this comment.
Code Review
This pull request introduces a new accessibility evaluation, UnlabeledLeafNodeEvaluation, to verify that leaf semantics nodes have a label, tooltip, hint, or value. The implementation is sound and includes relevant tests. I've provided a suggestion to refactor the tree traversal for better efficiency and readability. Additionally, I've recommended expanding the test suite to cover all properties checked by the new evaluation for improved completeness.
| @override | ||
| FutureOr<EvaluationResult> _evaluate(WidgetsBinding binding) { | ||
| final violations = <Violation>[]; | ||
| for (final RenderView view in binding.renderViews) { | ||
| violations.addAll(_traverse(view.owner!.semanticsOwner!.rootSemanticsNode!)); | ||
| } | ||
| return EvaluationResult(violations); | ||
| } | ||
|
|
||
| List<Violation> _traverse(SemanticsNode node) { | ||
| final violations = <Violation>[]; | ||
| bool hasChildren = false; | ||
| node.visitChildren((SemanticsNode child) { | ||
| hasChildren = true; | ||
| violations.addAll(_traverse(child)); | ||
| return true; | ||
| }); | ||
|
|
||
| if (node.isMergedIntoParent || | ||
| node.isInvisible || | ||
| node.flagsCollection.isHidden) { | ||
| return violations; | ||
| } | ||
|
|
||
| // If not merging descendants and has children, it's not a leaf. | ||
| if (hasChildren && !node.mergeAllDescendantsIntoThisNode) { | ||
| return violations; | ||
| } | ||
|
|
||
| final SemanticsData data = node.getSemanticsData(); | ||
| if (data.label.trim().isEmpty && | ||
| data.value.trim().isEmpty && | ||
| data.hint.trim().isEmpty && | ||
| data.tooltip.trim().isEmpty) { | ||
| violations.add( | ||
| Violation( | ||
| node, | ||
| '$node: expected leaf semantics node to have a label, value, hint, or tooltip, ' | ||
| 'but none was found.', | ||
| ), | ||
| ); | ||
| } | ||
|
|
||
| return violations; | ||
| } |
There was a problem hiding this comment.
The _traverse method can be made more efficient and arguably clearer by passing the violations list as a parameter instead of creating and merging lists at each level of recursion. This avoids unnecessary list allocations and copying.
Additionally, the _evaluate method can be made safer by using a case pattern to handle a potentially null rootSemanticsNode instead of force-unwrapping it with !. This also makes the code more robust.
@override
FutureOr<EvaluationResult> _evaluate(WidgetsBinding binding) {
final List<Violation> violations = <Violation>[];
for (final RenderView view in binding.renderViews) {
if (view.owner?.semanticsOwner?.rootSemanticsNode case final SemanticsNode rootNode) {
_traverse(rootNode, violations);
}
}
return EvaluationResult(violations);
}
void _traverse(SemanticsNode node, List<Violation> violations) {
bool hasChildren = false;
node.visitChildren((SemanticsNode child) {
hasChildren = true;
_traverse(child, violations);
return true;
});
if (node.isMergedIntoParent ||
node.isInvisible ||
node.flagsCollection.isHidden) {
return;
}
// If not merging descendants and has children, it's not a leaf.
if (hasChildren && !node.mergeAllDescendantsIntoThisNode) {
return;
}
final SemanticsData data = node.getSemanticsData();
if (data.label.trim().isEmpty &&
data.value.trim().isEmpty &&
data.hint.trim().isEmpty &&
data.tooltip.trim().isEmpty) {
violations.add(
Violation(
node,
'$node: expected leaf semantics node to have a label, value, hint, or tooltip, '
'but none was found.',
),
);
}
}There was a problem hiding this comment.
We prefer function without side effect in these class
| data.value.trim().isEmpty && | ||
| data.hint.trim().isEmpty && | ||
| data.tooltip.trim().isEmpty) { | ||
| violations.add( |
There was a problem hiding this comment.
should also check for whether this node has actions or focusable.
There was a problem hiding this comment.
Copied over the _isImportantForAccessibility to this file and added a TODO to remove that method in the future.
| handle.dispose(); | ||
| }); | ||
|
|
||
| testWidgets('Fails if node merges descendants but has no label', (WidgetTester tester) async { |
There was a problem hiding this comment.
also add some tests for case like hidden or not focusable
ad3865e to
fea4e0d
Compare
| @override | ||
| FutureOr<EvaluationResult> _evaluate(WidgetsBinding binding) { | ||
| final violations = <Violation>[]; | ||
| for (final RenderView view in binding.renderViews) { | ||
| violations.addAll(_traverse(view.owner!.semanticsOwner!.rootSemanticsNode!)); | ||
| } | ||
| return EvaluationResult(violations); | ||
| } | ||
|
|
||
| List<Violation> _traverse(SemanticsNode node) { | ||
| final violations = <Violation>[]; | ||
| bool hasChildren = false; | ||
| node.visitChildren((SemanticsNode child) { | ||
| hasChildren = true; | ||
| violations.addAll(_traverse(child)); | ||
| return true; | ||
| }); | ||
|
|
||
| if (node.isMergedIntoParent || | ||
| node.isInvisible || | ||
| node.flagsCollection.isHidden) { | ||
| return violations; | ||
| } | ||
|
|
||
| // If not merging descendants and has children, it's not a leaf. | ||
| if (hasChildren && !node.mergeAllDescendantsIntoThisNode) { | ||
| return violations; | ||
| } | ||
|
|
||
| final SemanticsData data = node.getSemanticsData(); | ||
| if (data.label.trim().isEmpty && | ||
| data.value.trim().isEmpty && | ||
| data.hint.trim().isEmpty && | ||
| data.tooltip.trim().isEmpty) { | ||
| violations.add( | ||
| Violation( | ||
| node, | ||
| '$node: expected leaf semantics node to have a label, value, hint, or tooltip, ' | ||
| 'but none was found.', | ||
| ), | ||
| ); | ||
| } | ||
|
|
||
| return violations; | ||
| } |
There was a problem hiding this comment.
We prefer function without side effect in these class
1f4e36c to
37733ca
Compare
Roll Flutter from d3dd7744e81f to d18214307703 (33 revisions) flutter/flutter@d3dd774...d182143 2026-03-06 engine-flutter-autoroll@skia.org Roll Packages from 8d5c5cd to fe3de64 (2 revisions) (flutter/flutter#183308) 2026-03-06 engine-flutter-autoroll@skia.org Roll Dart SDK from 1b51451cdb99 to 7c7c1e3d024d (2 revisions) (flutter/flutter#183294) 2026-03-06 engine-flutter-autoroll@skia.org Roll Dart SDK from 9ac06cdd1801 to 1b51451cdb99 (9 revisions) (flutter/flutter#183289) 2026-03-06 jacksongardner@google.com Add GitHub workflows to assist with release tasks (flutter/flutter#181978) 2026-03-06 flar@google.com [Impeller] Fix new convex path shadow generation in perspective (flutter/flutter#183187) 2026-03-06 137456488+flutter-pub-roller-bot@users.noreply.github.com Roll pub packages (flutter/flutter#183178) 2026-03-05 ishaquehassan@gmail.com fix: use double quotes in settings.gradle.kts template (flutter/flutter#183081) 2026-03-05 victorsanniay@gmail.com Add fallbackColor for PredictiveBackPageTransitionBuilder and PredictiveBackFullscreenPageTransitionBuilder (flutter/flutter#182690) 2026-03-05 97480502+b-luk@users.noreply.github.com Simplify TesterContextGLES (multithreading logic not needed), and enable some tests that now pass (flutter/flutter#183250) 2026-03-05 engine-flutter-autoroll@skia.org Roll Skia from a94df1cdabb0 to a69ef43650ee (14 revisions) (flutter/flutter#183280) 2026-03-05 matt.kosarek@canonical.com Windowing implementation of `showDialog` that uses a native desktop window to display the content (flutter/flutter#181861) 2026-03-05 15619084+vashworth@users.noreply.github.com Build CocoaPod plugin frameworks for Add to App FlutterPluginRegistrant (flutter/flutter#183239) 2026-03-05 jason-simmons@users.noreply.github.com Extend the Linux web_skwasm_tests_1 timeout to 45 minutes (flutter/flutter#183247) 2026-03-05 liama@google.com Update Dart to 3.12 beta 2 (flutter/flutter#183251) 2026-03-05 116356835+AbdeMohlbi@users.noreply.github.com Replace the rest of the references to `flutter/engine` with `flutter/flutter` (flutter/flutter#182938) 2026-03-05 codefu@google.com chore: convert android_verified_input to pub-workspace (flutter/flutter#183175) 2026-03-05 victorsanniay@gmail.com Add await to flutter_test callsites (flutter/flutter#182983) 2026-03-05 okorohelijah@google.com [iOS] Skip gesture recognizer reset workaround on iOS 26+ (flutter/flutter#183186) 2026-03-05 okorohelijah@google.com Add warning for plugins not migrated to UIScene (flutter/flutter#182826) 2026-03-05 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from JJw5EJ87vLGqFVl4h... to 8ay15_eQOEgPHCypm... (flutter/flutter#183255) 2026-03-05 engine-flutter-autoroll@skia.org Roll Skia from ada0b7628c79 to a94df1cdabb0 (2 revisions) (flutter/flutter#183249) 2026-03-05 engine-flutter-autoroll@skia.org Roll Packages from 82baf93 to 8d5c5cd (2 revisions) (flutter/flutter#183269) 2026-03-05 36861262+QuncCccccc@users.noreply.github.com Add `UnlabaledLeafNodeEvaluation` (flutter/flutter#182872) 2026-03-04 34871572+gmackall@users.noreply.github.com Re-specify the ndk version in various test apps, to prevent ndk download (flutter/flutter#183134) 2026-03-04 nate.w5687@gmail.com Eliminate rebuilds for Scaffold FAB animation (flutter/flutter#182331) 2026-03-04 43498643+mkucharski17@users.noreply.github.com Add Michal Kucharski to AUTHORS (flutter/flutter#182366) 2026-03-04 jacksongardner@google.com Merge changelog from 3.41.4 stable. (flutter/flutter#183243) 2026-03-04 codedoctor@linwood.dev Allow stylus support on windows (flutter/flutter#165323) 2026-03-04 737941+loic-sharma@users.noreply.github.com Fix docs on SingletonFlutterWindow.supportsShowingSystemContextMenu (flutter/flutter#183142) 2026-03-04 engine-flutter-autoroll@skia.org Roll Packages from 9083bc9 to 82baf93 (5 revisions) (flutter/flutter#183240) 2026-03-04 11901536+romaingyh@users.noreply.github.com Fixes FocusHighlightMode on Android when typing in software keyboard (flutter/flutter#180753) 2026-03-04 97480502+b-luk@users.noreply.github.com Make compileShader() retry without sksl if it fails with sksl. (flutter/flutter#183146) 2026-03-04 zhongliu88889@gmail.com [web] Use pointer-events: auto for non-interactive leaf semantics nodes (flutter/flutter#183077) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-packages Please CC bmparr@google.com,stuartmorgan@google.com on the revert to ensure that a human is aware of the problem. To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: ...
Fixes flutter#94485 This PR is to add an `UnlabeledLeafNodeEvaluation` to check whether there is a leaf node that has no label/tooltip/hint/value. ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing.
…r#11191) Roll Flutter from d3dd7744e81f to d18214307703 (33 revisions) flutter/flutter@d3dd774...d182143 2026-03-06 engine-flutter-autoroll@skia.org Roll Packages from 8d5c5cd to fe3de64 (2 revisions) (flutter/flutter#183308) 2026-03-06 engine-flutter-autoroll@skia.org Roll Dart SDK from 1b51451cdb99 to 7c7c1e3d024d (2 revisions) (flutter/flutter#183294) 2026-03-06 engine-flutter-autoroll@skia.org Roll Dart SDK from 9ac06cdd1801 to 1b51451cdb99 (9 revisions) (flutter/flutter#183289) 2026-03-06 jacksongardner@google.com Add GitHub workflows to assist with release tasks (flutter/flutter#181978) 2026-03-06 flar@google.com [Impeller] Fix new convex path shadow generation in perspective (flutter/flutter#183187) 2026-03-06 137456488+flutter-pub-roller-bot@users.noreply.github.com Roll pub packages (flutter/flutter#183178) 2026-03-05 ishaquehassan@gmail.com fix: use double quotes in settings.gradle.kts template (flutter/flutter#183081) 2026-03-05 victorsanniay@gmail.com Add fallbackColor for PredictiveBackPageTransitionBuilder and PredictiveBackFullscreenPageTransitionBuilder (flutter/flutter#182690) 2026-03-05 97480502+b-luk@users.noreply.github.com Simplify TesterContextGLES (multithreading logic not needed), and enable some tests that now pass (flutter/flutter#183250) 2026-03-05 engine-flutter-autoroll@skia.org Roll Skia from a94df1cdabb0 to a69ef43650ee (14 revisions) (flutter/flutter#183280) 2026-03-05 matt.kosarek@canonical.com Windowing implementation of `showDialog` that uses a native desktop window to display the content (flutter/flutter#181861) 2026-03-05 15619084+vashworth@users.noreply.github.com Build CocoaPod plugin frameworks for Add to App FlutterPluginRegistrant (flutter/flutter#183239) 2026-03-05 jason-simmons@users.noreply.github.com Extend the Linux web_skwasm_tests_1 timeout to 45 minutes (flutter/flutter#183247) 2026-03-05 liama@google.com Update Dart to 3.12 beta 2 (flutter/flutter#183251) 2026-03-05 116356835+AbdeMohlbi@users.noreply.github.com Replace the rest of the references to `flutter/engine` with `flutter/flutter` (flutter/flutter#182938) 2026-03-05 codefu@google.com chore: convert android_verified_input to pub-workspace (flutter/flutter#183175) 2026-03-05 victorsanniay@gmail.com Add await to flutter_test callsites (flutter/flutter#182983) 2026-03-05 okorohelijah@google.com [iOS] Skip gesture recognizer reset workaround on iOS 26+ (flutter/flutter#183186) 2026-03-05 okorohelijah@google.com Add warning for plugins not migrated to UIScene (flutter/flutter#182826) 2026-03-05 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from JJw5EJ87vLGqFVl4h... to 8ay15_eQOEgPHCypm... (flutter/flutter#183255) 2026-03-05 engine-flutter-autoroll@skia.org Roll Skia from ada0b7628c79 to a94df1cdabb0 (2 revisions) (flutter/flutter#183249) 2026-03-05 engine-flutter-autoroll@skia.org Roll Packages from 82baf93 to 8d5c5cd (2 revisions) (flutter/flutter#183269) 2026-03-05 36861262+QuncCccccc@users.noreply.github.com Add `UnlabaledLeafNodeEvaluation` (flutter/flutter#182872) 2026-03-04 34871572+gmackall@users.noreply.github.com Re-specify the ndk version in various test apps, to prevent ndk download (flutter/flutter#183134) 2026-03-04 nate.w5687@gmail.com Eliminate rebuilds for Scaffold FAB animation (flutter/flutter#182331) 2026-03-04 43498643+mkucharski17@users.noreply.github.com Add Michal Kucharski to AUTHORS (flutter/flutter#182366) 2026-03-04 jacksongardner@google.com Merge changelog from 3.41.4 stable. (flutter/flutter#183243) 2026-03-04 codedoctor@linwood.dev Allow stylus support on windows (flutter/flutter#165323) 2026-03-04 737941+loic-sharma@users.noreply.github.com Fix docs on SingletonFlutterWindow.supportsShowingSystemContextMenu (flutter/flutter#183142) 2026-03-04 engine-flutter-autoroll@skia.org Roll Packages from 9083bc9 to 82baf93 (5 revisions) (flutter/flutter#183240) 2026-03-04 11901536+romaingyh@users.noreply.github.com Fixes FocusHighlightMode on Android when typing in software keyboard (flutter/flutter#180753) 2026-03-04 97480502+b-luk@users.noreply.github.com Make compileShader() retry without sksl if it fails with sksl. (flutter/flutter#183146) 2026-03-04 zhongliu88889@gmail.com [web] Use pointer-events: auto for non-interactive leaf semantics nodes (flutter/flutter#183077) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-packages Please CC bmparr@google.com,stuartmorgan@google.com on the revert to ensure that a human is aware of the problem. To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: ...
Fixes flutter#94485 This PR is to add an `UnlabeledLeafNodeEvaluation` to check whether there is a leaf node that has no label/tooltip/hint/value. ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing.
Fixes flutter#94485 This PR is to add an `UnlabeledLeafNodeEvaluation` to check whether there is a leaf node that has no label/tooltip/hint/value. ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing.
…r#11191) Roll Flutter from d3dd7744e81f to d18214307703 (33 revisions) flutter/flutter@d3dd774...d182143 2026-03-06 engine-flutter-autoroll@skia.org Roll Packages from 8d5c5cd to fe3de64 (2 revisions) (flutter/flutter#183308) 2026-03-06 engine-flutter-autoroll@skia.org Roll Dart SDK from 1b51451cdb99 to 7c7c1e3d024d (2 revisions) (flutter/flutter#183294) 2026-03-06 engine-flutter-autoroll@skia.org Roll Dart SDK from 9ac06cdd1801 to 1b51451cdb99 (9 revisions) (flutter/flutter#183289) 2026-03-06 jacksongardner@google.com Add GitHub workflows to assist with release tasks (flutter/flutter#181978) 2026-03-06 flar@google.com [Impeller] Fix new convex path shadow generation in perspective (flutter/flutter#183187) 2026-03-06 137456488+flutter-pub-roller-bot@users.noreply.github.com Roll pub packages (flutter/flutter#183178) 2026-03-05 ishaquehassan@gmail.com fix: use double quotes in settings.gradle.kts template (flutter/flutter#183081) 2026-03-05 victorsanniay@gmail.com Add fallbackColor for PredictiveBackPageTransitionBuilder and PredictiveBackFullscreenPageTransitionBuilder (flutter/flutter#182690) 2026-03-05 97480502+b-luk@users.noreply.github.com Simplify TesterContextGLES (multithreading logic not needed), and enable some tests that now pass (flutter/flutter#183250) 2026-03-05 engine-flutter-autoroll@skia.org Roll Skia from a94df1cdabb0 to a69ef43650ee (14 revisions) (flutter/flutter#183280) 2026-03-05 matt.kosarek@canonical.com Windowing implementation of `showDialog` that uses a native desktop window to display the content (flutter/flutter#181861) 2026-03-05 15619084+vashworth@users.noreply.github.com Build CocoaPod plugin frameworks for Add to App FlutterPluginRegistrant (flutter/flutter#183239) 2026-03-05 jason-simmons@users.noreply.github.com Extend the Linux web_skwasm_tests_1 timeout to 45 minutes (flutter/flutter#183247) 2026-03-05 liama@google.com Update Dart to 3.12 beta 2 (flutter/flutter#183251) 2026-03-05 116356835+AbdeMohlbi@users.noreply.github.com Replace the rest of the references to `flutter/engine` with `flutter/flutter` (flutter/flutter#182938) 2026-03-05 codefu@google.com chore: convert android_verified_input to pub-workspace (flutter/flutter#183175) 2026-03-05 victorsanniay@gmail.com Add await to flutter_test callsites (flutter/flutter#182983) 2026-03-05 okorohelijah@google.com [iOS] Skip gesture recognizer reset workaround on iOS 26+ (flutter/flutter#183186) 2026-03-05 okorohelijah@google.com Add warning for plugins not migrated to UIScene (flutter/flutter#182826) 2026-03-05 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from JJw5EJ87vLGqFVl4h... to 8ay15_eQOEgPHCypm... (flutter/flutter#183255) 2026-03-05 engine-flutter-autoroll@skia.org Roll Skia from ada0b7628c79 to a94df1cdabb0 (2 revisions) (flutter/flutter#183249) 2026-03-05 engine-flutter-autoroll@skia.org Roll Packages from 82baf93 to 8d5c5cd (2 revisions) (flutter/flutter#183269) 2026-03-05 36861262+QuncCccccc@users.noreply.github.com Add `UnlabaledLeafNodeEvaluation` (flutter/flutter#182872) 2026-03-04 34871572+gmackall@users.noreply.github.com Re-specify the ndk version in various test apps, to prevent ndk download (flutter/flutter#183134) 2026-03-04 nate.w5687@gmail.com Eliminate rebuilds for Scaffold FAB animation (flutter/flutter#182331) 2026-03-04 43498643+mkucharski17@users.noreply.github.com Add Michal Kucharski to AUTHORS (flutter/flutter#182366) 2026-03-04 jacksongardner@google.com Merge changelog from 3.41.4 stable. (flutter/flutter#183243) 2026-03-04 codedoctor@linwood.dev Allow stylus support on windows (flutter/flutter#165323) 2026-03-04 737941+loic-sharma@users.noreply.github.com Fix docs on SingletonFlutterWindow.supportsShowingSystemContextMenu (flutter/flutter#183142) 2026-03-04 engine-flutter-autoroll@skia.org Roll Packages from 9083bc9 to 82baf93 (5 revisions) (flutter/flutter#183240) 2026-03-04 11901536+romaingyh@users.noreply.github.com Fixes FocusHighlightMode on Android when typing in software keyboard (flutter/flutter#180753) 2026-03-04 97480502+b-luk@users.noreply.github.com Make compileShader() retry without sksl if it fails with sksl. (flutter/flutter#183146) 2026-03-04 zhongliu88889@gmail.com [web] Use pointer-events: auto for non-interactive leaf semantics nodes (flutter/flutter#183077) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-packages Please CC bmparr@google.com,stuartmorgan@google.com on the revert to ensure that a human is aware of the problem. To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: ...
Fixes #94485
This PR is to add an
UnlabeledLeafNodeEvaluationto check whether there is a leaf node that has no label/tooltip/hint/value.Pre-launch Checklist
///).