# Atlas method 1.0.0 — technical freeze

Frozen for private computation September 13, 2026. Dataset `rung-debt-break-even@2026-09-13.candidate.1`. Colin McCracken approved the retained report, sources, findings, methods, limitations, attribution and tool explanations on September 13, 2026. Rights acceptance covers the retained paraphrases, links and supplied design assets. Colin McCracken approved the revised report and tools for publication preparation on September 26, 2026. Codex coordinates protocol and implementation checks; separate model-assisted checking is not independent human expert review.

## Question, units and coverage

Compare full nominal repayment of the same starting card debt with fixed-rate unsecured replacement loans. Report cost, payment and payoff time separately. Break-even means equal total dollars paid through each path's own payoff date, not monthly fee recovery or a present-value comparison.

`scenario-config.json` freezes nine baseline combinations of three annual card rates and three fixed monthly payments at one $10,000 scale, four loan terms, five note rates and five deducted fees. Expected outputs: 900 comparisons, 180 rate-boundary problems and 180 fee-boundary problems. These counts are mathematical combinations, not borrowers, products, independent observations or prevalence evidence. Values cover sensitivity around the earlier teaching example; no actual-offer or representative-market claim is made. No changes to the proposed grid were made. Do not optimize inputs after seeing findings.

All amounts are USD, interest rates annual decimal fractions, deducted fees fractions of gross principal and time whole months. These rates are not disclosed APR. Fixed monthly card payment is not a changing lender minimum. Rates, fees and terms are assumptions, not sourced estimates. External sources support only retained mechanism/limitation claims. The model does not establish household affordability.

## Equations

Current card: opening balance B, monthly rate i=r/12 and fixed payment M. Each month calculate interest B*i, then pay min(M,B+interest). Sum payments to payoff, preserving the smaller final payment. Reject a positive-rate payment that does not exceed opening interest. Stop at 600 months; remaining debt makes the comparison invalid for lifetime cost. Floating-point residual below $1e-8 may be treated as zero; the independent decimal check resolves payoff-month ambiguity.

Deducted-fee loan: net payoff need B, fee fraction f, gross principal P=B/(1-f), fee F=f*P and cash P-F=B. With monthly rate j and term n, payment A=P*j/(1-(1+j)^(-n)); use P/n when j=0. Use numerically stable log1p/expm1 near zero. Total repayment is n*A, with no second fee addition. Borrowing cost is repayment minus B. Only the main deducted-fee mode enters the result tables.

Upfront-fee reference fixtures use P=B, fee f*B paid separately, and total cash paid n*A+fee. A disclosed gross loan below the amount needed after deduction is a shortfall, not full payoff; do not calculate its full-debt savings. No partial-debt model is included.

Differences are loan minus current: monthly payment, total cash paid and payoff months. Dollar labels lower/equal/higher use absolute delta <=$0.01 as equal; month labels shorter/equal/longer use integer difference. Retain unrounded signed values. Do not compress the three dimensions into an overall recommendation.

Monthly calculations use full precision, displaying money to cents, rates as appropriately bounded percentages. Headline and root-adjacent cases also receive a separate cents-rounding sensitivity check: monthly interest/payment rounded to cents, final payment adjusted. Differences are recorded, not silently incorporated into the primary method.

## Boundary algorithm

For fixed baseline and loan assumptions, define D(x)=loan_total_paid-current_total_paid, solving on the configured rate or fee domain. Loan repayment is nondecreasing with rate and with deducted fee for this fixed net-cash model. Evaluate endpoints first. Root statuses: `root_in_range`, `equal_at_lower`, `equal_at_upper`, `no_savings_in_range`, `savings_throughout_range`, `invalid`. If D(lower)>0 the whole domain costs more; if D(upper)<0 the whole domain saves. Endpoint equality uses numerical tolerance, distinct from a one-cent display tie.

Bisect a valid signed bracket until both width <=1e-10 fraction and absolute midpoint residual <=$1e-6. Preserve low/high, deltas at both ends, root, residual and iteration count. Require signed endpoints within numerical tolerance and convergence, with a finite iteration cap. Missing roots are not zero. A bound is numerical, not statistical. No outside-domain extrapolation is permitted.

Display true roots with a conservative two-decimal-percentage enclosing interval (floor root*10000 /100 through ceil root*10000 /100), preserving exact endpoint roots. Describe lower/higher outcomes outside that interval and note sub-cent ties around it. The interval is rounded display precision, not a confidence interval or market allowance. The CSV/JSON retains the precise root and numerical bracket. All root-side claims must be checked against the computed signed differences.

## Record contract and independent check

`data/comparisons.json` is an array. Each row has `scenario_id`, `baseline_id`, `dataset_version`, `method_version`, `current_balance`, `current_rate`, `current_payment`, `loan_rate`, `loan_fee_fraction`, `loan_term_months`, `principal`, `fee`, `net_cash`, `current_total_paid`, `current_payoff_months`, `loan_payment`, `loan_total_paid`, `payment_delta`, `total_paid_delta`, `payoff_months_delta`, `cost_label`, `payment_label`, `time_label`.

Baseline IDs are `c18-p300` etc.; scenario IDs append `-n24-r8-f0` etc. Boundary IDs begin `rb-` or `fb-`. `data/rate-boundaries.json` and `data/fee-boundaries.json` contain one row per problem with baseline identity/version/current fields, fixed `loan_term_months`, fixed `loan_fee_fraction` for rate or fixed `loan_rate` for fee, `family`, and nested `solution`. `solution` has `status`, `low`, `high`, `root`, `delta_low`, `delta_high`, `residual`, `iterations`; root is null for nonroot states. Include both endpoint deltas and original domain for nonroot cases. CSV must flatten nested fields with explicit names and blank/null distinctions documented.

The independent checker reads this protocol and configuration, not primary formula source. It computes its own values first, then compares saved primary output by stable keys. Use a different derivation for at least loan payment and/or current payoff (for example a sum of discounted unit payments rather than primary closed form), high precision and separate root computations. No importing primary helpers or treating primary values as expected answers. Verify all 1,260 records, actual counts, IDs, version, principal/cash/fees/deltas/labels/status, root bracket signs and numerical precision. Existing calculator parity is an additional check only.

Fixtures cover zero rate/fee, final payments, nonpayoff/horizon, deducted/upfront fee counting, gross-loan shortfall, root endpoints and both no-root states, term reversals, scale invariance, rounding sensitivity and malformed values. Record discrepancies and corrections with evidence.

## Limits, claim selection and roles

Exclude card reuse, multiple debts, changing minimums, variable/teaser rates, missed payments, partial consolidation, extra payments, other fees, provider terms, approvals, credit scores, household budgets, settlement/counseling concessions and secured debt. Resolve the old V3 protocol's card-reuse contradiction by keeping reuse only as a stated limit. The old dictionary's ambiguous financed-fee mode is not adopted.

Use the previously proposed $10,000 / 24% / $350 / 18% / 5% example and all four loan lengths as the main reading example, plus its rate and fee boundary tables. This choice predates final computation. All data remain downloadable; no post-hoc prevalence statistic or broad market headline is allowed. Findings carry all decisive assumptions, the method version and row/anchor references.

This publication edition is dated 2026-09-27. Frozen configuration and protocol hashes are recorded in `review/technical-freeze.json` before final computation. Any later method/config correction gets a new version and impact record rather than an unlogged replacement. A technical freeze and passing tests do not clear publisher/source/rights review.
