OOKNET                             [ /  search the index  ]  
──────────────────────────────────────────────────────────────────────────────────────
══════════════════════════════════════════════════════════════════════════════════════
OOKNET   [ /  search  ]  
────────────────────────────────────────────────
════════════════════════════════════════════════
 
HASH      5769d671f985
DATE      2025-11-10
SUBJECT   meta: clean
FILES     5 CHANGED
HASH      5769d671f985
DATE      2025-11-10
SUBJECT   meta: clean
FILES     5 CHANGED
 

diff --git a/.gitignore b/.gitignore
index 77bd737..7ae64fd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,11 +1,14 @@
 */**.vercel
-**/node_modules
+**/node_modules**
 **/vendor
 **/dist
 **/public/api
+**/public/data/challenge-mode
 **local.db
 **BUILD.md
 
+.data
+
 docs
 
 .ook

diff --git a/.gitignore b/.gitignore
index 77bd737..7ae64fd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,11 +1,14 @@
 */**.vercel
-**/node_modules
+**/node_modules**
 **/vendor
 **/dist
 **/public/api
+**/public/data/challenge-mode
 **local.db
 **BUILD.md
 
+.data
+
 docs
 
 .ook
 

diff --git a/blizzard-eu-realms-api.json b/blizzard-eu-realms-api.json
deleted file mode 100644
index aeb361b..0000000
--- a/blizzard-eu-realms-api.json
+++ /dev/null
@@ -1,281 +0,0 @@
-{
-  "_links": {
-    "self": {
-      "href": "https://eu.api.blizzard.com/data/wow/realm/?namespace=dynamic-clas
sic-eu"
-    }
-  },
-  "realms": [
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.com/data/wow/realm/4682?namespace=dynami
c-classic-eu"
-      },
-      "name": "EU4 CWOW Web",
-      "id": 4682,
-      "slug": "eu4-cwow-web"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.com/data/wow/realm/4683?namespace=dynami
c-classic-eu"
-      },
-      "name": "EU5 CWOW Web",
-      "id": 4683,
-      "slug": "eu5-cwow-web"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.com/data/wow/realm/4440?namespace=dynami
c-classic-eu"
-      },
-      "name": "Everlook",
-      "id": 4440,
-      "slug": "everlook"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.com/data/wow/realm/4441?namespace=dynami
c-classic-eu"
-      },
-      "name": "Auberdine",
-      "id": 4441,
-      "slug": "auberdine"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.com/data/wow/realm/4442?namespace=dynami
c-classic-eu"
-      },
-      "name": "Lakeshire",
-      "id": 4442,
-      "slug": "lakeshire"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.com/data/wow/realm/4452?namespace=dynami
c-classic-eu"
-      },
-      "name": "Chromie",
-      "id": 4452,
-      "slug": "chromie"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.com/data/wow/realm/4453?namespace=dynami
c-classic-eu"
-      },
-      "name": "Pyrewood Village",
-      "id": 4453,
-      "slug": "pyrewood-village"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.com/data/wow/realm/4454?namespace=dynami
c-classic-eu"
-      },
-      "name": "Mirage Raceway",
-      "id": 4454,
-      "slug": "mirage-raceway"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.com/data/wow/realm/4455?namespace=dynami
c-classic-eu"
-      },
-      "name": "Razorfen",
-      "id": 4455,
-      "slug": "razorfen"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.com/data/wow/realm/4456?namespace=dynami
c-classic-eu"
-      },
-      "name": "Nethergarde Keep",
-      "id": 4456,
-      "slug": "nethergarde-keep"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.com/data/wow/realm/4464?namespace=dynami
c-classic-eu"
-      },
-      "name": "Sulfuron",
-      "id": 4464,
-      "slug": "sulfuron"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.com/data/wow/realm/4465?namespace=dynami
c-classic-eu"
-      },
-      "name": "Golemagg",
-      "id": 4465,
-      "slug": "golemagg"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.com/data/wow/realm/4466?namespace=dynami
c-classic-eu"
-      },
-      "name": "Patchwerk",
-      "id": 4466,
-      "slug": "patchwerk"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.com/data/wow/realm/4467?namespace=dynami
c-classic-eu"
-      },
-      "name": "Firemaw",
-      "id": 4467,
-      "slug": "firemaw"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.com/data/wow/realm/4474?namespace=dynami
c-classic-eu"
-      },
-      "name": "Flamegor",
-      "id": 4474,
-      "slug": "flamegor"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.com/data/wow/realm/4476?namespace=dynami
c-classic-eu"
-      },
-      "name": "Gehennas",
-      "id": 4476,
-      "slug": "gehennas"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.com/data/wow/realm/4477?namespace=dynami
c-classic-eu"
-      },
-      "name": "Venoxis",
-      "id": 4477,
-      "slug": "venoxis"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.com/data/wow/realm/4687?namespace=dynami
c-classic-eu"
-      },
-      "name": "EU4 CWOW GMSS 1",
-      "id": 4687,
-      "slug": "eu4-cwow-gmss-1"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.com/data/wow/realm/4688?namespace=dynami
c-classic-eu"
-      },
-      "name": "EU4 CWOW GMSS 2",
-      "id": 4688,
-      "slug": "eu4-cwow-gmss-2"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.com/data/wow/realm/4678?namespace=dynami
c-classic-eu"
-      },
-      "name": "Hydraxian Waterlords",
-      "id": 4678,
-      "slug": "hydraxian-waterlords"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.com/data/wow/realm/4701?namespace=dynami
c-classic-eu"
-      },
-      "name": "Mograine",
-      "id": 4701,
-      "slug": "mograine"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.com/data/wow/realm/4703?namespace=dynami
c-classic-eu"
-      },
-      "name": "Amnennar",
-      "id": 4703,
-      "slug": "amnennar"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.com/data/wow/realm/4742?namespace=dynami
c-classic-eu"
-      },
-      "name": "Ashbringer",
-      "id": 4742,
-      "slug": "ashbringer"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.com/data/wow/realm/4745?namespace=dynami
c-classic-eu"
-      },
-      "name": "Transcendence",
-      "id": 4745,
-      "slug": "transcendence"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.com/data/wow/realm/4749?namespace=dynami
c-classic-eu"
-      },
-      "name": "Earthshaker",
-      "id": 4749,
-      "slug": "earthshaker"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.com/data/wow/realm/4811?namespace=dynami
c-classic-eu"
-      },
-      "name": "Giantstalker",
-      "id": 4811,
-      "slug": "giantstalker"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.com/data/wow/realm/4813?namespace=dynami
c-classic-eu"
-      },
-      "name": "Mandokir",
-      "id": 4813,
-      "slug": "mandokir"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.com/data/wow/realm/4815?namespace=dynami
c-classic-eu"
-      },
-      "name": "Thekal",
-      "id": 4815,
-      "slug": "thekal"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.com/data/wow/realm/4816?namespace=dynami
c-classic-eu"
-      },
-      "name": "Jin'do",
-      "id": 4816,
-      "slug": "jindo"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.com/data/wow/realm/6364?namespace=dynami
c-classic-eu"
-      },
-      "name": "Shek'zeer",
-      "id": 6364,
-      "slug": "shekzeer"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.com/data/wow/realm/6365?namespace=dynami
c-classic-eu"
-      },
-      "name": "Garalon",
-      "id": 6365,
-      "slug": "garalon"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.com/data/wow/realm/6366?namespace=dynami
c-classic-eu"
-      },
-      "name": "Norushen",
-      "id": 6366,
-      "slug": "norushen"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.com/data/wow/realm/6367?namespace=dynami
c-classic-eu"
-      },
-      "name": "Hoptallus",
-      "id": 6367,
-      "slug": "hoptallus"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.com/data/wow/realm/6368?namespace=dynami
c-classic-eu"
-      },
-      "name": "Ook Ook",
-      "id": 6368,
-      "slug": "ook-ook"
-    }
-  ]
-}

