Romaji to Kana Converter: React & Next.js — Chapter 3, Exercise 1 ===================================================================== TASK Run convert('kuuki') ("air," くうき) and convert('oneesan') ("older sister," おねえさん) with real code. Predict each output first, then verify, and explain any surprise. SOLUTION Real, verified output: > convert('kuuki') { hiragana: 'くうき', katakana: 'クーキ' } > convert('oneesan') { hiragana: 'おねいさん', katakana: 'オネーサン' } "kuuki" converts exactly right: "ku" matches として く, then the second "u" is recognized as a genuine chōon continuation of the "u" vowel, correctly extending with う in hiragana (the real, correct extension letter for the u-row) and ー in katakana. Then "ki" matches normally as き. The hiragana result, くうき, matches the real word character for character. "oneesan" is where the real surprise shows up. The katakana output, オネーサン, is exactly correct -- katakana always uses a plain ー regardless of which vowel is being extended, so there's no room for this converter to get it wrong there. The hiragana output, おねいさん, is genuinely WRONG: the real word is おねえさん, spelled with え, not い. This converter's default rule extends every e-row long vowel with い (matching the majority convention, as in せんせい), but "oneesan" is one of a real, small set of exception words that use え instead -- the exact same kind of unresolvable-from-spelling problem the chapter already documented for お-row words like とおい and おおきい, just showing up on the え-row here instead. This isn't a bug to fix; it's the same honest limitation the chapter already named, independently confirmed by a different real example. WHY THIS WORKS AS AN ANSWER ---------------------------- It verifies both outputs with real code rather than assuming they match the real words, and correctly identifies that "oneesan" isn't a new bug at all -- it's the chapter's own already-documented default-rule-vs-exception-word limitation, now demonstrated on the e-row rather than the o-row.