Page actions
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.jsonevidence-tranche6/tranche6-results.jsontranche errata record