/sitemap.xml — feature decomposition One file per SAMA layer. Layer 2 stays empty. Three files total — Pure data already exists; Core helper + Entry handler are the only new code. Layer 3 · Entry HTTP route — reads registries, calls Core helper, returns Response with XML body and Cache-Control d21_app.ts → "/sitemap.xml" ↓ uses Layer 2 · Adapter — not required — registries are already in-process data; no DB, no network, no filesystem read at request time (empty by design) ↓ uses Layer 1 · Core pure logic — takes Array<{loc, lastmod?}>, XML-escapes, returns sitemaps.org 0.9 urlset string b32_sitemap.ts → renderSitemap() ↓ uses Layer 0 · Pure existing registries — single source of truth for every indexable URL on the site ALL_POSTS · ALL_SAMA · ALL_GUIDES · BASE_URL The Law (§1.2): imports flow downward only. d21 → b32 → a31. No upward edge, no sideways edge — the verifier rejects either.