Dependency transformation not being triggered

I read the user guide section on transforming dependency artifacts on resolution which I’m trying to better understand by creating a build.gradle file that essentially does what the cpp-application and cpp-library plugins do when resolving the zipped header files that are published as part of those packages. However, Gradle is failing to resolve the configuration and isn’t triggering the transform. I created a simple cpp-library application and published it to my local Maven repository (sandbox:mathLib:1.0.0) which is what I’m trying to resolve.

Here’s my build.gradle file:

repositories {
  mavenLocal()
}

def artifactType = Attribute.of('artifactType', String)

configurations {
  mathHeaders {
    canBeConsumed = false
    canBeResolved = true

    attributes {
      attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage, Usage.C_PLUS_PLUS_API))
      attribute(artifactType, ArtifactTypeDefinition.DIRECTORY_TYPE)
    }
  }
}

abstract class UnzipTransform implements TransformAction<Parameters> {
  interface Parameters extends TransformParameters {}

  @InputArtifact
  abstract Provider<FileSystemLocation> getZipFile()

  @Override
  void transform(TransformOutputs outputs) {
    copy {
      from zipTree(zipFile)
      into outputs.dir(zipFile.name)
    }
  }
}

dependencies {
  registerTransform(UnzipTransform) {
    from.attribute(artifactType, ArtifactTypeDefinition.ZIP_TYPE)
    to.attribute(artifactType, ArtifactTypeDefinition.DIRECTORY_TYPE)
  }

  mathHeaders 'sandbox:mathLib:1.0.0'
}

tasks.register('printHeaders') {
  doLast {
    println configurations.mathHeaders.singleFile
  }
}

And this is the output on execution. It seems as though the transform should be triggered on the first variant:

$ gradle printHeaders
> Task :printHeaders FAILED

FAILURE: Build failed with an exception.

* Where:
Build file 'build.gradle' line: 47

* What went wrong:
Execution failed for task ':printHeaders'.
> Could not resolve all files for configuration ':mathHeaders'.
   > Could not resolve sandbox:mathLib:1.0.0.
     Required by:
         project :
      > Unable to find a matching variant of sandbox:mathLib:1.0.0:
          - Variant 'api' capability sandbox:mathLib:1.0.0:
              - Incompatible attribute:
                  - Required artifactType 'directory' and found incompatible value 'zip'.
              - Other attributes:
                  - Found org.gradle.status 'release' but wasn't required.
                  - Required org.gradle.usage 'cplusplus-api' and found compatible value 'cplusplus-api'.
          - Variant 'debugLink' capability sandbox:mathLib:1.0.0:
              - Incompatible attribute:
                  - Required org.gradle.usage 'cplusplus-api' and found incompatible value 'native-link'.
              - Other attributes:
                  - Required artifactType 'directory' but no value provided.
                  - Found org.gradle.native.architecture 'x86-64' but wasn't required.
                  - Found org.gradle.native.debuggable 'true' but wasn't required.
                  - Found org.gradle.native.linkage 'SHARED' but wasn't required.
                  - Found org.gradle.native.operatingSystem 'linux' but wasn't required.
                  - Found org.gradle.native.optimized 'false' but wasn't required.
                  - Found org.gradle.status 'release' but wasn't required.
          - Variant 'debugRuntime' capability sandbox:mathLib:1.0.0:
              - Incompatible attribute:
                  - Required org.gradle.usage 'cplusplus-api' and found incompatible value 'native-runtime'.
              - Other attributes:
                  - Required artifactType 'directory' but no value provided.
                  - Found org.gradle.native.architecture 'x86-64' but wasn't required.
                  - Found org.gradle.native.debuggable 'true' but wasn't required.
                  - Found org.gradle.native.linkage 'SHARED' but wasn't required.
                  - Found org.gradle.native.operatingSystem 'linux' but wasn't required.
                  - Found org.gradle.native.optimized 'false' but wasn't required.
                  - Found org.gradle.status 'release' but wasn't required.
          - Variant 'releaseLink' capability sandbox:mathLib:1.0.0:
              - Incompatible attribute:
                  - Required org.gradle.usage 'cplusplus-api' and found incompatible value 'native-link'.
              - Other attributes:
                  - Required artifactType 'directory' but no value provided.
                  - Found org.gradle.native.architecture 'x86-64' but wasn't required.
                  - Found org.gradle.native.debuggable 'true' but wasn't required.
                  - Found org.gradle.native.linkage 'SHARED' but wasn't required.
                  - Found org.gradle.native.operatingSystem 'linux' but wasn't required.
                  - Found org.gradle.native.optimized 'true' but wasn't required.
                  - Found org.gradle.status 'release' but wasn't required.
          - Variant 'releaseRuntime' capability sandbox:mathLib:1.0.0:
              - Incompatible attribute:
                  - Required org.gradle.usage 'cplusplus-api' and found incompatible value 'native-runtime'.
              - Other attributes:
                  - Required artifactType 'directory' but no value provided.
                  - Found org.gradle.native.architecture 'x86-64' but wasn't required.
                  - Found org.gradle.native.debuggable 'true' but wasn't required.
                  - Found org.gradle.native.linkage 'SHARED' but wasn't required.
                  - Found org.gradle.native.operatingSystem 'linux' but wasn't required.
                  - Found org.gradle.native.optimized 'true' but wasn't required.
                  - Found org.gradle.status 'release' but wasn't required.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 2s
1 actionable task: 1 executed

Can anyone help me understand why the transform is not being triggered?