Hello,
Thank you, for the response.
My thoughts were more along the line of changing the Interfaces, not just addinging methods to existing interfaces and adding a V2,3,...,N model implementation and component.
I will give an example of a change that might be beneficial.
The List interface currently defines the following method, the Container interface also defines a nearly identical method.
```
@NotNull
default Collection<ListItem> getListItems() {
throw new UnsupportedOperationException();
}
```
All well and good, but if the generic type of the returned collection were something like
```
@NotNull
default Collection<? extends ListItem> getListItems() {
throw new UnsupportedOperationException();
}
```
Then interfaces that extend the List interface could be free to return specific types of list items.
If the model is invoked using "List" class, then all you know is that the list items satisfy the condition of being ListItems.
If the model is invoked using a model for an interface that extends "List", then you may know that the items are a specific type of ListItem.
This type of change, even if only the interface was changed and no implementations were modified, is a breaking change that will never be backwards compatible.
If the members that are exported from the bundle can only ever be added to, but never have anything removed (deprecated, sure, but not removed), and can never be refactored or rearchetected to suite the evolving needs and growing scope of the project then I fear the project will become locked into legacy decisions that may no longer suit the needs.
I see that there are references to a version 3.0.0 in the GitHub project.
For this version are major API breaking changes allowed, as semantic versioning would imply?
Kyle