You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
claudbg/.beans/claudbg-nqxz--duration-show...

1.5 KiB

title status type priority created_at updated_at parent
Duration shows 0ms — RawEntry.duration_ms field name mismatch (durationMs vs duration_ms) completed bug high 2026-03-30T04:44:06Z 2026-03-30T05:02:50Z claudbg-8vpb

Problem

sessions transcribe shows Duration: 0ms even for long sessions.

Root cause

The JSONL file uses camelCase durationMs at the entry level:

{"type": "system", "durationMs": 3446227, ...}

But RawEntry declares the field as duration_ms: Option<u64> with no serde rename:

// src/models/session.rs:33
pub duration_ms: Option<u64>,

Serde looks for duration_ms (snake_case), finds nothing, and the value falls into the extra catch-all map instead. compute_stats then sums zeros.

Fix

Add #[serde(rename = "durationMs")] to the field:

#[serde(rename = "durationMs")]
pub duration_ms: Option<u64>,

Alternatively use #[serde(alias = "durationMs")] to accept both forms.

Confirmed by

Running against session 21fae0a8: grep '"durationMs":[0-9]' finds entries like {"type":"system","durationMs":3446227,...} confirming the field name is camelCase.

Relevant files

  • src/models/session.rsRawEntry, duration_ms field (line 33)
  • src/models/stats.rscompute_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.