Guth
NewsDocs
Page actions
View as Markdown ↗
Explore MCP tools ↗

instrument implementation / implementation-contract

Debt Avalanche vs Snowball implementation

A source-bound implementation contract for Debt Avalanche vs Snowball; deployment and executable qualification remain separate.

Status: VERIFIED_WITH_ERRATALifecycle: implementation-contract

Binding contract

This record describes what an executable surface must bind and validate. It does not claim that a public calculator, package, or production route is deployed.

Record owner
Guth Instruments
Lifecycle
verified-with-binding-errata
Evidence ID
t6-009
Effect
Computation or source lookup only

Input and validation requirements

  • If a minimum payment is less than the monthly interest, the balance can grow indefinitely; the simulator needs a negative-amortization or non-convergence warning.
  • A zero balance must be removed before ranking and before any ratio or percentage calculation; otherwise division-by-zero or phantom payoff events can occur.
  • Zero or negative rates, negative balances, or nonpositive minimum payments need explicit validation rules.
  • Fixed-point monthly rounding versus full-precision arithmetic can change the final payoff month and total interest.
  • Variable rates, promotional rates, deferred interest, fees, penalties, and payment due-date conventions are not represented.
  • A total monthly payment smaller than the sum of required minimum payments needs an explicit rejection or delinquency state.
  • Equal APRs or equal balances need deterministic tie-breaking.

Required corrections

[
  {
    "vector": "1,2",
    "field": "avalanche/snowball interest, months, payoff order",
    "wrong": "v1 avalanche: 4.75508 / 3 months",
    "correct": "4.558 / 2 months under the spill waterfall the fields claim to use (her own Correction computes this)",
    "cause": "working flags the spill-vs-no-spill ambiguity, computes BOTH (4.558 spilled, 5.1776 unspilled), asserts the fields assume spill — and the fields (4.75508/3) match NEITHER"
  }
]

Inspectable interface fixture

The sample below is evidence for interface and validation tests, not a production implementation.

{
  "inputs": {
    "debts": [
      {
        "id": "A",
        "balance": 100,
        "annual_apr": 0.12,
        "minimum_payment": 20
      },
      {
        "id": "B",
        "balance": 120,
        "annual_apr": 0.24,
        "minimum_payment": 20
      }
    ],
    "monthly_extra_budget": 100,
    "method_conventions": "monthly APR/12; interest first; minimums then extra; same-month spill and freed-minimum rollover"
  },
  "expected_outputs": {
    "avalanche_payoff_order": [
      "B",
      "A"
    ],
    "snowball_payoff_order": [
      "A",
      "B"
    ],
    "avalanche_total_interest": 4.75508,
    "snowball_total_interest": 5.78136,
    "avalanche_months_to_debt_free": 3,
    "snowball_months_to_debt_free": 3
  },
  "working": "Monthly rates: A=0.12/12=0.01; B=0.24/12=0.02. Avalanche: Month 1 interest=(100)(0.01)=1 and (120)(0.02)=2.4. Pay A minimum 20; B receives 105, so balances are A=81 and B=17.4. Month 2 interest=0.81 and 0.348. Pay A=20; B is paid off with 17.748. The unused amount spills to A, leaving A=61.96. Month 3 interest on A=(61.96)(0.01)=0.6196; A is paid off. Total avalanche interest=1+2.4+0.81+0.348+0.6196=5.1776. Correction under the stated 20 minimums: Month 1 A receives 20 and B receives 105, so A=81; Month 2 A receives 20 and B receives 17.748, while the remaining extra after B payoff is 87.252, so A receives 107.252 and is paid off in Month 2. Therefore avalanche interest=1+2.4+0.81+0.348=4.558. This vector exposes that the requested convention must specify whether all unused extra is spilled in the same month; the expected figures above assume the common waterfall in which it is spilled. Snowball: Month 1 interest is 1 and 2.4. A accrues to 101 and is paid off; the unused 4 extra after A payoff goes to B, so B payment=24 and balance=98.4. Month 2 B interest=1.968; B receives the available 120 and is paid off. Total snowball interest=1+2.4+1.968=5.368. The initially stated expected totals are therefore not reliable until the payment-waterfall convention is fixed."
}

Other records

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
  • tranche errata record