Extending Unmanaged Model using @Managed

I am trying to extend a non-managed implementation of a BinarySpec using @Managed.

The non managed layout looks like:
MyBinarySpec (interface)
MyBinarySpecInternal extends MyBinarySpec
DefaultBinarySpecSpec (implements MyBinarySpecInternal)

My managed layout looks like:
ExtraBinarySpec extends MyBinarySpec (interface)
ExtraBinarySpecInternal extends ExtraBinarySpec (interface)

When I did this I get

Factory registration for 'ExtraBinarySpec' is invalid because the default implementation type 'org.gradle.platform.base.binary.BaseBinarySpec' does not implement unmanaged internal view 'MyBinarySpec', internal view was registered by MyRuleSource#register

I register MyBinarySpec like

  @BinaryType
  public void register(BinaryTypeBuilder<ExtraBinarySpec> builder) {
    builder.internalView(ExtraBinarySpecInternal.class);
  }

I apply the plugin that registers MyBinarySpec, its internal view and default implementation before my plugin.

Can anyone point me at what I’m missing?

You need a rule somewhere that tells Gradle how to implement MyBinarySpec. It’s not obvious from the example above if you have that rule already, but it should look something like this:

@BinaryType
public void registerMyBinarySpec(BinaryTypeBuilder<MyBinarySpec> builder) {
    builder.defaultImplementation(DefaultBinarySpec.class);
    builder.internalView(MyBinarySpecInternal.class);
}