v0.4.1 — Fix space-bearing cwd JSONL lookup
Summary
A bug-fix release. Sessions whose cwd contained spaces (e.g. ~/Documents/Solutions Arhitect/Public Events/Claude Webinar) were showing only their task list — model badge, context gauge, thinking counter, skill counter, and /goal banner all came up empty.
Root cause
PathDecoder.encodedProjectPath only replaced / and . with -, leaving spaces intact. The Claude CLI, however, also collapses spaces to - when naming ~/.claude/projects/ subdirectories, so the encoder produced a path that never matched on disk:
| Input cwd | App-encoded (before) | Actual directory |
|---|---|---|
/Users/anhyobin/Documents/Solutions Arhitect/Public Events/Claude Webinar |
-Users-anhyobin-Documents-Solutions Arhitect-Public Events-Claude Webinar ❌ |
-Users-anhyobin-Documents-Solutions-Arhitect-Public-Events-Claude-Webinar |
Because the main session JSONL never loaded, every value derived from it (mainTokens, mainModel, mainLastTurnUsage, mainThinkingBlockCount, mainSkillCounts, activeGoal) was empty. Only TaskLoader survived because tasks live under ~/.claude/tasks/{sessionId}/ — keyed by sessionId, not by encoded cwd — so the symptom was "task list shows up, nothing else does."
Fix
One-line change in PathDecoder.swift to also collapse spaces to -. The encoder is shared by SubagentLoader and both JSONL load paths in ClaudeDataStore, so the fix flows through every call site automatically.
Tests
New PathDecoderTests covers:
- Space-bearing path (the regression that motivated the fix)
- No-space path (regression guard — encoder must remain a no-op for the previously-working case)
- Dot handling
Version
Info.plist: 0.4.0 → 0.4.1, build 6 → 7.
Full Changelog: v0.4.0...v0.4.1