Contract
3.17.0
Tool contract 3.17.0
One grammar, one vocabulary (docs/reviews/2026-09-19-INTERFACE-REVIEW.md Part 2, Phase 4).
- Every windowed tool's
applied.windowsays its season:season(the season the window starts in; null on an unbounded window),crosses(every season roll inside it, empty when clean) andseason_age_days, onbattles_query,battles_performance,battles_decks,battles_cards,battles_opponents,battles_compare,clans_standings,battles_levels,clans_pilot_scores,clans_participation,rankings_timeline,game_eventsandelixir_timeline, as the meta and series tools already carried them. The crossing note fires only whencrossesis non-empty. - The player battle tools and
clans_standingstakeseason('current','previous',2026-08or135), so "this season" is one argument on every tool that has a window; their default is unchanged. - The series tools (
players_timeline,clans_timeline,clans_members_timeline) accept an instant forfrom/toand floor it to its game day (10:00Z grid), echoing the instant underapplied.window.flooredwith a note, where they refused it;days: Nis N game days, today included. - The one point vocabulary:
players_timelinepoints carrydaybesidedate;rankings_timelinepoints carryday(the snapshot's game day);battles_levels.monthly_trendmarks the window's clipped months withpartial: trueandcovers {from, to}, the weekly shape;clans_participationechoesapplied.window.source: 'default'whenweekswas defaulted and its notes saywar_pointsis the period points figure;game_eventscarriesgame_days_seenbesidedays_seen(the same sightings on the game day grid;days_seenretires at 4.0.0), itsrunning_on_latest_dayis a fact of the table rather than of the window, and a date-onlytono longer reaches one day past itself;clans_roster.lifetimecarriesprofile_observed_atbesideas_of(as_ofretires at 4.0.0). clans_pilot_scoresandbattles_levels.monthly_trendtakemean_starting_trophiesover ladder battles only (a Path of Legends figure is a league rating on another scale; null with none), and say so.players_summary.top_deckandbest_deckcarrymean_level_gap, so the comparability note names real gaps.- Descriptions:
players_timeline.metricsnames its four groups and the default;battles_performance.group_bysaysmodeis the named game mode, not the group;clans_members_timeline.limitsays the order and how to choose;rankings_playerssaysratingis the profile'spol_trophies, verified equal on the live API.
Additive; no migration.