You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
The merged transcript's wall clock is UTC on the server and local in the browser #447
The merged transcript's [HH:MM:SS] wall clock is rendered twice, in two
timezones, and the operator can see both at once.
Server — UTC.session_merge._clock (tapscribe/session_merge.py:309) parses
the stamp with text.parse_iso, which returns a tz-aware UTC datetime, then
calls .strftime("%H:%M:%S") on it. That feeds render_transcript_text, which
builds plain_text → session-transcript.txt on disk, and which batch_summarize (:121) re-renders as the summarizer's input.
Client — the viewer's local time.formatters.fmtClock
(tapscribe/web/js/formatters.js:56) does new Date(iso) → Intl.DateTimeFormat(undefined, …), i.e. the browser's timezone. That is what
the merged pane shows, what buildCopyText puts on the clipboard, and — since
the .txt download reuses buildCopyText (transcript.js:662) — what the
downloaded file contains.
For an operator anywhere but UTC the two disagree by their offset. Concretely at
UTC+2: the pane and the downloaded .txt read 14:05:12, while the summary the
model wrote from the same line says 12:05:12, and so does session-transcript.txt sitting in the recordings folder next to it.
Deciding it
Which side moves is a product call, not a mechanical one:
Local everywhere matches what the operator experienced, and matches the
rest of the dashboard (every other timestamp is Intl-formatted). But the
server has no viewer timezone — it would have to be threaded to the summarize
request, and session-transcript.txt is written by a batch job with no viewer
at all.
UTC everywhere is unambiguous and needs no timezone plumbing, but makes
the pane disagree with every other clock in the UI and with the wall clock the
meeting actually happened on.
Stamp the offset (14:05:12+02:00, or a times are UTC header line on the
rendered text) keeps both renderings and removes the ambiguity instead of the
divergence. Cheapest, and probably right for the summarizer input specifically,
where the model is reading the times rather than the operator.
Whatever wins, the two spellings should end up sharing one stated rule, the way
the speaker-name resolution now does.
Not new
Pre-existing: _clock has rendered UTC since the merged transcript existed.
Surfaced while reviewing #438, which routed the summarizer through render_transcript_text and so put the two renderings side by side in one
operator-visible flow.
Claimed by the Slipestein delegation experiment, slice 447, on 2026-09-29. experiment.sh release 447 takes the label off when the slice ends, merged or not.
Activity
feat: diarize a multi-person tap into Voices mapped to People (#78) (#…
Vortiago commentedon Sep 29, 2026
Claimed by the Slipestein delegation experiment, slice
447, on 2026-09-29.experiment.sh release 447takes the label off when the slice ends, merged or not.Vortiago commentedon Oct 3, 2026
Released by the Slipestein delegation experiment, slice
447: merged as TapScribe PR #462 (1ab024f). The issue is free to pick again.