code: func Cmd(params base.Parameters) *subcommands.Command {
  	return &subcommands.Command{
  		UsageLine: "semantic-diff SCRIPT CONFIG [CONFIG CONFIG ...]",
  		ShortDesc: "interprets a high-level config, compares the result to existing configs",
  		LongDesc: `Interprets a high-level config, compares the result to existing configs.
  
  THIS SUBCOMMAND WILL BE DELETED AFTER IT IS NO LONGER USEFUL. DO NOT DEPEND ON
  IT IN ANY AUTOMATIC SCRIPTS. FOR MANUAL USE ONLY. IF YOU REALLY-REALLY NEED TO
  USE IT FROM AUTOMATION, PLEASE FILE A BUG.
  
  Uses semantic comparison. Normalizes all protos before comparing them via
  'git diff'. Intended to be used manually when switching existing *.cfg to be
  generated from *.star.
  
  Accepts a path to the entry-point *.star script and paths to existing configs
  to diff against. Their filenames (not full paths) will be used to find
  corresponding generated files, and also to figure out the proto schema to use.
  
  Example:
  
    $ lucicfg semantic-diff main.star configs/cr-buildbucket.cfg configs/luci-milo.cfg
  `,
  		CommandRun: func() subcommands.CommandRun {
  			dr := &diffRun{}
  			dr.Init(params)
  			dr.AddMetaFlags()
  			dr.Flags.StringVar(&dr.outputDir, "output-dir", "", "Where to put normalized configs if you want them preserved after the command completes.")
  			return dr
  		},
  	}
  }
docs: // Cmd is 'semantic-diff' subcommand.