anchor.diff:  When a task input is annotated with `@Input` and is not a type Gradle understand directly (like `String`), then Gradle uses the serialized form of the input for up-to-date checks and the build cache key.
   Historically, Gradle also loads the serialized value from the last execution and then uses `equals()` to compare it to the current value for up-to-date checks.
   Doing so is error prone, doesn't work with the build cache and has a performance impact, therefore it has been deprecated.
  -Instead of using at `@Input` on a type Gradle doesn't understand directly, use `@Nested` and annotate the properties of the type accordingly.
  +Instead of using `@Input` on a type Gradle doesn't understand directly, use `@Nested` and annotate the properties of the type accordingly.
   
   [[changes_7.1]]
   == Upgrading from 7.0 and earlier
  
positive.code: these usages to APIs that are supported by the configuration cache.
  
  [[task_project]]
  ==== Calling `Task#getProject()` from a task action
  
  Calling link:{javadocPath}/org/gradle/api/Task.html#getProject--[Task.getProject()] from a task action at execution time is
  now deprecated and will be made an error in Gradle 8.0.
  
negative.code: [[unique_attribute_sets]]
  ==== Unique attribute sets
  
  The set of link:{javadocPath}/org/gradle/api/attribute/Attribute.html[Attribute]s associated with a _consumable_ configuration within a project, must be unique across all other configurations within that project which share the same set of link:{javadocPath}/org/gradle/api/capabilities/Capability.html[Capability]s.  This will be checked at the end of configuring variant configurations, as they are locked against further mutation.
  
  If the set of attributes is shared across configurations, consider adding an additional attribute to one of the variants for the sole purpose of disambiguation.
  
  