mirror of
https://github.com/openclaw/openclaw.git
synced 2026-08-15 23:24:03 -06:00
c8418459f8
* fix(ui): reconcile every null tombstone and align session sort with the gateway The sessions.changed merge deleted null-tombstoned fields from a hand-kept eleven-field list while the gateway's tombstone policy (session-event-payload.ts) had grown past it: toolOverrides, observerDigest, controlOwnerSessionKey, restartRecoveryStatus, and goal leaked literal null into rows typed optional-not-null, and every new tombstoned field would silently repeat the drift. One loop over the event's null-valued keys now owns the rule; updatedAt/activeLeafEntryId (the schema's only nullable row fields) keep their explicit handling. Net −24 lines. Riders in the same owner neighborhood: - compareSessionRowsByUpdatedAt gains the gateway's ascending-key tie-break (session-list-order.ts: "Stable key ties keep offset paging deterministic") so tied rows — including all updatedAt:null rows — stop visibly swapping when the canonical refresh replaces an event-driven reconcile. - Deleted the unreachable kind === "cron" wire guards (gateway folds cron to direct before projection, #115299; both sites needed an `as string` cast because the protocol type has no such member). - The stale-active-snapshot path returns the original result identity when no defaults were passed, so the caller's result === state.result publish gate skips a spurious sidebar re-render on every stale event. * test(ui): pin the ascending-key tie for equal-updatedAt sidebar rows * test(ui): tolerate CI renderer jitter in the typing-shift picker guard The 2px y-tolerance flaked at 2.41px on CI renderers; the #122809 regression this guards against shifts by a full indicator row (~20px).