diff --git a/blizzard-eu-realms-api.json b/b
lizzard-eu-realms-api.json
deleted file mode 100644
index aeb361b..0000000
--- a/blizzard-eu-realms-api.json
+++ /dev/null
@@ -1,281 +0,0 @@
-{
-  "_links": {
-    "self": {
-      "href": "https://eu.api.blizzard.com/
data/wow/realm/?namespace=dynamic-classic-eu
"
-    }
-  },
-  "realms": [
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.co
m/data/wow/realm/4682?namespace=dynamic-clas
sic-eu"
-      },
-      "name": "EU4 CWOW Web",
-      "id": 4682,
-      "slug": "eu4-cwow-web"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.co
m/data/wow/realm/4683?namespace=dynamic-clas
sic-eu"
-      },
-      "name": "EU5 CWOW Web",
-      "id": 4683,
-      "slug": "eu5-cwow-web"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.co
m/data/wow/realm/4440?namespace=dynamic-clas
sic-eu"
-      },
-      "name": "Everlook",
-      "id": 4440,
-      "slug": "everlook"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.co
m/data/wow/realm/4441?namespace=dynamic-clas
sic-eu"
-      },
-      "name": "Auberdine",
-      "id": 4441,
-      "slug": "auberdine"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.co
m/data/wow/realm/4442?namespace=dynamic-clas
sic-eu"
-      },
-      "name": "Lakeshire",
-      "id": 4442,
-      "slug": "lakeshire"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.co
m/data/wow/realm/4452?namespace=dynamic-clas
sic-eu"
-      },
-      "name": "Chromie",
-      "id": 4452,
-      "slug": "chromie"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.co
m/data/wow/realm/4453?namespace=dynamic-clas
sic-eu"
-      },
-      "name": "Pyrewood Village",
-      "id": 4453,
-      "slug": "pyrewood-village"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.co
m/data/wow/realm/4454?namespace=dynamic-clas
sic-eu"
-      },
-      "name": "Mirage Raceway",
-      "id": 4454,
-      "slug": "mirage-raceway"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.co
m/data/wow/realm/4455?namespace=dynamic-clas
sic-eu"
-      },
-      "name": "Razorfen",
-      "id": 4455,
-      "slug": "razorfen"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.co
m/data/wow/realm/4456?namespace=dynamic-clas
sic-eu"
-      },
-      "name": "Nethergarde Keep",
-      "id": 4456,
-      "slug": "nethergarde-keep"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.co
m/data/wow/realm/4464?namespace=dynamic-clas
sic-eu"
-      },
-      "name": "Sulfuron",
-      "id": 4464,
-      "slug": "sulfuron"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.co
m/data/wow/realm/4465?namespace=dynamic-clas
sic-eu"
-      },
-      "name": "Golemagg",
-      "id": 4465,
-      "slug": "golemagg"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.co
m/data/wow/realm/4466?namespace=dynamic-clas
sic-eu"
-      },
-      "name": "Patchwerk",
-      "id": 4466,
-      "slug": "patchwerk"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.co
m/data/wow/realm/4467?namespace=dynamic-clas
sic-eu"
-      },
-      "name": "Firemaw",
-      "id": 4467,
-      "slug": "firemaw"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.co
m/data/wow/realm/4474?namespace=dynamic-clas
sic-eu"
-      },
-      "name": "Flamegor",
-      "id": 4474,
-      "slug": "flamegor"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.co
m/data/wow/realm/4476?namespace=dynamic-clas
sic-eu"
-      },
-      "name": "Gehennas",
-      "id": 4476,
-      "slug": "gehennas"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.co
m/data/wow/realm/4477?namespace=dynamic-clas
sic-eu"
-      },
-      "name": "Venoxis",
-      "id": 4477,
-      "slug": "venoxis"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.co
m/data/wow/realm/4687?namespace=dynamic-clas
sic-eu"
-      },
-      "name": "EU4 CWOW GMSS 1",
-      "id": 4687,
-      "slug": "eu4-cwow-gmss-1"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.co
m/data/wow/realm/4688?namespace=dynamic-clas
sic-eu"
-      },
-      "name": "EU4 CWOW GMSS 2",
-      "id": 4688,
-      "slug": "eu4-cwow-gmss-2"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.co
m/data/wow/realm/4678?namespace=dynamic-clas
sic-eu"
-      },
-      "name": "Hydraxian Waterlords",
-      "id": 4678,
-      "slug": "hydraxian-waterlords"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.co
m/data/wow/realm/4701?namespace=dynamic-clas
sic-eu"
-      },
-      "name": "Mograine",
-      "id": 4701,
-      "slug": "mograine"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.co
m/data/wow/realm/4703?namespace=dynamic-clas
sic-eu"
-      },
-      "name": "Amnennar",
-      "id": 4703,
-      "slug": "amnennar"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.co
m/data/wow/realm/4742?namespace=dynamic-clas
sic-eu"
-      },
-      "name": "Ashbringer",
-      "id": 4742,
-      "slug": "ashbringer"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.co
m/data/wow/realm/4745?namespace=dynamic-clas
sic-eu"
-      },
-      "name": "Transcendence",
-      "id": 4745,
-      "slug": "transcendence"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.co
m/data/wow/realm/4749?namespace=dynamic-clas
sic-eu"
-      },
-      "name": "Earthshaker",
-      "id": 4749,
-      "slug": "earthshaker"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.co
m/data/wow/realm/4811?namespace=dynamic-clas
sic-eu"
-      },
-      "name": "Giantstalker",
-      "id": 4811,
-      "slug": "giantstalker"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.co
m/data/wow/realm/4813?namespace=dynamic-clas
sic-eu"
-      },
-      "name": "Mandokir",
-      "id": 4813,
-      "slug": "mandokir"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.co
m/data/wow/realm/4815?namespace=dynamic-clas
sic-eu"
-      },
-      "name": "Thekal",
-      "id": 4815,
-      "slug": "thekal"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.co
m/data/wow/realm/4816?namespace=dynamic-clas
sic-eu"
-      },
-      "name": "Jin'do",
-      "id": 4816,
-      "slug": "jindo"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.co
m/data/wow/realm/6364?namespace=dynamic-clas
sic-eu"
-      },
-      "name": "Shek'zeer",
-      "id": 6364,
-      "slug": "shekzeer"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.co
m/data/wow/realm/6365?namespace=dynamic-clas
sic-eu"
-      },
-      "name": "Garalon",
-      "id": 6365,
-      "slug": "garalon"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.co
m/data/wow/realm/6366?namespace=dynamic-clas
sic-eu"
-      },
-      "name": "Norushen",
-      "id": 6366,
-      "slug": "norushen"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.co
m/data/wow/realm/6367?namespace=dynamic-clas
sic-eu"
-      },
-      "name": "Hoptallus",
-      "id": 6367,
-      "slug": "hoptallus"
-    },
-    {
-      "key": {
-        "href": "https://eu.api.blizzard.co
m/data/wow/realm/6368?namespace=dynamic-clas
sic-eu"
-      },
-      "name": "Ook Ook",
-      "id": 6368,
-      "slug": "ook-ook"
-    }
-  ]
-}
 

