From b6ef138aae308a65339d73c93713db8ea07c160a Mon Sep 17 00:00:00 2001 From: Elijah Voigt Date: Sun, 29 Mar 2026 22:02:56 -0700 Subject: [PATCH] fix(models): add serde rename for durationMs field RawEntry.duration_ms was not decorated with #[serde(rename = "durationMs")] so the camelCase field from JSONL was silently dropped, causing sessions transcribe to always show Duration: 0ms. Closes claudbg-nqxz Co-Authored-By: Claude Sonnet 4.6 --- ...--duration-shows-0ms-rawentryduration-ms-field-name.md | 8 ++++++-- src/models/session.rs | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/.beans/claudbg-nqxz--duration-shows-0ms-rawentryduration-ms-field-name.md b/.beans/claudbg-nqxz--duration-shows-0ms-rawentryduration-ms-field-name.md index 74ee6bd..a302f7d 100644 --- a/.beans/claudbg-nqxz--duration-shows-0ms-rawentryduration-ms-field-name.md +++ b/.beans/claudbg-nqxz--duration-shows-0ms-rawentryduration-ms-field-name.md @@ -1,11 +1,11 @@ --- # claudbg-nqxz title: Duration shows 0ms — RawEntry.duration_ms field name mismatch (durationMs vs duration_ms) -status: todo +status: completed type: bug priority: high created_at: 2026-03-30T04:44:06Z -updated_at: 2026-03-30T04:44:06Z +updated_at: 2026-03-30T05:02:50Z parent: claudbg-8vpb --- @@ -49,3 +49,7 @@ Running against session `21fae0a8`: `grep '"durationMs":[0-9]'` finds entries li - `src/models/session.rs` — `RawEntry`, `duration_ms` field (line 33) - `src/models/stats.rs` — `compute_stats`, accumulates `entry.duration_ms` + +## Summary of Changes + +Added `#[serde(rename = "durationMs")]` to the `duration_ms` field on `RawEntry` in `src/models/session.rs`. No other changes needed — `compute_stats` already reads `entry.duration_ms` correctly. diff --git a/src/models/session.rs b/src/models/session.rs index cdce051..7502b87 100644 --- a/src/models/session.rs +++ b/src/models/session.rs @@ -30,6 +30,7 @@ pub struct RawEntry { /// Timestamp string (ISO 8601). pub timestamp: Option, /// Unix milliseconds of the conversation turn duration. + #[serde(rename = "durationMs")] pub duration_ms: Option, /// Raw JSON for any fields this struct doesn't explicitly model. #[serde(flatten)]