Source: https://guthlabs.ai/docs/instruments/irr-solver/mechanism/

instrument mechanism / verified-clean

# IRR Solver mechanism

The inspectable method record for IRR Solver, kept separate from implementation and qualification.

Status: **VERIFIED_CLEAN**Lifecycle: **verified-clean**

## Model scope

The NPV formula is standard for equally spaced cash flows, but the missing period convention, solver controls, root-selection policy, and MIRR definitions prevent an unconditional PASS. Return decimal IRR internally, display percentage separately, and explicitly report no-root and multiple-root cases.

- The core IRR equation is standard, but the specification does not define the time-period convention: each cash-flow-list index must represent an equal period, with CF_0 at t=0.

- The Newton-Raphson/bisection choice is underspecified: no initial guess, bracketing rule, stopping tolerance, maximum iterations, or fallback behavior is given.

- IRR is not necessarily unique for non-conventional cash flows; the implementation must report all discovered roots or clearly state its root-selection policy.

- The domain constraint r > -1 is required for ordinary real-valued discounting. Rates at or below -100% cause undefined or non-real powers for general integer t.

- MIRR is labeled optional but has no finance convention specified for the finance rate, reinvestment rate, treatment of negative cash flows, or period units.

- The output label 'IRR %' is ambiguous unless the returned decimal rate and percentage display convention are explicitly distinguished.

## Units and conventions

- Cash flows use one consistent currency unit; the currency itself does not affect IRR.

- The list element at index t is CF_t and represents an equal time interval; CF_0 occurs at time zero.

- The computed rate is per cash-flow-list period. If periods are monthly, annualization is (1+r_monthly)^12-1; if annual, no annualization is applied.

- Newton-Raphson calculations below use a deterministic initial guess and tolerance of 1e-10 on the rate or NPV residual; displayed percentages multiply the decimal rate by 100.

- The valid ordinary real-rate domain is r > -1.

## Inspectable vector

One of 4 source-bound review vectors:

````
{
  "inputs": {
    "cash_flows": [
      -1000,
      1100
    ],
    "method": "Newton-Raphson",
    "initial_guess": 0,
    "tolerance": 1e-10,
    "period": "annual"
  },
  "expected_outputs": {
    "irr_decimal": "0.100000000000000",
    "irr_percent": "10.0000000000000%",
    "convergence": "converged"
  },
  "working": "NPV(r) = -1000 + 1100/(1+r). NPV'(r) = -1100/(1+r)^2. Iteration 0: r0=0, NPV=100, NPV'=-1100, so r1=0-100/(-1100)=0.0909090909. Iteration 1: NPV(r1)=-1000+1100/(12/11)=-1000+1008.333333=8.333333; NPV'(r1)=-1100(11/12)^2=-924.305556; r2=0.0909090909-8.333333/(-924.305556)=0.0999248685. Iteration 2 gives r3 approximately 0.0999999949, and the next iteration gives 0.100000000000000. Therefore IRR=10.0000000000000%."
}
````

## Failure boundary

**BREAK_CLAIMED** · SELF_FLAGGED

The specification exposes undefined evaluations at r=-1, no-real-solution cash flows, and multiple IRRs; a solver that assumes one finite root or does not guard the 1+r denominator can fail or return a misleading result.

## Other records

[01**Overview**](<https://guthlabs.ai/docs/instruments/irr-solver/>)[03**Implementation**](<https://guthlabs.ai/docs/instruments/irr-solver/implementation/>)[04**Qualification**](<https://guthlabs.ai/docs/instruments/irr-solver/qualification/>)

## Sources and evidence

These pointers bind the page to evidence. They do not grant authority or collapse verification into deployment.

- `VERIFIED_LEDGER.json`

- `evidence-tranche6/tranche6-results.json`

- `BOUNDARY_HAZARD_CATALOG.json`
