minordata-lossunverifiedcollected
Japanese voiced-kana folder names split Claude Code's history in two, hiding 152MB from /resume (unverified report)
On macOS, using Claude Code under Japanese folder names containing dakuten or handakuten marks left pairs of directories in `~/.claude/projects/` that pointed to the same project, with the session history divided between them. Only one of each pair showed up in `/resume`.
Cause
Per the author, directory names in ~/.claude/projects/ are built by replacing every non-alphanumeric character of the working folder's absolute path with one hyphen. A character like ダ is one character in NFC but two in NFD, so the same path gets a different number of hyphens and becomes a different directory. Which tool writes the NFD form of the path is unknown.
Consequence
10 of 38 directories were paired up, and the smaller sides held 152MB of history that /resume did not show. No files were lost. ~/.claude.json had 9 paths registered in both NFC and NFD form.
Fix
The author set up a script, run every 30 minutes, that copies complete files to the side /resume shows, then merged the 10 pairs one by one into the NFC side until none were left. The cause of the split was not stopped, and the author says new splits may still be happening.
What happened
On September 7, 2026, while auditing their Claude Code setup, the author
listed ~/.claude/projects/ and noticed two directories with almost the
same name. They differed only in the number of hyphens, and both pointed to
the same project under a folder named 作業フォルダ (“work folder”) on the
desktop. The history was split into 28 sessions and 5 sessions, and only
one side showed up in /resume.
The chaos on the ground
It was not the only pair. 10 of the 38 directories were paired the same
way, and the smaller sides added up to 152MB. That history was missing from
/resume and looked deleted, but the files were still there. In
~/.claude.json, 9 paths that look identical on screen were registered in
both NFC and NFD form. Why that count is one short of the 10 directory
pairs was not checked. Of the 16 files on the NFD side, 13 (144MB) were
fully contained in the NFC side, and only 3 existed on the NFD side alone.
The cleanup hit a snag too. Archiving the NFD directories with tar failed
because their names start with a hyphen and tar read them as options.
Changing to the parent with -C did not help; the author fixed it by
passing the targets through a list with -T and prefixing each line with
./.
Root cause
Directory names in ~/.claude/projects/ are built by replacing each
non-alphanumeric character of the working folder’s absolute path with one
hyphen. Characters with dakuten or handakuten change length with Unicode
normalization: ダ is one character in NFC, but in NFD it is タ plus a
combining mark, two characters. So 作業フォルダ is 6 characters in NFC and
7 in NFD, giving one more hyphen and a separate directory. Only the folders
under 作業フォルダ and キャリアプラン (“career plan”) were split; the folder
under 個人開発 (“personal projects”), which has no such marks, was not.
The author thinks /resume lists only the directory that matches the
normalization form of the current path, but did not check the
implementation. It is also unknown which tool writes the NFD path, and
whether it is the CLI or the desktop app.
The fix
The author first wrote a script, run by a LaunchAgent every 30 minutes, that
copies complete files to the side /resume shows. It overwrites only when
the destination’s contents exactly match the beginning of the source, and
keeps the old file as .bak. Then the 10 pairs were merged one by one,
confirming each file was contained in the NFC side before deleting the NFD
side, until no pairs were left. The 9 NFD entries in ~/.claude.json were
left in place, because running sessions write to that file and an outside
edit would collide with them. The cause was not stopped, and since some NFD
directories had been updated a few days before the audit, new splits may
still be happening.
If your folder names contain dakuten or handakuten, collapsing runs of
hyphens and counting duplicate names once is a quick way to find history
that /resume no longer shows.