anchor.diff:    ///
     /// We will only check for exact matches on this, after trimming out the
     /// trailing commit number.
  -  static const ignoredCommitNames = [
  +  static const lowercaseIgnoredCommitNames = [
       'update goldens',
  -    'Update Goldens',
  -    'Update goldens'
  +    'updated goldens',
     ];
   
     @override
  
positive.code:   @override
    Future run() async {
      final repo = DevToolsRepo.getInstance()!;
      final devtoolsVersionFile =
          await File('${repo.repoPath}/packages/devtools_app/lib/devtools.dart')
              .readAsString();
      const versionDeclarationPrefix = 'const String version = \'';
      final versionDeclaration =
          devtoolsVersionFile.indexOf(versionDeclarationPrefix);
      final versionEnd = devtoolsVersionFile.indexOf('\';');
      final version = devtoolsVersionFile.substring(
          versionDeclaration + versionDeclarationPrefix.length, versionEnd);
      final List tags = jsonDecode((await http.get(
              Uri.https('${auth}api.github.com', '/repos/flutter/devtools/tags')))
          .body);
  
      print('Current Devtools version is $version.  Retrieving the tagged commit '
          'with the closest version number to this version.');
      bool isDevBuild(String tagName) => tagName.split('-').length > 1;
      String nameOf(tag) => tag['name'];
      var closestTag = tags.skipWhile((tag) => isDevBuild(nameOf(tag))).first;
      for (var tag in tags) {
        if (isDevBuild(nameOf(tag))) {
          // This was a dev build.
          continue;
        }
        final tagVersion = getVersion(nameOf(tag));
        final closestTagVersion =
            closestTag == null ? null : getVersion(nameOf(closestTag));
        // TODO(djshuckerow): The script does not process dev versioning, so
        // ignore if the version file reports a dev version.
        final versionFileVersion =
            isDevBuild(version) ? null : getVersion(version);
        if ((versionFileVersion == null || tagVersion < versionFileVersion) &&
            (closestTagVersion == null || tagVersion > closestTagVersion)) {
          closestTag = tag;
        }
      }
  
      print('Getting the date of the tagged commit for ${closestTag["name"]}.');
      final taggedCommit = jsonDecode((await http.get(Uri.https(
        '${auth}api.github.com',
        '/repos/flutter/devtools/commits/${closestTag["commit"]["sha"]}',
      )))
          .body);
  
      final commitDate = taggedCommit['commit']['author']['date'];
      print('getting commits since $commitDate');
      final uri = Uri.https(
        '${auth}api.github.com',
        '/repos/flutter/devtools/commits',
        {'since': commitDate},
      );
      final commits = jsonDecode((await http.get(uri)).body);
      final changes = <String>[];
      for (var commit in commits) {
        if (commit['sha'] == taggedCommit['sha']) continue;
        final message = commit['commit']['message'];
        if (_shouldSkip(commit['commit']['message'])) {
          print('Skipping commit marked to be ignored: $message');
          continue;
        }
        changes.add('* ' + _sanitize(commit['commit']['message']));
        // TODO(djshuckerow): modify the commit message to link to the commit.
      }
  
      print('Incrementing version number');
      // TODO(djshuckerow): Support overriding the nextVersionNumber with a flag.
      String nextVersionNumber = nameOf(closestTag).replaceFirst('v', '');
      final List parts = nextVersionNumber.split('.');
      parts[2] = '${int.parse(parts[2]) + 1}';
      nextVersionNumber = parts.join('.');
      print('Incremented version number for the changelog from '
          '${closestTag["name"]} to $nextVersionNumber. Note that this is not '
          'inserted to any files other than changelog.');
      final versionDate = DateTime.now().toIso8601String().split('T').first;
      final changelogFile =
          File('${repo.repoPath}/packages/devtools/CHANGELOG.md');
      final output = '## $nextVersionNumber '
              '$versionDate\n' +
          changes.join('\n') +
          '\n\n';
      await changelogFile.writeAsString(
        output + changelogFile.readAsStringSync(),
      );
  
negative.code: 
  import '../model.dart';
  
  const versionArg = 'version';
  const sinceArg = 'since-tag';
  
  /// Changelog generator.
  ///
  /// Sample usage:
  /// ```
  ///   $dart tool/bin/repo_tool.dart generate-changelog
  ///   Retrieving the most recent tag...
  ///   Getting the date of the tagged commit for v2.4.0...
  ///   Adding entries to the changelog for all commits since 2021-07-08T16:51:57Z...
  ///   Skipping commit 9cfec998746f71bc533bd6617ae80f407560a952 because this is the commit of the previous tag
  ///   Incrementing version number...
  ///   Incremented version number for the changelog from 2.4.0 to 2.5.0. Note that this is not inserted to any files other than changelog.
  ///   Wrote the following output to /Users/kenzieschmoll/develop/devtools/packages/devtools/CHANGELOG.md:
  ///   ## 2.5.0
  ///   * Fix debug buttons layout overflow [#3224](https://github.com/flutter/devtools/pull/3224)
  ///   * Make return key submit connect form [#3228](https://github.com/flutter/devtools/pull/3228)
  ///   * Minor analysis updates to the repo [#3225](https://github.com/flutter/devtools/pull/3225)
  ///   * Always build devtools from a specified, specific sdk version [#3216](https://github.com/flutter/devtools/pull/3216)
  ///   ...
  ///
  ///   Please note that this script is intended to simplify the changelog writing process, not to completely replace it.
  ///   Please review the generated changelog and tune it by hand to make it easily legible.
  /// ```
  ///
  /// The command will write commits after the last tagged non-dev / non-dot
  /// release into the changelog file. It will ignore commits with names strictly
  /// matching [lowercaseIgnoredCommitNames].  It will then add 1 to the minor
  /// version number (eg 2.4.2 => 2.5.0).
  ///
  /// If `--version` is specified from the command
  /// (e.g. dart tool/bin/repo_tool.dart generate-changelog --version=2.5.2), this
  /// version number will be used for the CHANGELOG entry.
  ///
  /// If `--since-tag` is specified from the command
  /// (e.g. dart tool/bin/repo_tool.dart generate-changelog --version=2.5.2), this
  /// tag version will be used as the lower bound for commit history instead of
  /// using the most recent tagged version as the lower bound.
  class GenerateChangelogCommand extends Command {
    GenerateChangelogCommand() {
      argParser
        ..addOption(
          versionArg,
          help: 'Specify the target changelog version',
        )
        ..addOption(
          sinceArg,
          help: 'Specify the name of the tag to mark the lower bound',
        );
    }
  
    // You can authorize your access if you run into a github rate limit.
    // Don't check in your passwords or auth tokens.
    static const auth = '';
  