From 0485a360914affcc5392c7909ffd3b4dc3efb1fa Mon Sep 17 00:00:00 2001 From: Jeroen Schweitzer Date: Fri, 1 May 2026 11:41:42 +0200 Subject: [PATCH] stagger initial scheduler ticks to avoid rebuild storm Firing all tier ticks simultaneously on project open causes multiple IPC calls (pql, git, files) to run in parallel, their responses triggering rapid setState rebuilds that beachball the merged thread. Stagger 500ms apart so each panel refreshes sequentially. Co-Authored-By: Claude Opus 4.6 (1M context) --- .pql/pql-plan.json | 2 +- lib/kernel/src/scheduler.dart | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.pql/pql-plan.json b/.pql/pql-plan.json index 14e70dd6..eba88f14 100644 --- a/.pql/pql-plan.json +++ b/.pql/pql-plan.json @@ -1,5 +1,5 @@ { - "exported_at": "2026-05-01T09:40:12Z", + "exported_at": "2026-05-01T09:41:42Z", "decisions": [ { "id": "D-1", diff --git a/lib/kernel/src/scheduler.dart b/lib/kernel/src/scheduler.dart index 44cba683..66a3354d 100644 --- a/lib/kernel/src/scheduler.dart +++ b/lib/kernel/src/scheduler.dart @@ -50,10 +50,14 @@ class SchedulerService { void _startTicker() { _stopTicker(); - // Immediate first tick for all tiers. + // Stagger the initial ticks to avoid a rebuild storm on project open. + var delay = 0; for (final tier in SchedulerTier.values) { if (tier == SchedulerTier.midnight) continue; - _events.emit(SchedulerTick(tier: tier)); + Timer(Duration(milliseconds: delay), () { + _events.emit(SchedulerTick(tier: tier)); + }); + delay += 500; } // Then start the periodic isolate.