The methods are copied by assignment. In other words - by reference using Object.assign.
In case of conflicts the last composed method wins. To avoid method collision use the @stamp/collision stamp. To make sure a method is implemented use the @stamp/required stamp.
NOTE
When using the @stamp/required stamp it creates a proxy object and returns from the factory. This means that logger.__proto__ === Logger.compose.methods or logger.__proto__.debug === Logger.compose.methods.debug will no longer be true.
Other ways to add methods
Exactly the same stamp can be created in few ways. Here they all are.