You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Companion to objectstack#3969: /actions failures now speak HTTP and success is
a single wrap — body.data IS the handler's return value.
interpretActionResponse / readActionPayload treat the single wrap as the
primary shape; the pre-#3962 double envelope is detected narrowly
(isLegacyActionEnvelope: boolean success, no keys beyond the envelope's own)
and unwrapped for older runtimes, so a handler value that merely contains a
success key passes through untouched. The 400-rejection shape resolves to a
string toast via actionErrorDetail (no React #31 regression). ActionResult.data's
depth quirk self-heals on #3962 servers.
Also fixes the PeoplePicker keyboard flake at the root: the cursor reset on new
results lived in a useEffect, which flushes asynchronously — a reset queued by
the records arriving could land AFTER a subsequent ArrowDown and wipe the
just-set cursor (the earlier signature-keyed fix closed the too-often resets;
this was the too-late one). The reset now runs in the render phase ("adjusting
state during render"), same render that shows the new rows, so it can never
race a keypress. Semantics pinned by a new test; LookupField's length-keyed
effect reset is deliberately unchanged (different semantics).