Repository navigation
Releases: kjungit/claude-code-worklog
Releases · kjungit/claude-code-worklog
Release list
v2.0.0
Migration needed: no runtime impact, version-only correction.
- 1.0.9 changed
schema_version2 -> 3 by removing theusagefield fromplan/file_changerecords (moved to a newusagerecord type). Per this project's own versioning rule (design doc 19.2), aschema_versionchange that isn't purely additive -- a field rename or removal -- requires a MAJOR bump ofplugin.json, not a patch release. This release corrects that: no code changes from 1.0.9, version only
v1.0.9
Migration needed: no, but see the first item -- already-captured raw session data predating this release won't retroactively gain accurate token metrics if it's ever reprocessed.
- Token usage and turn counts were being lost or double-counted:
usagewas only attached toplan/file_changerecords, so a text-only assistant turn (most turns) had its usage silently dropped entirely, while a turn with 2+ matching tool_use blocks had its usage counted once per block. Every assistant turn now produces its ownusagerecord, counted exactly once, independent of what tool_use blocks (if any) it also contains.schema_versionbumped 2 -> 3 for this record-shape change - A raw transcript chunk could be corrupted while splitting it into lines:
str.splitlines()also breaks on Unicode line separators (U+2028, U+2029, U+0085,\v,\f), which can appear raw inside a JSON string value and are valid JSON. Switched to.split("\n"), the actual JSONL line delimiter git log --authormatches its value as a regex, not a literal string. An unescaped email (almost always containing., which matches any character) could over-match and pull another contributor's commits into the current user's worklog. The email is now escaped before being passed to--author- Closed a race in the summarization lock: two
SessionStarthooks firing at nearly the same instant, with no lock file yet, could both believe they'd acquired it and both summarize the same date. Lock creation is now atomic (O_CREAT|O_EXCL) notes/{date}.mdis now written atomically (temp file + rename), like every other persisted file in this plugin, instead of a plain write that a crash (or the lock race above) could leave truncated or interleaved- A session that spans midnight could permanently freeze a stale live/abandoned classification for its earlier day: the cache (and the outer "is this date done" check) only looked at that day's own captured shard, not the session's other shards across date folders, so a later-day fragment changing what's actually true for the earlier day never triggered a recompute. Both checks now consider all of a session's shards
- Archive files (
archive/{date}.tar.gz) are now written atomically; previously a process killed mid-write left a permanently corrupt, permanently-skipped archive at that path (original data was never at risk either way) - An invalid
/worklog:searchquery (unbalanced quotes, a leading-, a bare operator) crashed with a raw traceback -- it was being retried 3 times as if it were lock contention, then re-raised uncaught. It now fails fast with a friendly message debug_log's rotation could itself raise on a torn multi-byte UTF-8 sequence from concurrent hook writes, defeating its own "logging must never be the reason a hook fails" guarantee. It now decodes tolerantly
v1.0.7
Migration needed: no.
- Added
/worklog:listto show which dates have a worklog at a glance (most recent 14 by default,--allfor full history), so you don't have to guess a date for/worklog:showor reach for/worklog:searchjust to see what's there. When more dates exist than are shown, the output points to--allor/worklog:searchto find them