How does one set a default input value in a plugin?

As I’ve been overloading the forum all week with my hopefully decreasingly “newbie” questions, I am trying to implement plugin extensions for the nebula rpm plugin, via composition, as I’ve been urged to do.

I have a Task class in my plugin that extends Rpm IS-A Task.

I want this class to set certain default values.
After writing some debug code, I see that all these values reside under with a prefix of “exten”.:

                        exten.packageDescription:my app -  file installer.

The only values that are non-null are the ones I set in the build script that uses this plugin. Many of ones that are null, I want to set in my plugin.

So the question is, how?

Looking at the DSL documentation for Task I find that the inputs are read-only.

TaskInputs inputs (read-only)
the inputs of this task.

So again - what method allows me to set these in my Task-derived class?

The only example I have, from the rpm plugin itself, is, from what I have learned, something of an anti-pattern because it uses internal methods.

    import org.gradle.api.internal.ConventionMapping
    import org.gradle.api.internal.IConventionAware
    ConventionMapping mapping = ((IConventionAware) this).getConventionMapping()

            // Could come from extension
  'fileType', { parentExten?.getFileType() })
  'addParentDirs', { parentExten?.getAddParentDirs()?:true })
  'archStr', {
  'os', { parentExten?.getOs()?:Os.UNKNOWN})
  'type', { parentExten?.getType()?:RpmType.BINARY })

What is the right way for me to set these values in my class?

Update: I thought that maybe the Map might possible be read-only in terms of keys that could be added/removed but that value changes might be allowed, but this does not appear to be the case:["exten.release"] = 'as'
and extern.release still shows up as null.

To make this a little clearer, here is what I want to happen:

1a) if value for a given property is set in the build script use that.
1b) if not, call applyConventions() on task class and set it there (somehow)

2a) if value for property is now set, use that.
2b) if not, call applyConventions() on task parent class and set it there (somehow)

3a) if value for property is now set, use that.
3b) if not call applyConventions() on Rpm class (parent of our parent class and follow the logic there.

Not sure how to do 1b) and 2b)