diff --git a/blizzard-us-realms-api.json b/blizzard-us-realms-api.json
deleted file mode 100644
index 857c106..0000000
--- a/blizzard-us-realms-api.json
+++ /dev/null
@@ -1,265 +0,0 @@
-{
-  "_links": {
-    "self": {
-      "href": "https://us.api.blizzard.com/data/wow/realm/?namespace=dynamic-clas
sic-us"
-    }
-  },
-  "realms": [
-    {
-      "key": {
-        "href": "https://us.api.blizzard.com/data/wow/realm/4372?namespace=dynami
c-classic-us"
-      },
-      "name": "Atiesh",
-      "id": 4372,
-      "slug": "atiesh"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.com/data/wow/realm/4373?namespace=dynami
c-classic-us"
-      },
-      "name": "Myzrael",
-      "id": 4373,
-      "slug": "myzrael"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.com/data/wow/realm/4374?namespace=dynami
c-classic-us"
-      },
-      "name": "Old Blanchy",
-      "id": 4374,
-      "slug": "old-blanchy"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.com/data/wow/realm/4376?namespace=dynami
c-classic-us"
-      },
-      "name": "Azuresong",
-      "id": 4376,
-      "slug": "azuresong"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.com/data/wow/realm/4384?namespace=dynami
c-classic-us"
-      },
-      "name": "Mankrik",
-      "id": 4384,
-      "slug": "mankrik"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.com/data/wow/realm/4385?namespace=dynami
c-classic-us"
-      },
-      "name": "Pagle",
-      "id": 4385,
-      "slug": "pagle"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.com/data/wow/realm/4387?namespace=dynami
c-classic-us"
-      },
-      "name": "Ashkandi",
-      "id": 4387,
-      "slug": "ashkandi"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.com/data/wow/realm/4388?namespace=dynami
c-classic-us"
-      },
-      "name": "Westfall",
-      "id": 4388,
-      "slug": "westfall"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.com/data/wow/realm/4395?namespace=dynami
c-classic-us"
-      },
-      "name": "Whitemane",
-      "id": 4395,
-      "slug": "whitemane"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.com/data/wow/realm/4408?namespace=dynami
c-classic-us"
-      },
-      "name": "Faerlina",
-      "id": 4408,
-      "slug": "faerlina"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.com/data/wow/realm/4647?namespace=dynami
c-classic-us"
-      },
-      "name": "Grobbulus",
-      "id": 4647,
-      "slug": "grobbulus"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.com/data/wow/realm/4648?namespace=dynami
c-classic-us"
-      },
-      "name": "Bloodsail Buccaneers",
-      "id": 4648,
-      "slug": "bloodsail-buccaneers"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.com/data/wow/realm/4649?namespace=dynami
c-classic-us"
-      },
-      "name": "US1 CWOW Web",
-      "id": 4649,
-      "slug": "us1-cwow-web"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.com/data/wow/realm/4651?namespace=dynami
c-classic-us"
-      },
-      "name": "US2 CWOW Web",
-      "id": 4651,
-      "slug": "us2-cwow-web"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.com/data/wow/realm/4653?namespace=dynami
c-classic-us"
-      },
-      "name": "US1 CWOW GMSS 1",
-      "id": 4653,
-      "slug": "us1-cwow-gmss-1"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.com/data/wow/realm/4654?namespace=dynami
c-classic-us"
-      },
-      "name": "US1 CWOW GMSS 2",
-      "id": 4654,
-      "slug": "us1-cwow-gmss-2"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.com/data/wow/realm/4725?namespace=dynami
c-classic-us"
-      },
-      "name": "Skyfury",
-      "id": 4725,
-      "slug": "skyfury"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.com/data/wow/realm/4726?namespace=dynami
c-classic-us"
-      },
-      "name": "Sulfuras",
-      "id": 4726,
-      "slug": "sulfuras"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.com/data/wow/realm/4727?namespace=dynami
c-classic-us"
-      },
-      "name": "Windseeker",
-      "id": 4727,
-      "slug": "windseeker"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.com/data/wow/realm/4728?namespace=dynami
c-classic-us"
-      },
-      "name": "Benediction",
-      "id": 4728,
-      "slug": "benediction"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.com/data/wow/realm/4731?namespace=dynami
c-classic-us"
-      },
-      "name": "Earthfury",
-      "id": 4731,
-      "slug": "earthfury"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.com/data/wow/realm/4738?namespace=dynami
c-classic-us"
-      },
-      "name": "Maladath",
-      "id": 4738,
-      "slug": "maladath"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.com/data/wow/realm/4795?namespace=dynami
c-classic-us"
-      },
-      "name": "Angerforge",
-      "id": 4795,
-      "slug": "angerforge"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.com/data/wow/realm/4800?namespace=dynami
c-classic-us"
-      },
-      "name": "Eranikus",
-      "id": 4800,
-      "slug": "eranikus"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.com/data/wow/realm/6359?namespace=dynami
c-classic-us"
-      },
-      "name": "Nazgrim",
-      "id": 6359,
-      "slug": "nazgrim"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.com/data/wow/realm/6360?namespace=dynami
c-classic-us"
-      },
-      "name": "Galakras",
-      "id": 6360,
-      "slug": "galakras"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.com/data/wow/realm/6361?namespace=dynami
c-classic-us"
-      },
-      "name": "Ra-den",
-      "id": 6361,
-      "slug": "raden"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.com/data/wow/realm/6362?namespace=dynami
c-classic-us"
-      },
-      "name": "Lei Shen",
-      "id": 6362,
-      "slug": "lei-shen"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.com/data/wow/realm/6363?namespace=dynami
c-classic-us"
-      },
-      "name": "Immerseus",
-      "id": 6363,
-      "slug": "immerseus"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.com/data/wow/realm/4667?namespace=dynami
c-classic-us"
-      },
-      "name": "Remulos (AU)",
-      "id": 4667,
-      "slug": "remulos-au"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.com/data/wow/realm/4669?namespace=dynami
c-classic-us"
-      },
-      "name": "Arugal (AU)",
-      "id": 4669,
-      "slug": "arugal-au"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.com/data/wow/realm/4670?namespace=dynami
c-classic-us"
-      },
-      "name": "Yojamba (AU)",
-      "id": 4670,
-      "slug": "yojamba-au"
-    }
-  ]
-}

