> For the complete documentation index, see [llms.txt](https://docs.trilobyte.finance/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.trilobyte.finance/protocol-mechanics/vault-lifecycle/renegotiation.md).

# Renegotiation

The **Renegotiation** phase allows the Pool Manager to propose modified loan terms when circumstances change. This happens from the **Active** phase only — a struggling loan can be restructured *before* it defaults. (Once a loan has defaulted, the manager's collateral is already slashed and it cannot be renegotiated.)

## When to Renegotiate

Renegotiation is useful when:

* The borrower is struggling with payments and needs adjusted terms
* Market conditions have changed and rates need updating
* A struggling loan needs restructuring *before* it defaults
* The loan term needs to be extended or shortened

## How It Works

### 1. Propose

The Pool Manager calls `propose_renegotiation(caller, new_interest_rate, new_loan_term)`:

* The new rate must be within the global `min_interest_rate`/`max_interest_rate` bounds, **and** it may not cut more than `max_rate_cut_bps` (default 5%) below the vault's **current** rate — a proposal that clears the global minimum but cuts too aggressively from the current rate is rejected with `RateCutTooLarge`
* The vault's current phase (**Active**) is saved
* A `RenegotiationProposal` is stored with the new rate, new term, and timestamp
* The vault transitions to the **Renegotiation** phase

### 2. Approve or Reject

**Approving now requires both parties.** `approve_renegotiation(caller, borrower)` takes the manager (`caller`) and the borrower as parameters, and **both must authorize the call** — the manager alone can no longer bind the borrower to new terms.

**If approved:**

* The vault's interest rate and loan term are updated
* The **installment is recalculated** from the **current total outstanding** (`outstanding_s + outstanding_j`) at the new rate/term — every period's waterfall re-derives the senior/junior split from the live outstanding ratio, so this recomputes both tranches' schedules together
* The payment schedule anchor resets, so `check_default` cannot fire again until a full period plus grace has passed from the renegotiation
* The vault transitions back to **Active**

**If rejected** (`reject_renegotiation(caller)`, manager only):

* The proposal is discarded
* The vault returns to the **Active** phase

{% hint style="warning" %}
Only one renegotiation proposal can exist at a time. A new proposal cannot be created while one is pending.
{% endhint %}

## Key Details

* Only the vault's **Pool Manager** can propose or reject a renegotiation; **approving requires both the manager and the borrower** to authorize the call
* The recalculation uses the **remaining outstanding principal** across both tranches, not the original principal — this means the new payment schedule reflects what's actually owed
* Renegotiation is a **pre-default** tool, reachable from **Active only**. Once a loan defaults, the manager's collateral is slashed and the loan can no longer be renegotiated — re-activating a defaulted loan would leave it unbacked.

## Relevant Functions

| Function                                    | Caller                                         | Description                                                        |
| ------------------------------------------- | ---------------------------------------------- | ------------------------------------------------------------------ |
| `propose_renegotiation(caller, rate, term)` | Manager                                        | Propose new terms, bounded by global limits and `max_rate_cut_bps` |
| `approve_renegotiation(caller, borrower)`   | Manager **and** Borrower (both `require_auth`) | Apply new terms, recalculate the shared installment                |
| `reject_renegotiation(caller)`              | Manager                                        | Cancel proposal, restore Active                                    |
| `get_reneg_proposal()`                      | Anyone                                         | View current proposal                                              |

*As of September 2026.*
