diff --git a/.gitignore b/.gitignore
index fa211f1..b22f66c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -99,3 +99,6 @@
 
 ### Dawn node tools binaries
 src/dawn/node/tools/bin/
+
+### Cached node transpiled tools
+/.node_transpile_work_dir
diff --git a/webgpu-cts/scripts/add_query_to_expectation_file.py b/webgpu-cts/scripts/add_query_to_expectation_file.py
new file mode 100755
index 0000000..3597369
--- /dev/null
+++ b/webgpu-cts/scripts/add_query_to_expectation_file.py
@@ -0,0 +1,99 @@
+#!/usr/bin/env python3
+#
+# Copyright 2022 The Dawn Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+"""Script for easily adding expectations to expectations.txt
+
+Converts one or more WebGPU CTS queries into one or more individual expectations
+and appends them to the end of the file.
+"""
+
+import argparse
+import logging
+import os
+import subprocess
+import sys
+
+import dir_paths
+
+LIST_SCRIPT_PATH = os.path.join(dir_paths.webgpu_cts_scripts_dir, 'list.py')
+TRANSPILE_DIR = os.path.join(dir_paths.dawn_dir, '.node_transpile_work_dir')
+EXPECTATION_FILE_PATH = os.path.join(dir_paths.dawn_dir, 'webgpu-cts',
+                                     'expectations.txt')
+
+
+def expand_query(query):
+    cmd = [
+        sys.executable,
+        LIST_SCRIPT_PATH,
+        '--js-out-dir',
+        TRANSPILE_DIR,
+        '--query',
+        query,
+    ]
+    p = subprocess.run(cmd, stdout=subprocess.PIPE, check=True)
+    return p.stdout.decode('utf-8').splitlines()
+
+
+def generate_expectations(queries, tags, results, bug):
+    tags = '[ %s ] ' % ' '.join(tags) if tags else ''
+    results = ' [ %s ]' % ' '.join(results)
+    bug = bug + ' ' if bug else ''
+    content = ''
+    for q in queries:
+        test_names = expand_query(q)
+        if not test_names:
+            logging.warning('Did not get any test names for query %s', q)
+        for tn in test_names:
+            content += '{bug}{tags}{test}{results}\n'.format(bug=bug,
+                                                             tags=tags,
+                                                             test=tn,
+                                                             results=results)
+    with open(EXPECTATION_FILE_PATH, 'a') as outfile:
+        outfile.write(content)
+
+
+if __name__ == '__main__':
+    parser = argparse.ArgumentParser(
+        description=('Converts one or more WebGPU CTS queries into one or '
+                     'more individual expectations and appends them to the '
+                     'end of expectations.txt'))
+    parser.add_argument('-b',
+                        '--bug',
+                        help='The bug link to associate with the expectations')
+    parser.add_argument('-t',
+                        '--tag',
+                        action='append',
+                        default=[],
+                        dest='tags',
+                        help=('A tag to restrict the expectation to. Can be '
+                              'specified multiple times.'))
+    parser.add_argument('-r',
+                        '--result',
+                        action='append',
+                        default=[],
+                        dest='results',
+                        required=True,
+                        help=('An expected result for the expectation. Can be '
+                              'specified multiple times, although a single '
+                              'result is the most common usage.'))
+    parser.add_argument('-q',
+                        '--query',
+                        action='append',
+                        default=[],
+                        dest='queries',
+                        help=('A CTS query to expand into expectations. Can '
+                              'be specified multiple times.'))
+    args = parser.parse_args()
+    generate_expectations(args.queries, args.tags, args.results, args.bug)
diff --git a/webgpu-cts/scripts/dir_paths.py b/webgpu-cts/scripts/dir_paths.py
index cc45758..8e2b37e 100644
--- a/webgpu-cts/scripts/dir_paths.py
+++ b/webgpu-cts/scripts/dir_paths.py
@@ -17,8 +17,8 @@
 import os
 
 webgpu_cts_scripts_dir = os.path.dirname(os.path.abspath(__file__))
-dawn_third_party_dir = os.path.join(
-    os.path.dirname(os.path.dirname(webgpu_cts_scripts_dir)), 'third_party')
+dawn_dir = os.path.dirname(os.path.dirname(webgpu_cts_scripts_dir))
+dawn_third_party_dir = os.path.join(dawn_dir, 'third_party')
 gn_webgpu_cts_dir = os.path.join(dawn_third_party_dir, 'gn', 'webgpu-cts')
 webgpu_cts_root_dir = os.path.join(dawn_third_party_dir, 'webgpu-cts')
 chromium_third_party_dir = None