diff --git a/blizzard-us-realms-api.json b/b
lizzard-us-realms-api.json
deleted file mode 100644
index 857c106..0000000
--- a/blizzard-us-realms-api.json
+++ /dev/null
@@ -1,265 +0,0 @@
-{
-  "_links": {
-    "self": {
-      "href": "https://us.api.blizzard.com/
data/wow/realm/?namespace=dynamic-classic-us
"
-    }
-  },
-  "realms": [
-    {
-      "key": {
-        "href": "https://us.api.blizzard.co
m/data/wow/realm/4372?namespace=dynamic-clas
sic-us"
-      },
-      "name": "Atiesh",
-      "id": 4372,
-      "slug": "atiesh"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.co
m/data/wow/realm/4373?namespace=dynamic-clas
sic-us"
-      },
-      "name": "Myzrael",
-      "id": 4373,
-      "slug": "myzrael"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.co
m/data/wow/realm/4374?namespace=dynamic-clas
sic-us"
-      },
-      "name": "Old Blanchy",
-      "id": 4374,
-      "slug": "old-blanchy"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.co
m/data/wow/realm/4376?namespace=dynamic-clas
sic-us"
-      },
-      "name": "Azuresong",
-      "id": 4376,
-      "slug": "azuresong"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.co
m/data/wow/realm/4384?namespace=dynamic-clas
sic-us"
-      },
-      "name": "Mankrik",
-      "id": 4384,
-      "slug": "mankrik"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.co
m/data/wow/realm/4385?namespace=dynamic-clas
sic-us"
-      },
-      "name": "Pagle",
-      "id": 4385,
-      "slug": "pagle"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.co
m/data/wow/realm/4387?namespace=dynamic-clas
sic-us"
-      },
-      "name": "Ashkandi",
-      "id": 4387,
-      "slug": "ashkandi"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.co
m/data/wow/realm/4388?namespace=dynamic-clas
sic-us"
-      },
-      "name": "Westfall",
-      "id": 4388,
-      "slug": "westfall"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.co
m/data/wow/realm/4395?namespace=dynamic-clas
sic-us"
-      },
-      "name": "Whitemane",
-      "id": 4395,
-      "slug": "whitemane"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.co
m/data/wow/realm/4408?namespace=dynamic-clas
sic-us"
-      },
-      "name": "Faerlina",
-      "id": 4408,
-      "slug": "faerlina"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.co
m/data/wow/realm/4647?namespace=dynamic-clas
sic-us"
-      },
-      "name": "Grobbulus",
-      "id": 4647,
-      "slug": "grobbulus"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.co
m/data/wow/realm/4648?namespace=dynamic-clas
sic-us"
-      },
-      "name": "Bloodsail Buccaneers",
-      "id": 4648,
-      "slug": "bloodsail-buccaneers"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.co
m/data/wow/realm/4649?namespace=dynamic-clas
sic-us"
-      },
-      "name": "US1 CWOW Web",
-      "id": 4649,
-      "slug": "us1-cwow-web"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.co
m/data/wow/realm/4651?namespace=dynamic-clas
sic-us"
-      },
-      "name": "US2 CWOW Web",
-      "id": 4651,
-      "slug": "us2-cwow-web"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.co
m/data/wow/realm/4653?namespace=dynamic-clas
sic-us"
-      },
-      "name": "US1 CWOW GMSS 1",
-      "id": 4653,
-      "slug": "us1-cwow-gmss-1"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.co
m/data/wow/realm/4654?namespace=dynamic-clas
sic-us"
-      },
-      "name": "US1 CWOW GMSS 2",
-      "id": 4654,
-      "slug": "us1-cwow-gmss-2"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.co
m/data/wow/realm/4725?namespace=dynamic-clas
sic-us"
-      },
-      "name": "Skyfury",
-      "id": 4725,
-      "slug": "skyfury"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.co
m/data/wow/realm/4726?namespace=dynamic-clas
sic-us"
-      },
-      "name": "Sulfuras",
-      "id": 4726,
-      "slug": "sulfuras"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.co
m/data/wow/realm/4727?namespace=dynamic-clas
sic-us"
-      },
-      "name": "Windseeker",
-      "id": 4727,
-      "slug": "windseeker"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.co
m/data/wow/realm/4728?namespace=dynamic-clas
sic-us"
-      },
-      "name": "Benediction",
-      "id": 4728,
-      "slug": "benediction"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.co
m/data/wow/realm/4731?namespace=dynamic-clas
sic-us"
-      },
-      "name": "Earthfury",
-      "id": 4731,
-      "slug": "earthfury"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.co
m/data/wow/realm/4738?namespace=dynamic-clas
sic-us"
-      },
-      "name": "Maladath",
-      "id": 4738,
-      "slug": "maladath"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.co
m/data/wow/realm/4795?namespace=dynamic-clas
sic-us"
-      },
-      "name": "Angerforge",
-      "id": 4795,
-      "slug": "angerforge"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.co
m/data/wow/realm/4800?namespace=dynamic-clas
sic-us"
-      },
-      "name": "Eranikus",
-      "id": 4800,
-      "slug": "eranikus"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.co
m/data/wow/realm/6359?namespace=dynamic-clas
sic-us"
-      },
-      "name": "Nazgrim",
-      "id": 6359,
-      "slug": "nazgrim"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.co
m/data/wow/realm/6360?namespace=dynamic-clas
sic-us"
-      },
-      "name": "Galakras",
-      "id": 6360,
-      "slug": "galakras"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.co
m/data/wow/realm/6361?namespace=dynamic-clas
sic-us"
-      },
-      "name": "Ra-den",
-      "id": 6361,
-      "slug": "raden"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.co
m/data/wow/realm/6362?namespace=dynamic-clas
sic-us"
-      },
-      "name": "Lei Shen",
-      "id": 6362,
-      "slug": "lei-shen"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.co
m/data/wow/realm/6363?namespace=dynamic-clas
sic-us"
-      },
-      "name": "Immerseus",
-      "id": 6363,
-      "slug": "immerseus"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.co
m/data/wow/realm/4667?namespace=dynamic-clas
sic-us"
-      },
-      "name": "Remulos (AU)",
-      "id": 4667,
-      "slug": "remulos-au"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.co
m/data/wow/realm/4669?namespace=dynamic-clas
sic-us"
-      },
-      "name": "Arugal (AU)",
-      "id": 4669,
-      "slug": "arugal-au"
-    },
-    {
-      "key": {
-        "href": "https://us.api.blizzard.co
m/data/wow/realm/4670?namespace=dynamic-clas
sic-us"
-      },
-      "name": "Yojamba (AU)",
-      "id": 4670,
-      "slug": "yojamba-au"
-    }
-  ]
-}
 

diff --git a/post-realm-merge-plan.md b/post-realm-merge-plan.md
deleted file mode 100644
index 4601e8e..0000000
--- a/post-realm-merge-plan.md
+++ /dev/null
@@ -1,104 +0,0 @@
-# Post-Realm-Merge Plan
-
-This plan outlines the changes needed to robustly handle Blizzard realm consolida
tions/renames while preserving player identity and best runs in our rebuild-from-s
cratch pipeline.
-
-## Goals
-- Preserve best runs for a character across realm/name changes (identity = Blizza
rd character ID).
-- Resolve a player's "current" realm/name at build time, without relying on prior
 builds.
-- Avoid 404s after realm renames (e.g., `arugal` ? `arugal-au`).
-- Keep dungeon leaderboards historically accurate, and make player pages/leaderbo
ards stable and linkable.
-
-## Backend (Data + Fetch)
-- Realm source of truth
-  - Fetch realm/connected-realm lists per region (us/eu/kr/tw) at build start and
 build a slug?(id,name,region) map.
-  - Derive a rename/alias map (e.g., `arugal` ? `arugal-au`) from differences vs.
 prior constants or by connected-realm membership.
-  - Replace/augment hardcoded lists with fetched data in the build path (keep con
stants as fallback only).
-
-- Player identity resolution (canonical identity per build)
-  - While ingesting runs, collect per `player_id` all observed identities: (regio
n, realm_slug, name, last_seen_ts).
-  - Select canonical identity:
-    - Primary: latest profile identity (if profile API succeeded).
-    - Fallback: most recent identity from runs (max `completed_timestamp`).
-  - Keep a small ordered candidate list for profile-fallback attempts.
-
-- Profile fetch fallback logic
-  - Before calling the Profile API, normalize realm slug via the rename map (e.g.
, `remulos` ? `remulos-au`).
-  - Fallback order for a single player (stop on first success):
-    1) Canonical identity from `players` (name + realm_slug), after rename-normal
ization.
-    2) Connected-realm sweep: try the same name against all slugs in the same `co
nnected_realm_id` (e.g., Pagle group, Mirage Raceway group).
-    3) Last-run realm heuristic: use the realm_slug of the player's most recent r
un and retry the profile.
-    4) Optional: try other identities observed in this build (distinct (realm_slu
g,name) pairs ordered by most recent run timestamp).
-  - Persist the resolved identity for this build on first success (update `player
s.name` and `players.realm_id`).
-
-- Realm lookup robustness
-  - Use (region, slug) uniqueness for `realms` and lookups (done).
-  - For unknown slugs during run ingestion, insert a scoped placeholder row to pr
event batch aborts (done).
-
-- DB helpers to implement
-  - `GetPlayerCurrentIdentity(playerID int) (region string, realmSlug string, nam
e string, err error)`
-    - Join `players` ? `realms` by `players.realm_id`; return `r.region, r.slug, 
p.name`.
-  - `GetConnectedRealmSlugs(region, realmSlug string) ([]string, error)`
-    - Look up this realm's `connected_realm_id` and return all `slug` where `regi
on = ? AND connected_realm_id = ?`.
-  - `GetLastRunRealmForPlayer(playerID int) (region string, realmSlug string, ts 
int64, err error)`
-    - `SELECT rr.region, rr.slug, cr.completed_timestamp FROM run_members rm JOIN
 challenge_runs cr ON cr.id = rm.run_id JOIN realms rr ON rr.id = cr.realm_id WHER
