Changeset e667d26 in Klonkt for src/services/guardianship/help.js


Ignore:
Timestamp:
08/09/2026 07:28:31 AM (4 weeks ago)
Author:
roboburr <roboburr@…>
Branches:
main
Children:
c832064
Parents:
82c3356
git-author:
Robin <roboburr@…> (08/09/2026 07:28:29 AM)
git-committer:
roboburr <roboburr@…> (08/09/2026 07:28:31 AM)
Message:

Een levende klok in het antwoord maakte de lange poll een lus (9-8)

Barts melding: de browser komt in een feedback-lus van ongeveer een seconde, en
de scrollpositie wordt vermalen. Dat is mijn fout van een uur eerder, en de
oorzaak is scherper dan hij lijkt.

Het paneel kreeg gisteren een inhouds-ETag, en de paneelstate bevat -- bevatte --
ageMs: de leeftijd van de oudste oppik, uitgerekend als now - tijdstip.
Daardoor verschilde elk antwoord een paar milliseconden van het vorige, kon de
ETag nooit gelijk zijn, kwam de 304 nooit, keerde de lange poll meteen terug, en
tekende het paneel zich stuk terwijl Bart scrollde.

EEN LEVENDE KLOK MAAKT EEN ANTWOORD ONVERGELIJKBAAR MET ZICHZELF. Dat is de les,
en hij raakt elk veld dat we ooit nog toevoegen. Er staat nu een toets op die
hetzelfde antwoord twee keer opvraagt met een halve seconde ertussen en eist dat
het identiek is.

De reparatie zit bij de BRON, niet in de ETag: het antwoord draagt nu het
TIJDSTIP (oldestPickupAt) en de client rekent de leeftijd uit. Dat is ook wat het
altijd al was -- een weergavedetail. De ETag uitzonderingen laten maken zou een
tweede beschrijving zijn van "wat telt als veranderd", precies wat ik gisteren
als argument tegen een cursor gebruikte.

TWEE GRENDELS ERBIJ, aan de kant die de gebruiker merkt:

  • Zelfde inhoud wordt niet hertekend. De 304 hoort dit af te vangen, maar een enkel onstabiel veld zette het scherm aan het knipperen; dit vangt de volgende.
  • Een lange poll die binnen twee seconden terugkeert wacht drie seconden voordat hij opnieuw vraagt. Een poll die niet wacht mag nooit een lus worden -- anders vervangt een defect een tik per 45 seconden door duizend per minuut.

En de scrollpositie overleeft een verversing: meten en terugzetten rond
renderAll. Dat is het verschil tussen een scherm dat bijwerkt en een scherm dat
onder je handen wegschuift.

Suite 782/782; met de klok terug valt hij om.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/services/guardianship/help.js

    r82c3356 re667d26  
    5252 * zijn zonder database of scherm.
    5353 *
    54  * `ageMs` is de leeftijd van de OUDSTE oppik. Daar tekent het scherm mee dat een
    55  * signaal oud wordt -- niets verdwijnt, maar je ziet wel dat er misschien niets
    56  * meer gebeurt.
     54 * `oldestPickupAt` is het TIJDSTIP van de oudste oppik, niet de leeftijd. Daar
     55 * tekent het scherm mee dat een signaal oud wordt -- niets verdwijnt, maar je
     56 * ziet wel dat er misschien niets meer gebeurt.
     57 *
     58 * EEN TIJDSTIP, GEEN LEEFTIJD, en dat is geen smaak. Hier stond `ageMs`, een
     59 * verschil met `now`, en dus veranderde dit antwoord elke milliseconde. Zodra
     60 * het paneel een ETag kreeg (9-8) kon die daardoor nooit meer gelijk zijn: de
     61 * 304 kwam nooit, de lange poll keerde meteen terug, en de browser kwam in een
     62 * lus van ongeveer een seconde waarin de scrollpositie werd vermalen. Een
     63 * levende klok in een antwoord maakt dat antwoord onvergelijkbaar met zichzelf.
     64 *
     65 * De leeftijd is een weergavedetail en wordt in de client uitgerekend.
    5766 */
    5867export function helpStatus(rows, now = Date.now()) {
     
    6776    handled: done ? { uri: done.guardian_uri, handle: done.guardian_handle || null, at: done.created_at } : null,
    6877    // Alleen betekenisvol zolang er niets is afgesloten.
    69     ageMs: (!done && oudste) ? Math.max(0, now - oudste) : null,
     78    oldestPickupAt: (!done && oudste) ? new Date(oudste).toISOString() : null,
    7079    // Waar het scherm op afgaat. Bij twijfel OPEN: een lege lijst, een rij die we
    7180    // niet kunnen lezen, wat dan ook -- alles wat geen expliciete afsluiting is,
Note: See TracChangeset for help on using the changeset viewer.