{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "Elixir MCP updates",
  "home_page_url": "https://elixir.poapkings.com/updates",
  "feed_url": "https://elixir.poapkings.com/feed.json",
  "description": "Every user-visible change to Elixir MCP and every tool contract version, newest first.",
  "language": "en",
  "items": [
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-28-the-card-catalog-lists-four-tower-troops-as-the-game-does",
      "url": "https://elixir.poapkings.com/updates/2026-09-28-the-card-catalog-lists-four-tower-troops-as-the-game-does",
      "title": "The card catalog lists four tower troops, as the game does",
      "content_html": "<p>The card catalog listed a fifth tower troop, &quot;Archer Queen&quot; with an id the game has never used. It was never in the game&#39;s own catalog: a test record from the old Discord bot had been replayed into Elixir as if the game had sent it. It also listed eleven cards known only from battles, such as the event-only Super Archers, which the game&#39;s catalog never lists. The catalog now lists what the game&#39;s newest catalog lists: 123 cards and four tower troops (Tower Princess, Cannoneer, Dagger Duchess and Royal Chef). A card or tower troop first seen in a battle appears once the game&#39;s catalog lists it, and one the game stops listing leaves the list; the battles that name any of them keep their records. Contracts 9.12.5 and 9.12.6.</p>\n",
      "date_published": "2026-09-28T12:00:00Z",
      "tags": ["shipped"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-28-contract-9-12-6",
      "url": "https://elixir.poapkings.com/updates/2026-09-28-contract-9-12-6",
      "title": "Contract 9.12.6",
      "content_html": "<p><code>cards_catalog</code> lists the cards the current <code>/cards</code> catalog lists, 123 today, as 9.12.5 did for tower troops (#44). It had also listed eleven cards known only from battles, such as the event-only Super Archers and Party Rocket, with no rarity or cost; <code>/cards</code> never lists them. They stay on the record, and <code>cards_card</code> still answers them by id. A card first seen in a battle on its release day is listed once <code>/cards</code> lists it, which the recorder fetches as soon as it sees one. Behaviour correction; no output-schema change.</p>\n",
      "date_published": "2026-09-28T12:00:00Z",
      "tags": ["contract"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-28-contract-9-12-5",
      "url": "https://elixir.poapkings.com/updates/2026-09-28-contract-9-12-5",
      "title": "Contract 9.12.5",
      "content_html": "<p><code>cards_catalog</code> lists the tower troops the current <code>/cards</code> catalog lists, four today, not five (#44). The fifth, <code>29000000</code> &quot;Archer Queen&quot;, was never sent by the game&#39;s API: a test fixture leaked into the retired elixir-bot&#39;s raw payloads and was replayed as a catalog fetch. The catalog now follows the newest fetch, so a replayed old catalog, or a support card first seen in a battle or a profile, is not listed until <code>/cards</code> lists it, and a tower troop <code>/cards</code> stops listing leaves <code>tower_troops</code>. Every card stays on the record for the battles that name it. The Archer Queen card is <code>26000072</code>. Behaviour correction; no output-schema change.</p>\n",
      "date_published": "2026-09-28T12:00:00Z",
      "tags": ["contract"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-27-the-updates-feed-keeps-its-addresses-and-carries-contract-ve",
      "url": "https://elixir.poapkings.com/updates/2026-09-27-the-updates-feed-keeps-its-addresses-and-carries-contract-ve",
      "title": "The updates feed keeps its addresses, and carries contract versions",
      "content_html": "<p>Each item in the updates feed now has a permanent address: its own page under /updates. It used to carry a number that shifted every time something new shipped, so feed readers showed old items as new again, and the links went nowhere. Because every address changed this once, your reader may show the newest 50 items as new one last time. The feed now includes the tool contract versions beside the product updates, holds the newest 50, and has a JSON Feed twin at /feed.json. Also in this release: the public card pages and the collection-efficiency numbers are served from the edge cache instead of being worked out again on every visit; a deploy no longer removes files that an open console still needs; the &quot;Publish your own stats&quot; example points at an agent connection, since war history and standings are MCP tools the JSON API does not serve; and the game&#39;s river-race log is described as ten weeks, not twenty. No change to the tools.</p>\n",
      "date_published": "2026-09-27T12:00:00Z",
      "tags": ["shipped"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-27-console-links-open-in-a-new-tab-and-a-refused-change-says-so",
      "url": "https://elixir.poapkings.com/updates/2026-09-27-console-links-open-in-a-new-tab-and-a-refused-change-says-so",
      "title": "Console links open in a new tab, and a refused change says so",
      "content_html": "<p>Every record link in the console is now a real link: Cmd-click, Ctrl-click or a middle click opens it in a new tab, it can be focused from the keyboard, and its address can be copied. Buttons that do something, like Dismiss or Send another email, are buttons. When the console asks Elixir to change something (revoking a device or an agent, signing out, choosing a primary player, a nickname, an admin decision) and Elixir refuses or cannot be reached, the page now says so beside the button instead of looking as if it worked, and it keeps showing the state as it really is. In Explore, a war week opens by its season and week however old it is, and shows the race itself: every clan&#39;s standings, the race day by day, and each member&#39;s points and decks. Looking up a tag now costs one call, not two. No change to the tools.</p>\n",
      "date_published": "2026-09-27T12:00:00Z",
      "tags": ["shipped"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-27-the-json-api-says-when-a-retry-will-help",
      "url": "https://elixir.poapkings.com/updates/2026-09-27-the-json-api-says-when-a-retry-will-help",
      "title": "The JSON API says when a retry will help",
      "content_html": "<p>Every unexpected fault in the JSON API used to answer 503 with Retry-After, asking a program to retry a bug that would fail again the same way. Now only a database that is briefly unreachable, or a query that ran out of time, answers 503 with Retry-After; anything else is 500 internal, with no retry invited. The clan fact operations now declare the integration key they already accepted, and a person&#39;s call refused for a missing capability shows in the usage log. JSON API 2.6.4; no change to the tools.</p>\n",
      "date_published": "2026-09-27T12:00:00Z",
      "tags": ["shipped"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-27-a-busy-moment-no-longer-costs-a-collector-its-fetch",
      "url": "https://elixir.poapkings.com/updates/2026-09-27-a-busy-moment-no-longer-costs-a-collector-its-fetch",
      "title": "A busy moment no longer costs a collector its fetch",
      "content_html": "<p>When two collectors handed in overlapping battle logs at the same moment, the database could refuse one of them, and that fetch was thrown away and made again later. The recorder now tries it once more on the spot, and the daily battle totals it keeps for each player are updated in one fixed order, which removes a likely cause of those refusals. The archive of everything the game sent is now write-once: an object in it can be added but never replaced. Operators: config&#39;s submit_retry now names retry_statuses (429), so a collector release that reads it retries a momentary throttle inside the lease instead of letting the lease expire. No change to the tools.</p>\n",
      "date_published": "2026-09-27T12:00:00Z",
      "tags": ["shipped"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-27-a-failed-read-is-tried-again-in-minutes",
      "url": "https://elixir.poapkings.com/updates/2026-09-27-a-failed-read-is-tried-again-in-minutes",
      "title": "A failed read is tried again in minutes",
      "content_html": "<p>When a read of the game failed, the recorder used to wait for that subject&#39;s next turn: a day for a profile, and for a leaderboard or the events calendar that failed just after the 10:00 UTC reset, the whole day. It now tries again 15 minutes later, then 30, then 60, inside the same shared budget, so a short Clash Royale outage costs minutes. The battle-log schedule also keeps its promise exactly: the small per-player offset that spreads reads out can no longer stretch a wait past two hours. No change to the tools.</p>\n",
      "date_published": "2026-09-27T12:00:00Z",
      "tags": ["shipped"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-27-a-late-top-100-still-goes-out-that-day",
      "url": "https://elixir.poapkings.com/updates/2026-09-27-a-late-top-100-still-goes-out-that-day",
      "title": "A late Top 100 still goes out that day",
      "content_html": "<p>The Top 100 and Card of the Week are written by a model from a brief the program builds. If the writing finished after the issue&#39;s send time, the issue used to miss its week; it now goes out as soon as it passes its checks, while it is still the current issue, and nobody gets it twice. The checks are stricter too: a number must now belong to the player or clan named beside it, so a rating printed next to the wrong name stops the issue instead of sending. No change to the tools.</p>\n",
      "date_published": "2026-09-27T12:00:00Z",
      "tags": ["shipped"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-27-milestone-notes-come-as-the-moments-do",
      "url": "https://elixir.poapkings.com/updates/2026-09-27-milestone-notes-come-as-the-moments-do",
      "title": "Milestone notes come as the moments do",
      "content_html": "<p>A second milestone on the same day used to wait until after midnight, and could be lost if the mail was down then; each new first now gets its note on the next hourly check. The Monday clan report is now the same for everyone who tracks the clan: it covers the clan at the depth it is recorded, even if you chose the lighter scope, and names each day in your own timezone. The Top 100 and Card of the Week only ever go out as that week&#39;s issue; if one is not ready, nothing is sent rather than last week&#39;s. No change to the tools.</p>\n",
      "date_published": "2026-09-27T12:00:00Z",
      "tags": ["shipped"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-27-captured-calls-are-gone-at-90-days-as-promised",
      "url": "https://elixir.poapkings.com/updates/2026-09-27-captured-calls-are-gone-at-90-days-as-promised",
      "title": "Captured calls are gone at 90 days, as promised",
      "content_html": "<p>The request and response of a tool call are kept for 90 days, as the privacy page says. Because the storage keeps earlier versions of a file, a call&#39;s body could linger as an old version for up to a year after that; it now goes the day after its 90 days end. The weekly tracking mail also picks its moments before it trims a busy week, so a clan&#39;s messages and other facts from Elixir&#39;s family apps can no longer push your own milestones out of it, and never appear in it. No change to the tools.</p>\n",
      "date_published": "2026-09-27T12:00:00Z",
      "tags": ["retired"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-27-your-agent-hears-the-whole-opening-brief",
      "url": "https://elixir.poapkings.com/updates/2026-09-27-your-agent-hears-the-whole-opening-brief",
      "title": "Your agent hears the whole opening brief",
      "content_html": "<p>When an agent connects, Elixir tells it who you are and how to use the tools. That brief had grown past what some apps pass on (Claude Code keeps the first 2,048 characters), so the part about where to start and how to send feedback never reached the model. It is now written to arrive whole: if you track a lot of players it counts them instead of listing every one, and the finer points live in the documentation it points to. A personal connection&#39;s tool list also drops two arguments only clan agents use, and refusals now reach apps that check answers strictly. Contract 9.12.4.</p>\n",
      "date_published": "2026-09-27T12:00:00Z",
      "tags": ["shipped"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-27-live-reads-share-the-one-request-budget-and-the-status-page",
      "url": "https://elixir.poapkings.com/updates/2026-09-27-live-reads-share-the-one-request-budget-and-the-status-page",
      "title": "Live reads share the one request budget, and the status page says how much is spent",
      "content_html": "<p>Every live read, whether your agent asks for one or an app refreshes a profile, is now counted against the same shared request budget the scheduled recording spends. When that budget is spent for the moment, a live read is not queued and costs you nothing; it answers with the record and says when to try again, within five minutes. The status page and Recording now lead with the last 24 hours against the day&#39;s budget. Contract 9.12.3; JSON API 2.6.3.</p>\n",
      "date_published": "2026-09-27T12:00:00Z",
      "tags": ["shipped"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-27-slow-answers-say-so-instead-of-timing-out",
      "url": "https://elixir.poapkings.com/updates/2026-09-27-slow-answers-say-so-instead-of-timing-out",
      "title": "Slow answers say so instead of timing out",
      "content_html": "<p>A read that runs long, or waits behind maintenance, now answers with a retry hint wherever you ask, in Explore and through the JSON API as well as through your agent, instead of the page or request timing out. The deck-set planners also stop at a time limit and hand back the best sets they found. Contract 9.12.2; JSON API 2.6.2.</p>\n",
      "date_published": "2026-09-27T12:00:00Z",
      "tags": ["shipped"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-27-connecting-an-app-shows-where-it-sends-you",
      "url": "https://elixir.poapkings.com/updates/2026-09-27-connecting-an-app-shows-where-it-sends-you",
      "title": "Connecting an app shows where it sends you",
      "content_html": "<p>When an app asks to connect to your Elixir account, the page now shows the address it will send you back to beside the name it chose for itself, and says plainly when it is one of Elixir&#39;s own apps. Apps can now disconnect themselves with a standard revocation request, and sign-in codes to one address are limited the same way whichever page asked for them. Contract 9.12.1; JSON API 2.6.1.</p>\n",
      "date_published": "2026-09-27T12:00:00Z",
      "tags": ["shipped"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-27-contract-9-12-4",
      "url": "https://elixir.poapkings.com/updates/2026-09-27-contract-9-12-4",
      "title": "Contract 9.12.4",
      "content_html": "<p>The opening brief arrives whole (review §6.1-6.2). <code>instructions</code> ran about 4,500 characters and Claude Code hands a model the first 2,048, so START, the feedback line and half the rules never arrived. It now fits 2,048 in order of value: who you are (the other players and clans you track by name while they fit, otherwise counted; <code>elixir_my_players</code> lists them), the one-line rules, START, feedback, and one pointer to <code>elixir_docs</code> page <code>protocol</code>, section <code>argument-conventions</code>, for the window grammar and verbosity it no longer restates.</p>\n<ul>\n<li>A personal connection&#39;s <code>tools/list</code> leaves out the agent-only <code>on_behalf_of</code> and <code>display_name</code> (in <code>segment</code> too), about 6 KB; a call that still sends them is not refused, they are dropped.</li>\n<li>An error result no longer carries <code>structuredContent</code>: it is held to the tool&#39;s <code>outputSchema</code>, which an error envelope does not meet, so a strict client could discard the refusal. The same <code>{error, meta}</code> JSON is the text block, as before.</li>\n<li><code>MCP-Protocol-Version</code> is checked after <code>initialize</code>: absent means 2025-03-26, an unsupported value is HTTP 400 with JSON-RPC -32600.</li>\n<li>An unknown argument&#39;s hint names the contract version and says to reconnect when a client cached <code>tools/list</code> earlier.</li>\n</ul>\n",
      "date_published": "2026-09-27T12:00:00Z",
      "tags": ["contract"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-27-contract-9-12-3",
      "url": "https://elixir.poapkings.com/updates/2026-09-27-contract-9-12-3",
      "title": "Contract 9.12.3",
      "content_html": "<p>Every live read is charged to the collector fleet&#39;s one global request budget when it is queued (review §4.1). When that budget is spent until the next scheduler tick, <code>live: true</code> and <code>live_fetch</code> queue nothing and charge nothing, your daily live quota included: <code>live_status</code> stays <code>pending</code> with <code>retry_after_s</code> the seconds to that tick, and the note (or the <code>live_pending</code> message) says the budget had no room. A read already queued for the same subject is shared and never charged twice.</p>\n",
      "date_published": "2026-09-27T12:00:00Z",
      "tags": ["contract"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-27-contract-9-12-2",
      "url": "https://elixir.poapkings.com/updates/2026-09-27-contract-9-12-2",
      "title": "Contract 9.12.2",
      "content_html": "<p>Every database read is bounded (review §3.1-3.3). A read-only tool waits at most 5 s for a lock and answers <code>query_timeout</code> instead of holding a connection behind a migration. <code>battles_deck_sets</code> and <code>battles_deck_upgrades</code> stop their search at a 4 s time budget as well as the node budget, so <code>exhausted: false</code> can mean either; the values are the best found. Explore and <code>/api/v1</code> now race the same read deadline MCP does, so a slow read answers <code>query_timeout</code> there too rather than timing out the request.</p>\n",
      "date_published": "2026-09-27T12:00:00Z",
      "tags": ["contract"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-27-contract-9-12-1",
      "url": "https://elixir.poapkings.com/updates/2026-09-27-contract-9-12-1",
      "title": "Contract 9.12.1",
      "content_html": "<p><code>elixir_timeline</code> shows a clan&#39;s leaders-only facts (a member&#39;s away) to a leader reading through their own connection; a service key on a person&#39;s account reads what the clan shares. The OAuth server gains <code>POST /oauth/revoke</code> (RFC 7009), and the consent page names the host a client&#39;s codes go to (review §6.5).</p>\n",
      "date_published": "2026-09-27T12:00:00Z",
      "tags": ["contract"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-26-collectors-show-whether-they-run-a-signed-release",
      "url": "https://elixir.poapkings.com/updates/2026-09-26-collectors-show-whether-they-run-a-signed-release",
      "title": "Collectors show whether they run a signed release",
      "content_html": "<p>The fleet page marks each collector signed when the binary it runs is exactly a release Elixir named, and says dev build, unverified or mismatch otherwise; collectors from v3.0.4 report what they run. Beside it, the release key&#39;s fingerprint is drawn as the picture ssh-keygen prints for it, so an operator can compare it with their own at a glance.</p>\n",
      "date_published": "2026-09-26T12:00:00Z",
      "tags": ["shipped"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-26-collectors-signed-releases-and-the-release-key-here",
      "url": "https://elixir.poapkings.com/updates/2026-09-26-collectors-signed-releases-and-the-release-key-here",
      "title": "Collectors: signed releases, and the release key here",
      "content_html": "<p>Collector releases are signed, and every collector checks the signature against its built-in release key before it installs an update this server names. The operators page now publishes that key and its fingerprint, a second place to check it beside the collector repository. The collector is Go only, and the idle fallback the config used to carry for the retired Python collector is gone; every current release reads the check-in interval instead.</p>\n",
      "date_published": "2026-09-26T12:00:00Z",
      "tags": ["shipped"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-26-your-deck-list-a-page-at-a-time",
      "url": "https://elixir.poapkings.com/updates/2026-09-26-your-deck-list-a-page-at-a-time",
      "title": "Your deck list, a page at a time",
      "content_html": "<p>Asking for your decks now answers with a light list: each deck&#39;s cards on one line with its archetype, its record and how you did with it, a page at a time, so a long history no longer runs into the answer&#39;s size limit. Ask about one deck and you get its cards, tower troop and archetype in full.</p>\n",
      "date_published": "2026-09-26T12:00:00Z",
      "tags": ["shipped"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-26-duel-rounds-count-in-the-meta",
      "url": "https://elixir.poapkings.com/updates/2026-09-26-duel-rounds-count-in-the-meta",
      "title": "Duel rounds count in the meta",
      "content_html": "<p>Every round of a Clan Wars duel now counts as a game in the deck and card meta, for every player, not only your own: the eight cards played that round, won or lost by that round&#39;s crowns. A war deck that is mostly played in duels now shows up in the war meta with its whole record, and each row says how many of its battles were duel rounds. Card win rates and your card list count rounds the same way.</p>\n",
      "date_published": "2026-09-26T12:00:00Z",
      "tags": ["shipped"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-26-war-decks-count-your-duels",
      "url": "https://elixir.poapkings.com/updates/2026-09-26-war-decks-count-your-duels",
      "title": "War decks count your duels",
      "content_html": "<p>A Clan Wars duel is up to three games, each with its own deck, and until now the war-deck tools never saw them, so a war deck you only play in duels looked like a missing fourth deck. Your duel rounds now count as your games on each deck, won or lost round by round, and every deck&#39;s record pools all of its tower troops (Clan Wars battles carry none, so the same eight cards used to be two separate decks with half a record each). When no full set of four exists, you get the best partial set and the cards that would open up the most decks; asking for something impossible, like a card that is both required and excluded, is refused with the reason instead of timing out. Searching your battles for a card now finds your duels too, and your list of decks shows the ones you played in duels. Contracts 9.8.0 and 9.9.0.</p>\n",
      "date_published": "2026-09-26T12:00:00Z",
      "tags": ["shipped"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-26-contract-9-12-0",
      "url": "https://elixir.poapkings.com/updates/2026-09-26-contract-9-12-0",
      "title": "Contract 9.12.0",
      "content_html": "<p><code>battles_decks</code> answers a page at a time, in lighter rows (Jamie, 2026-09-26). A player&#39;s whole history at limit 30 was about 47,000 characters, next to the 48,000-character result cap, because every row carried eight card objects and the archetype object.</p>\n<ul>\n<li>Rows name their cards in one line (<code>card_names</code>, forms prefixed: Evo, Hero) with <code>archetype_label</code> and <code>tower_troop_name</code>; <code>cards</code>, <code>tower_troop</code> and <code>archetype</code> ride only the one deck asked for.</li>\n<li><code>deck_hash</code> returns that one deck: its row with the cards (id, name, form), tower troop and archetype in full, its duel rounds in <code>duel_decks</code>, and the window&#39;s totals, so its share reads as in the list.</li>\n<li><code>offset</code> pages the sorted list; <code>total_decks</code> counts it and <code>next_offset</code> starts the next page (null on the last). The list is no longer cut at the 100 most-played decks before sorting, so <code>sort: win_rate</code> ranks every deck.</li>\n<li><code>verbosity: compact</code> drops each row&#39;s <code>modes</code> and level detail and keeps the record, share, <code>dominant_mode</code> and <code>mean_level_gap</code>.</li>\n<li><code>duel_decks</code> read each round&#39;s own <code>deck_hash</code> and result (0182).</li>\n</ul>\n<p>The list rows&#39; card objects and archetype object moved to the single-deck read.</p>\n",
      "date_published": "2026-09-26T12:00:00Z",
      "tags": ["contract"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-26-contract-9-11-1",
      "url": "https://elixir.poapkings.com/updates/2026-09-26-contract-9-11-1",
      "title": "Contract 9.11.1",
      "content_html": "<p>The meta tools&#39; <code>excluded</code> counts battles again, as at 9.10: at 9.11.0 <code>considered</code> counted a duel as its rounds, so it no longer matched <code>battles_query</code> or <code>battles_trends</code> over the same window (acceptance 188.3, 200.1). A duel is one battle in <code>considered</code> and <code>excluded.duels</code>; its rounds are decided games in <code>decided_battles</code> and the rows, and <code>duel_rounds</code> beside <code>decided_battles</code> says how many.</p>\n",
      "date_published": "2026-09-26T12:00:00Z",
      "tags": ["contract"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-26-contract-9-11-0",
      "url": "https://elixir.poapkings.com/updates/2026-09-26-contract-9-11-0",
      "title": "Contract 9.11.0",
      "content_html": "<p>A Clan Wars duel counts as its rounds everywhere a deck or card is counted (feedback #363). A duel is up to three games, each with its own deck, and as one row with no deck it was in no one&#39;s meta: a war deck played only in duels was invisible, and roughly half of a clan&#39;s war games never reached the season rollups. Each round now carries its own <code>deck_hash</code> (its eight cards, no tower troop, the identity a Clan Wars battle has) and its own result by that round&#39;s crowns, and counts as one game.</p>\n<ul>\n<li><code>battles_meta_decks</code>, <code>battles_meta_cards</code> and <code>cards_card</code> (season, forms, history, bands, decks): war and all-mode rows count duel rounds, and each row carries <code>duel_rounds</code>, how many of its battles were rounds (null on a season rollup row until the nightly rebuild splits it). The meta tools carry <code>duel_rounds</code> beside <code>decided_battles</code> too. <code>excluded</code> still counts battles: a duel is one battle in <code>considered</code> and <code>excluded.duels</code>, and its rounds are decided games, so <code>considered</code> still matches <code>battles_query</code> and <code>battles_trends</code>.</li>\n<li><code>cards_synergy</code>: a round&#39;s deck is walked like any deck.</li>\n<li><code>battles_cards</code>: each round is a game, with the cards played that round and that round&#39;s result (the opponent&#39;s cards from the same round).</li>\n<li><code>battles_deck_sets</code> and <code>battles_deck_upgrades</code>: the season&#39;s war record holds every player&#39;s duel rounds, so the player&#39;s own are no longer added on top; <code>modes.&lt;mode&gt;.duel_rounds</code> replaces <code>modes.war.your_duel_rounds</code>. The deck row&#39;s <code>your_duel_rounds</code> is unchanged.</li>\n</ul>\n<p><code>battles_decks</code> is unchanged: its rows are battles with one deck, and <code>duel_decks</code> lists the round decks apart. Additive, apart from <code>modes.war.your_duel_rounds</code>.</p>\n",
      "date_published": "2026-09-26T12:00:00Z",
      "tags": ["contract"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-26-contract-9-10-1",
      "url": "https://elixir.poapkings.com/updates/2026-09-26-contract-9-10-1",
      "title": "Contract 9.10.1",
      "content_html": "<p>An <code>award_standing</code> item that names who held first place before carries <code>previous_name</code> beside <code>previous_player_tag</code>, and its sentence says &quot;taking it from <name>&quot; instead of a bare tag: a lead changing hands, which a clan&#39;s agent announces, is said with both names.</p>\n",
      "date_published": "2026-09-26T12:00:00Z",
      "tags": ["contract"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-26-contract-9-10-0",
      "url": "https://elixir.poapkings.com/updates/2026-09-26-contract-9-10-0",
      "title": "Contract 9.10.0",
      "content_html": "<p><code>battles_deck_sets</code> takes <code>exclude_decks</code>: <code>deck_hash</code> values no set may choose (any variant names the same eight cards; <code>candidates.excluded_decks</code> counts them), so &quot;a different last war deck&quot; is the other three locked and the current fourth excluded. Read back through a clan&#39;s agent at 9.9.1, the search free to choose any fourth deck chose the one the player already plays, and the agent offered it as new.</p>\n",
      "date_published": "2026-09-26T12:00:00Z",
      "tags": ["contract"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-26-contract-9-9-1",
      "url": "https://elixir.poapkings.com/updates/2026-09-26-contract-9-9-1",
      "title": "Contract 9.9.1",
      "content_html": "<p><code>battles_decks.duel_decks</code> is lighter: at most 8 decks, each with <code>card_names</code> (one string) and <code>archetype_label</code> in place of card objects and the archetype object. At 9.9.0 a player&#39;s whole history of duels pushed a 30-deck page past the 48,000-character result cap (acceptance gym 151.3).</p>\n",
      "date_published": "2026-09-26T12:00:00Z",
      "tags": ["contract"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-26-contract-9-9-0",
      "url": "https://elixir.poapkings.com/updates/2026-09-26-contract-9-9-0",
      "title": "Contract 9.9.0",
      "content_html": "<p><code>battles_decks</code> lists the decks a player played in duel rounds (<code>duel_decks</code>: each round&#39;s eight cards with its round record, most rounds first). A duel has no single deck, so it stays outside the rows and their shares, as before; but read back through a clan&#39;s agent at 9.8.1, &quot;a different last war deck&quot; read the player&#39;s war decks from the rows alone, missed the one they play only in duels, and recommended it back to them as the new one.</p>\n",
      "date_published": "2026-09-26T12:00:00Z",
      "tags": ["contract"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-26-contract-9-8-1",
      "url": "https://elixir.poapkings.com/updates/2026-09-26-contract-9-8-1",
      "title": "Contract 9.8.1",
      "content_html": "<p>The war-deck docs have their own page, <code>war-decks</code> (sections <code>deck-sets</code> and <code>deck-upgrades</code>), and <code>battles_deck_sets</code> and <code>battles_deck_upgrades</code> point there. With 9.8.0&#39;s text the battle model page had grown past the 48,000-character result cap, so <code>elixir_docs({ page: &quot;battles&quot; })</code> was refused.</p>\n",
      "date_published": "2026-09-26T12:00:00Z",
      "tags": ["contract"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-26-contract-9-8-0",
      "url": "https://elixir.poapkings.com/updates/2026-09-26-contract-9-8-0",
      "title": "Contract 9.8.0",
      "content_html": "<p>War decks as their eight cards, duels included (feedback #363 and #364). Clan Wars battles carry no tower troop, so the same eight cards were a Trophy Road <code>deck_hash</code> and a separate Clan Wars one, and a deck&#39;s war record never pooled with its ladder record; a war deck played only in duels (a duel has no <code>deck_hash</code>) was invisible, so a player was told to find a fourth deck they already had.</p>\n<ul>\n<li><code>battles_deck_sets</code> and <code>battles_deck_upgrades</code>: a deck is its eight cards; every tower troop&#39;s variant pools into its record (<code>variants</code>), and the player&#39;s own Clan Wars duel rounds count as their games on those cards, won or lost by each round&#39;s crowns (<code>your_duel_rounds</code>, <code>modes.war.your_duel_rounds</code>). A duel-only war deck is a candidate, and can be locked by the <code>deck_hash</code> an answer gives it.</li>\n<li><code>battles_deck_sets</code>: arguments are settled before any search: a card both required and excluded, a required card not in the collection and locked decks sharing cards (all of them, by name) are refused; <code>locked_decks</code> echoes every locked deck with its fit; the set&#39;s value counts its locked decks, the weakest twice; <code>partial_set</code> and <code>candidates.one_card_short</code> answer when no whole set exists; <code>fit.fieldable</code> is true when every card is owned, with <code>fit.exact_form</code> false for a form played as its base card; candidates are gated on the three competitive modes, not casual play.</li>\n<li><code>battles_deck_upgrades</code>: options are priced most promising first (the decks in the set count most), a deck&#39;s ceiling keeps cards already above the fielded level, and the pool widens only when no set packs.</li>\n<li><code>battles_query</code>: <code>with_card</code>, <code>with_cards</code> and <code>against_card</code> match a duel on its rounds&#39; decks (<code>with_cards</code> on one round&#39;s).</li>\n<li>Attested facts: <code>member_away.until</code> may lie ahead (up to a year; an away with an end date was refused); <code>role_change_made</code> refuses the same role on both sides; <code>award_standing.previous_player_tag</code> is normalised.</li>\n</ul>\n<p>Additive: new fields and wider acceptance; <code>fit.fieldable</code> on a form-substituted deck changed from false to true, which is the correction.</p>\n",
      "date_published": "2026-09-26T12:00:00Z",
      "tags": ["contract"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-25-what-to-upgrade-for-better-war-decks",
      "url": "https://elixir.poapkings.com/updates/2026-09-25-what-to-upgrade-for-better-war-decks",
      "title": "What to upgrade for better war decks",
      "content_html": "<p>Ask what to upgrade and Elixir now answers from your own war decks: starting from your best four decks that share no card, it tries each upgrade that could matter (a card raised toward the level you play at, or an Evolution or Hero you have not unlocked) and says which of your decks each would lift, how much it would improve the set, and whether it would change which decks you field. It also names the decks that are close: ones that would join your four once a few of their cards reach your level, with every card and how many levels each needs. Levels, not gold, since upgrade costs are not in the record. Contracts 9.7.0 and 9.7.1.</p>\n",
      "date_published": "2026-09-25T12:00:00Z",
      "tags": ["shipped"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-25-clan-actions-waiting-by-email",
      "url": "https://elixir.poapkings.com/updates/2026-09-25-clan-actions-waiting-by-email",
      "title": "Clan actions waiting, by email",
      "content_html": "<p>An eighth email, from Elixir Clan: on a morning when something new in your clan is yours to do (promote a member, welcome a newcomer, answer a departure, say whether you are away), one note lists everything waiting for you, with a link to act. Only if you can act on it, and at most one a day per clan. Elixir Clan writes the words and Elixir sends them, so your address never reaches the app. It is on to start, and a switch on your email page like every other. JSON API 2.4.0.</p>\n",
      "date_published": "2026-09-25T12:00:00Z",
      "tags": ["shipped"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-25-a-compact-clan-series-keeps-what-you-asked-for",
      "url": "https://elixir.poapkings.com/updates/2026-09-25-a-compact-clan-series-keeps-what-you-asked-for",
      "title": "A compact clan series keeps what you asked for",
      "content_html": "<p>Asking a clan&#39;s daily series for a few metrics in compact form now answers those metrics, as the full form does. It used to answer the five standard clan metrics whatever you named, so a compact answer could be larger than the full one. Contract 9.2.1.</p>\n",
      "date_published": "2026-09-25T12:00:00Z",
      "tags": ["shipped"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-25-your-clan-s-award-races-as-they-stand",
      "url": "https://elixir.poapkings.com/updates/2026-09-25-your-clan-s-award-races-as-they-stand",
      "title": "Your clan's award races, as they stand",
      "content_html": "<p>A clan that runs its awards in Elixir Clan now shares where each race stands while the season is still running: who is first, second and third in each award, by the clan&#39;s own rules, updated every morning. Everyone in the clan sees it on their timeline, and the clan&#39;s own agent can say who leads and notice when the lead changes hands. The standings are the clan app&#39;s, labelled as such, apart from the game record. Contract 9.6.0; JSON API 2.6.0.</p>\n",
      "date_published": "2026-09-25T12:00:00Z",
      "tags": ["shipped"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-25-four-war-decks-that-share-no-card",
      "url": "https://elixir.poapkings.com/updates/2026-09-25-four-war-decks-that-share-no-card",
      "title": "Four war decks that share no card",
      "content_html": "<p>Ask for your war decks and Elixir now answers with sets you can actually field: four decks with no card in common (an Evolution or Hero form counts as the same card), picked from decks this season&#39;s players really played in Trophy Road, Path of Legends and Clan Wars, and fitted to your collection and card levels. A deck built around an Evolution you have not unlocked still counts, played with the base card and priced by how much that Evolution is measured to add. Each deck shows its record and why it was chosen, the weakest deck of the set is named, and the decks it had to give up are listed with the card they lost. Keep the decks you like and ask again for the rest, or ask for a different last deck. Contracts 9.4.0 and 9.5.0.</p>\n",
      "date_published": "2026-09-25T12:00:00Z",
      "tags": ["shipped"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-25-a-clan-sees-who-left-and-who-was-removed",
      "url": "https://elixir.poapkings.com/updates/2026-09-25-a-clan-sees-who-left-and-who-was-removed",
      "title": "A clan sees who left and who was removed",
      "content_html": "<p>When a leader tells Elixir Clan whether a member left or was kicked, everyone in the clan now sees it on their timeline, and so does the clan&#39;s own agent, which can now say it in the clan&#39;s Discord. Until today only the clan&#39;s leaders saw it. The game already shows the whole clan when someone is kicked, and leaders say why in clan chat, so hiding it from the clan&#39;s agent hid nothing. Whether a member is away stays with the leaders. Contract 9.3.0; JSON API 2.5.0.</p>\n",
      "date_published": "2026-09-25T12:00:00Z",
      "tags": ["retired"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-25-clan-reads-on-a-schedule",
      "url": "https://elixir.poapkings.com/updates/2026-09-25-clan-reads-on-a-schedule",
      "title": "Clan reads on a schedule",
      "content_html": "<p>An integration can now hold permission to read clans: the participation and roster reads a signed-in person already had, for any clan Elixir records. It is how Elixir Clan evaluates a clan&#39;s policy each morning with nobody signed in, so actions are waiting when leaders arrive. Integrations are provisioned by the admin. JSON API 2.3.0.</p>\n",
      "date_published": "2026-09-25T12:00:00Z",
      "tags": ["shipped"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-25-what-your-clan-did-on-your-timeline",
      "url": "https://elixir.poapkings.com/updates/2026-09-25-what-your-clan-did-on-your-timeline",
      "title": "What your clan did, on your timeline",
      "content_html": "<p>The Elixir family&#39;s own apps can now tell Elixir what a person did in a clan: a departure a leader says was a kick or a leave, a promotion made, an award the clan granted, a member away, a message sent to the clan. Elixir Drop can say you set a new personal best. These attested facts sit apart from the game record, which only Elixir&#39;s collectors write, and each says who said it, in which app, as what role. You see one only if its type allows: anyone in the clan sees promotions, awards and messages; only the clan&#39;s leaders see whether a departure was a kick, and an agent never does, so a kick is never narrated. An app asks for the new &quot;Record what you do in your clan&quot; capability to write them, and only Elixir&#39;s own apps may. Contract 9.2.0; JSON API 2.2.0.</p>\n",
      "date_published": "2026-09-25T12:00:00Z",
      "tags": ["shipped"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-25-today-s-war-decks-are-the-game-s-own-count",
      "url": "https://elixir.poapkings.com/updates/2026-09-25-today-s-war-decks-are-the-game-s-own-count",
      "title": "Today's war decks are the game's own count",
      "content_html": "<p>Who has played their war decks today now comes straight from the game&#39;s own daily counter, as Elixir last read the race. It used to add recorded war battles placed on the day by the clock, which could run ahead of the game and, for a clan whose day rolls a little early, show someone with more than four decks. The count can now trail play by a few minutes instead of guessing ahead. Contract 9.1.2.</p>\n",
      "date_published": "2026-09-25T12:00:00Z",
      "tags": ["shipped"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-25-your-own-battles-counted-the-same-everywhere",
      "url": "https://elixir.poapkings.com/updates/2026-09-25-your-own-battles-counted-the-same-everywhere",
      "title": "Your own battles, counted the same everywhere",
      "content_html": "<p>A boat defense, where an enemy attacked your clan&#39;s boat and the defense deck answered, is no longer counted as one of your battles in performance, comparisons, trends, card and deck stats, or clan participation. When a record mixes game modes, the answer now shows each mode family and says it pooled them, and the weekly arena mail does the same. On your own connection you are yourself: your agent no longer sees the tools for mapping other people, and leaving out a clan means your primary player&#39;s clan. You cannot remove your primary player while you track others; make another player primary first, from the player&#39;s page. Only Elixir&#39;s own apps, like Elixir Drop, can ask for your email address when you sign in.</p>\n",
      "date_published": "2026-09-25T12:00:00Z",
      "tags": ["shipped"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-25-war-facts-are-weekly-totals",
      "url": "https://elixir.poapkings.com/updates/2026-09-25-war-facts-are-weekly-totals",
      "title": "War facts are weekly totals",
      "content_html": "<p>Elixir no longer splits a member&#39;s war week by day. The API does not say which day a deck was played, and each race rolls its day at its own moment, which cannot be placed reliably across every clan Elixir records. Clan participation, war history and the current race now serve the game&#39;s weekly counters: decks used, points, boat attacks and repair points. Per-day attendance, training-day totals and the scoring-deck count after a finish are gone; the current day&#39;s deck count in the current race stays. Contracts 9.0.0 and 9.0.1; JSON API 2.0.0.</p>\n",
      "date_published": "2026-09-25T12:00:00Z",
      "tags": ["shipped"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-25-contract-9-7-1",
      "url": "https://elixir.poapkings.com/updates/2026-09-25-contract-9-7-1",
      "title": "Contract 9.7.1",
      "content_html": "<p><code>battles_deck_upgrades</code>: each option now says which decks of the set it lifts (<code>lifts</code>: the decks whose value it raises, before and after), so an agent can say &quot;Miner lifts your Mortar deck&quot; without comparing sets. Read back through a clan&#39;s agent, 9.7.0 left that to <code>set_after</code>, and the agent named the card but not the deck. <code>decks_affected</code> is described as what it is: candidate decks holding the card, not decks it improves.</p>\n",
      "date_published": "2026-09-25T12:00:00Z",
      "tags": ["contract"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-25-contract-9-7-0",
      "url": "https://elixir.poapkings.com/updates/2026-09-25-contract-9-7-0",
      "title": "Contract 9.7.0",
      "content_html": "<p>A new tool, <code>battles_deck_upgrades</code>: the other half of a war set, &quot;what should I upgrade so my four decks get better&quot;. It starts from the player&#39;s best set of decks sharing no card today (the candidates, values and exact packing of <code>battles_deck_sets</code>) and prices two things by re-packing the set: single upgrades (a card raised toward the level the player fields, at most <code>max_levels</code> at a time, or an Evolution or Hero form unlocked that a candidate deck plays), and <code>within_reach</code>, the decks outside the set that would join it once each of their low cards reaches that level. Each says the set&#39;s value before and after (<code>gain</code>, in the same log-odds <code>battles_deck_sets</code> optimises), the levels it takes and the set it would give. Levels, not gold: the game&#39;s upgrade costs are not in the record.</p>\n<ul>\n<li><code>battles_deck_upgrades</code>: <code>options</code> (kind <code>level</code> or <code>form</code>), <code>within_reach</code> (<code>raises</code>, <code>forms</code>, <code>levels</code>), <code>baseline</code>.</li>\n</ul>\n<p>Additive.</p>\n",
      "date_published": "2026-09-25T12:00:00Z",
      "tags": ["contract"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-25-contract-9-6-0",
      "url": "https://elixir.poapkings.com/updates/2026-09-25-contract-9-6-0",
      "title": "Contract 9.6.0",
      "content_html": "<p>A new attested fact, <code>award_standing</code>: where a member stands in one of the clan&#39;s own awards for a season still running (the award&#39;s name and id, the season, the place, the value and its unit, as of when, and <code>previous_player_tag</code> when the place changed hands). The awards and their rules are the clan&#39;s app&#39;s (Elixir Clan), so it computes the standing and writes it on its own integration key each morning, labelled as the app&#39;s, never a person&#39;s; the clan and its agent see it on the timeline (<code>kinds: [&quot;award_standing&quot;]</code>, section <code>attested</code>). A clan&#39;s agent can now answer &quot;who leads War Champ&quot; in the clan&#39;s own terms and notice a lead change. Additive; JSON API 2.6.0.</p>\n",
      "date_published": "2026-09-25T12:00:00Z",
      "tags": ["contract"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-25-contract-9-5-1",
      "url": "https://elixir.poapkings.com/updates/2026-09-25-contract-9-5-1",
      "title": "Contract 9.5.1",
      "content_html": "<p><code>battles_deck_sets</code>: the one wider pass, when the default gates pack nothing, also drops the level floor. A maxed account read back at 9.5.0 still got no set: its main decks are level 16 and most of its other cards are not, so 1,585 of 1,864 season decks held a card under the floor of 12. On the wider pass the gap is priced by <code>level_term</code> alone and shown as each deck&#39;s <code>fit.lowest_card</code>; <code>fit_for.min_card_level</code> is null when no floor answered.</p>\n",
      "date_published": "2026-09-25T12:00:00Z",
      "tags": ["contract"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-25-contract-9-5-0",
      "url": "https://elixir.poapkings.com/updates/2026-09-25-contract-9-5-0",
      "title": "Contract 9.5.0",
      "content_html": "<p><code>battles_deck_sets</code> answers a maxed account. At 9.4.0 a player who fields level 16 got no set: of 889 season decks, 419 were refused for an Evolution or Hero form not unlocked and 334 for a card two levels under, leaving 3. A deck played with a form the player lacks now stays, played with the base card: <code>forms_substituted</code> names each card and <code>value.form_term</code> subtracts that card&#39;s measured form advantage this season (its form&#39;s shrunk rate against its base form&#39;s, over every mode, never a bonus; the season&#39;s median where a card&#39;s forms are too thin, <code>measured: false</code>). The level floor is four levels under the fielded level, not two: above it <code>level_term</code> prices the gap. When the default gates pack nothing, the candidates widen once (<code>min_battles</code> 5, <code>min_players</code> 2) and <code>applied</code> says which answered. <code>candidates.form_not_unlocked</code> gives way to <code>candidates.forms_substituted</code>.</p>\n",
      "date_published": "2026-09-25T12:00:00Z",
      "tags": ["contract"]
    },
    {
      "id": "https://elixir.poapkings.com/updates/2026-09-25-contract-9-4-0",
      "url": "https://elixir.poapkings.com/updates/2026-09-25-contract-9-4-0",
      "title": "Contract 9.4.0",
      "content_html": "<p><code>battles_deck_sets</code>: the best sets of decks a player can field together sharing no card, the question Clan Wars asks (four decks, 32 distinct cards; a card&#39;s Evolution or Hero form is the same card). Chosen exactly (branch and bound) from decks this season&#39;s recorded players played in Trophy Road, Path of Legends and Clan Wars, reduced to the player&#39;s collection, unlocked forms and levels (no card more than two under the level they field), each deck valued from its record (shrunk per mode, Trophy Road and Clan Wars corrected for the players&#39; level edge at 0.5 log-odds per level) and its fit, the weakest deck counted twice. <code>lock_decks</code> keeps decks and fills the rest (&#39;a different last war deck&#39;); <code>exclude_cards</code>, <code>require_cards</code>, <code>alternatives</code> (sets sharing at most two decks with each other) and <code>near_misses</code> (the decks it gave up, with the cards they lost) let an agent build a set with the player. Additive.</p>\n",
      "date_published": "2026-09-25T12:00:00Z",
      "tags": ["contract"]
    }
  ]
}
