Contract inheritance is basically just a coding trick. What happens in the compiler, is that all of the code is flattened into a single contract. So if A inherits B and you compile A, the compiler simply inserts the code of B into contract A.
Therefore you shouldn't need to deploy the base contract. You only need to deploy the two contracts which inherit ...
There are a couple of issues with your truffle-config.js:
Add quote to your wallet address:
You may still need provider for the wallet:
provider: () => new HDWalletProvider(mnemonic, https://rpc-mumbai.matic.today),
This is an example of part of my config.
Try it and hope it helps.