335. **`/session list --output-format json` session detail objects omit `created_at_ms`, forcing callers to parse the session ID string to recover creation time** — dogfooded 2026-04-29 by Jobdori on current main (`0f7578c`). Running `claw --output-format json --resume latest /session list` returns `session_details` objects with fields `["id", "lifecycle", "message_count", "path", "updated_at_ms"]` — `created_at_ms` is absent. The session ID (`session-1776891003038-0`) encodes a Unix millisecond timestamp as its second segment, so a caller can extract creation time by splitting on `-` and parsing index 1, but this is an undocumented implementation detail that can break if the ID format changes. Without a first-class `created_at_ms` field, a caller cannot: (a) compute session age (`now - created_at`), (b) distinguish a session created 30 seconds ago from one created 3 days ago (both may have `message_count=1`), (c) surface session age in monitoring dashboards without string-parsing hacks. **Required fix shape:** (a) add `created_at_ms` (Unix epoch milliseconds, same unit as `updated_at_ms`) to every `session_details` object; (b) derive it from the session JSONL `session_meta` event's `created_at` field (already written at creation time) or from the session ID timestamp as a fallback; (c) ensure `session_details` always has both `created_at_ms` and `updated_at_ms` so session age and idle time are computable from the JSON alone; (d) add regression coverage proving `session list --output-format json` always includes `created_at_ms`. **Why this matters:** session age is a key diagnostic field for monitoring, GC policies, and resume decisions; parsing the session ID string to recover creation time is a fragile workaround that couples callers to the ID generation implementation. Source: Jobdori live dogfood on mengmotaHost, claw-code `0f7578c`, 2026-04-29.
0 commit comments