fix(web-shared): stop event payload stub flash in events view - #3951
Merged
Merged
Conversation
List endpoints resolve events with resolveData: 'none', which strips the ref/payload fields (input, result, error) and leaves a partial eventData stub. EventRow treated that stub as displayable payload, so expanding an event first flashed an incomplete JSON document (missing the payload fields), then swapped to a skeleton, then to the full payload (with the Decrypt button on encrypted fields) once the fetch resolved. Only trust inline eventData when it can't be a stub: when there is no loader, or when the event type carries no ref fields (its eventData is never stripped). Ref-less event types now render their complete inline data immediately and skip the redundant fetch.
🦋 Changeset detectedLatest commit: 7d6c2b5 The changes in this PR will be included in the next version bump. This PR includes changesets to release 16 packages
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
Contributor
Contributor
Sim WorldSimulated world deterministic testing for races. Traces 🟠 world-sim scenario book — 1 fail of 41 total
Full trace: |
mitul-s
marked this pull request as draft
September 3, 2026 02:36
VaguelySerious
marked this pull request as ready for review
September 10, 2026 22:06
github-actions Bot
added a commit
that referenced
this pull request
Sep 10, 2026
Signed-off-by: Mitul Shah <mitulxshah@gmail.com>
Contributor
|
Backport PR opened against |
pranaygp
added a commit
that referenced
this pull request
Sep 10, 2026
…ry-2 * origin/main: [core] Log pending consumers in divergence diagnostics (#4021) fix(web-shared): stop event payload stub flash in events view (#3951) fix: order the 429 check before the 4xx check in the workflow skill (#3915) test(swc-plugin): verify class-name preservation at runtime (#4015) (chore) Update Next.js to 16.3.4 in the workbench apps and @workflow/next (#4026)
This was referenced Sep 11, 2026
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
In the events view, opening an event's payload flickered: a partial JSON document flashed first, then a skeleton, then the full payload (with the Decrypt button on encrypted fields).
Root cause: list endpoints resolve events with
resolveData: 'none', which strips the ref/payload fields (input,result,error, …) viastripEventDataRefsand leaves a partialeventDatastub (stepName, timings, …).EventRowtreated that stub as displayable payload, rendering it during the load window even though a full-payload fetch was already in flight.Fix
Only trust inline
eventDatawhen it can't be a stub:onLoadEventDataloader (inline data is all there is), orstripEventDataRefsnever strips those, so inline data is already complete — e.g.wait_created,attr_set). Those now render immediately and skip the redundant fetch.Verification
Reproduced end-to-end against a local world with encryption enabled (recorded DOM state transitions via MutationObserver):
json(stub, missing result) → skeleton → json+decrypt-btns; same flash when already decrypted.skeleton → json+decrypt-btns(encrypted),skeleton → json(decrypted), ref-less events render instantly, decrypt transition swaps encrypted → decrypted content with no flash.@workflow/web-sharedtypecheck + 225 tests pass.