﻿<?xml version="1.0" encoding="UTF-8"?>
<!--
  Cowboyapuss sitemap INDEX (spec 005, D23).

  Static, like robots.txt, and for the same reason: a sitemap that 5xx's during
  a cold start is worse than no sitemap. This file never changes when content
  changes; it only names where the changing list lives.

  The child, /sitemaps/stories.xml, is served by the `webssr` Cloud Function
  (D3 rewrite). It lists free, published stories and fable hubs, filtered
  through the same `isPubliclyServable()` predicate as the pages themselves
  (D11), and returns HTTP 200 with an empty <urlset> if its handler throws
  (D23): an error must degrade to "nothing new today", never to a 5xx.

  That split is the whole point of the index: story pages appear the moment the
  pipeline publishes them, with no redeploy, so the list of URLs cannot live in
  a file that only changes when we ship.

  The marketing pages (/, /games, /characters, /rodeo-reef, /store, /parents,
  /privacy, /terms) are deliberately not listed anywhere. Every one of them is
  one click from the site root, five of them from the shared nav (D60, plus
  Games on 08/08/2026); a sitemap earns its keep for URLs that link-following
  cannot discover, and these are not those.

  [domain substitution map]
  The <loc> below is absolute by sitemap spec, so it names the origin. It is one
  of the entries in `specs/005-public-web/tasks.md` "Domain substitution map":
  change it with `site` in `astro.config.mjs`, `public/robots.txt`, and
  `firebase.json`.
-->
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <sitemap>
    <loc>https://cowboyapuss.com/sitemaps/stories.xml</loc>
  </sitemap>
</sitemapindex>
