<?xml version="1.0" encoding="UTF-8"?>
<!-- MG-BUG-027: clean addresses only (no .html: Cloudflare Pages answers a .html address with a 308 to the clean one, and a
     sitemap must list the final address). Every entry is a page the PRODUCTION build ships (scripts/ship-lists.js
     MUST_SHIP_PROD plus the marketing pages in build-web.js) and is indexable (no noindex) - each of the 14 was checked
     by hand against a built public/ on 24 Oct 2026.
     Left out on purpose: pages that need a signed-in child or adult (home, tables, account, settings, family, hall, event
     and school pages), noindex pages (find-level, where, organisers, arena save and level-finder) and the 404.

     THE CHECKER IS NOW IN (MG-BUG-026/027, MG-746): a prod-only block in scripts/build-web.js injects a canonical tag
     per page and then proves every address below is on mathkidoo.com, clean (no .html, no query, no fragment), shipped
     by this build, indexable and canonical to itself - and stops the build if any of that fails. Run on 24 Oct 2026 it
     reported "Canonical tags: 34 page(s) tagged" and "Sitemap check passed: 14 clean, shipped, indexable address(es),
     each canonical to itself."

     Two earlier drafts of this comment were wrong and are recorded here rather than quietly dropped. The first said the
     build already checked the list when it did not. The second said the gate could not be committed because it "cannot
     be separated from the canonical injection it depends on" and had to wait for the landing hero question. Reading the
     diff disproved that: the canonical injection and this gate are one block, and that block shares no code with the
     landing work. Nothing was waiting on anything.

     Still by hand: adding or removing an address. The gate proves every address here is real, not that every real page
     is here. -->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://mathkidoo.com/</loc>
    <lastmod>2026-10-24</lastmod>
  </url>
  <url>
    <loc>https://mathkidoo.com/app</loc>
    <lastmod>2026-10-24</lastmod>
  </url>
  <url>
    <loc>https://mathkidoo.com/for-parents</loc>
    <lastmod>2026-10-21</lastmod>
  </url>
  <url>
    <loc>https://mathkidoo.com/for-schools</loc>
    <lastmod>2026-10-23</lastmod>
  </url>
  <url>
    <loc>https://mathkidoo.com/for-events</loc>
    <lastmod>2026-10-21</lastmod>
  </url>
  <url>
    <loc>https://mathkidoo.com/tables-package</loc>
    <lastmod>2026-10-21</lastmod>
  </url>
  <url>
    <loc>https://mathkidoo.com/arithmetic-package</loc>
    <lastmod>2026-10-21</lastmod>
  </url>
  <url>
    <loc>https://mathkidoo.com/research</loc>
    <lastmod>2026-10-21</lastmod>
  </url>
  <url>
    <loc>https://mathkidoo.com/privacy</loc>
    <lastmod>2026-10-21</lastmod>
  </url>
  <url>
    <loc>https://mathkidoo.com/terms</loc>
    <lastmod>2026-10-21</lastmod>
  </url>
  <!-- MG-734: the Maths Arena. Raj said on 24 Oct to list it so people can find it from a search: the hub and the three games
       that play with no account. The hub is the folder address (trailing slash), because /arena answers 308 to /arena/. -->
  <url>
    <loc>https://mathkidoo.com/arena/</loc>
    <lastmod>2026-10-24</lastmod>
  </url>
  <url>
    <loc>https://mathkidoo.com/arena/times-treasure</loc>
    <lastmod>2026-10-24</lastmod>
  </url>
  <url>
    <loc>https://mathkidoo.com/arena/factor-fort-v5</loc>
    <lastmod>2026-10-24</lastmod>
  </url>
  <url>
    <loc>https://mathkidoo.com/arena/skip-count-surfer</loc>
    <lastmod>2026-10-24</lastmod>
  </url>
</urlset>
