The constraint that binds first, or null when viable.
netDebt + 200 gas reserve.
The fee the contract will ACTUALLY charge: zero in Recovery Mode or when exempt.
Whether the account is fee exempt. false when no account was supplied.
computeICR(collateral, entireDebt, price).
The threshold icr is measured against: CCR in Recovery Mode, MCR in normal mode.
checkRecoveryMode(price), always surfaced.
Price at which the opened position would hit MCR.
netDebt >= minNetDebt(), the debt floor.
debt + fee, the quantity the minNetDebt floor is checked against.
Every reason it is not viable, in a fixed order. Empty when viable.
The resulting system TCR if this open went through.
TroveManager.getTroveStatus(account) for the account this preview was run for, or
undefined when no account was supplied (MK-047).
undefined is not "no Trove", it is "not asked". Without an account there is nobody to
ask about, so the TROVE_ALREADY_ACTIVE gate cannot be evaluated and is not reported,
exactly as feeExempt reports the same absence for the fee gate. Pass account
whenever you have it; a preview rendered from a wallet always has it.
True only when every condition _openTrove enforces is satisfied.
The four gates, in the order the contract runs them: the Trove is not already active
(:633), the debt floor (:645), the mode correct individual ratio (:655 or :657),
and in normal mode the resulting system ratio (:665).
This docstring used to make that claim while the code checked three of the four
(MK-047). _requireTroveisNotActive was missing, so an owner who already held a Trove got
viable: true and the contract refused with BorrowerOps: Trove is active. The claim and
the code now agree, and open-gates.test.ts pins the count so they cannot drift apart
silently again.
viable REPLACES meetsRecoveryRequirement, which was true for every open in normal
mode and therefore could never warn about anything (MK-005).
Result of MusdClient.previewOpen: an explicit verdict plus every raw number.