<?xml version="1.0" encoding="UTF-8"?>
<!--
  runmyb.com XML sitemap. Twenty-one URLs: the apex, the nineteen extensionless pages, and
  /notice.html.

  ⚠ NOTE FOR EDITORS: this is an XML comment, so the two-hyphen sequence is ILLEGAL inside it and
  will make the whole file fail to parse. The rest of the repo writes an em dash as two hyphens;
  here it is written as the character — instead. Do not "normalise" it back.

  ⛔ THE URL FORM IS THE CANONICAL FORM AND THEY MUST NEVER DISAGREE. Every URL below is the
  EXTENSIONLESS APEX form — https://runmyb.com/{slug}, no www, no .html. That is the form every
  internal nav and footer link already uses, and it is the form each page's own
  <link rel="canonical"> declares. A sitemap that advertises one form while the pages canonicalise
  another does not merely fail to help: it teaches the crawler that the site disagrees with itself,
  and Google resolves that by trusting neither signal.

  ⚠ TWO KNOWN CONSEQUENCES FOR THE FLIP, on both of which this file deliberately takes a position:
    1. The flip currently plans to upload most pages under TWO keys (/privacy AND /privacy.html,
       identical bytes, both answering 200). Only the extensionless key is listed here. The .html
       twin is then an unlisted duplicate, which is harmless ONLY because every page's canonical
       points at the extensionless form; that canonical is what collapses the pair. If the twins
       ever ship without canonicals, the site publishes a full set of duplicates.
    2. Blueprint section 7 D3 (answered OK, 2026-07-30) adds a www record with a 301 to the apex.
       That 301 is what makes the apex form here correct rather than merely preferred; a www host
       answering 200 alongside the apex would be a second duplicate set.

  ⛔ /app-domain.html IS DELIBERATELY ABSENT. It serves on the runmyb.app host, not this one. A
  sitemap may only list URLs on the host that serves it, and the .app apex 301s everything to .com,
  so that page needs its own sitemap or none. Today it correctly has none.

  ⛔ NO priority AND NO changefreq elements. Google has stated publicly that it ignores both.
  Shipping fields that nothing reads is not neutral: a later maintainer reads them as meaning
  something and starts tuning numbers that cannot have an effect.

  ⚠ NO lastmod, AND THAT IS A DECISION, NOT AN OMISSION. Three reasons, heaviest first:
    (a) There is no build step. This file is hand-maintained and uploaded as a static object, so any
        date written here freezes at the moment it was typed and silently becomes false at the next
        content edit. Google's documented behaviour is to ignore lastmod ACROSS THE WHOLE SITEMAP
        once it finds the values untrustworthy, so a stale lastmod is strictly worse than none: it
        also discards the honest signals around it.
    (b) Deriving it from git today would be honest but empty. Every page in website/draft/ carries
        the same commit timestamp (2026-07-31T14:52:26+02:00 — the design-shell landing rewrote all
        twenty-one pages in one commit), so all twenty-one entries would state the identical
        instant: data-shaped noise with zero discriminating information.
    (c) Hand-writing per-page dates was ruled out outright. Nothing in the tree knows a page's
        content date, so every such value would be invented.
  ⇒ THE CONDITION UNDER WHICH TO ADD IT: when the flip gains a build or upload step that can ask
  git for each page's own last commit date at upload time (git log, one file, ISO date), emit
  lastmod from that and from nothing else. Until such a step exists, leave the element out.
  (The exact git invocation is not quoted here only because the flag syntax needs the two-hyphen
  sequence this comment cannot contain.)
-->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

  <!-- The home page. -->
  <url><loc>https://runmyb.com/</loc></url>

  <!-- Audience pages. -->
  <url><loc>https://runmyb.com/for-experts</loc></url>
  <url><loc>https://runmyb.com/for-founders</loc></url>
  <url><loc>https://runmyb.com/for-creators</loc></url>
  <url><loc>https://runmyb.com/for-firms</loc></url>
  <url><loc>https://runmyb.com/starting-out</loc></url>

  <!-- Explanatory pages. -->
  <url><loc>https://runmyb.com/what-it-costs</loc></url>
  <url><loc>https://runmyb.com/answers</loc></url>
  <url><loc>https://runmyb.com/access</loc></url>
  <url><loc>https://runmyb.com/email</loc></url>

  <!-- Company. -->
  <url><loc>https://runmyb.com/about</loc></url>
  <url><loc>https://runmyb.com/contact</loc></url>

  <!-- The eight in-force published policies. -->
  <url><loc>https://runmyb.com/terms</loc></url>
  <url><loc>https://runmyb.com/privacy</loc></url>
  <url><loc>https://runmyb.com/aup</loc></url>
  <url><loc>https://runmyb.com/cookies</loc></url>
  <url><loc>https://runmyb.com/refunds</loc></url>
  <url><loc>https://runmyb.com/dpa</loc></url>
  <url><loc>https://runmyb.com/dmca</loc></url>
  <url><loc>https://runmyb.com/notice-policy</loc></url>

  <!-- ⚠ KEEPS ITS .html EXTENSION BY DESIGN. This is the public abuse / notice-and-action page
       (DMCA section 512 agent + DSA Art. 16 channel). It is already live at exactly this URL, it is
       linked from every footer as "Report abuse", and third parties — including the USCO DMCA agent
       registration — reference that address. Renaming it to match the extensionless convention
       would break a published legal contact point, so the convention yields here. -->
  <url><loc>https://runmyb.com/notice.html</loc></url>

</urlset>