E rm.player_id = ? ORDER BY cr.completed_timestamp DESC LIMIT 1`.
-  - Tiny helper: `NormalizeRealmSlug(region, slug) string` (apply static rename m
ap, e.g., US OCE ? `-au`).
-
-- Ranking semantics (decide and implement)
-  - Dungeon leaderboards: keep using the run's realm (historical accuracy).
-  - Player leaderboards (realm scope):
-    - Option A: current realm (canonical identity).
-    - Option B: realm of best run per dungeon (where PRs were set).
-  - We can compute both if desired; choose which to display by default.
-
-## Generator (Static API)
-- Canonical identity usage
-  - Emit player pages/leaderboards using the canonical identity chosen above.
-  - Add a permanent ID-based route: `/player/id/{player_id}.json` (and an Astro r
oute if desired) for stable linking.
-
-- Redirect stubs (no server required)
-  - For any non-canonical identities observed this build, write a small JSON `{ "
redirect_to": "/player/{region}/{realm}/{name}" }` at the old path.
-  - Frontend will follow `redirect_to` on load; preserves old links/search index.
-
-- Class/spec resiliency
-  - When Profile API fails, derive `class_name`/`active_spec_name` from `main_spe
c_id` in generated JSON (implemented).
-
-## Frontend
-- Player profile page
-  - Follow `redirect_to` if present in the loaded JSON and navigate to the canoni
cal path.
-  - If profile API data is missing, render a "last seen" badge based on latest ru
n timestamp and identity.
-  - Keep class/spec coloring via `main_spec_id` fallback (implemented).
-
-- Player leaderboards
-  - Ensure link color derived from `class_name` or fallback via `main_spec_id` (i
mplemented).
-
-- Realm selectors/lists
-  - Ensure US OCE realms use `-au` slugs in UI (updated) and allow dynamic popula
tion from the fetched realm map in the future.
-
-## Ops/Build
-- Environment & rate limits
-  - Confirm `BLIZZARD_API_TOKEN` availability; document recommended concurrency/t
imeouts.
-  - Cap profile-fallback attempts per player to avoid excessive retries.
-
-- Diagnostics
-  - Log a summary of renamed slugs detected each build.
-  - Emit a lightweight report of players whose profile was unresolved (for monito
ring).
-
-## Validation
-- Test cases
-  - Player with runs only on old slug (e.g., `arugal`) and profile disabled ? use
s latest run identity and renders with spec-derived class color.
-  - Player with 404 then fallback to `-au` slug ? profile resolves, identity upda
tes.
-  - Players who moved realms and never ran again ? keep best runs via `player_id`
; page exists under last-seen identity and ID route; redirect stubs from any alter
nate identities in this build.
-
-## Incremental Rollout
-1) Keep identity by `player_id` (already in place) and (region,slug) realm unique
ness (done).
-2) Normalize OCE slugs and TW support (added) and fetch live realm lists at build
 start.
-3) Implement canonical identity selection and profile-fallback logic.
-4) Add redirect stubs + frontend redirect handling.
-5) Decide realm ranking semantics and adjust generator SQL accordingly.
-6) Optional: Add ID-based route and "last seen" UX.
-
-## Risks & Limitations
-- Classic APIs do not support character search; if a player changes both realm an
d name and never appears in new runs, we cannot discover the new identity. We will
:
-  - Preserve their best runs under `player_id`.
-  - Serve the page under last-seen identity (and ID route).
-  - Use redirects for identities observed in the same build.

diff --git a/post-realm-merge-plan.md b/post
-realm-merge-plan.md
deleted file mode 100644
index 4601e8e..0000000
--- a/post-realm-merge-plan.md
+++ /dev/null
@@ -1,104 +0,0 @@
-# Post-Realm-Merge Plan
-
-This plan outlines the changes needed to ro
bustly handle Blizzard realm consolidations/
renames while preserving player identity and
 best runs in our rebuild-from-scratch pipel
ine.
-
-## Goals
-- Preserve best runs for a character across
 realm/name changes (identity = Blizzard cha
racter ID).
-- Resolve a player's "current" realm/name a
t build time, without relying on prior build
s.
-- Avoid 404s after realm renames (e.g., `ar
ugal` ? `arugal-au`).
-- Keep dungeon leaderboards historically ac
curate, and make player pages/leaderboards s
table and linkable.
-
-## Backend (Data + Fetch)
-- Realm source of truth
-  - Fetch realm/connected-realm lists per r
egion (us/eu/kr/tw) at build start and build
 a slug?(id,name,region) map.
-  - Derive a rename/alias map (e.g., `aruga
l` ? `arugal-au`) from differences vs. prior
 constants or by connected-realm membership.
-  - Replace/augment hardcoded lists with fe
tched data in the build path (keep constants
 as fallback only).
-
-- Player identity resolution (canonical ide
ntity per build)
-  - While ingesting runs, collect per `play
er_id` all observed identities: (region, rea
lm_slug, name, last_seen_ts).
-  - Select canonical identity:
-    - Primary: latest profile identity (if 
profile API succeeded).
-    - Fallback: most recent identity from r
uns (max `completed_timestamp`).
-  - Keep a small ordered candidate list for
 profile-fallback attempts.
-
-- Profile fetch fallback logic
-  - Before calling the Profile API, normali
ze realm slug via the rename map (e.g., `rem
ulos` ? `remulos-au`).
-  - Fallback order for a single player (sto
p on first success):
-    1) Canonical identity from `players` (n
ame + realm_slug), after rename-normalizatio
n.
-    2) Connected-realm sweep: try the same 
name against all slugs in the same `connecte
d_realm_id` (e.g., Pagle group, Mirage Racew
ay group).
-    3) Last-run realm heuristic: use the re
alm_slug of the player's most recent run and
 retry the profile.
-    4) Optional: try other identities obser
ved in this build (distinct (realm_slug,name
) pairs ordered by most recent run timestamp
).
-  - Persist the resolved identity for this 
build on first success (update `players.name
` and `players.realm_id`).
-
-- Realm lookup robustness
-  - Use (region, slug) uniqueness for `real
ms` and lookups (done).
-  - For unknown slugs during run ingestion,
 insert a scoped placeholder row to prevent 
