All the contracts in scope are missing pausability mechanism and in case of a failure will not be able to be stopped. This poses significant risk especially in cross-chain protocols where handlers (ChakraSettlementHandler and handler_erc20) are in complete control over the locked funds of the users or can be used to mint the entire supply of the Chakra token in this scenario.
By having pause/unpause functions and whenNotPaused modifiers applied you will minimize the risk in case there is an issue in your contracts. When paused you can think of a plan to rescue the funds. Pausing is also beneficial when upgrade is performed, that way you will eliminate the risk of failing cross-chain transactions when, for example, important variable is being changed. 
Without a way to pause cross_chain_erc20_settlement, you cant stop users from spamming transactions when contracts are malfunctioning. 
In order to fix this you should:
https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable/blob/master/contracts/utils/PausableUpgradeable.sol
