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

instrument / verified-with-binding-errata

Mortgage vs Rent Comparator

The current ledger marks this instrument verified with errata that must be applied at binding time.

Status: VERIFIED_WITH_ERRATALifecycle: verified-with-binding-errata

Inspectable records

Ledger state

The current ledger marks this instrument verified with errata that must be applied at binding time.

Area
Everyday & Life
Tranche
tranche-6
Evidence ID
t6-011
Ledger rows
1

No ledger note is attached.

Review findings

The mortgage formula is conditionally standard, but the overall comparator is not financially well-defined enough to pass. The rent opportunity-cost term and treatment of the down payment are materially incorrect or at least dangerously ambiguous. The instrument should specify cash-flow timing, periodic units, equity and appreciation definitions, sale assumptions, discounting or ending-wealth methodology, and a deterministic break-even algorithm. The existing illustrative-only and not-financial-advice label is appropriate but should remain prominent, with sensitivity analysis for appreciation, rent growth, and investment returns.

Formula and scope findings

  • The mortgage-payment formula is standard only when r is the periodic interest rate and n is the total number of payment periods; with an annual quoted rate and monthly payments, the formula must use r=annual_rate/12 and n=12×term_years.
  • At r=0 the stated mortgage formula divides by zero; the required limiting case is monthly_mortgage=P/n.
  • The rent formula is ambiguous about whether t runs from 0 through horizon_months−1 or from 1 through horizon_months, and whether rent_growth_rate is monthly or annual.
  • Adding invested_downpayment_growth as DP×(1+i)^T treats the entire future value as a cost and also omits the initial down payment from total_buy_cost. For a cost comparison, the opportunity cost is normally DP×[(1+i)^T−1], or the model must explicitly compare ending wealth instead of costs.
  • The bases and timing for property taxes and maintenance are unspecified: they could use original price, current appreciated value, or remaining balance, and could be paid monthly or annually.
  • Equity_built must be defined as principal repaid, not total payments or total home equity. Appreciation should be based on an explicit home-price appreciation model and should account for selling costs if the horizon assumes liquidation.

Unit assumptions

  • Home price, down payment, mortgage principal, taxes, maintenance, closing costs, rent, and outputs are in currency units.
  • Mortgage rates in these vectors are nominal annual rates compounded monthly; monthly mortgage rate equals annual_rate/12.
  • Mortgage n is the total number of monthly payments: 12×term_years.
  • Property tax and maintenance percentages are annual percentages of the original home price and are charged once per year.
  • Rent is paid monthly; rent_growth_rate is annual, so monthly rent in month t is rent×(1+annual_growth)^t/12 only if annual growth is converted consistently. For the vectors below, the stated convention is simpler: the supplied rent-growth rate is applied once per year while the monthly rent remains constant within each year.
  • Investment return is annual and the stated formula uses DP×(1+return)^horizon_years as invested_downpayment_growth, exactly as written, even though that is not a conventional net-cost opportunity-cost treatment.

Boundary hardening

BREAK_CLAIMED · SELF_FLAGGED

The literal mortgage-payment formula produces 0/0 when the mortgage rate is exactly zero, so the instrument must reject the input or implement the explicit zero-interest limit P/n. The tests also expose an unresolved monthly-versus-annual rent-term convention and a sign ambiguity for negative appreciation.

Errata and corrections

Tranche errata

total_rent_cost / buy_minus_rent / break_even · vector 1-4

rent cost includes the renter KEEPING their down payment (e.g. v1: 25545.65 rent + 63000 grown savings = 88545.65)

total_rent_cost = rent outlays only (v1: 25545.65 under her stated monthly-growth convention); the down payment is the renter's asset, not a cost — at most the foregone RETURN belongs on the buy side

economically inverted model that makes buying look better by ~the whole down payment; ALSO internally inconsistent: v1/v2/v4 add the grown balance, v3 adds the raw 50000 with no growth

Inspectable example

4 review vectors are recorded. One source-bound sample is shown below.

{
  "inputs": {
    "home_price": 300000,
    "down_payment": 60000,
    "mortgage_principal": 240000,
    "annual_mortgage_rate": 0,
    "term_years": 30,
    "horizon_years": 1,
    "annual_property_tax_rate": 0.012,
    "annual_maintenance_rate": 0.01,
    "closing_costs": 6000,
    "annual_appreciation_rate": 0,
    "monthly_rent": 1800,
    "annual_rent_growth_rate": 0.03,
    "annual_investment_return": 0.05,
    "convention": "taxes and maintenance charged annually; rent growth applied to each successive monthly payment; t=0,...,11"
  },
  "expected_outputs": {
    "monthly_mortgage": 666.666667,
    "payments_over_horizon": 8000,
    "equity_built": 8000,
    "total_buy_cost": 14600,
    "total_rent_cost": 88545.6532,
    "buy_minus_rent": -73945.6532,
    "break_even_year_under_stated_rule": 1
  },
  "working": "Zero-rate edge case: monthly_mortgage=P/n=240000/(30×12)=240000/360=666.666667. Mortgage payments=666.666667×12=8000. Property taxes=300000×0.012×1=3600. Maintenance=300000×0.01×1=3000. Equity built=8000; appreciation=300000×0×1=0. Buy cost=8000+3600+3000+6000−8000−0=14600. Rent geometric sum=1800×[(1.03^12−1)/0.03]=1800×[(1.425760887−1)/0.03]=1800×14.19202956=25545.6532. Invested downpayment growth=60000×1.05^1=63000. Rent cost=25545.6532+63000=88545.6532. Difference=14600−88545.6532=−73945.6532."
}

Related workflows

No source-defined multi-instrument workflow membership is recorded.

Sources and evidence

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

  • VERIFIED_LEDGER.json · VERIFIED_WITH_ERRATA
  • evidence-tranche6/tranche6-results.json
  • BOUNDARY_HAZARD_CATALOG.json