Skip to content

Commit 764c1c7

Browse files
docs(changelog): add all data-quality and session-detection fixes to Unreleased
1 parent 9317305 commit 764c1c7

1 file changed

Lines changed: 12 additions & 0 deletions

File tree

CHANGELOG.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,18 @@ All notable changes to claudewatch are documented here.
1414

1515
- **`get_cost_summary` today/week undercounting for resumed sessions** — time-bucket logic used `session.StartTime` to decide whether a session counted toward `today_usd` or `week_usd`. Long-running sessions resumed across day or week boundaries had a start time in the past, causing their cost to appear in neither bucket. Fixed by anchoring on the last entry in `UserMessageTimestamps` (most recent user activity), falling back to `StartTime` only when the timestamps list is empty.
1616

17+
- **`get_cost_summary` stale indexed data masking live session** — when a session was both indexed (session-meta written days ago) and live (currently running), the deduplication logic skipped the live session entirely. The indexed version had stale token counts ($1 vs $217 live) and old timestamps, leaving `today_usd` at 0. Fixed by replacing the indexed version with live data when both exist.
18+
19+
- **`FindActiveSessionPath` symlink resolution**`~/.claude` symlinked to `~/workspace/.claude` caused a path mismatch: `os.ReadDir` built paths through the symlink while `lsof` reported resolved paths, so the pathSet lookup always failed. Now resolves symlinks on `claudeHome` before scanning.
20+
21+
- **`FindActiveSessionPath` Spotlight false positives**`lsof -F n` (all processes) matched macOS Spotlight/mds holding stale JSONL files open for indexing, returning the wrong session. Scoped to `-c claude` to match only Claude processes.
22+
23+
- **`FindActiveSessionPath` stale FD selection** — when multiple JSONL files were open (stale FDs from previous sessions), the first lsof match won regardless of recency. Now collects all matches and selects by newest mtime.
24+
25+
- **`ParseActiveSession` missing `UserMessageTimestamps`** — active sessions had `UserMessageCount` but not `UserMessageTimestamps`, so `lastActiveTime` always fell back to `StartTime`. Now collects timestamps from user-type entries.
26+
27+
- **`get_session_stats` active-session project name** — same `filepath.Base(meta.ProjectPath)` bug as `get_project_health`; returned hash directory name instead of friendly project name. Fixed by using `resolveProjectName`.
28+
1729
### Added
1830

1931
- **`get_project_comparison` `min_sessions` filter** — optional integer parameter to exclude low-confidence projects from the ranked comparison. Projects with fewer sessions than `min_sessions` are filtered before sorting. Default 0 (no filter). Fixes the rezmakr skew where a single high-volume zero-commit project (81% of 43 sessions, ZeroCommitRate: 1.0) dominated aggregate health signals.

0 commit comments

Comments
 (0)