batch aborts (done).
-
-- DB helpers to implement
-  - `GetPlayerCurrentIdentity(playerID int)
 (region string, realmSlug string, name stri
ng, err error)`
-    - Join `players` ? `realms` by `players
.realm_id`; return `r.region, r.slug, p.name
`.
-  - `GetConnectedRealmSlugs(region, realmSl
ug string) ([]string, error)`
-    - Look up this realm's `connected_realm
_id` and return all `slug` where `region = ?
 AND connected_realm_id = ?`.
-  - `GetLastRunRealmForPlayer(playerID int)
 (region string, realmSlug string, ts int64,
 err error)`
-    - `SELECT rr.region, rr.slug, cr.comple
ted_timestamp FROM run_members rm JOIN chall
enge_runs cr ON cr.id = rm.run_id JOIN realm
s rr ON rr.id = cr.realm_id WHERE rm.player_
id = ? ORDER BY cr.completed_timestamp DESC 
LIMIT 1`.
-  - Tiny helper: `NormalizeRealmSlug(region
, slug) string` (apply static rename map, e.
g., US OCE ? `-au`).
-
-- Ranking semantics (decide and implement)
-  - Dungeon leaderboards: keep using the ru
n's realm (historical accuracy).
-  - Player leaderboards (realm scope):
-    - Option A: current realm (canonical id
entity).
-    - Option B: realm of best run per dunge
on (where PRs were set).
-  - We can compute both if desired; choose 
which to display by default.
-
-## Generator (Static API)
-- Canonical identity usage
-  - Emit player pages/leaderboards using th
e canonical identity chosen above.
-  - Add a permanent ID-based route: `/playe
r/id/{player_id}.json` (and an Astro route i
f desired) for stable linking.
-
-- Redirect stubs (no server required)
-  - For any non-canonical identities observ
ed this build, write a small JSON `{ "redire
ct_to": "/player/{region}/{realm}/{name}" }`
 at the old path.
-  - Frontend will follow `redirect_to` on l
oad; preserves old links/search index.
-
-- Class/spec resiliency
-  - When Profile API fails, derive `class_n
ame`/`active_spec_name` from `main_spec_id` 
in generated JSON (implemented).
-
-## Frontend
-- Player profile page
-  - Follow `redirect_to` if present in the 
loaded JSON and navigate to the canonical pa
th.
-  - If profile API data is missing, render 
a "last seen" badge based on latest run time
stamp and identity.
-  - Keep class/spec coloring via `main_spec
_id` fallback (implemented).
-
-- Player leaderboards
-  - Ensure link color derived from `class_n
ame` or fallback via `main_spec_id` (impleme
nted).
-
-- Realm selectors/lists
-  - Ensure US OCE realms use `-au` slugs in
 UI (updated) and allow dynamic population f
rom the fetched realm map in the future.
-
-## Ops/Build
-- Environment & rate limits
-  - Confirm `BLIZZARD_API_TOKEN` availabili
ty; document recommended concurrency/timeout
s.
-  - Cap profile-fallback attempts per playe
r to avoid excessive retries.
-
-- Diagnostics
-  - Log a summary of renamed slugs detected
 each build.
-  - Emit a lightweight report of players wh
ose profile was unresolved (for monitoring).
-
-## Validation
-- Test cases
-  - Player with runs only on old slug (e.g.
, `arugal`) and profile disabled ? uses late
st run identity and renders with spec-derive
d class color.
-  - Player with 404 then fallback to `-au` 
slug ? profile resolves, identity updates.
-  - Players who moved realms and never ran 
again ? keep best runs via `player_id`; page
 exists under last-seen identity and ID rout
e; redirect stubs from any alternate identit
ies in this build.
-
-## Incremental Rollout
-1) Keep identity by `player_id` (already in
 place) and (region,slug) realm uniqueness (
done).
-2) Normalize OCE slugs and TW support (adde
d) and fetch live realm lists at build start
.
-3) Implement canonical identity selection a
nd profile-fallback logic.
-4) Add redirect stubs + frontend redirect h
andling.
-5) Decide realm ranking semantics and adjus
t generator SQL accordingly.
-6) Optional: Add ID-based route and "last s
een" UX.
-
-## Risks & Limitations
-- Classic APIs do not support character sea
rch; if a player changes both realm and name
 and never appears in new runs, we cannot di
scover the new identity. We will:
-  - Preserve their best runs under `player_
id`.
-  - Serve the page under last-seen identity
 (and ID route).
-  - Use redirects for identities observed i
n the same build.
 

