Context
Operator feedback, live during the #17271 L1 paired session (2026-08-17): "date and time shows UTC, local time and time formatting would be better (easy in JS)." The activity stream renders HH:MM derived from UTC instants; the operator seat sits in Europe/Berlin (+2 in August) — every glance at the surface whose whole point is at-a-glance truth requires mental offset arithmetic.
The Problem
Human-facing instants across the cockpit (activity rows, presence lastSeenAt, catch-up entries, mailbox panes) render raw-UTC-derived strings. No §04-bar rule exists for time presentation, so each surface invents its own — the exact per-surface drift the design SSOT (#17263 → PR #17279) exists to prevent.
The Architectural Reality
apps/agentos/view/fleet/ActivityStream.mjs renders row times; coalesced same-actor runs show the newest event per the documented run contract.
- The §06 design SSOT +
apps/agentos/TOKENS.md (merged via PR #17279) is the governing home for a presentation rule; panes (#17268) inherit from it.
- Wire DTOs (fleet snapshots, presence envelopes) carry ISO-8601 UTC and MUST stay that way — receipts and cross-checks (e.g. the #17271 AC2 evidence table) depend on wire-time being zone-free.
The Fix
- One rule in the §06 SSOT (+ TOKENS.md appendix line): human-facing instants render via
Intl.DateTimeFormat in the VIEWER's locale/zone; wire stays ISO-UTC; the exact ISO instant rides title/hover for receipt-grade reading. Same-day instants render time-only; older rows gain a compact locale-aware date part.
- First consumer: the ActivityStream row template (coalesced runs: newest instant).
- Sweep remaining cockpit surfaces to the rule (presence lastSeen, catch-up, mailbox panes) — same PR or an explicitly listed follow-up.
Acceptance Criteria
Out of Scope
Relative-time vocabulary ("3m ago") — a separate design question; absolute-local is this ticket. Pane-level information design (#17268).
Related
Epic #14560 (parent) · #17263 / PR #17279 (§04 bar + SSOT home) · #17268 (panes inherit the rule) · #17271 (origin session, operator-witnessed L1 run)
Live latest-open sweep: latest 20 open checked 2026-08-17T16:19Z, no equivalent; A2A claim window (last 60 min) clean; KB semantic + exact keyword sweeps clean (adjacent-only: #17087 timestamp guard dedup — code-level, unrelated).
Origin Session ID: 7ee47ccf-d1c7-469d-a75e-15cebf3b5ea5
Retrieval Hint: query_raw_memories("cockpit viewer-local Intl timestamps SSOT rule L1 session")
Context
Operator feedback, live during the #17271 L1 paired session (2026-08-17): "date and time shows UTC, local time and time formatting would be better (easy in JS)." The activity stream renders
HH:MMderived from UTC instants; the operator seat sits in Europe/Berlin (+2 in August) — every glance at the surface whose whole point is at-a-glance truth requires mental offset arithmetic.The Problem
Human-facing instants across the cockpit (activity rows, presence
lastSeenAt, catch-up entries, mailbox panes) render raw-UTC-derived strings. No §04-bar rule exists for time presentation, so each surface invents its own — the exact per-surface drift the design SSOT (#17263 → PR #17279) exists to prevent.The Architectural Reality
apps/agentos/view/fleet/ActivityStream.mjsrenders row times; coalesced same-actor runs show the newest event per the documented run contract.apps/agentos/TOKENS.md(merged via PR #17279) is the governing home for a presentation rule; panes (#17268) inherit from it.The Fix
Intl.DateTimeFormatin the VIEWER's locale/zone; wire stays ISO-UTC; the exact ISO instant ridestitle/hover for receipt-grade reading. Same-day instants render time-only; older rows gain a compact locale-aware date part.Acceptance Criteria
Out of Scope
Relative-time vocabulary ("3m ago") — a separate design question; absolute-local is this ticket. Pane-level information design (#17268).
Related
Epic #14560 (parent) · #17263 / PR #17279 (§04 bar + SSOT home) · #17268 (panes inherit the rule) · #17271 (origin session, operator-witnessed L1 run)
Live latest-open sweep: latest 20 open checked 2026-08-17T16:19Z, no equivalent; A2A claim window (last 60 min) clean; KB semantic + exact keyword sweeps clean (adjacent-only: #17087 timestamp guard dedup — code-level, unrelated).
Origin Session ID: 7ee47ccf-d1c7-469d-a75e-15cebf3b5ea5
Retrieval Hint:
query_raw_memories("cockpit viewer-local Intl timestamps SSOT rule L1 session")