diff --git a/analysis_options.yaml b/analysis_options.yaml
index c1d8ab7..c820ffe 100644
--- a/analysis_options.yaml
+++ b/analysis_options.yaml
@@ -3,7 +3,6 @@
 analyzer:
   errors:
     lines_longer_than_80_chars: ignore # TODO(mosum): fix the offending lines
-    comment_references: ignore # TODO(mosum): fix the offending lines
     todo: ignore
   exclude:
    - lib/src/third_party/**
diff --git a/lib/src/authentication/client.dart b/lib/src/authentication/client.dart
index 412e3f4..2b4e835 100644
--- a/lib/src/authentication/client.dart
+++ b/lib/src/authentication/client.dart
@@ -17,7 +17,7 @@
 /// This client authenticates requests by injecting `Authentication` header to
 /// requests.
 ///
-/// Requests to URLs not under [serverBaseUrl] will not be authenticated.
+/// Requests to URLs not under [_credential]'s url will not be authenticated.
 class _AuthenticatedClient extends http.BaseClient {
   /// Constructs Http client wrapper that injects `authorization` header to
   /// requests and handles authentication errors.
diff --git a/lib/src/command/add.dart b/lib/src/command/add.dart
index 6199c5f..87ac45b 100644
--- a/lib/src/command/add.dart
+++ b/lib/src/command/add.dart
@@ -369,8 +369,8 @@
     r'(?::(?<descriptor>.*))?$',
   );
 
-  /// Split [arg] on ':' and interpret it with the flags in [argResult] either as
-  /// an old-style or a new-style descriptor to produce a PackageRef].
+  /// Split [arg] on ':' and interpret it with the flags in [argResults] either
+  /// as an old-style or a new-style descriptor to produce a PackageRef].
   _ParseResult _parsePackage(String arg, ArgResults argResults) {
     var isDev = argResults.flag('dev');
     var isOverride = false;
@@ -557,9 +557,9 @@
     return _PartialParseResult(ref, constraint);
   }
 
-  /// Parse [package] to return the corresponding [_ParseResult].
+  /// Parse [packageName] to return the corresponding [_ParseResult].
   ///
-  /// [package] must be written in the format
+  /// [packageName] must be written in the format
   /// `<package-name>[:descriptor>]`, where quotations should be used if
   /// necessary.
   ///
@@ -589,16 +589,16 @@
   /// non-string descriptor.
   ///
   /// If a version constraint is provided when the `--path` or any of the
-  /// `--git-<option>` options are used, a [PackageParseError] will be thrown.
+  /// `--git-<option>` options are used, a [usageException] will be thrown.
   ///
   /// Packages must either be a git, hosted, sdk, or path package. Mixing of
-  /// options is not allowed and will cause a [PackageParseError] to be thrown.
+  /// options is not allowed and will cause a [usageException] to be thrown.
   ///
   /// If any of the other git options are defined when `--git-url` is not
   /// defined, an error will be thrown.
   ///
-  /// Returns a `ref` of `null` if the descriptor did not specify a source.
-  /// Then the source will be determined by the old-style arguments.
+  /// Returns a `ref` of `null` if the descriptor did not specify a source. Then
+  /// the source will be determined by the old-style arguments.
   _PartialParseResult _parseDescriptorNewStyle(
     String packageName,
     String? descriptor,
diff --git a/lib/src/command/outdated.dart b/lib/src/command/outdated.dart
index 904a4ac..19235b2 100644
--- a/lib/src/command/outdated.dart
+++ b/lib/src/command/outdated.dart
@@ -408,7 +408,7 @@
     return false;
   }();
 
-  /// Retrieves the pubspec of package [name] in [version] from [source].
+  /// Retrieves the pubspec of package [id] from its [PackageId.source].
   ///
   /// Returns `null`, if given `null` as a convinience.
   Future<_VersionDetails?> _describeVersion(
@@ -462,8 +462,8 @@
   }
 }
 
-/// Try to solve [pubspec] return [PackageId]s in the resolution or `null` if no
-/// resolution was found.
+/// Try to resolve the pubspec of [package] return [PackageId]s in the
+/// resolution or `null` if no resolution was found.
 Future<List<PackageId>?> _tryResolve(
   Package package,
   SystemCache cache, {
diff --git a/lib/src/dart.dart b/lib/src/dart.dart
index 1ed734f..f36fc83 100644
--- a/lib/src/dart.dart
+++ b/lib/src/dart.dart
@@ -38,9 +38,8 @@
 
   /// Parse the file with the given [path] into AST.
   ///
-  /// One of the containing directories must be used to create analysis
-  /// contexts using [createContextsForDirectory]. Throws [StateError] if
-  /// this has not been done.
+  /// One of the containing directories must have been used to create `this`.
+  /// Throws [StateError] otherwise.
   ///
   /// Throws [AnalyzerErrorGroup] is the file has parsing errors.
   CompilationUnit parse(String path) {
diff --git a/lib/src/entrypoint.dart b/lib/src/entrypoint.dart
index e2b2c52..d9f940d 100644
--- a/lib/src/entrypoint.dart
+++ b/lib/src/entrypoint.dart
@@ -324,7 +324,7 @@
   /// An entrypoint for the workspace containing [workingDir]/
   ///
   /// If [checkInCache] is `true` (the default) an error will be thrown if
-  /// [rootDir] is located inside [cache.rootDir].
+  /// [workingDir] is located inside [cache]`.rootDir`.
 
   Entrypoint(
     this.workingDir,
@@ -504,7 +504,7 @@
   /// if [summaryOnly] is `true` only success or failure will be
   /// shown --- in case of failure, a reproduction command is shown.
   ///
-  /// Updates [lockFile] and [packageRoot] accordingly.
+  /// Updates [lockFile] and [packageGraph] accordingly.
   ///
   /// If [enforceLockfile] is true no changes to the current lockfile are
   /// allowed. Instead the existing lockfile is loaded, verified against
@@ -659,7 +659,7 @@
     });
   }
 
-  /// Precompiles executable .dart file at [path] to a snapshot.
+  /// Precompiles [executable] to a snapshot.
   ///
   /// The [additionalSources], if provided, instruct the compiler to include
   /// additional source files into compilation even if they are not referenced
@@ -702,13 +702,11 @@
     cache.maintainCache();
   }
 
-  /// The location of the snapshot of the dart program at [path] in [package]
+  /// The location of the snapshot of the dart program at [executable]
   /// will be stored here.
   ///
   /// We use the sdk version to make sure we don't run snapshots from a
   /// different sdk.
-  ///
-  /// [path] must be relative.
   String pathOfSnapshot(Executable executable) {
     return isCachedGlobal
         ? executable.pathOfGlobalSnapshot(workspaceRoot.dir)
@@ -732,8 +730,8 @@
     }
   }
 
-  /// Does a fast-pass check to see if the resolution is up-to-date
-  /// ([_isUpToDate]). If not, run a resolution with `pub get` semantics.
+  /// Does a fast-pass check to see if the resolution is up-to-date. If not, run
+  /// a resolution with `pub get` semantics.
   ///
   /// If [summaryOnly] is `true` (the default) only a short summary is shown of
   /// the solve.
@@ -1432,8 +1430,9 @@
     return result;
   }
 
-  /// Unless [dryRun], loads `pubspec.yaml` of each [package] in [changeSet] and applies the
-  /// changes to its (dev)-dependencies using yaml_edit to preserve textual structure.
+  /// Unless [dryRun], loads `pubspec.yaml` of each [Package] in [changeSet] and
+  /// applies the changes to its (dev)-dependencies using yaml_edit to preserve
+  /// textual structure.
   ///
   /// Outputs a summary of changes done or would have been done if not [dryRun].
   void applyChanges(ChangeSet changeSet, bool dryRun) {
diff --git a/lib/src/executable.dart b/lib/src/executable.dart
index 5d0e7ba..8a73f95 100644
--- a/lib/src/executable.dart
+++ b/lib/src/executable.dart
@@ -30,17 +30,17 @@
   ];
 }
 
-/// Runs [executable] from [package] reachable from [entrypoint].
+/// Runs [executable] reachable from [entrypoint].
 ///
-/// The [executable] is a relative path to a Dart file within [package], which
-/// should either be the entrypoint package or an immediate dependency of it.
+/// The [executable] references Dart file, which should either be the entrypoint
+/// package or an immediate dependency of it.
 ///
 /// Arguments from [args] will be passed to the spawned Dart application.
 ///
 /// If [enableAsserts] is true, the program is run with assertions enabled.
 ///
 /// If the executable is in an immutable package and we pass no [vmArgs], it
-/// run from snapshot (and built if the snapshot doesn't already exist).
+/// runs from snapshot (and built if the snapshot doesn't already exist).
 ///
 /// Returns the exit code of the spawned app.
 Future<int> runExecutable(
@@ -253,7 +253,7 @@
 /// * Otherwise let `<current>` be the name of the innermost package containing
 ///   [root], and interpret [descriptor] as `[<package>][:<command>]`.
 ///
-///   * If `<package>` is empty: default to the package at [current].
+///   * If `<package>` is empty: default to the current package.
 ///   * If `<command>` is empty, resolve it as `bin/<package>.dart` or
 ///     `bin/main.dart` to the first that exists.
 ///
@@ -531,13 +531,11 @@
     );
   }
 
-  /// The location of the snapshot of the dart program at [path] in [package]
-  /// will be stored here.
+  /// The location of the snapshot of the dart program at [relativePath] in
+  /// [package] will be stored here.
   ///
   /// We use the sdk version to make sure we don't run snapshots from a
   /// different sdk.
-  ///
-  /// [path] must be relative.
   String pathOfSnapshot(String rootDir) {
     assert(p.isRelative(relativePath));
     final versionSuffix = sdk.version;
diff --git a/lib/src/global_packages.dart b/lib/src/global_packages.dart
index 4b5b9cf..1f5dcde 100644
--- a/lib/src/global_packages.dart
+++ b/lib/src/global_packages.dart
@@ -81,8 +81,6 @@
   /// If `null`, all executables in the package will get binstubs. If empty, no
   /// binstubs will be created.
   ///
-  /// The [features] map controls which features of the package to activate.
-  ///
   /// If [overwriteBinStubs] is `true`, any binstubs that collide with
   /// existing binstubs in other packages will be overwritten by this one's.
   /// Otherwise, the previous ones will be preserved.
@@ -138,16 +136,16 @@
     );
   }
 
-  /// Finds the latest version of the hosted package with [name] that matches
-  /// [constraint] and makes it the active global version.
+  /// Finds the latest version of the hosted package that matches [range] and
+  /// makes it the active global version.
   ///
   /// [executables] is the names of the executables that should have binstubs.
   /// If `null`, all executables in the package will get binstubs. If empty, no
   /// binstubs will be created.
   ///
-  /// if [overwriteBinStubs] is `true`, any binstubs that collide with
-  /// existing binstubs in other packages will be overwritten by this one's.
-  /// Otherwise, the previous ones will be preserved.
+  /// if [overwriteBinStubs] is `true`, any binstubs that collide with existing
+  /// binstubs in other packages will be overwritten by this one's. Otherwise,
+  /// the previous ones will be preserved.
   ///
   /// [url] is an optional custom pub server URL. If not null, the package to be
   /// activated will be fetched from this URL instead of the default pub URL.
@@ -425,7 +423,7 @@
     return entrypoint;
   }
 
-  /// Runs [package]'s [executable] with [args].
+  /// Runs [executable] with [args].
   ///
   /// If [executable] is available in its built form, that will be
   /// recompiled if the SDK has been upgraded since it was first compiled and
diff --git a/lib/src/http.dart b/lib/src/http.dart
index 6d79d27..c972929 100644
--- a/lib/src/http.dart
+++ b/lib/src/http.dart
@@ -425,7 +425,7 @@
   /// when you need to send a request object but want a regular response object.
   ///
   /// If false is passed for [throwIfNotOk], the response will not be validated.
-  /// See [http.BaseResponse.throwIfNotOk] extension for validation details.
+  /// See [http.BaseResponse] extension for validation details.
   Future<http.Response> fetch(
     http.BaseRequest request, {
     bool throwIfNotOk = true,
@@ -442,7 +442,7 @@
   /// is successful, returns a [http.StreamedResponse].
   ///
   /// If false is passed for [throwIfNotOk], the response will not be validated.
-  /// See [http.BaseResponse.throwIfNotOk] extension for validation details.
+  /// See [Throwing.throwIfNotOk] extension for validation details.
   Future<http.StreamedResponse> fetchAsStream(
     http.BaseRequest request, {
     bool throwIfNotOk = true,
diff --git a/lib/src/ignore.dart b/lib/src/ignore.dart
index 75c0f1f..0b9b1fc 100644
--- a/lib/src/ignore.dart
+++ b/lib/src/ignore.dart
@@ -52,8 +52,8 @@
   /// Create an [Ignore] instance with a set of [`.gitignore` compatible][1]
   /// patterns.
   ///
-  /// Each value in [patterns] will be interpreted as one or more lines from
-  /// a `.gitignore` file, in compliance with the [`.gitignore` manual page][1].
+  /// Each value in [patterns] will be interpreted as one or more lines from a
+  /// `.gitignore` file, in compliance with the [`.gitignore` manual page][1].
   ///
   /// The keys of 'pattern' are the directories to interpret the rules relative
   /// to. The root should be the empty string, and sub-directories are separated
@@ -61,12 +61,12 @@
   ///
   /// If [ignoreCase] is `true`, patterns will be case-insensitive. By default
   /// `git` is case-sensitive. But case insensitivity can be enabled when a
-  /// repository is created, or by configuration option, see
-  /// [`core.ignoreCase` documentation][2] for details.
+  /// repository is created, or by configuration option, see [`core.ignoreCase`
+  /// documentation][2] for details.
   ///
   /// If [onInvalidPattern] is passed, it will be called with a
-  /// [FormatException] describing the problem. The exception will have [source]
-  /// as source.
+  /// [FormatException] describing the problem. The exception will have the
+  /// pattern as source.
   ///
   /// **Example**:
   /// ```dart
@@ -89,8 +89,8 @@
   /// }
   /// ```
   ///
-  /// [1]: https://git-scm.com/docs/gitignore
-  /// [2]: https://git-scm.com/docs/git-config#Documentation/git-config.txt-coreignoreCase
+  /// [1]: https://git-scm.com/docs/gitignore [2]:
+  /// https://git-scm.com/docs/git-config#Documentation/git-config.txt-coreignoreCase
   Ignore(
     List<String> patterns, {
     bool ignoreCase = false,
@@ -164,29 +164,30 @@
   }
 
   /// Returns all the files in the tree under (and including) [beneath] not
-  /// ignored by ignore-files from [root] and down.
+  /// ignored by ignore-files from the "root" path '.' and down.
   ///
   /// Represents paths normalized  using '/' as directory separator. The empty
   /// relative path is '.', no '..' are allowed.
   ///
-  /// [beneath] must start with [root] and even if it is a directory it should not
-  /// end with '/', if [beneath] is not provided, everything under root is
-  /// included.
+  /// [beneath] must be relative to the root and even if it is a directory it
+  /// should not end with '/', if [beneath] is not provided, everything under
+  /// the root '.' is included.
   ///
   /// [listDir] should enumerate the immediate contents of a given directory,
-  /// returning paths including [root].
+  /// returning paths including the root '.'. This function can be used to list
+  /// directories relative to any root.
   ///
   /// [isDir] should return true if the argument is a directory. It will only be
   /// queried with file-names under (and including) [beneath]
   ///
-  /// [ignoreForDir] should retrieve the ignore rules for a single directory
-  /// or return `null` if there is no ignore rules.
+  /// [ignoreForDir] should retrieve the ignore rules for a single directory or
+  /// return `null` if there is no ignore rules.
   ///
   /// If [includeDirs] is true non-ignored directories will be included in the
   /// result (including beneath).
   ///
-  /// This example program lists all files under second argument that are
-  /// not ignored by .gitignore files from first argument and below:
+  /// This example program lists all files under second argument that are not
+  /// ignored by .gitignore files from first argument and below:
   ///
   /// ```dart
   /// import 'dart:io';
diff --git a/lib/src/io.dart b/lib/src/io.dart
index f65919f..db1a9ab 100644
--- a/lib/src/io.dart
+++ b/lib/src/io.dart
@@ -105,8 +105,8 @@
 
 /// Returns the canonical path for [pathString].
 ///
-/// This is the normalized, absolute path, with symlinks resolved. As in
-/// [transitiveTarget], broken or recursive symlinks will not be fully resolved.
+/// This is the normalized, absolute path, with symlinks resolved. Broken or
+/// recursive symlinks will not be fully resolved.
 ///
 /// This doesn't require [pathString] to point to a path that exists on the
 /// filesystem; nonexistent or unreadable path entries are treated as normal
@@ -319,7 +319,7 @@
   return dir;
 }
 
-/// Creates a temp directory in [dir], whose name will be [prefix] with
+/// Creates a temp directory in [base], whose name will be [prefix] with
 /// characters appended to it to make a unique name.
 ///
 /// Returns the path of the created directory.
diff --git a/lib/src/log.dart b/lib/src/log.dart
index ee39cda..f8864fb 100644
--- a/lib/src/log.dart
+++ b/lib/src/log.dart
@@ -43,8 +43,6 @@
 final Transcript<_Entry> _transcript = Transcript(_maxTranscript);
 
 /// The currently-animated progress indicator, if any.
-///
-/// This will also be in [_progresses].
 Progress? _animatedProgress;
 
 final _cyan = getAnsi('\u001b[36m');
diff --git a/lib/src/oauth2.dart b/lib/src/oauth2.dart
index 9a116ef..a8d36e3 100644
--- a/lib/src/oauth2.dart
+++ b/lib/src/oauth2.dart
@@ -738,7 +738,7 @@
   /// Creates a new client from a pre-existing set of credentials.
   ///
   /// When authorizing a client for the first time, you should use
-  /// [_AuthorizationCodeGrant] or [_resourceOwnerPasswordGrant] instead of
+  /// [_AuthorizationCodeGrant] instead of
   /// constructing a [_Client] directly.
   ///
   /// [httpClient] is the underlying client that this forwards requests to after
diff --git a/lib/src/progress.dart b/lib/src/progress.dart
index ad5d178..797679e 100644
--- a/lib/src/progress.dart
+++ b/lib/src/progress.dart
@@ -30,8 +30,8 @@
 
   /// Creates a new progress indicator.
   ///
-  /// If [fine] is passed, this will log progress messages on [log.Level.FINE]
-  /// as opposed to [log.Level.MESSAGE].
+  /// If [fine] is passed, this will log progress messages on [log.Level.fine]
+  /// as opposed to [log.Level.message].
   Progress(this._message, {bool fine = false}) {
     _stopwatch.start();
 
diff --git a/lib/src/pubspec.dart b/lib/src/pubspec.dart
index a90c518..bf54497 100644
--- a/lib/src/pubspec.dart
+++ b/lib/src/pubspec.dart
@@ -357,7 +357,7 @@
   /// contents.
   ///
   /// If [expectedName] is passed and the pubspec doesn't have a matching name
-  /// field, this will throw a [PubspecError].
+  /// field, this will throw an [ApplicationException].
   ///
   /// [location] is the location from which this pubspec was loaded.
   Pubspec.fromMap(
@@ -652,9 +652,9 @@
 
 /// Parses [node] to a [VersionConstraint].
 ///
-/// If or [defaultUpperBoundConstraint] is specified then it will be set as the
-/// max constraint if the original constraint doesn't have an upper bound and it
-/// is compatible with [defaultUpperBoundConstraint].
+/// `null` is interpreted as [VersionConstraint.any].
+///
+/// A String is parsed with [VersionConstraint.parse].
 VersionConstraint _parseVersionConstraint(
   YamlNode? node,
   String? packageName,
diff --git a/lib/src/pubspec_utils.dart b/lib/src/pubspec_utils.dart
index 3163124..0e84c54 100644
--- a/lib/src/pubspec_utils.dart
+++ b/lib/src/pubspec_utils.dart
@@ -129,10 +129,10 @@
 ///
 /// Will use just the constraint for dependencies hosted at the default host.
 ///
-/// Relative paths will be relative to [relativeEntrypoint].
+/// Relative paths will be relative to the directory of [receivingPackage].
 ///
 /// The syntax used for hosted will depend on the language version of
-/// [relativeEntrypoint]
+/// [receivingPackage].
 Object pubspecDescription(
   PackageRange range,
   SystemCache cache,
diff --git a/lib/src/rate_limited_scheduler.dart b/lib/src/rate_limited_scheduler.dart
index 0480b82..6cb03b9 100644
--- a/lib/src/rate_limited_scheduler.dart
+++ b/lib/src/rate_limited_scheduler.dart
@@ -20,7 +20,7 @@
 ///
 /// The operation will run in the [Zone] that the task was in when enqueued.
 ///
-/// If a task if [preschedule]d and later [schedule]d before the operation is
+/// If a task if `preschedule`d and later [schedule]d before the operation is
 /// started, the task will go in front of the queue with the zone of the
 /// [schedule] operation.
 ///
diff --git a/lib/src/solver/package_lister.dart b/lib/src/solver/package_lister.dart
index c38d300..b8f5cca 100644
--- a/lib/src/solver/package_lister.dart
+++ b/lib/src/solver/package_lister.dart
@@ -388,7 +388,7 @@
   /// Returns the first and last indices in [_versions] of the contiguous set of
   /// versions whose pubspecs match [match].
   ///
-  /// Assumes [match] returns true for the pubspec whose version is at [index].
+  /// Assumes [match] returns true for the pubspec whose version is at [start].
   Future<(int firstIndex, int lastIndex)> _findBounds(
     int start,
     bool Function(Pubspec) match,
diff --git a/lib/src/solver/partial_solution.dart b/lib/src/solver/partial_solution.dart
index 466f22d..90b869c 100644
--- a/lib/src/solver/partial_solution.dart
+++ b/lib/src/solver/partial_solution.dart
@@ -164,9 +164,9 @@
     throw StateError('[BUG] $term is not satisfied.');
   }
 
-  /// Returns whether `this` satisfies [other].
+  /// Returns whether `this` satisfies [term].
   ///
-  /// That is, whether [other] must be true given the assignments in this
+  /// That is, whether [term] must be true given the assignments in this
   /// partial solution.
   bool satisfies(Term term) => relation(term) == SetRelation.subset;
 
diff --git a/lib/src/solver/report.dart b/lib/src/solver/report.dart
index b16d706..880fdf2 100644
--- a/lib/src/solver/report.dart
+++ b/lib/src/solver/report.dart
@@ -332,8 +332,7 @@
   /// Reports the results of the upgrade on the package named [name].
   ///
   /// If [alwaysShow] is true, the package is reported even if it didn't change,
-  /// regardless of [_type]. If [highlightOverride] is true (or absent), writes
-  /// "(override)" next to overridden packages.
+  /// regardless of [_type].
   ///
   /// Returns true if the package had changed.
   Future<bool> _reportPackage(
diff --git a/lib/src/solver/version_solver.dart b/lib/src/solver/version_solver.dart
index 49153a3..a77d2c1 100644
--- a/lib/src/solver/version_solver.dart
+++ b/lib/src/solver/version_solver.dart
@@ -232,12 +232,13 @@
     return unsatisfied.package.name;
   }
 
-  /// Given an [incompatibility] that's satisfied by [_solution], [conflict
-  /// resolution][] constructs a new incompatibility that encapsulates the root
-  /// cause of the conflict and backtracks [_solution] until the new
+  /// Given an [incompatibility] that's satisfied by [_solution],
+  /// [conflict resolution][] constructs a new incompatibility that encapsulates
+  /// the root cause of the conflict and backtracks [_solution] until the new
   /// incompatibility will allow [_propagate] to deduce new assignments.
   ///
-  /// [conflict resolution]: https://github.com/dart-lang/pub/tree/master/doc/solver.md#conflict-resolution
+  /// [conflict resolution]:
+  /// https://github.com/dart-lang/pub/tree/master/doc/solver.md#conflict-resolution
   ///
   /// Adds the new incompatibility to [_incompatibilities] and returns it.
   Incompatibility _resolveConflict(Incompatibility incompatibility) {
diff --git a/lib/src/source.dart b/lib/src/source.dart
index 45a89b4..0c3fe70 100644
--- a/lib/src/source.dart
+++ b/lib/src/source.dart
@@ -12,7 +12,6 @@
 import 'lock_file.dart';
 import 'package_name.dart';
 import 'pubspec.dart';
-import 'source.dart' as src;
 import 'source/cached.dart';
 import 'source/git.dart';
 import 'source/hosted.dart';
@@ -88,8 +87,8 @@
 
   /// Parses a [PackageId] from a name and a serialized description.
   ///
-  /// This only accepts descriptions serialized using [serializeDescription]. It
-  /// should not be used with user-authored descriptions.
+  /// This should accept descriptions serialized using
+  /// [ResolvedDescription.serializeForLockfile].
   ///
   /// [containingDir] is the path to the directory lockfile where this
   /// description appears. It may be `null` if the description is coming from
@@ -115,7 +114,7 @@
   /// downloaded).
   ///
   /// By default, this assumes that each description has a single version and
-  /// uses [describe] to get that version.
+  /// uses [SystemCache.describe] to get that version.
   Future<List<PackageId>> doGetVersions(
     PackageRef ref,
     Duration? maxAge,
@@ -143,7 +142,7 @@
   ///
   /// For sources that have only one version for a given [PackageRef], this may
   /// return a pubspec with a different version than that specified by [id]. If
-  /// they do, [describe] will throw a [PackageNotFoundException].
+  /// they do, [SystemCache.describe] will throw a [PackageNotFoundException].
   ///
   /// This may be called for packages that have not yet been downloaded during
   /// the version resolution process.
@@ -215,7 +214,7 @@
 /// to lock down a specific version.
 ///
 /// This is currently only relevant for the [GitSource] that resolves the
-/// [src.Description.ref] to a specific commit id in [GitSource.doGetVersions].
+/// [GitDescription.ref] to a specific commit id in [GitSource.doGetVersions].
 ///
 /// This is the information that goes into a `pubspec.lock` file together with
 /// a version number (that is represented by a [PackageId].
@@ -226,7 +225,7 @@
   /// When a [LockFile] is serialized, it uses this method to get the
   /// [description] in the right format.
   ///
-  /// [containingPath] is the containing directory of the root package.
+  /// [containingDir] is the containing directory of the root package.
   Object? serializeForLockfile({required String? containingDir});
 
   /// Converts `this` into a human-friendly form to show the user.
diff --git a/lib/src/source/cached.dart b/lib/src/source/cached.dart
index a83f96d..ad7de00 100644
--- a/lib/src/source/cached.dart
+++ b/lib/src/source/cached.dart
@@ -14,13 +14,12 @@
 import '../source.dart';
 import '../system_cache.dart';
 
-/// Base class for a [BoundSource] that installs packages into pub's
-/// [SystemCache].
+/// Base class for a [Source] that installs packages into pub's [SystemCache].
 ///
-/// A source should be cached if it requires network access to retrieve
-/// packages or the package needs to be "frozen" at the point in time that it's
-/// installed. (For example, Git packages are cached because installing from
-/// the same repo over time may yield different commits.)
+/// A source should be cached if it requires network access to retrieve packages
+/// or the package needs to be "frozen" at the point in time that it's
+/// installed. (For example, Git packages are cached because installing from the
+/// same repo over time may yield different commits.)
 abstract class CachedSource extends Source {
   /// If [id] is already in the system cache, just loads it from there.
   ///
@@ -76,7 +75,7 @@
 
 /// The result of repairing a single cache entry.
 class RepairResult {
-  /// `true` if [package] was repaired successfully.
+  /// `true` if [packageName] was repaired successfully.
   /// `false` if something failed during the repair.
   ///
   /// When something goes wrong the package is attempted removed from
diff --git a/lib/src/source/git.dart b/lib/src/source/git.dart
index da42afb..747d494 100644
--- a/lib/src/source/git.dart
+++ b/lib/src/source/git.dart
@@ -251,7 +251,8 @@
     });
   }
 
-  /// Lists the file as it is represented at the revision of [description].
+  /// Lists the file as it is represented at the revision of
+  /// [resolvedDescription].
   ///
   /// Assumes that revision is present in the cache already (can be done with
   /// [_ensureRevision]).
@@ -677,9 +678,6 @@
   /// out the working tree, but instead makes the repository a local mirror of
   /// the remote repository. See the manpage for `git clone` for more
   /// information.
-  ///
-  /// If [shallow] is true, creates a shallow clone that contains no history
-  /// for the repository.
   Future<void> _clone(
     String from,
     String to, {
diff --git a/lib/src/source/hosted.dart b/lib/src/source/hosted.dart
index 5a91eb3..ef39e40 100644
--- a/lib/src/source/hosted.dart
+++ b/lib/src/source/hosted.dart
@@ -1154,11 +1154,6 @@
   ///
   /// Validates that the content hash of [id] corresponds to what is already in
   /// cache, if not the file is redownloaded.
-  ///
-  /// If [allowOutdatedHashChecks] is `true` we use a cached version listing
-  /// response if present instead of probing the server. Not probing allows for
-  /// `pub get` with a filled cache to be a fast case that doesn't require any
-  /// new version-listings.
   @override
   Future<DownloadPackageResult> downloadToSystemCache(
     PackageId id,
@@ -1446,8 +1441,8 @@
   ) =>
       _download(id, destPath, cache);
 
-  /// Downloads package [package] at [version] from the archive_url and unpacks
-  /// it into [destPath].
+  /// Downloads package [id] from the archive_url and unpacks it into
+  /// [destPath].
   ///
   /// If there is no archive_url, try to fetch it from
   /// `$server/packages/$package/versions/$version.tar.gz` where server comes
@@ -1747,7 +1742,7 @@
   }
 
   /// Enables speculative prefetching of dependencies of packages queried with
-  /// [getVersions].
+  /// [doGetVersions].
   Future<T> withPrefetching<T>(Future<T> Function() callback) async {
     return await _scheduler.withPrescheduling((preschedule) async {
       return await runZoned(
@@ -1761,7 +1756,7 @@
   static const _prefetchingKey = #_prefetch;
 }
 
-/// The [PackageName.description] for a [HostedSource], storing the
+/// The [PackageRef.description] for a [HostedSource], storing the
 /// [packageName] and resolved [url] of the package server.
 class HostedDescription extends Description {
   final String packageName;
diff --git a/lib/src/system_cache.dart b/lib/src/system_cache.dart
index dc6e949..7bedffc 100644
--- a/lib/src/system_cache.dart
+++ b/lib/src/system_cache.dart
@@ -213,11 +213,6 @@
   ///
   /// [id] must refer to a cached package.
   ///
-  /// If [allowOutdatedHashChecks] is `true` we use a cached version listing
-  /// response if present instead of probing the server. Not probing allows for
-  /// `pub get` with a filled cache to be a fast case that doesn't require any
-  /// new version-listings.
-  ///
   /// Returns [id] with an updated [ResolvedDescription], this can be different
   /// if the content-hash changed while downloading.
   Future<DownloadPackageResult> downloadPackage(PackageId id) async {
diff --git a/test/descriptor.dart b/test/descriptor.dart
index cee394d..ab991d3 100644
--- a/test/descriptor.dart
+++ b/test/descriptor.dart
@@ -185,13 +185,13 @@
 /// versions are expected to be downloaded.
 ///
 /// If [port] is passed, it's used as the port number of the local hosted server
-/// that this cache represents. It defaults to [globalServer.port].
+/// that this cache represents. It defaults to `globalServer.port`.
 ///
 /// If [includePubspecs] is `true`, then pubspecs will be created for each
 /// package. Defaults to `false` so that the contents of pubspecs are not
 /// validated since they will often lack the dependencies section that the
 /// real pubspec being compared against has. You usually only need to pass
-/// `true` for this if you plan to call [create] on the resulting descriptor.
+/// `true` for this if you plan to call `create()` on the resulting descriptor.
 Descriptor cacheDir(
   Map<String, dynamic> packages, {
   int? port,
@@ -216,7 +216,7 @@
 /// downloaded from the mock package server.
 ///
 /// If [port] is passed, it's used as the port number of the local hosted server
-/// that this cache represents. It defaults to [globalServer.port].
+/// that this cache represents. It defaults to `globalServer.port`.
 Descriptor hostedCache(Iterable<Descriptor> contents, {int? port}) {
   return dir(hostedCachePath(port: port), contents);
 }
@@ -225,7 +225,7 @@
 /// packages downloaded from the mock package server.
 ///
 /// If [port] is passed, it's used as the port number of the local hosted server
-/// that this cache represents. It defaults to [globalServer.port].
+/// that this cache represents. It defaults to `globalServer.port`.
 Descriptor hostedHashesCache(Iterable<Descriptor> contents, {int? port}) {
   return dir(cachePath, [
     dir(
@@ -314,10 +314,10 @@
 
 /// Describes a `.dart_tools/package_config.json` file.
 ///
-/// [dependencies] is a list of packages included in the file.
+/// [packages] is a list of packages included in the file.
 ///
 /// Validation checks that the `.dart_tools/package_config.json` file exists,
-/// has the expected entries (one per key in [dependencies]), each with a path
+/// has the expected entries (one per key in [packages]), each with a path
 /// that matches the `rootUri` of that package.
 Descriptor packageConfigFile(
   List<PackageConfigEntry> packages, {
diff --git a/test/descriptor/tar.dart b/test/descriptor/tar.dart
index f8570e5..954a75a 100644
--- a/test/descriptor/tar.dart
+++ b/test/descriptor/tar.dart
@@ -19,7 +19,7 @@
         super.protected();
 
   /// Creates the files and directories within this tar file, then archives
-  /// them, compresses them, and saves the result to [parentDir].
+  /// them, compresses them, and saves the result to [parent].
   @override
   Future create([String? parent]) {
     return withTempDir((tempDir) async {
diff --git a/test/embedding/ensure_pubspec_resolved.dart b/test/embedding/ensure_pubspec_resolved.dart
index 8e06a59..37dc984 100644
--- a/test/embedding/ensure_pubspec_resolved.dart
+++ b/test/embedding/ensure_pubspec_resolved.dart
@@ -526,10 +526,6 @@
 }
 
 /// Ensures that pub doesn't require "dart pub get" for the current package.
-///
-/// If [runDeps] is false, `pub deps` isn't included in the test. This is
-/// sometimes not desirable, since it uses slightly stronger checks for pubspec
-/// and lockfile consistency.
 Future<void> _noImplicitPubGet({
   Map<String, String?>? environment,
 }) async {
diff --git a/test/package_server.dart b/test/package_server.dart
index 2b59930..7967aa4 100644
--- a/test/package_server.dart
+++ b/test/package_server.dart
@@ -333,8 +333,7 @@
   static final defaultAdvisoriesUpdated =
       DateTime.fromMicrosecondsSinceEpoch(0);
 
-  /// Add a security advisory which affects [affectedVersions] versions of
-  /// package [packageName].
+  /// Add a security advisory which affects versions in [affectedPackages].
   void addAdvisory({
     required String advisoryId,
     String? displayUrl,
diff --git a/test/test_pub.dart b/test/test_pub.dart
index bdc36cc..616590f 100644
--- a/test/test_pub.dart
+++ b/test/test_pub.dart
@@ -700,7 +700,7 @@
   ]).create();
 }
 
-/// Creates a lock file for [sources] without running `pub get`.
+/// Creates a lock file without running `pub get`.
 ///
 /// [sandbox] is a list of path dependencies to be found in the sandbox
 /// directory.
@@ -1017,7 +1017,7 @@
   return server;
 }
 
-/// Create temporary folder 'bin/' containing a 'git' script in [sandbox]
+/// Create temporary folder 'bin/' containing a 'git' script in [d.sandbox]
 /// By adding the bin/ folder to the search `$PATH` we can prevent `pub` from
 /// detecting the installed 'git' binary and we can test that it prints
 /// a useful error message.
diff --git a/tool/extract_all_pub_dev.dart b/tool/extract_all_pub_dev.dart
index 50e7168..e140f48 100644
--- a/tool/extract_all_pub_dev.dart
+++ b/tool/extract_all_pub_dev.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 /// This is a manual test that can be run to test the .tar.gz decoding.
-/// It will save progress in [statusFileName] such that it doesn't have to be
+/// It will save progress in `statusFileName` such that it doesn't have to be
 /// finished in a single run.
 library;
 
