_requireTroveisActive (:790, :1179-1189).
_requireNonZeroAdjustment (:789, :1377-1386): nothing was actually requested.
_requireSingularCollChange (:788, :1367-1375): one direction of collateral only.
_requireNonZeroDebtChange (:786, :1351-1356): a debt increase of zero.
Both debt legs were supplied (MK-077). SDK input validation, not a contract gate, and
the asymmetry with COLLATERAL_ADD_AND_WITHDRAW is real rather than an oversight:
_adjustTrove takes ONE debt leg, _mUSDChange with a separate _isDebtIncrease flag
(BorrowerOperations.sol:757-758), so "both" is unrepresentable on chain and there is
nothing for the contract to refuse. The collateral side needs _requireSingularCollChange
(:788, :1367-1375) precisely because msg.value and _collWithdrawal ARE two
parameters.
Before this reason existed the evaluator took the increase, dropped the repayment and
returned viable: true, while trove/index.ts:523-525 threw InvalidAdjustment for the
same input. The preview now refuses what the write path refuses.
assert(_collWithdrawal <= vars.coll) (:837). An assert, so on chain this is a Panic.
_requireNoCollWithdrawal (:1270, :1388-1393). Recovery Mode only.
_requireICRisAboveMCR (:1201) or _requireICRisAboveCCR (:1272). Absolute.
_requireNewICRisAboveOldICR (:1273). Recovery Mode, debt increases only.
_requireNewTCRisAboveCCR (:1209). Normal mode only; Recovery Mode omits it.
_requireHasBorrowingCapacity (:851, :1358-1365). Debt increases only.
_requireAtLeastMinNetDebt (:856, :1239-1244). Repayments only.
_requireValidMUSDRepayment (:859, :1246-1254). Repayments only.
_requireSufficientMUSDBalance (:860, :1229-1237). Repayments only.
Why an adjust preview came back not viable. Machine readable, stable strings.