Collapse redundant timestamps in run detail header
Complete/failed runs now show \"queued <relative> · ran <duration>\"
instead of three near-identical relative timestamps. In-flight runs
show queued + started; pending runs show queued only. ISO timestamps
stay accessible via title hover.

Assisted-by: GLM-5.1 via pi
change tzzurrytnytnzvxmynsrvstzzovrryxu
commit 1190c3fbaf892f06fa947b357cc50054ddc56382
author Alpha Chen <alpha@kejadlen.dev>
date
parent ktwyskoy
diff --git a/AGENTS.md b/AGENTS.md
index ddb0419..aadb93d 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -4,6 +4,8 @@
 
 The backlog lives in the `ranger` CLI, not GitHub Issues. Use `ranger` to read and update tasks.
 
+The backlog shifts between sessions and even within a session — tasks get reordered, retitled, moved between states, closed, or added by the user without notice. Before acting on a task you remember (or one referenced earlier in the conversation), re-run `ranger task show <key>` and confirm state, ordering, and description against ground truth. Do not trust earlier `ranger task list` output to still be accurate; refetch when placement matters (e.g. moving to top/back of ready).
+
 ## Before committing
 
 Always run `just all` and verify everything passes before committing. No exceptions — this is not optional. If you commit without running it, you will break the build.
diff --git a/src/quire/web/templates.rs b/src/quire/web/templates.rs
index 0fa797c..2e1cf62 100644
--- a/src/quire/web/templates.rs
+++ b/src/quire/web/templates.rs
@@ -164,6 +164,10 @@ impl DetailRun {
         self.finished_at_ms.is_some()
     }
 
+    pub fn is_terminal(&self) -> bool {
+        self.state == "complete" || self.state == "failed"
+    }
+
     pub fn duration_display(&self) -> String {
         format::format_duration(self.started_at_ms, self.finished_at_ms)
     }
diff --git a/templates/ci/run_detail.html b/templates/ci/run_detail.html
index 9c5f16a..819e1c4 100644
--- a/templates/ci/run_detail.html
+++ b/templates/ci/run_detail.html
@@ -14,10 +14,15 @@
     · <span class="ci-state-label {{ run.state_class() }}"><span class="ci-status-dot {{ run.state_class() }}"></span> {{ run.state }}</span>
   </div>
   <div class="ci-meta-secondary">
+    {% if run.is_terminal() %}
     queued <time title="{{ run.queued_iso() }}">{{ run.queued_relative() }}</time>
-    · started {% if run.has_started() %}<time title="{{ run.started_iso() }}">{{ run.started_display() }}</time>{% else %}{{ run.started_display() }}{% endif %}
-    · finished {% if run.has_finished() %}<time title="{{ run.finished_iso() }}">{{ run.finished_display() }}</time>{% else %}{{ run.finished_display() }}{% endif %}
-    · {{ run.duration_display() }}
+    · ran <span title="started {{ run.started_iso() }}\nfinished {{ run.finished_iso() }}">{{ run.duration_display() }}</span>
+    {% elif run.has_started() %}
+    queued <time title="{{ run.queued_iso() }}">{{ run.queued_relative() }}</time>
+    · started <time title="{{ run.started_iso() }}">{{ run.started_display() }}</time>
+    {% else %}
+    queued <time title="{{ run.queued_iso() }}">{{ run.queued_relative() }}</time>
+    {% endif %}
   </div>
 </div>