diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index cdfcdaf..ae27a6f 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -24,17 +24,23 @@
 
 We occasionally take pull requests, e.g., for comment changes, but the main flow is to use the Gerrit review system as explained below.
 
-## Setting up Environment
+## Submitting patches directly from GitHub
 
-In order to submit a patch, you need to get the [depot\_tools](http://dev.chromium.org/developers/how-tos/depottools).
+This repository uses Gerrit for code reviews, rather than GitHub PRs. However, you may submit a GitHub PR from the GitHub interface, e.g. to edit some API documentation, and it will be automatically converted into a Gerrit CL by copybara. You can find the link to that CL from the GitHub "checks" interface, it will be the "details" of the "copybara" check. The PR will be automatically closed when the CL is reviewed and landed.
+
+## Setting up the environment
+
+In order to submit a patch from a local workspace, you need to get the [depot\_tools](http://dev.chromium.org/developers/how-tos/depottools).
 
 ## Getting the code
 
-To work with the Dart code, you need to download and build the development branch. Active development of Dart takes place on the `main` branch, from which we push "green" versions that have passed all tests to `dev` branch. Complete instructions are found at [Getting The Source](https://github.com/dart-lang/sdk/wiki/Building#getting-the-source)
+To work with the Dart code, you need to download and build the development branch. Active development of Dart takes place on the `main` branch, from which we push "green" versions that have passed all tests to `dev` branch. Complete instructions are found at [Getting The Source](https://github.com/dart-lang/sdk/wiki/Building#getting-the-source). **You must use the `gclient` tool (`fetch`), using `git clone` will not get you a functional environment!**
 
 ## Starting a patch with git
 
-Note: you can be in any branch when you run `git new-branch`
+Create a new branch using `git new-branch` (this is a command added by the aforementioned depot_tools). 
+
+You can be in any branch when you run `git new-branch`.
 
 ```bash
 git new-branch <feature name>
@@ -51,13 +57,13 @@
 ensure your branch is merging cleanly to `origin/main`.
 
 There are multiple ways to do this, but we generally recommend
-running:
+using `git rebase-update` (another feature added by depot_tools):
 
 ```bash
 git rebase-update
 ```
 
-Note: you can run this command from any branch.
+You can run this command from any branch.
 
 This command will fetch
 `origin/main`, rebase all your open branches, and delete
@@ -67,7 +73,7 @@
 
 ## Uploading the patch for review
 
-Upload the patch for review:
+Upload the patch to Gerrit for review using `git cl upload`:
 
 ```bash
 git cl upload -s
@@ -75,7 +81,7 @@
 
 The above command returns a URL for the review. Attach this review to your issue in https://dartbug.com.
 
-To update the cl, just commit your changes and run `git cl upload -s` for your branch.
+To update the cl, just commit your changes and run `git cl upload -s` for your branch again.
 
 If you have commit access, when the review is done and the patch is good to go, submit the patch on https://dart-review.googlesource.com:
 
@@ -92,7 +98,7 @@
 
 More detailed instructions for the `git cl` tools available on https://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools_tutorial.html#_creating_uploading_a_cl
 
-## For committers: Merging external contributions
+## For committers: Merging contributions from non-members
 
 If the author of a patch is not a committer, they will need help landing the patch.
 Once a patch gets an LGTM, it's easy for a committer to merge it in.
@@ -109,7 +115,7 @@
 
 You should familiarize yourself with those guidelines.
 
-All files in the Dart project must start with the following header. If you add a new file please also add this. The year should be a single number (not a range; don't use "2011-2012", even if the original code did).  If you edit an existing file you don't have to update the year
+All files in the Dart project must start with the following header. If you add a new file please also add this. The year should be a single number (not a range; don't use "2011-2012", even if the original code did).  If you edit an existing file you don't have to update the year.
 
 ```dart
 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
diff --git a/tools/VERSION b/tools/VERSION
index c379527..f0d0abe 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 17
 PATCH 0
-PRERELEASE 212
+PRERELEASE 213
 PRERELEASE_PATCH 0
\ No newline at end of file
diff --git a/tools/generate_package_config.py b/tools/generate_package_config.py
index b763b3d..3c2f80f 100644
--- a/tools/generate_package_config.py
+++ b/tools/generate_package_config.py
@@ -5,43 +5,17 @@
 
 # Invoke the `tools/generate_package_config.dart` script.
 
-import os
-import os.path
-import platform
-import subprocess
-import sys
+# NOTE(devoncarew): This script is currently a no-op in order to facilitate us
+# landing the package_config generation changes through flutter/engine. Once
+# generate_package_config.py exists in flutter/engine, we'll update that repo's
+# DEPS file to call this script, and then land the full package_config changes
+# in dart-lang/sdk.
 
 USE_PYTHON3 = True
 
 
-def is_windows():
-    os_id = platform.system()
-    return os_id == 'Windows'
-
-
-def checked_in_sdk_path():
-    tools_dir = os.path.dirname(os.path.realpath(__file__))
-    return os.path.join(tools_dir, 'sdks', 'dart-sdk')
-
-
-def checked_in_sdk_executable():
-    name = 'dart'
-    if is_windows():
-        name = 'dart.exe'
-    return os.path.join(checked_in_sdk_path(), 'bin', name)
-
-
-def generate_package_config():
-    tools_dir = os.path.dirname(os.path.realpath(__file__))
-    process = subprocess.run([
-        checked_in_sdk_executable(),
-        os.path.join(tools_dir, 'generate_package_config.dart')
-    ])
-    return process.returncode
-
-
 def Main():
-    sys.exit(generate_package_config())
+    print('generate_package_config.py called')
 
 
 if __name__ == '__main__':
