DCF Test Battery v1.0 — Cycle-1.5 Results (v1.0.38)

Reconciliation results following the v1.0.38 platform DCF structural fix. Three changes shipped: production ramp-up profile, sustaining capex deduction, depreciation tax shield. Two cycle-1 findings materially closed; one new test pass; one improvement-but-still-failing; full reference convergence not yet achieved.

CYCLE 1.5 v1.0.38 BUILD 9 MAY 2026 4 DAYS POST CYCLE-1
Velocity of correction. Cycle-1 results were published 9 May 2026 in the same build cycle as v1.0.45 case studies and Stripe pricing. The cycle-1 page identified three structural simplifications in the platform DCF (no production ramp-up, no sustaining capex, no depreciation tax shield) as causing material over-crediting against published Kakula DFS targets. Cycle-1.5 ships those three fixes and re-runs the 13-test battery against the corrected math. Time elapsed: same-day publication of fix following published-as-broken finding. The pattern is the discipline architecture closing its own gap within the same correction cycle as the publication itself.

The three structural fixes (v1.0.38)

The platform DCF tool now accepts three additional inputs on the calculation form, with sensible defaults that reproduce the cycle-1 reference DCF structure:

InputDefaultWhat it does
Production Ramp-up Profile50% / 75% / 100% over years 1-3Years 1-2 cashflows scaled by ramp factor; year 3+ at full capacity. Removes the over-credit caused by front-loading 100% of LoM production into the highest-PV early years.
Sustaining CAPEX$50M/yrDeducted from cashflow each year of operation. Captures ongoing maintenance capex that the v1.0.37 NOPAT-only formula omitted. User-overridable per asset.
Depreciation Tax ShieldStraight-line over mine lifeTax computed on (EBITDA − depreciation), not on raw EBITDA. Reduces cash taxes early in mine life by the depreciation × tax-rate amount. Alternative methods supported (10-year and 7-year accelerated; "none" preserves v1.0.37 behaviour).

The math anatomy is published in js/app.js at calcDCF() and reproduced in the Python port at dcf_platform_v1_0_38.py. Reference implementation already incorporated these three elements; the v1.0.38 fix brings the platform tool into alignment.

Cycle-1.5 reconciliation against Kakula DFS

Inputs held constant from cycle-1: Kakula DFS published values (price USD 3.10/lb real; capex USD 0.65bn; mine life 21 yrs; recovery 86%; discount rate 8%; tax 30%; royalty 3.5%; production 310 kt/yr contained Cu per Ivanhoe 2026 guidance midpoint).

Testv1.0.37 (cycle-1)v1.0.38 (cycle-1.5)Status
NPV @ 8% at literal $0.48/lb opex$9.81bn (+78.3% vs $5.5bn target)$8.59bn (+56.2%)IMPROVED — gap closed 22 percentage points
IRR at literal $0.48/lb opex160.6% (implausible vs published 77%)102.5%IMPROVED — no longer implausible; still above published
Reconciling cost (back-solved to $5.5bn target)$1.51/lb-recovered$1.28/lb-recoveredIMPROVED — gap to reference $1.06 narrowed from $0.45 to $0.22
IRR at reconciling costnot computed in cycle-172.5%PASS — within 5pp of published 77%
C3.1 price elasticity (3.10→3.13)1.27 (vs 1.5–3.0 expected)1.34STILL FAIL — improved but at literal cost
C3.2 DR elasticity (8%→9%)7.7% (FAIL — below 8%)8.3%NOW PASS — within 8–15% range

Findings — five

