← All incidents

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`.

Observed
Severity score
3/10
Blast radius
data
Tags
#claude-code#unicode#nfc-nfd#macos#session-history#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.

Sources