What changes, and what never does.
The shapes only ever gain fields. Nothing is renamed and nothing is removed, so code you write today keeps working.
The promise
A field you read today will be there tomorrow, with the same name, the same meaning and the same type. A value we can answer with today is a value we can still answer with later. A field that is always sent keeps being always sent.
What we do is add. New fields appear, and new words appear in lists of words. So read past a field you do not recognise, and treat a word you do not know as something to skip rather than something to fail on. A consumer that does both never breaks.
A test in this codebase compares the published document with the last approved one and fails on any removal or retyping. The promise is not a policy somebody remembers; it is a build that goes red.
Every change, dated
| Date | What changed |
|---|---|
| 2026-09-22 | First release. |
| 2026-09-23 | Season totals for a team, and one player's season, previous seasons and career. |
If we ever have to break something
We would open a second address beside this one and leave this one answering. A change that breaks your code will not arrive at an address you already use.