Finding A — Platform IRR no longer implausible. At literal-spec inputs (cash cost USD 0.48/lb first-5-years used as LoM constant), the v1.0.37 platform computed 160.6% IRR — more than 2× published. v1.0.38 computes 102.5% — still above the published 77% but no longer in implausible territory. At the reconciling cost of $1.28/lb, the v1.0.38 platform computes 72.5% IRR, within 5 percentage points of the published 77%. The implausibility finding from cycle-1 is materially closed.
Finding B — Reconciliation gap improved but still material. C4.1 gap @ literal $0.48: +78.3% (v1.0.37) → +56.2% (v1.0.38). The 22-percentage-point gap closure is real; the remaining +56.2% is significant and reflects that the literal-spec first-5-years cash cost of $0.48/lb was never meant to be used as a LoM constant. The v1.0 spec amendment (drafted, awaiting editorial sign-off) adds LoM-average cost trajectory as a required reconciliation input — when that amendment ships, the literal-cost reconciliation test moves to the reconciling cost basis and the +56.2% framing dissolves.
Finding C — C3.2 discount-rate elasticity now passes. v1.0.37 platform computed 7.7% NPV drop on an 8%→9% discount-rate move, just below the 8–15% expected range. v1.0.38 computes 8.3% — within the expected range. The cycle-1 reference DCF passed this test at 8.4%; the platform now passes at 8.3%. C3.1 price elasticity remains a FAIL at literal cost (1.34 vs 1.5–3.0 expected) but improved from the 1.27 cycle-1 platform reading. C3.1 enters the expected range only as cost approaches reconciling level — same conditional pass shape as the reference DCF in cycle-1.
Finding D — Reconciling cost convergence partial, not complete. v1.0.38 platform reconciling cost is $1.28/lb-recovered. Reference DCF reconciling cost was $1.06/lb. Gap to reference narrowed from $0.45 (cycle-1) to $0.22 (cycle-1.5) — material convergence but not full. The remaining $0.22/lb gap reflects implementation differences between the platform's structural fixes and the reference Python's structural fixes that cycle-2 will diagnose (likely candidates: depreciation schedule edge-cases at year 21; sustaining capex treatment in negative-EBITDA scenarios; ramp-up handling of royalty vs revenue base). The platform is now closer to the reference than to its own cycle-1 position; cycle-2 closes the residual gap.
Finding E — Unit ambiguity not addressed by structural fixes (deferred to v1.0.39). The form-label disambiguation issue identified in cycle-1 (contained-metal vs recovered-metal user-input convention) is independent of the three structural fixes shipped in v1.0.38 and remains pending. Either explicit "$/t-contained" label clarification on the OPEX field, or restructuring the form to take ore tonnes + grade as separate inputs (the mining-engineer mental model). Deferred to v1.0.39 form-clarification patch.

What v1.0.38 does NOT close

Cycle-1.5 demonstrates the discipline architecture closes its own gaps within the same correction cycle as the publication. It does not yet deliver full reference convergence. Specifically:

Recommendations updated

The five engineering recommendations published in cycle-1 are updated:

Cycle-1 recommendationCycle-1.5 status
Add ramp-up profile inputSHIPPED — v1.0.38; default 50%/75%/100%
Add sustaining capex inputSHIPPED — v1.0.38; default $50M/yr
Add depreciation tax shieldSHIPPED — v1.0.38; default straight-line over mine life
Clarify input units in form labelsDEFERRED to v1.0.39 form-clarification patch
Document the structural omissions explicitly on tool pageDONE — published in cycle-1 + cycle-1.5 results

Why this is published

Three reasons:

  1. Velocity of correction is the discipline. Cycle-1 published the three structural simplifications as the cause of over-crediting. Cycle-1.5 ships the fix in the same build cycle. The pattern of publishing-as-broken then publishing-as-fixed at correction-cycle speed is itself part of the institutional credibility architecture.
  2. Partial convergence is honest convergence. The platform did not fully match the reference. The remaining $0.22/lb gap is published, the cycle-2 work item is named, and the recommendation table is updated. A full-convergence claim that did not match the math would be the larger credibility cost.
  3. The Quality Standard requires it. Three-state model: every Sourced and Derived output must be auditable. The cycle-1.5 reconciliation is a Derived output; its inputs are Sourced; the methodology is published.

Cycle-2 will reduce the residual gap further. Cycle-3 extends to multi-asset reconciliation. Each cycle is published. Each cycle is dated. Each cycle is signed.

Update — cycle-2 published. Cycle-2 was completed within the same v1.0.45 build cycle on 9 May 2026 evening. The empirical diagnosis falsified the three named candidates and identified production volume methodology choice as the actual cause of the residual $0.22/lb gap. At vol-matched basis (273.43 kt/yr), reconciling costs converge to within $0.0001/lb across C4.1 and C4.2; C3.1 price elasticity converts from FAIL (1.34) to PASS (1.84). Read cycle-2 results.

Cycle-1.5 reference run: 9 May 2026. Reference: dcf_reference.py. Sensitivity: dcf_sensitivity.py. Platform v1.0.38: dcf_platform_v1_0_38.py (verbatim port of js/app.js calcDCF() v1.0.38 lines). Editorial responsibility: Nikesh Patel. Publication date: 9 May 2026 (companion document to DCF Test Battery v1.0 and cycle-1 results).