- Ya
- 27 Agosti 2026, 23:38 UTC
- Mwandishi
- Kamo
- Ahadi ya
- 105f245
Opening /leads showed the rows, dropped back to a loading state, and showed them again. It was fetching twice. STOMP raises onConnect on the INITIAL connect exactly as it does on a recovery, and the grid treated them identically — refetching ~1.5s after the rows landed to "reconcile whatever the socket missed". Nothing had been missed: the mount fetch and the subscription were opened together. The cost was a second whole page of leads and a second PHI audit row per lead, one transaction each, on every single visit to the page. Both rules now live in createRealtimeReloadScheduler, out of the 3k-line component and under test: the first connect is ignored, and a flapping socket still collapses into one reload (the 2026-08-20 incident, 93 seconds of continuous audit writes from one person opening one page). The second half of what a member actually saw was `rowData={loading ? [] : rows}`, which blanked the grid for EVERY refetch — so an ordinary reconcile, or a filter moving one notch, read as the whole page reloading. Rows already on screen are always safe to keep; the server does the filtering, so everything in rowData already carries the current filters. Loading now has two states instead of one, and neither is AG Grid's default "Loading leads..." text: - nothing on screen yet → LeadGridSkeleton, the house kload choreography the lead workspace has used since it shipped, cut to this grid's real column widths and row pitch (now shared constants feeding rowHeight/headerHeight, so the ghosts cannot drift out of alignment with the rows that replace them) - rows already rendered → they stay, and a 2px rail on the grid's top edge rides the same sweep clock The house per-row stagger is tuned for a four-to-six element detail pane; across fourteen grid rows it needed 1.1s to reach the bottom, so a fetch answering in half a second was replaced while the lower half of the grid was still blank — which reads as "this list is short", not "it is loading". Scaled on the skeleton's own scope so the stack assembles in about the time it does elsewhere. Needs kamo-translation-dictionary dd79baf0 **************** pushed first.