Changelog
Model changes are listed here because a value that moves without explanation is a value you cannot trust.
First build
The calculator, ~625 player pages, the trade value chart, the movers page and the ledger scaffold. Values seeded from published dynasty consensus. Every curve and multiplier published on the method page from day one.
Four-term decomposition
Each valuation splits into consensus rank at peak age, the age curve, league format and league size. The published source value is divided back out by its own age factor first, so age is never counted twice.
Age recovered for 181 players
The source leaves age blank for most of the long tail, so the age curve — one of the four terms — was flat for 30% of the catalogue. Ages are now taken from the player index where the value source omits them. Affected players' values change accordingly; three players still have no age anywhere and are priced with a flat age term.
Reasoning bar corrected to decompose the margin
The 'what moves this trade' bar previously summed both sides' internal adjustments, producing a total that matched neither side nor the difference between them, and could contradict the sentence beside it. It now decomposes get minus give per term and sums exactly to the margin the verdict is calculated from. Displayed values changed; the verdict itself did not.
Ledger capture and scoring
Not built. The site is static and stores nothing, so there is no capture step and no scored trades. This needs somewhere to store an opt-in record plus a weekly scoring job before the ledger can carry a single number. Until then /ledger states plainly that it is a commitment rather than a record.
Observed-market term
Blocked on a commercial licence for completed league transactions. Until it clears, the calculator has no market term and says so on the method and sources pages.