diff --git a/realm-merge-blueposts.md b/realm-merge-blueposts.md
deleted file mode 100644
index 3a5fbb2..0000000
--- a/realm-merge-blueposts.md
+++ /dev/null
@@ -1,202 +0,0 @@
-Update! We hear your feedback on character and guild names loud and clear, we
-knew this would be a very painful point but felt that the overall long term
-health of the play experience would outweigh it.
-
-But! Late last night we did realize there was more we could do here.
-
-The following realms will now Free Character Transfer to five new destination
-realms that are pre-connected to Pagle.
-
-Faerlina ? Nazgrim Mankrik ? Galakras Benediction ? Ra-den Atiesh ? Lei Shen
-Whitemane ? Immerseus
-
-Character names and guild names are all unique on each realm, but all realms
-will be connected together able to join other guilds on other realms in the
-group and raid, dungeon and PvP together.
-
-We hope that this solution will give everyone as much opportunity to secure the
-names that they have come to cherish.
-
-These realms will be open and waiting for you with the character moves on
-Tuesday 23rd after realms go Live after maintenance.
-
-Update! We hear your feedback on character and guild names loud and clear, we
-knew this would be a very painful point but felt that the overall long term
-health of the play experience would outweigh it.
-
-But, late last night we did realize there was more we could do here utilizing
-some of the Connected Realm process.
-
-The following realms will now Free Character Transfer to five new destination
-realms that are pre-connected to Mirage Raceway.
-
-Firemaw ? Shek'zeer Gehennas ? Garalon Golemagg ? Norushen Pyrewood Village ?
-Hoptallus
-
-All previously closed realms will still direct to Mirage Raceway.
-
-Character names and guild names are all unique on each realm, but all realms
-will be connected together able to join other guilds on other realms in the
-group and raid, dungeon and PvP together.
-
-We hope that this solution will give everyone as much opportunity to secure the
-names that they have come to cherish.
-
-These realms will be open and waiting for you with the character moves on
-Wednesday 24th when realms go Live after maintenance.
-
-The other realms not listed have been closed for some time and have very few
-players left on them, I unfortunately couldn't justify creating whole new realms
-for the handful of players left on them. They have been closed so long that
-anyone left on them is likely seeking a solo experience and unlikely to move
-anyway, as they could have done anytime in the last few years. I hope that
-clears up why they weren't listed!
-
-View Original The expensive part of Connected Realms is the database work to
-consolidate everyone's data, this is the part that we we love to do for you but
-just do not have the time, it is a very old and expensive process in time and
-manpower that we just can't pull off here.
-
-This route creates a connected realm like environment that people can transfer
-themselves into with each realm having a different destination hopefully
-ensuring everyone can secure their existing names.
-
-Hey folks,
-
-We've been reading through your feedback and we have some things we'd love to
-try and clarify as well as some updates on a few things we're doing to make this
-as frictionless as we can within the time constraints we have.
-
-In no particular order!
-
-    What the heck are Connected Realms?
-
-If you're joining us for the first time, you may have missed when we performed
-realm connections in mainline World of Warcraft, and also in Vanilla Era.
-Connected Realms are a way for us to join realms in such a way that players on
-multiple realms can exist in the same physical space, they can raid together,
-join each others guilds, everything! Players on a Connected Realm will see a
-"-BobsRealm" amended to theirs or others names in the world denoting which realm
-they are from. The easiest way to think of this is a Surname in WoW.
-
-    Why aren't you just doing Connected Realms with our existing realms, what is 
the point of these new realms?
-
-Great question, we've mentioned before that Connected Realms would be the ideal
-solve here, but that it is just not a possibility for us. In full transparency
-mode, the reason is time, Connected Realms is a massive endeavor for us. It is
-something we've done ...3? times in WoWs history and it is a massive task that
-involves a ton of bespoke work by our Database Engineers and usually months of
-QA testing time as we go through rounds of internal test connections and data
-validation. It is one of the most expensive (in terms of raw man hours) things
-we've ever done so while it does solve the problem of not having to move
-characters and guilds yourselves, it is just a massive chunk of work that the
-Server team cannot pick up as we are very busy with the largest most database
-heavy feature in WoWs history (hello Player Housing!) I understand this isn't
-likely the answer you would like to hear but hopefully some transparency as to
-why helps.
-
-So how can you connect these new realms then? Connected Realms to players is one
-thing, to the development team Connected Realms is a project that involves
-moving around and manipulating a massive amount of player data, but the other
-part of Connected Realms involves something we haven't actually spoken about
-publicly which is Virtual Realms. As part of Connected Realms, the old realms
-become "Virtual" and are now hosted by a "Native" realm, this means they no
-longer run on their own hardware, they run on the Native realms hardware (Pagle
-in the US for example). These Virtual Realms behave just like a normal realm,
-you can see them in the Realm List, you can make characters on them, you can
-make Guilds on them, but since they are all sharing one parent Native Realm, all
-of them can talk to one another, group, raid, join guilds across the realms. So
-to solve the issue with players losing their character names during this realm
-consolidation process, by utilizing multiple new Virtual Realms, we can achieve
-a Connected Realm like state, give everyone an empty realm that has no blocked
-player or guild names on it, but without the crazy time consuming part involving
-the database moves.
-
-We dropped a lot of new terms and tech names there you've not heard before, so
-the shorter recap is -
-
-These new realms are pre-connected, and importantly, totally empty of players!
-This means we can avoid the large chunk of work that we can't facilitate for you
-(the actual realm moves of your characters and guilds) but still give each of
-the larger realms a new realm to Free Transfer to that will have all of your
-character names and guild names available to you on.
-
-    Are you still going to be 'freeing' names up as mentioned earlier before the 
Connected/Virtual realm news?
-
-Yes! We will still be bringing in the date that we consider accounts to be
-inactive and any names they have on them become eligible to be used by other
-players instead. Normally this date is several expansions ago as we do not like
-the shock it can cause to lose a name you have had for a long time, but for
-Classic Mists of Pandaria we will use a much more recent time to give maximum
-chance everyone still playing can get the names they desire. This will apply to
-all the existing realms such as Pagle, Grobbulus as well as the closing realms.
-
-    When exactly are the servers going live so I can secure my names?
-
-Since it is a patch day, we won't have a concrete answer on this, as you know we
-tend to post maintenance windows for patch days at 8 hours, but that can vary
-significantly depending on how the deploy goes. We're very aware that this means
-a lot of uncertainty around when people need to be available to try and ensure
-they secure their names, also in Europe the patch time is significantly earlier
-in the morning than the US posing other problems.
-
-We're taking this seriously as everyone has strong connections to their names
-they have often had for the entire lifetime of Classic, so we are going to do
-our best to ensure that you are as close to as possible guaranteed your name on
-your servers destination realm. To do that, we are going to be closing character
-creation entirely on the destination realms for at least one week, likely two,
-depending how fast we see everyone moving. What does this mean in practice? If
-you try and create a new character on these realms, well, you can't. The only
-way to get onto the destination realms is by performing a Free Character
-Transfer, which means you must already have the name you want on the character
-you are moving on your original realm. No one can take your name from you on the
-destination until we re-enable free-for-all character creation again.
-
-We do not want to keep this lock in place any longer than we have to as it does
-create an impenetrable barrier to any new players coming in during this window,
-but we feel like this solution will ensure we can preserve your names for you
-for at least the first week. During this time we will continue to allow new and
-existing players to create characters on the original source realms, after we
-have finished with this character creation block on the destination realms, we
-will close the old realms to new players.
-
-    What are you doing about the Australian realms?
-
-We mentioned previously but for now we are leaving the AU realms out of this
-process as a move to the US realms does result in a significant increase in
-latency, as such we want to ensure that the AU community overwhelmingly wants to
-move before we take action here.
-
-    Will you open transfers off Grobbulus?
-
-At this time no, Grobbulus has a stable but relatively small population (by
-comparison, it would be a queued OG Vanilla realm!) and we would like to see how
-many people take the chance to join this unique environment first. If Grobbulus
-reaches a state where no one is having fun anymore, we will take action and
-offer free transfers off but we would like to wait and see how things settle
-first.
-
-    Re-creating a Guild is incredibly painful and expensive with bank tabs and ac
hievements, reputation etc.
-
-We definitely feel that, we are going to be making some temporary changes to try
-and make this transition a little less painful for everyone! With this weeks
-restarts the following changes will go live.
-
-    Removed achievement requirements for heirlooms.
-    Removed achievement requirements for purchasing the banner.
-    Removed achievement requirements for purchasing 8th bank tab.
-    Removed reputation requirement to buy a renown guild tabard
-    Temporary buff to guild reputation (100% increase).
-    Temporary reduced cost for guild bank tabs.
-
-We were not able to find a solution to persisting Guild Achievements through
-characters moves in the time available, but hopefully removing some of the
-requirements to some of the player power/cosmetics that were attached to them
-will help make this less painful
-
-We hope that this has helped address some of your concerns, but we appreciate
-that ultimately this change is not without a lot of friction. We are confident
-that the end result will be nothing but net positive for the rest of Mists of
-Pandaria.
-
-Have a great weekend and we'll see you on Tuesday!

diff --git a/realm-merge-blueposts.md b/real
m-merge-blueposts.md
deleted file mode 100644
index 3a5fbb2..0000000
--- a/realm-merge-blueposts.md
+++ /dev/null
@@ -1,202 +0,0 @@
-Update! We hear your feedback on character 
and guild names loud and clear, we
-knew this would be a very painful point but
 felt that the overall long term
-health of the play experience would outweig
h it.
-
-But! Late last night we did realize there w
as more we could do here.
-
-The following realms will now Free Characte
r Transfer to five new destination
-realms that are pre-connected to Pagle.
-
-Faerlina ? Nazgrim Mankrik ? Galakras Bened
iction ? Ra-den Atiesh ? Lei Shen
-Whitemane ? Immerseus
-
-Character names and guild names are all uni
que on each realm, but all realms
-will be connected together able to join oth
er guilds on other realms in the
-group and raid, dungeon and PvP together.
-
-We hope that this solution will give everyo
ne as much opportunity to secure the
-names that they have come to cherish.
-
-These realms will be open and waiting for y
ou with the character moves on
-Tuesday 23rd after realms go Live after mai
ntenance.
-
-Update! We hear your feedback on character 
and guild names loud and clear, we
-knew this would be a very painful point but
 felt that the overall long term
-health of the play experience would outweig
h it.
-
-But, late last night we did realize there w
as more we could do here utilizing
-some of the Connected Realm process.
-
-The following realms will now Free Characte
r Transfer to five new destination
-realms that are pre-connected to Mirage Rac
eway.
-
-Firemaw ? Shek'zeer Gehennas ? Garalon Gole
magg ? Norushen Pyrewood Village ?
-Hoptallus
-
-All previously closed realms will still dir
ect to Mirage Raceway.
-
-Character names and guild names are all uni
que on each realm, but all realms
-will be connected together able to join oth
er guilds on other realms in the
-group and raid, dungeon and PvP together.
-
-We hope that this solution will give everyo
ne as much opportunity to secure the
-names that they have come to cherish.
-
-These realms will be open and waiting for y
ou with the character moves on
-Wednesday 24th when realms go Live after ma
intenance.
-
-The other realms not listed have been close
d for some time and have very few
-players left on them, I unfortunately could
n't justify creating whole new realms
-for the handful of players left on them. Th
ey have been closed so long that
-anyone left on them is likely seeking a sol
o experience and unlikely to move
-anyway, as they could have done anytime in 
the last few years. I hope that
-clears up why they weren't listed!
-
-View Original The expensive part of Connect
ed Realms is the database work to
-consolidate everyone's data, this is the pa
rt that we we love to do for you but
-just do not have the time, it is a very old
 and expensive process in time and
