<?xml version="1.0" encoding="UTF-8"?>
<!--
  The URLs worth arriving on, and each one is here because it can answer for itself.

  ⚖️ FOUR URLs since 0.6.9, and every one after the first arrived by EARNING it
  rather than by being added: /characters joined the day it got its own derived
  document, on exactly the test /rules passed at 0.4.10, and /world joined the day
  its own document was derived — which is also the day its last render landed, so
  the page could finally answer for itself with nothing missing. `/rules` is listed because it now has its OWN static document —
  `dist/rules/index.html`, derived from index.html at build time — so a crawler
  that runs no JavaScript reads the rules page's title, description and canonical
  at that address. Before that, every route was served from one index.html and a
  <loc> here would have been asking Google to index a URL that declares itself a
  duplicate of "/".

  ⛔ `/legal` is STILL deliberately not listed, and it is the same test applied to
  a different answer: it has no static document of its own, so it is served the
  homepage's head. It stays reachable from the footer, and Googlebot — which does
  render — sees the canonical <h-legal> rewrites on connect. ⚠️ The day it gets a
  document, it gets a row; ⛔ the row is not the decision, the document is.

  ⛔ NOT PORTED from the retired marketing site's sitemap, which listed EIGHT
  quiz-archetype routes (the quiz is killed) plus /privacy (legal is one page at
  /legal now). Porting it would have published nine URLs that 404.

  ⚠️ `lastmod` is hand-maintained. A build-time stamp would re-date the page on
  every deploy and claim a change that never happened, which is worse than a
  stale date because it trains a crawler to ignore the field.

  🔴 AND HAND-MAINTAINED MEANS IT GOES STALE THE OTHER WAY, WHICH IS THE FAILURE
  NOBODY WATCHES FOR. Found 2026-08-19 by an SEO pass: three of the four dates
  were older than the copy behind them — `/` said 08-08 while the homepage had
  gained demo bodies, doors and an ending; `/rules` said 08-13 and `/characters`
  08-14, and both had their copy re-cut on 08-19. A sitemap that UNDER-reports
  change is telling a crawler not to come back, which is the same cost as the
  over-reporting a build stamp would cause, arrived at from the opposite side.
  ⛔ The rule stands and the discipline is the fix: WHEN A PAGE'S COPY CHANGES,
  ITS DATE MOVES IN THE SAME CHANGE.
-->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://epicroll.ai/</loc>
    <lastmod>2026-08-19</lastmod>
    <changefreq>weekly</changefreq>
  </url>
  <url>
    <loc>https://epicroll.ai/rules</loc>
    <lastmod>2026-08-19</lastmod>
    <changefreq>monthly</changefreq>
  </url>
  <url>
    <loc>https://epicroll.ai/characters</loc>
    <lastmod>2026-08-19</lastmod>
    <changefreq>monthly</changefreq>
  </url>
  <url>
    <loc>https://epicroll.ai/world</loc>
    <lastmod>2026-08-19</lastmod>
    <changefreq>monthly</changefreq>
  </url>
</urlset>
