A borrower can use a lenders renegotiation offer signature for addNewTranch() in refinanceFull(), as long as the loan only has one tranche.
This is because refinanceFull() only checks whether _renegotiationOffer.trancheIndex.length == _loan.tranche.length (src/lib/loans/MultiSourceLoan.sol#L168). When theres only one tranche in the loan, addNewTranche()s renegoationOffers check condition (src/lib/loans/MultiSourceLoan.sol#L379) will also satisfy.
refinanceFull() will also ensure the refinanced tranche gets a better apr (src/lib/loans/MultiSourceLoan.sol#L591). So the borrower gets better apr for the existing tranche instead of taking out additional principal in addNewTranche().
In addition, if the lender signed a renegotiation offer intended for refinanceFull(), the same offer can also be used for addNewTranche() if the condition _renegotiationOffer.trancheIndex[0] == _loan.tranche.length is satisfied. Because _renegotiationOffer.trancheIndex[0] is never checked in refinanceFull() flow, the lender might supply any values. In this case, the lender is forced to open a more junior tranche which can be risky for lenders.
Its better to prevent the same renegotiation offer from being used interchangeably in different methods with different behaviors.
In refinanceFull(), add a check to ensure _renegotiationOffer.trancheIndex[0]==0.
