contract
7.0.0
Contract 7.0.0
The timeline is a newsfeed (Jamie, 2026-09-23: "we had the whole concept of Timeline backwards; think of it like the newsfeed in a social app"). What happened most recently comes first, everywhere the timeline is read: elixir_timeline, the console, and the mail built from it.
elixir_timelineservestimelinenewest first byat.- A window past the 150-item cap, or past the response's size budget, keeps its NEWEST items: those the record observed after the newest item left out. The older ones are counted in
timeline_more, not served, andhas_moreis true; a note names the instant, so a reader that wants them passes the samefromwithtothere andmark_read: false. The entries still summarize the whole window. next_cursoris always the window's end, andmark_readalways moves the pointer there: a reader catching up after days away lands on the present.- A clan's member moments keep their newest 100 when a window holds more, and the clan entry's
roster.joined,roster.leftandroster.role_changeslists are newest first, keeping their latest twenty.
No deprecation window: every client of this server is first-party (the 3.0.0, 4.0.0 and 5.0.0 precedent). A consumer that needs time order sorts by at itself, as the Discord preview already does.
Breaking
elixir_timelinetimelineorder is newest first; it was oldest first.next_cursorno longer pages forward from a cut: it is alwayswindow.to. Past the cap the older items are counted intimeline_morerather than reached by a cursor, andmark_readmoves the pointer to the window's end, not to the cut.- Clan entry roster lists (
joined,left,role_changes) are newest first.