Index: src/services/guardianship/help.js
===================================================================
--- src/services/guardianship/help.js	(revision 9ce14b80ba1bf9e566459d46aa1b9758a93f7a0b)
+++ src/services/guardianship/help.js	(revision e667d26aec08a6380a8c2e1687a3f374682f383d)
@@ -52,7 +52,16 @@
  * zijn zonder database of scherm.
  *
- * `ageMs` is de leeftijd van de OUDSTE oppik. Daar tekent het scherm mee dat een
- * signaal oud wordt -- niets verdwijnt, maar je ziet wel dat er misschien niets
- * meer gebeurt.
+ * `oldestPickupAt` is het TIJDSTIP van de oudste oppik, niet de leeftijd. Daar
+ * tekent het scherm mee dat een signaal oud wordt -- niets verdwijnt, maar je
+ * ziet wel dat er misschien niets meer gebeurt.
+ *
+ * EEN TIJDSTIP, GEEN LEEFTIJD, en dat is geen smaak. Hier stond `ageMs`, een
+ * verschil met `now`, en dus veranderde dit antwoord elke milliseconde. Zodra
+ * het paneel een ETag kreeg (9-8) kon die daardoor nooit meer gelijk zijn: de
+ * 304 kwam nooit, de lange poll keerde meteen terug, en de browser kwam in een
+ * lus van ongeveer een seconde waarin de scrollpositie werd vermalen. Een
+ * levende klok in een antwoord maakt dat antwoord onvergelijkbaar met zichzelf.
+ *
+ * De leeftijd is een weergavedetail en wordt in de client uitgerekend.
  */
 export function helpStatus(rows, now = Date.now()) {
@@ -67,5 +76,5 @@
     handled: done ? { uri: done.guardian_uri, handle: done.guardian_handle || null, at: done.created_at } : null,
     // Alleen betekenisvol zolang er niets is afgesloten.
-    ageMs: (!done && oudste) ? Math.max(0, now - oudste) : null,
+    oldestPickupAt: (!done && oudste) ? new Date(oudste).toISOString() : null,
     // Waar het scherm op afgaat. Bij twijfel OPEN: een lege lijst, een rij die we
     // niet kunnen lezen, wat dan ook -- alles wat geen expliciete afsluiting is,
