Skip to content

feat(cli): expose replay timing data + times command - #44

Merged
virtexalejandro merged 2 commits into
mainfrom
feature/cli-timing-exposure
Jul 23, 2026
Merged

feat(cli): expose replay timing data + times command#44
virtexalejandro merged 2 commits into
mainfrom
feature/cli-timing-exposure

Conversation

@onur-zenos

Copy link
Copy Markdown
Contributor

The CLI previously surfaced no wall-clock data beyond the raw recorded_utc_timestamp int64, and the footer per-frame time table was unreachable from the command surface entirely.

  • new 'times [start] [end]' command: per-frame time table summary (counts, first/last wall clock, durations, median frame step), discontinuity scan (negative or >2x-median created_utc deltas, capped at 100 with anomaly_count/anomalies_truncated), raw gaps/segments, and an optional per-frame slice with deltas
  • frame: adds game_time_ticks/_seconds + created_utc_ticks/_iso
  • header: adds recorded_utc_iso; info: adds recorded_utc_ticks/_iso
  • footer: adds game_time/created_utc/gap/segment counts
  • chunks: adds checksum (xxHash64, 0 = not set)
  • events: adds derived utc_ticks/_iso (recording start + game_time)
  • TimeUtils::FormatUtcTicksIso8601: ISO-8601 sibling of FormatUtcTicks
  • TimeUtils::NormalizeUtcToUeTicks: maps unix seconds / unix ms / unix-relative ticks / UE ticks onto one timeline. The writer stamps the header in unix seconds while per-frame created_utc is ticks; every *_iso is derived through normalization, every stored *_ticks passes through raw so deltas stay diagnosable.

Docs in tools/cli/readme.md + CHANGELOG; cli_test_suite.py asserts the new keys, the times slice shape, and times error responses.

The CLI previously surfaced no wall-clock data beyond the raw
recorded_utc_timestamp int64, and the footer per-frame time table was
unreachable from the command surface entirely.

- new 'times [start] [end]' command: per-frame time table summary
  (counts, first/last wall clock, durations, median frame step),
  discontinuity scan (negative or >2x-median created_utc deltas,
  capped at 100 with anomaly_count/anomalies_truncated), raw
  gaps/segments, and an optional per-frame slice with deltas
- frame: adds game_time_ticks/_seconds + created_utc_ticks/_iso
- header: adds recorded_utc_iso; info: adds recorded_utc_ticks/_iso
- footer: adds game_time/created_utc/gap/segment counts
- chunks: adds checksum (xxHash64, 0 = not set)
- events: adds derived utc_ticks/_iso (recording start + game_time)
- TimeUtils::FormatUtcTicksIso8601: ISO-8601 sibling of FormatUtcTicks
- TimeUtils::NormalizeUtcToUeTicks: maps unix seconds / unix ms /
  unix-relative ticks / UE ticks onto one timeline. The writer stamps
  the header in unix seconds while per-frame created_utc is ticks;
  every *_iso is derived through normalization, every stored *_ticks
  passes through raw so deltas stay diagnosable.

Docs in tools/cli/readme.md + CHANGELOG; cli_test_suite.py asserts the
new keys, the times slice shape, and times error responses.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@virtexalejandro
virtexalejandro merged commit eb1d032 into main Jul 23, 2026
9 checks passed
@onur-zenos
onur-zenos deleted the feature/cli-timing-exposure branch July 27, 2026 09:30
virtexalejandro pushed a commit that referenced this pull request Jul 27, 2026
* feat(cli): expose replay timing data + times command

The CLI previously surfaced no wall-clock data beyond the raw
recorded_utc_timestamp int64, and the footer per-frame time table was
unreachable from the command surface entirely.

- new 'times [start] [end]' command: per-frame time table summary
  (counts, first/last wall clock, durations, median frame step),
  discontinuity scan (negative or >2x-median created_utc deltas,
  capped at 100 with anomaly_count/anomalies_truncated), raw
  gaps/segments, and an optional per-frame slice with deltas
- frame: adds game_time_ticks/_seconds + created_utc_ticks/_iso
- header: adds recorded_utc_iso; info: adds recorded_utc_ticks/_iso
- footer: adds game_time/created_utc/gap/segment counts
- chunks: adds checksum (xxHash64, 0 = not set)
- events: adds derived utc_ticks/_iso (recording start + game_time)
- TimeUtils::FormatUtcTicksIso8601: ISO-8601 sibling of FormatUtcTicks
- TimeUtils::NormalizeUtcToUeTicks: maps unix seconds / unix ms /
  unix-relative ticks / UE ticks onto one timeline. The writer stamps
  the header in unix seconds while per-frame created_utc is ticks;
  every *_iso is derived through normalization, every stored *_ticks
  passes through raw so deltas stay diagnosable.

Docs in tools/cli/readme.md + CHANGELOG; cli_test_suite.py asserts the
new keys, the times slice shape, and times error responses.


* style: clang-format changed lines (CI format gate)


---------
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants