[{"data":1,"prerenderedAt":743},["ShallowReactive",2],{"docs-navigation:de":3,"content-page:docs:lSnVQ_iBCbtXxxoyjDK-zjcLH89F8Vv9IJeG90dt1F4":267,"content-page-surround:docs:lSnVQ_iBCbtXxxoyjDK-zjcLH89F8Vv9IJeG90dt1F4":737,"i-lucide:clipboard":739},[4,65,85,206],{"title":5,"page":6,"canonicalKey":7,"locale":8,"id":9,"draft":6,"icon":10,"sidebar":11,"children":12},"Ableitungen",false,"1","de","content:de:1.dokumentation:1.anleitungen:.navigation.yml","lucide:route","section",[13,21,28,35,42,49,56],{"title":14,"id":15,"canonicalKey":16,"locale":8,"draft":6,"icon":17,"navigation":18,"path":20},"Guild Wars auf dem Mac installieren","content:de:1.dokumentation:1.anleitungen:1.installation.md","1\u002F1","lucide:download",{"title":19},"Install and sign in","\u002Fde\u002Fdokumentation\u002Fanleitungen\u002Finstallation",{"title":22,"id":23,"canonicalKey":24,"locale":8,"draft":6,"navigation":25,"icon":26,"path":27},"Konten & Mobile-Verknüpfung","content:de:1.dokumentation:1.anleitungen:2.konten.md","1\u002F2",{"title":22},"lucide:key-round","\u002Fde\u002Fdokumentation\u002Fanleitungen\u002Fkonten",{"title":29,"id":30,"canonicalKey":31,"locale":8,"draft":6,"navigation":32,"icon":33,"path":34},"Auf dem Mac spielen: Optionen","content:de:1.dokumentation:1.anleitungen:3.guild-wars-auf-dem-mac-spielen.md","1\u002F3",{"title":29},"lucide:scale","\u002Fde\u002Fdokumentation\u002Fanleitungen\u002Fguild-wars-auf-dem-mac-spielen",{"title":36,"id":37,"canonicalKey":38,"locale":8,"draft":6,"navigation":39,"icon":40,"path":41},"Leistung","content:de:1.dokumentation:1.anleitungen:4.leistung.md","1\u002F4",{"title":36},"lucide:gauge","\u002Fde\u002Fdokumentation\u002Fanleitungen\u002Fleistung",{"title":43,"id":44,"canonicalKey":45,"locale":8,"draft":6,"navigation":46,"icon":47,"path":48},"Templates","content:de:1.dokumentation:1.anleitungen:5.templates.md","1\u002F5",{"title":43},"lucide:bookmark","\u002Fde\u002Fdokumentation\u002Fanleitungen\u002Ftemplates",{"title":50,"id":51,"canonicalKey":52,"locale":8,"draft":6,"navigation":53,"icon":54,"path":55},"Fehlerbehebung","content:de:1.dokumentation:1.anleitungen:6.fehlerbehebung.md","1\u002F6",{"title":50},"lucide:wrench","\u002Fde\u002Fdokumentation\u002Fanleitungen\u002Ffehlerbehebung",{"title":57,"id":58,"canonicalKey":59,"locale":60,"draft":6,"navigation":61,"icon":62,"fallback":63,"path":64},"Known issues","content:en:1.docs:1.guides:7.known-issues.md","1\u002F7","en",{"title":57},"lucide:triangle-alert",true,"\u002Fde\u002Fdokumentation\u002Fguides\u002Fknown-issues",{"title":66,"page":6,"canonicalKey":67,"locale":8,"id":68,"draft":6,"icon":69,"sidebar":70,"children":71},"Projekt","2","content:de:1.dokumentation:2.projekt:.navigation.yml","lucide:shield-check","group",[72,78],{"title":73,"id":74,"canonicalKey":75,"locale":8,"draft":6,"navigation":76,"icon":69,"path":77},"Sicherheit & Kontorisiko","content:de:1.dokumentation:2.projekt:1.sicherheit.md","2\u002F1",{"title":73},"\u002Fde\u002Fdokumentation\u002Fprojekt\u002Fsicherheit",{"title":79,"id":80,"canonicalKey":81,"locale":8,"draft":6,"navigation":82,"icon":83,"path":84},"Über & Credits","content:de:1.dokumentation:2.projekt:2.ueber.md","2\u002F2",{"title":79},"lucide:users","\u002Fde\u002Fdokumentation\u002Fprojekt\u002Fueber",{"title":86,"page":6,"canonicalKey":87,"locale":60,"id":88,"draft":6,"icon":89,"sidebar":11,"fallback":63,"children":90},"For ArenaNet","3","content:en:1.docs:3.upstream:.navigation.yml","lucide:send",[91,98,105,131,157,169,188],{"title":92,"id":93,"canonicalKey":94,"locale":60,"draft":6,"navigation":95,"icon":96,"fallback":63,"path":97},"Introduction","content:en:1.docs:3.upstream:1.introduction.md","3\u002F1",{"title":92},"lucide:book-open-check","\u002Fde\u002Fdokumentation\u002Fupstream\u002Fintroduction",{"title":99,"id":100,"canonicalKey":101,"locale":60,"draft":6,"navigation":102,"icon":103,"fallback":63,"path":104},"Request summary","content:en:1.docs:3.upstream:2.request-summary.md","3\u002F2",{"title":99},"lucide:list-checks","\u002Fde\u002Fdokumentation\u002Fupstream\u002Frequest-summary",{"title":106,"page":6,"canonicalKey":107,"locale":60,"id":108,"draft":6,"icon":109,"sidebar":70,"fallback":63,"children":110},"File system","3\u002F3","content:en:1.docs:3.upstream:3.filesystem:.navigation.yml","lucide:folder-x",[111,117,124],{"title":112,"id":113,"canonicalKey":114,"locale":60,"draft":6,"navigation":115,"icon":109,"fallback":63,"path":116},"File routines (UR-01…04)","content:en:1.docs:3.upstream:3.filesystem:1.unimplemented-routines.md","3\u002F3\u002F1",{"title":112},"\u002Fde\u002Fdokumentation\u002Fupstream\u002Ffilesystem\u002Funimplemented-routines",{"title":118,"id":119,"canonicalKey":120,"locale":60,"draft":6,"navigation":121,"icon":122,"fallback":63,"path":123},"RemoveExtension (UR-05)","content:en:1.docs:3.upstream:3.filesystem:2.path-remove-extension.md","3\u002F3\u002F2",{"title":118},"lucide:scissors","\u002Fde\u002Fdokumentation\u002Fupstream\u002Ffilesystem\u002Fpath-remove-extension",{"title":125,"id":126,"canonicalKey":127,"locale":60,"draft":6,"navigation":128,"icon":129,"fallback":63,"path":130},"File::Open mode (UR-06)","content:en:1.docs:3.upstream:3.filesystem:3.file-open-mode.md","3\u002F3\u002F3",{"title":125},"lucide:file-plus-2","\u002Fde\u002Fdokumentation\u002Fupstream\u002Ffilesystem\u002Ffile-open-mode",{"title":132,"page":6,"canonicalKey":133,"locale":60,"id":134,"draft":6,"icon":135,"sidebar":70,"fallback":63,"children":136},"Input","3\u002F4","content:en:1.docs:3.upstream:4.input:.navigation.yml","lucide:mouse-pointer-click",[137,143,150],{"title":138,"id":139,"canonicalKey":140,"locale":60,"draft":6,"navigation":141,"icon":135,"fallback":63,"path":142},"Double-click (UR-07)","content:en:1.docs:3.upstream:4.input:1.double-click-flag.md","3\u002F4\u002F1",{"title":138},"\u002Fde\u002Fdokumentation\u002Fupstream\u002Finput\u002Fdouble-click-flag",{"title":144,"id":145,"canonicalKey":146,"locale":60,"draft":6,"navigation":147,"icon":148,"fallback":63,"path":149},"Key labels (UR-08)","content:en:1.docs:3.upstream:4.input:2.key-labels.md","3\u002F4\u002F2",{"title":144},"lucide:keyboard","\u002Fde\u002Fdokumentation\u002Fupstream\u002Finput\u002Fkey-labels",{"title":151,"id":152,"canonicalKey":153,"locale":60,"draft":6,"navigation":154,"icon":155,"fallback":63,"path":156},"Cursor re-test (UR-09)","content:en:1.docs:3.upstream:4.input:3.cursor-re-evaluation.md","3\u002F4\u002F3",{"title":151},"lucide:pointer","\u002Fde\u002Fdokumentation\u002Fupstream\u002Finput\u002Fcursor-re-evaluation",{"title":158,"page":6,"canonicalKey":159,"locale":60,"id":160,"draft":6,"icon":161,"sidebar":70,"fallback":63,"children":162},"Runtime","3\u002F5","content:en:1.docs:3.upstream:5.runtime:.navigation.yml","lucide:cpu",[163],{"title":164,"id":165,"canonicalKey":166,"locale":60,"draft":6,"navigation":167,"icon":161,"fallback":63,"path":168},"Heap maximum (UR-10)","content:en:1.docs:3.upstream:5.runtime:1.heap-maximum.md","3\u002F5\u002F1",{"title":164},"\u002Fde\u002Fdokumentation\u002Fupstream\u002Fruntime\u002Fheap-maximum",{"title":170,"page":6,"canonicalKey":171,"locale":60,"id":172,"draft":6,"icon":173,"sidebar":70,"fallback":63,"children":174},"Interface proposals","3\u002F6","content:en:1.docs:3.upstream:6.proposals:.navigation.yml","lucide:plug",[175,182],{"title":176,"id":177,"canonicalKey":178,"locale":60,"draft":6,"navigation":179,"icon":180,"fallback":63,"path":181},"Build identity (UR-11)","content:en:1.docs:3.upstream:6.proposals:1.build-identification.md","3\u002F6\u002F1",{"title":176},"lucide:fingerprint","\u002Fde\u002Fdokumentation\u002Fupstream\u002Fproposals\u002Fbuild-identification",{"title":183,"id":184,"canonicalKey":185,"locale":60,"draft":6,"navigation":186,"icon":173,"fallback":63,"path":187},"Host interface (UR-12)","content:en:1.docs:3.upstream:6.proposals:2.platform-host-interface.md","3\u002F6\u002F2",{"title":183},"\u002Fde\u002Fdokumentation\u002Fupstream\u002Fproposals\u002Fplatform-host-interface",{"title":189,"page":6,"canonicalKey":190,"locale":60,"id":191,"draft":6,"icon":192,"sidebar":70,"fallback":63,"children":193},"Reference","3\u002F7","content:en:1.docs:3.upstream:7.reference:.navigation.yml","lucide:microscope",[194,200],{"title":195,"id":196,"canonicalKey":197,"locale":60,"draft":6,"navigation":198,"icon":54,"fallback":63,"path":199},"Our workarounds","content:en:1.docs:3.upstream:7.reference:1.our-workarounds.md","3\u002F7\u002F1",{"title":195},"\u002Fde\u002Fdokumentation\u002Fupstream\u002Freference\u002Four-workarounds",{"title":201,"id":202,"canonicalKey":203,"locale":60,"draft":6,"navigation":204,"icon":192,"fallback":63,"path":205},"Verification method","content:en:1.docs:3.upstream:7.reference:2.verification-method.md","3\u002F7\u002F2",{"title":201},"\u002Fde\u002Fdokumentation\u002Fupstream\u002Freference\u002Fverification-method",{"title":207,"page":6,"canonicalKey":208,"locale":60,"id":209,"draft":6,"icon":210,"sidebar":11,"fallback":63,"children":211},"Features","4","content:en:1.docs:4.features:.navigation.yml","lucide:layout-grid",[212,218,225,232,239,246,253,260],{"title":213,"id":214,"canonicalKey":215,"locale":60,"draft":6,"navigation":216,"icon":83,"fallback":63,"path":217},"Accounts and launcher","content:en:1.docs:4.features:1.accounts.md","4\u002F1",{"title":213},"\u002Fde\u002Fdokumentation\u002Ffeatures\u002Faccounts",{"title":219,"id":220,"canonicalKey":221,"locale":60,"draft":6,"navigation":222,"icon":223,"fallback":63,"path":224},"Hub and Switch Character","content:en:1.docs:4.features:2.hub.md","4\u002F2",{"title":219},"lucide:search","\u002Fde\u002Fdokumentation\u002Ffeatures\u002Fhub",{"title":226,"id":227,"canonicalKey":228,"locale":60,"draft":6,"navigation":229,"icon":230,"fallback":63,"path":231},"Travel and maps","content:en:1.docs:4.features:3.travel-and-maps.md","4\u002F3",{"title":226},"lucide:map","\u002Fde\u002Fdokumentation\u002Ffeatures\u002Ftravel-and-maps",{"title":233,"id":234,"canonicalKey":235,"locale":60,"draft":6,"navigation":236,"icon":237,"fallback":63,"path":238},"Chat and trade","content:en:1.docs:4.features:4.chat-and-trade.md","4\u002F4",{"title":233},"lucide:messages-square","\u002Fde\u002Fdokumentation\u002Ffeatures\u002Fchat-and-trade",{"title":240,"id":241,"canonicalKey":242,"locale":60,"draft":6,"navigation":243,"icon":244,"fallback":63,"path":245},"Inventory","content:en:1.docs:4.features:5.inventory.md","4\u002F5",{"title":240},"lucide:package","\u002Fde\u002Fdokumentation\u002Ffeatures\u002Finventory",{"title":247,"id":248,"canonicalKey":249,"locale":60,"draft":6,"navigation":250,"icon":251,"fallback":63,"path":252},"Timers and readouts","content:en:1.docs:4.features:6.combat.md","4\u002F6",{"title":247},"lucide:timer","\u002Fde\u002Fdokumentation\u002Ffeatures\u002Fcombat",{"title":254,"id":255,"canonicalKey":256,"locale":60,"draft":6,"navigation":257,"icon":258,"fallback":63,"path":259},"Appearance","content:en:1.docs:4.features:7.appearance.md","4\u002F7",{"title":254},"lucide:palette","\u002Fde\u002Fdokumentation\u002Ffeatures\u002Fappearance",{"title":261,"id":262,"canonicalKey":263,"locale":60,"draft":6,"navigation":264,"icon":265,"fallback":63,"path":266},"Game files and updates","content:en:1.docs:4.features:8.game-files-and-updates.md","4\u002F8",{"title":261},"lucide:hard-drive-download","\u002Fde\u002Fdokumentation\u002Ffeatures\u002Fgame-files-and-updates",{"title":268,"ref":269,"description":270,"icon":122,"updated":271,"navigation":272,"body":273,"type":719,"id":119,"canonicalKey":120,"draft":6,"partial":6,"locale":60,"collection":720,"navigationFile":6,"file":721,"route":727,"resolution":734},"UR-05: Path::RemoveExtension drops the last character","docs\u002Fupstream\u002Ffilesystem\u002Fpath-remove-extension","The remove-extension helper passes a filename length that is one too short. Every name that has an extension loses its last character.","2026-08-04",{"title":118},{"type":274,"children":275,"toc":703},"root",[276,290,309,334,351,370,377,382,449,454,460,479,489,508,514,519,525,601,607,612,669,674,680,698],{"type":277,"tag":278,"props":279,"children":280},"element","p",{},[281,288],{"type":277,"tag":282,"props":283,"children":284},"code",{},[285],{"type":286,"value":287},"text","Path::RemoveExtension",{"type":286,"value":289}," removes the extension and also the last character of\nthe file name. The defect only occurs when the path has an extension.",{"type":277,"tag":278,"props":291,"children":292},{},[293,295,300,302,307],{"type":286,"value":294},"Build used for the measurements below: 38797,\n",{"type":277,"tag":282,"props":296,"children":297},{},[298],{"type":286,"value":299},"3229678d3fd7d2f0e309530086a614d97f02e7eeb3ca12650ababfd2eb360817",{"type":286,"value":301},". We first\nfound the defect on build\n",{"type":277,"tag":282,"props":303,"children":304},{},[305],{"type":286,"value":306},"b0319704f3072d6948a66026a35af5eb0af12b48d70986783c293e7c77e98483",{"type":286,"value":308},"; it's\npresent on both, and function 457 is the helper on both.",{"type":277,"tag":278,"props":310,"children":311},{},[312,318,320,325,327,332],{"type":277,"tag":313,"props":314,"children":315},"strong",{},[316],{"type":286,"value":317},"Function 457",{"type":286,"value":319},", ",{"type":277,"tag":282,"props":321,"children":322},{},[323],{"type":286,"value":324},"Path::RemoveExtension(dst, src, chars)",{"type":286,"value":326},", in\n",{"type":277,"tag":282,"props":328,"children":329},{},[330],{"type":286,"value":331},"Base\u002FRtl\u002FPath.cpp",{"type":286,"value":333},".",{"type":277,"tag":278,"props":335,"children":336},{},[337,342,344,349],{"type":277,"tag":313,"props":338,"children":339},{},[340],{"type":286,"value":341},"Fix:",{"type":286,"value":343}," low effort, medium blast radius — the change is one length value, but\nthe template scan and ",{"type":277,"tag":282,"props":345,"children":346},{},[347],{"type":286,"value":348},"MdlTex.cpp",{"type":286,"value":350}," both call this helper, so anything that\ndepends on the current short result changes behaviour. We found no such code,\nbut we haven't read every caller.",{"type":277,"tag":278,"props":352,"children":353},{},[354,356,361,363,368],{"type":286,"value":355},"The function splits the path with ",{"type":277,"tag":282,"props":357,"children":358},{},[359],{"type":286,"value":360},"_wsplitpath",{"type":286,"value":362}," (function 411), then rebuilds\nit with ",{"type":277,"tag":282,"props":364,"children":365},{},[366],{"type":286,"value":367},"_wmakepath",{"type":286,"value":369}," (function 412) and a null extension. The filename length\nit passes to the split is one too short.",{"type":277,"tag":371,"props":372,"children":374},"h2",{"id":373},"what-the-client-does-now",[375],{"type":286,"value":376},"What the client does now",{"type":277,"tag":278,"props":378,"children":379},{},[380],{"type":286,"value":381},"We called the shipped function directly with six inputs:",{"type":277,"tag":383,"props":384,"children":387},"pre",{"language":286,"class":385,"tabindex":386},"shiki shiki-themes light-plus dark-plus dark:dark-plus","0",[388],{"type":277,"tag":282,"props":389,"children":391},{"class":390},"language-text",[392,403,405,413,414,422,423,431,432,440,441],{"type":277,"tag":393,"props":394,"children":397},"span",{"class":395,"style":396},"line","display: inline",[398],{"type":277,"tag":393,"props":399,"children":400},{},[401],{"type":286,"value":402},"Path::RemoveExtension(\"\\Healer.txt\")        = \"\\Heale\"         expected \"\\Healer\"",{"type":286,"value":404},"\n",{"type":277,"tag":393,"props":406,"children":407},{"class":395,"style":396},[408],{"type":277,"tag":393,"props":409,"children":410},{},[411],{"type":286,"value":412},"Path::RemoveExtension(\"\\Warrior.txt\")       = \"\\Warrio\"        expected \"\\Warrior\"",{"type":286,"value":404},{"type":277,"tag":393,"props":415,"children":416},{"class":395,"style":396},[417],{"type":277,"tag":393,"props":418,"children":419},{},[420],{"type":286,"value":421},"Path::RemoveExtension(\"\\Builds\\Healer.txt\") = \"\\Builds\\Heale\"  expected \"\\Builds\\Healer\"",{"type":286,"value":404},{"type":277,"tag":393,"props":424,"children":425},{"class":395,"style":396},[426],{"type":277,"tag":393,"props":427,"children":428},{},[429],{"type":286,"value":430},"Path::RemoveExtension(\"Healer.txt\")         = \"Heale\"          expected \"Healer\"",{"type":286,"value":404},{"type":277,"tag":393,"props":433,"children":434},{"class":395,"style":396},[435],{"type":277,"tag":393,"props":436,"children":437},{},[438],{"type":286,"value":439},"Path::RemoveExtension(\"\\My.Build.txt\")      = \"\\My.Buil\"       expected \"\\My.Build\"",{"type":286,"value":404},{"type":277,"tag":393,"props":442,"children":443},{"class":395,"style":396},[444],{"type":277,"tag":393,"props":445,"children":446},{},[447],{"type":286,"value":448},"Path::RemoveExtension(\"\\Healer\")            = \"\\Healer\"        correct, no extension",{"type":277,"tag":278,"props":450,"children":451},{},[452],{"type":286,"value":453},"The last line is correct: with no extension there's nothing to remove, so the\nlength error never fires. The fifth line shows the defect also applies to\nnames containing a dot — the function removes the last extension plus one more\ncharacter.",{"type":277,"tag":371,"props":455,"children":457},{"id":456},"why-this-matters",[458],{"type":286,"value":459},"Why this matters",{"type":277,"tag":278,"props":461,"children":462},{},[463,465,470,472,477],{"type":286,"value":464},"Function 9747 calls this helper for every template it enumerates. Once ",{"type":277,"tag":282,"props":466,"children":467},{},[468],{"type":286,"value":469},"UR-02",{"type":286,"value":471},"\nand ",{"type":277,"tag":282,"props":473,"children":474},{},[475],{"type":286,"value":476},"UR-03",{"type":286,"value":478}," are fixed and the template list works, every listed name will be\none character short — the load path builds a file path from that name and\ncan't find the file.",{"type":277,"tag":278,"props":480,"children":481},{},[482,484,488],{"type":286,"value":483},"The same helper serves ",{"type":277,"tag":282,"props":485,"children":486},{},[487],{"type":286,"value":348},{"type":286,"value":333},{"type":277,"tag":490,"props":491,"children":493},"warning",{"title":492},"This defect hides behind UR-02",[494,496,500,502,506],{"type":286,"value":495},"You can't see this defect today, because the template list is always empty.\nFix ",{"type":277,"tag":282,"props":497,"children":498},{},[499],{"type":286,"value":469},{"type":286,"value":501}," and ",{"type":277,"tag":282,"props":503,"children":504},{},[505],{"type":286,"value":476},{"type":286,"value":507}," and it becomes visible at once — plan all three\ntogether.",{"type":277,"tag":371,"props":509,"children":511},{"id":510},"expected-behaviour",[512],{"type":286,"value":513},"Expected behaviour",{"type":277,"tag":278,"props":515,"children":516},{},[517],{"type":286,"value":518},"Return the directory and the file name without the extension, keeping the file\nname complete.",{"type":277,"tag":371,"props":520,"children":522},{"id":521},"acceptance-criteria",[523],{"type":286,"value":524},"Acceptance criteria",{"type":277,"tag":526,"props":527,"children":528},"ul",{},[529,546,561,576,591,596],{"type":277,"tag":530,"props":531,"children":532},"li",{},[533,538,540,545],{"type":277,"tag":282,"props":534,"children":535},{},[536],{"type":286,"value":537},"Path::RemoveExtension(\"\\Healer.txt\")",{"type":286,"value":539}," returns ",{"type":277,"tag":282,"props":541,"children":542},{},[543],{"type":286,"value":544},"\"\\Healer\"",{"type":286,"value":333},{"type":277,"tag":530,"props":547,"children":548},{},[549,554,555,560],{"type":277,"tag":282,"props":550,"children":551},{},[552],{"type":286,"value":553},"Path::RemoveExtension(\"\\Builds\\Healer.txt\")",{"type":286,"value":539},{"type":277,"tag":282,"props":556,"children":557},{},[558],{"type":286,"value":559},"\"\\Builds\\Healer\"",{"type":286,"value":333},{"type":277,"tag":530,"props":562,"children":563},{},[564,569,570,574],{"type":277,"tag":282,"props":565,"children":566},{},[567],{"type":286,"value":568},"Path::RemoveExtension(\"\\Healer\")",{"type":286,"value":539},{"type":277,"tag":282,"props":571,"children":572},{},[573],{"type":286,"value":544},{"type":286,"value":575},", as it does today.",{"type":277,"tag":530,"props":577,"children":578},{},[579,584,585,590],{"type":277,"tag":282,"props":580,"children":581},{},[582],{"type":286,"value":583},"Path::RemoveExtension(\"\\My.Build.txt\")",{"type":286,"value":539},{"type":277,"tag":282,"props":586,"children":587},{},[588],{"type":286,"value":589},"\"\\My.Build\"",{"type":286,"value":333},{"type":277,"tag":530,"props":592,"children":593},{},[594],{"type":286,"value":595},"The template list shows the exact name that the player typed.",{"type":277,"tag":530,"props":597,"children":598},{},[599],{"type":286,"value":600},"The player can load a template directly from the list.",{"type":277,"tag":371,"props":602,"children":604},{"id":603},"how-to-reproduce",[605],{"type":286,"value":606},"How to reproduce",{"type":277,"tag":278,"props":608,"children":609},{},[610],{"type":286,"value":611},"You can confirm this one on its own; it doesn't depend on the other defects.",{"type":277,"tag":613,"props":614,"children":616},"steps",{"mode":615},"numbered",[617,624,629,635,646,652],{"type":277,"tag":618,"props":619,"children":621},"h3",{"id":620},"how-to-reproduce-add-an-export",[622],{"type":286,"value":623},"Add an export",{"type":277,"tag":278,"props":625,"children":626},{},[627],{"type":286,"value":628},"Append an export entry for function 457 to the module.",{"type":277,"tag":618,"props":630,"children":632},{"id":631},"how-to-reproduce-call-it",[633],{"type":286,"value":634},"Call it",{"type":277,"tag":278,"props":636,"children":637},{},[638,640,645],{"type":286,"value":639},"Instantiate the module in Node with stub imports. Call the function with\n",{"type":277,"tag":282,"props":641,"children":642},{},[643],{"type":286,"value":644},"\"\\Healer.txt\"",{"type":286,"value":333},{"type":277,"tag":618,"props":647,"children":649},{"id":648},"how-to-reproduce-read-the-result",[650],{"type":286,"value":651},"Read the result",{"type":277,"tag":278,"props":653,"children":654},{},[655,657,662,664,668],{"type":286,"value":656},"The function returns ",{"type":277,"tag":282,"props":658,"children":659},{},[660],{"type":286,"value":661},"\"\\Heale\"",{"type":286,"value":663},". The expected result is ",{"type":277,"tag":282,"props":665,"children":666},{},[667],{"type":286,"value":544},{"type":286,"value":333},{"type":277,"tag":278,"props":670,"children":671},{},[672],{"type":286,"value":673},"The path helpers are pure — they need no game state and no initialised UI.",{"type":277,"tag":371,"props":675,"children":677},{"id":676},"our-workaround-today",[678],{"type":286,"value":679},"Our workaround today",{"type":277,"tag":278,"props":681,"children":682},{},[683,685,690,692,696],{"type":286,"value":684},"Our bridge returns entry names ",{"type":277,"tag":313,"props":686,"children":687},{},[688],{"type":286,"value":689},"without",{"type":286,"value":691}," an extension, so the client calls\n",{"type":277,"tag":282,"props":693,"children":694},{},[695],{"type":286,"value":287},{"type":286,"value":697}," on a name that has nothing to remove and the bug never\nfires.",{"type":277,"tag":278,"props":699,"children":700},{},[701],{"type":286,"value":702},"This stays correct after a fix — removing an absent extension does nothing —\nso nothing on our side has to change on the same day.",{"title":704,"searchDepth":705,"depth":705,"links":706},"",4,[707,709,710,711,712,718],{"id":373,"depth":708,"text":376},2,{"id":456,"depth":708,"text":459},{"id":510,"depth":708,"text":513},{"id":521,"depth":708,"text":524},{"id":603,"depth":708,"text":606,"children":713},[714,716,717],{"id":620,"depth":715,"text":623},3,{"id":631,"depth":715,"text":634},{"id":648,"depth":715,"text":651},{"id":676,"depth":708,"text":679},"markdown","docs",{"source":722,"path":723,"stem":724,"dir":725,"extension":726},"content","en\u002F1.docs\u002F3.upstream\u002F3.filesystem\u002F2.path-remove-extension.md","en\u002F1.docs\u002F3.upstream\u002F3.filesystem\u002F2.path-remove-extension","filesystem","md",{"requestedPath":123,"resolvedPath":728,"alternates":729},"\u002Fdocs\u002Fupstream\u002Ffilesystem\u002Fpath-remove-extension",[730,732],{"locale":60,"path":728,"source":731},"variant",{"locale":8,"path":123,"source":733,"resolvedLocale":60},"fallback",{"requested":735,"resolved":736,"usedFallback":63},{"locale":8},{"locale":60},{"previous":738,"next":738},null,{"left":740,"top":740,"width":741,"height":741,"rotate":740,"vFlip":6,"hFlip":6,"body":742},0,24,"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Crect width=\"8\" height=\"4\" x=\"8\" y=\"2\" rx=\"1\" ry=\"1\"\u002F>\u003Cpath d=\"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2\"\u002F>\u003C\u002Fg>",1794063740741]