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.
52 lines
1.3 KiB
Markdown
52 lines
1.3 KiB
Markdown
---
|
|
# claudbg-nqxz
|
|
title: Duration shows 0ms — RawEntry.duration_ms field name mismatch (durationMs vs duration_ms)
|
|
status: todo
|
|
type: bug
|
|
priority: high
|
|
created_at: 2026-03-30T04:44:06Z
|
|
updated_at: 2026-03-30T04:44:06Z
|
|
parent: claudbg-8vpb
|
|
---
|
|
|
|
## Problem
|
|
|
|
`sessions transcribe` shows `Duration: 0ms` even for long sessions.
|
|
|
|
## Root cause
|
|
|
|
The JSONL file uses camelCase `durationMs` at the entry level:
|
|
|
|
```json
|
|
{"type": "system", "durationMs": 3446227, ...}
|
|
```
|
|
|
|
But `RawEntry` declares the field as `duration_ms: Option<u64>` with no serde rename:
|
|
|
|
```rust
|
|
// 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:
|
|
|
|
```rust
|
|
#[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.rs` — `RawEntry`, `duration_ms` field (line 33)
|
|
- `src/models/stats.rs` — `compute_stats`, accumulates `entry.duration_ms`
|