Compare commits

...
2 Commits
Author SHA1 Message Date
ginnoirandClaude Opus 5 42f5f17683 fix: normalise the non-breaking space in Fused Dimensions
The note's filename and title carried U+00A0 rather than a plain space. That was
the faithful original - the mojibake repair reversed to it correctly - but it is
a scrape artefact, not an authored name: nobody titles a hack with a
non-breaking space, and an invisible character in a filename is the same class
of trap as the mojibake itself, since it silently breaks greps and hand-typed
wikilinks.

No URL impact. NFKD folds U+00A0 to a plain space, so slugifyStem already
produced 'fused-dimensions' either way; the published URL is unchanged.

Renamed the note, replaced both in-file occurrences (the title field and the H1)
and regenerated, so the MOC wikilinks now use a plain space too. Verified no
filename, catalog stem or catalog title anywhere still contains U+00A0.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-15 18:11:31 -05:00
ginnoirandClaude Opus 5 b8c69ce789 fix: repair 7 mojibake note filenames
Seven hack notes had filenames whose UTF-8 bytes had been decoded as cp437 and
re-encoded, e.g. "Anil.md" stored as "A" + U+251C + U+2592 + "il.md". Only the
filenames were affected; each note's frontmatter title was already correct.

Repaired by reversing the corruption (name.encode('cp437').decode('utf-8')) and
cross-checking every result against that note's own title field. PokeRogue was
left alone - its U+00E9 cannot be cp437-encoded, proving it is genuine UTF-8 and
not mojibake.

This matters because build-wiki-data.py derives each catalog stem from the
filename and the site derives its URL slug from that. Four published URLs were
wrong and are now fixed:

  /hack/a-il/                -> /hack/anil/
  /hack/fused-adimensions/   -> /hack/fused-dimensions/
  /hack/yu-gi-oh-pok-duel/   -> /hack/yu-gi-oh-pokeduel/
  /hack/recharged-yellow-previously-known-as-pok-mon-yellow-cross/
                             -> ...-as-pokemon-yellow-cross/

The other three were already served correctly, because slugifyStem in the site
repo carries a replaceAll for the mojibake apostrophe. Those URLs are unchanged.

Fallout handled: of 19 vault references, 18 live in files build-vault-mocs.py
regenerates and were fixed by rerunning it. The one hand-written reference, in
Nuzlocke-Friendly (Vanilla+).md, was updated directly. annotate-engines.py also
keyed its ENGINE_MAP on the corrupted stem, so a future run would have silently
skipped Recharged Yellow; that key is corrected here.

Verified: zero mojibake sequences remain anywhere in the vault or this repo, all
seven notes resolve under their new names, catalog steady at 411, and the site
builds 486 pages with banners regenerated under the new slugs.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-15 18:11:31 -05:00
2 changed files with 9 additions and 9 deletions

No files matched your search

+1 -1
View File
@@ -61,7 +61,7 @@ ENGINE_MAP = {
"Recharged Emerald": "pokeemerald-expansion (likely)", "Recharged Emerald": "pokeemerald-expansion (likely)",
"Recharged Emerald Rebalanced": "pokeemerald-expansion (likely)", # rebalanced/difficulty variant "Recharged Emerald Rebalanced": "pokeemerald-expansion (likely)", # rebalanced/difficulty variant
"Recharged Pink": "pokeemerald-expansion (likely)", "Recharged Pink": "pokeemerald-expansion (likely)",
"Recharged Yellow (previously known as Pok├⌐mon Yellow Cross)": "pokeemerald-expansion (likely)", "Recharged Yellow (previously known as Pokémon Yellow Cross)": "pokeemerald-expansion (likely)",
# Emerald Cross (Jaizu) — vanilla+ QoL/bugfix, no expansion → lighter decomp build # Emerald Cross (Jaizu) — vanilla+ QoL/bugfix, no expansion → lighter decomp build
"Emerald Cross": "pokeemerald (decomp, likely)", "Emerald Cross": "pokeemerald (decomp, likely)",
# --- HeartGold → hg-engine ------------------------------------------------ # --- HeartGold → hg-engine ------------------------------------------------
+8 -8
View File
@@ -106,7 +106,7 @@
"image_base": "https://romhacks-files.ginnoir.com", "image_base": "https://romhacks-files.ginnoir.com",
"hacks": [ "hacks": [
{ {
"stem": "A FarfetchΓÇÖD Story", "stem": "A Farfetch’D Story",
"title": "Pokémon A Farfetch’D Story", "title": "Pokémon A Farfetch’D Story",
"platform": "PC", "platform": "PC",
"base": "RPG Maker XP / Pokemon Essentials", "base": "RPG Maker XP / Pokemon Essentials",
@@ -1412,7 +1412,7 @@
] ]
}, },
{ {
"stem": "A├▒il", "stem": "Añil",
"title": "Pokémon Añil", "title": "Pokémon Añil",
"platform": "PC", "platform": "PC",
"base": "RPG Maker XP / Pokemon Essentials", "base": "RPG Maker XP / Pokemon Essentials",
@@ -1726,7 +1726,7 @@
] ]
}, },
{ {
"stem": "BirchΓÇÖs Folly", "stem": "Birch’s Folly",
"title": "Pokémon Birch’s Folly", "title": "Pokémon Birch’s Folly",
"platform": "PC", "platform": "PC",
"base": "RPG Maker XP / Pokemon Essentials", "base": "RPG Maker XP / Pokemon Essentials",
@@ -7864,8 +7864,8 @@
] ]
}, },
{ {
"stem": "Fused Dimensions", "stem": "Fused Dimensions",
"title": "Pokémon Fused Dimensions", "title": "Pokémon Fused Dimensions",
"platform": "GBA", "platform": "GBA",
"base": "FireRed", "base": "FireRed",
"version": null, "version": null,
@@ -11409,7 +11409,7 @@
] ]
}, },
{ {
"stem": "LetΓÇÖs Beat Mew", "stem": "Let’s Beat Mew",
"title": "Pokémon Let’s Beat Mew", "title": "Pokémon Let’s Beat Mew",
"platform": "GBA", "platform": "GBA",
"base": "FireRed", "base": "FireRed",
@@ -16627,7 +16627,7 @@
] ]
}, },
{ {
"stem": "Recharged Yellow (previously known as Pok├⌐mon Yellow Cross)", "stem": "Recharged Yellow (previously known as Pokémon Yellow Cross)",
"title": "Pokémon Recharged Yellow (previously known as Pokémon Yellow Cross)", "title": "Pokémon Recharged Yellow (previously known as Pokémon Yellow Cross)",
"platform": "GBA", "platform": "GBA",
"base": "Emerald", "base": "Emerald",
@@ -24096,7 +24096,7 @@
] ]
}, },
{ {
"stem": "Yu-Gi-Oh Pok├⌐Duel", "stem": "Yu-Gi-Oh PokéDuel",
"title": "Pokémon Yu-Gi-Oh PokéDuel", "title": "Pokémon Yu-Gi-Oh PokéDuel",
"platform": "GBA", "platform": "GBA",
"base": "FireRed", "base": "FireRed",