From a24e2d2ead2368f421e4728c487e7f2746fed373 Mon Sep 17 00:00:00 2001 From: ENvironmentSet Date: Thu, 2 Apr 2026 18:12:13 +0900 Subject: [PATCH 1/2] fix(core): prevent jitter when transitionDuration is 0 with android theme The `time()` utility adds sub-millisecond offsets to ensure unique event timestamps. When `dispatchEvent` calls `aggregate()` with `Date.now()`, there is a race condition where `Date.now() < eventDate` (by a fraction of a millisecond), causing `now - eventDate < 0`. With transitionDuration set to 0, this makes the `>= transitionDuration` check fail, briefly putting the activity in `enter-active` instead of `enter-done`. Combined with `useLazy`'s 2-frame delay and the android theme's default `opacity: 0` style, this produces a visible flicker ("jitter") during page transitions. Use `Math.max(newEvent.eventDate, Date.now())` to guarantee `now >= eventDate`, ensuring the transition state resolves correctly. Co-Authored-By: Claude Opus 4.6 (1M context) --- core/src/makeCoreStore.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/src/makeCoreStore.ts b/core/src/makeCoreStore.ts index 0043055c5..297ac948c 100644 --- a/core/src/makeCoreStore.ts +++ b/core/src/makeCoreStore.ts @@ -92,9 +92,10 @@ export function makeCoreStore(options: MakeCoreStoreOptions): CoreStore { }, dispatchEvent(name, params) { const newEvent = makeEvent(name, params); + const nextStackValue = aggregate( [...events.value, newEvent], - new Date().getTime(), + Math.max(newEvent.eventDate, new Date().getTime()), ); events.value.push(newEvent); From da242aa6cb40687549384eb08d5960317e09349a Mon Sep 17 00:00:00 2001 From: ENvironmentSet Date: Fri, 3 Apr 2026 11:22:57 +0900 Subject: [PATCH 2/2] chore: add changeset for transitionDuration zero jitter fix Co-Authored-By: Claude Opus 4.6 (1M context) --- .changeset/fix-transition-duration-zero-jitter.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/fix-transition-duration-zero-jitter.md diff --git a/.changeset/fix-transition-duration-zero-jitter.md b/.changeset/fix-transition-duration-zero-jitter.md new file mode 100644 index 000000000..056d01d38 --- /dev/null +++ b/.changeset/fix-transition-duration-zero-jitter.md @@ -0,0 +1,5 @@ +--- +"@stackflow/core": patch +--- + +Fix intermittent incorrect transition state when `transitionDuration` is set to 0 by ensuring `now >= eventDate` in the initial aggregate call within `dispatchEvent`.