This is a "facts of life" thing.
You can return(bool success
) and this will be visible to other contracts that call the function, e.g. in a chain of functions calling functions in other contracts.
Transactions always start with an externally owned account signing a transaction and submitting it to the network. The returned value is a transaction receipt. The outcome of the transaction is unknown because nothing has happened yet except that a request has been submitted to the network for verification in the future.
A typical approach to coping with this fact of life is to wait for the transaction to be mined, then inspect the transaction log for useful output, inspect the success/fail status and draw your own conclusions, or inspect a read-only function to discover the new state after the transaction was mined. The returned values are forever out of reach for a Web3 client.
Hope it helps.