<?xml version="1.0" encoding="UTF-8"?>
<!-- MindForge Capital — static page sitemap.
     Per-stock URLs (~2,125 of them) live in screener/stocks-sitemap.xml, which is
     regenerated on every data refresh and declared separately in robots.txt.
     V26.8: that sitemap used to carry BOTH per-stock surfaces; the two pages have
     since been consolidated onto the single canonical /scores/company.html, and
     /screener/company.html is now a redirect stub, so only the canonical URL is
     listed (a sitemap must not advertise redirecting URLs).

     V25.6: login.html and recover.html were REMOVED from this file. Both carry
     <meta name="robots" content="noindex">, and submitting a noindex URL in a
     sitemap is a direct contradiction — it spends crawl budget on pages that can
     never rank and reports as a "Submitted URL marked noindex" error in Search
     Console. lastmod dates were also stale (index.html claimed 2026-06-03 having
     actually changed on 2026-07-23); they now come from git's last-commit date
     per file, which is the only value that is true by construction.

     V32.0 — ALL FOURTEEN OF THOSE DATES WERE WRONG. The note above described an
     intention, not a fact: they were written once and never regenerated, so they
     had drifted one to four weeks behind the files they describe. Google says
     plainly that it ignores lastmod values it finds unreliable, which makes a
     sitemap full of stale dates worse than one carrying none at all.

     They are also NOT a plain `git log -1` per file, and that is the part worth
     remembering. V31.9 bumped an asset cache token (?v=) on 49 files in ONE
     commit, so a naive last-commit date claims every unrelated page on the site
     changed on the same day — exactly the noise that teaches a crawler to stop
     trusting the field. Each date here is the newest commit whose diff for that
     file changed something OTHER than a ?v= token: normalise every +/- line by
     replacing `?v=<hex>` with a constant, and if the added and removed sets are
     then identical, that commit touched no content and is skipped. A page edited
     in the release currently being shipped takes that release's date, because git
     cannot know about a commit that has not happened yet.

     V36.6 — THAT RULE IS NOW A SCRIPT, NOT A CHECKLIST ITEM. The V25.6 note
     above described the fix as done and it was not; V32.0 re-derived the dates
     by hand and wrote the rule down, and `grep -n sitemap runner/publish.py`
     still returned nothing — so by 2026-09-09 all fourteen values read
     2026-08-19/20 while every one of those pages had been modified that day.
     Third occurrence of the same drift, second time after a note claiming it
     was handled.

     `runner/regen_sitemap.py` implements exactly the rule above (including the
     ?v=-only skip, which is why /scores/ reads 2026-09-07 and /fii-dii/
     2026-09-06 where a naive `git log -1` would have stamped all fourteen with
     the same day), and treats a file with uncommitted changes as today's date
     so it can run DURING a release. It is invoked by runner/publish.py and by
     commands/refresh-stocks.command; `--check` reports drift and exits 1
     without writing. DO NOT hand-edit the dates below — regenerate them. -->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://mindforgecapital.com/</loc>
    <lastmod>2026-09-09</lastmod>
    <changefreq>weekly</changefreq>
    <priority>1.0</priority>
  </url>
  <url>
    <loc>https://mindforgecapital.com/strategies.html</loc>
    <lastmod>2026-09-09</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.95</priority>
  </url>
  <url>
    <loc>https://mindforgecapital.com/signup.html</loc>
    <lastmod>2026-09-09</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.90</priority>
  </url>
  <url>
    <loc>https://mindforgecapital.com/smallmicro.html</loc>
    <lastmod>2026-09-09</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.90</priority>
  </url>
  <url>
    <loc>https://mindforgecapital.com/largemidcap.html</loc>
    <lastmod>2026-09-09</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.90</priority>
  </url>
  <url>
    <loc>https://mindforgecapital.com/multiasset.html</loc>
    <lastmod>2026-09-09</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.90</priority>
  </url>
  <url>
    <loc>https://mindforgecapital.com/screener/</loc>
    <lastmod>2026-09-09</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.85</priority>
  </url>
  <url>
    <loc>https://mindforgecapital.com/scores/</loc>
    <lastmod>2026-09-07</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.85</priority>
  </url>
  <url>
    <loc>https://mindforgecapital.com/fii-dii/</loc>
    <lastmod>2026-09-09</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.85</priority>
  </url>
  <url>
    <loc>https://mindforgecapital.com/factor-report/</loc>
    <lastmod>2026-09-09</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.85</priority>
  </url>
  <url>
    <loc>https://mindforgecapital.com/calculator.html</loc>
    <lastmod>2026-09-09</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.70</priority>
  </url>
  <url>
    <loc>https://mindforgecapital.com/disclosures.html</loc>
    <lastmod>2026-09-09</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.40</priority>
  </url>
  <url>
    <loc>https://mindforgecapital.com/privacy.html</loc>
    <lastmod>2026-09-09</lastmod>
    <changefreq>yearly</changefreq>
    <priority>0.30</priority>
  </url>
  <url>
    <loc>https://mindforgecapital.com/terms.html</loc>
    <lastmod>2026-09-09</lastmod>
    <changefreq>yearly</changefreq>
    <priority>0.30</priority>
  </url>
</urlset>