-manpower that we just can't pull off here.
-
-This route creates a connected realm like e
nvironment that people can transfer
-themselves into with each realm having a di
fferent destination hopefully
-ensuring everyone can secure their existing
 names.
-
-Hey folks,
-
-We've been reading through your feedback an
d we have some things we'd love to
-try and clarify as well as some updates on 
a few things we're doing to make this
-as frictionless as we can within the time c
onstraints we have.
-
-In no particular order!
-
-    What the heck are Connected Realms?
-
-If you're joining us for the first time, yo
u may have missed when we performed
-realm connections in mainline World of Warc
raft, and also in Vanilla Era.
-Connected Realms are a way for us to join r
ealms in such a way that players on
-multiple realms can exist in the same physi
cal space, they can raid together,
-join each others guilds, everything! Player
s on a Connected Realm will see a
-"-BobsRealm" amended to theirs or others na
mes in the world denoting which realm
-they are from. The easiest way to think of 
this is a Surname in WoW.
-
-    Why aren't you just doing Connected Rea
lms with our existing realms, what is the po
int of these new realms?
-
-Great question, we've mentioned before that
 Connected Realms would be the ideal
-solve here, but that it is just not a possi
bility for us. In full transparency
-mode, the reason is time, Connected Realms 
is a massive endeavor for us. It is
-something we've done ...3? times in WoWs hi
story and it is a massive task that
-involves a ton of bespoke work by our Datab
ase Engineers and usually months of
-QA testing time as we go through rounds of 
internal test connections and data
-validation. It is one of the most expensive
 (in terms of raw man hours) things
-we've ever done so while it does solve the 
problem of not having to move
-characters and guilds yourselves, it is jus
t a massive chunk of work that the
-Server team cannot pick up as we are very b
usy with the largest most database
-heavy feature in WoWs history (hello Player
 Housing!) I understand this isn't
-likely the answer you would like to hear bu
t hopefully some transparency as to
-why helps.
-
-So how can you connect these new realms the
n? Connected Realms to players is one
-thing, to the development team Connected Re
alms is a project that involves
-moving around and manipulating a massive am
ount of player data, but the other
-part of Connected Realms involves something
 we haven't actually spoken about
-publicly which is Virtual Realms. As part o
f Connected Realms, the old realms
-become "Virtual" and are now hosted by a "N
ative" realm, this means they no
-longer run on their own hardware, they run 
on the Native realms hardware (Pagle
-in the US for example). These Virtual Realm
s behave just like a normal realm,
-you can see them in the Realm List, you can
 make characters on them, you can
-make Guilds on them, but since they are all
 sharing one parent Native Realm, all
-of them can talk to one another, group, rai
d, join guilds across the realms. So
-to solve the issue with players losing thei
r character names during this realm
-consolidation process, by utilizing multipl
e new Virtual Realms, we can achieve
-a Connected Realm like state, give everyone
 an empty realm that has no blocked
-player or guild names on it, but without th
e crazy time consuming part involving
-the database moves.
-
-We dropped a lot of new terms and tech name
s there you've not heard before, so
-the shorter recap is -
-
-These new realms are pre-connected, and imp
ortantly, totally empty of players!
-This means we can avoid the large chunk of 
work that we can't facilitate for you
-(the actual realm moves of your characters 
and guilds) but still give each of
-the larger realms a new realm to Free Trans
fer to that will have all of your
-character names and guild names available t
o you on.
-
-    Are you still going to be 'freeing' nam
es up as mentioned earlier before the Connec
ted/Virtual realm news?
-
-Yes! We will still be bringing in the date 
that we consider accounts to be
-inactive and any names they have on them be
come eligible to be used by other
-players instead. Normally this date is seve
ral expansions ago as we do not like
-the shock it can cause to lose a name you h
ave had for a long time, but for
-Classic Mists of Pandaria we will use a muc
h more recent time to give maximum
-chance everyone still playing can get the n
ames they desire. This will apply to
-all the existing realms such as Pagle, Grob
bulus as well as the closing realms.
-
-    When exactly are the servers going live
 so I can secure my names?
-
-Since it is a patch day, we won't have a co
ncrete answer on this, as you know we
-tend to post maintenance windows for patch 
days at 8 hours, but that can vary
-significantly depending on how the deploy g
oes. We're very aware that this means
-a lot of uncertainty around when people nee
d to be available to try and ensure
-they secure their names, also in Europe the
 patch time is significantly earlier
-in the morning than the US posing other pro
blems.
-
-We're taking this seriously as everyone has
 strong connections to their names
-they have often had for the entire lifetime
 of Classic, so we are going to do
-our best to ensure that you are as close to
 as possible guaranteed your name on
-your servers destination realm. To do that,
 we are going to be closing character
-creation entirely on the destination realms
 for at least one week, likely two,
-depending how fast we see everyone moving. 
What does this mean in practice? If
-you try and create a new character on these
 realms, well, you can't. The only
-way to get onto the destination realms is b
y performing a Free Character
-Transfer, which means you must already have
 the name you want on the character
-you are moving on your original realm. No o
ne can take your name from you on the
-destination until we re-enable free-for-all
 character creation again.
-
-We do not want to keep this lock in place a
ny longer than we have to as it does
-create an impenetrable barrier to any new p
layers coming in during this window,
-but we feel like this solution will ensure 
we can preserve your names for you
-for at least the first week. During this ti
me we will continue to allow new and
-existing players to create characters on th
e original source realms, after we
-have finished with this character creation 
block on the destination realms, we
-will close the old realms to new players.
-
-    What are you doing about the Australian
 realms?
-
-We mentioned previously but for now we are 
leaving the AU realms out of this
-process as a move to the US realms does res
ult in a significant increase in
-latency, as such we want to ensure that the
 AU community overwhelmingly wants to
-move before we take action here.
-
-    Will you open transfers off Grobbulus?
-
-At this time no, Grobbulus has a stable but
 relatively small population (by
-comparison, it would be a queued OG Vanilla
 realm!) and we would like to see how
-many people take the chance to join this un
ique environment first. If Grobbulus
-reaches a state where no one is having fun 
anymore, we will take action and
-offer free transfers off but we would like 
to wait and see how things settle
-first.
-
-    Re-creating a Guild is incredibly painf
ul and expensive with bank tabs and achievem
ents, reputation etc.
-
-We definitely feel that, we are going to be
 making some temporary changes to try
-and make this transition a little less pain
ful for everyone! With this weeks
-restarts the following changes will go live
.
-
-    Removed achievement requirements for he
irlooms.
-    Removed achievement requirements for pu
rchasing the banner.
-    Removed achievement requirements for pu
rchasing 8th bank tab.
-    Removed reputation requirement to buy a
 renown guild tabard
-    Temporary buff to guild reputation (100
% increase).
-    Temporary reduced cost for guild bank t
abs.
-
-We were not able to find a solution to pers
isting Guild Achievements through
-characters moves in the time available, but
 hopefully removing some of the
-requirements to some of the player power/co
smetics that were attached to them
-will help make this less painful
-
-We hope that this has helped address some o
f your concerns, but we appreciate
-that ultimately this change is not without 
a lot of friction. We are confident
-that the end result will be nothing but net
 positive for the rest of Mists of
-Pandaria.
-
-Have a great weekend and we'll see you on T
uesday!
 
[ BACK TO LOG ]
──────────────────────────────────────────────────────────────────────────────────────
OOKNET
────────────────────────────────────────────────
OOKNET