diff --git a/.claude/project-context.md b/.claude/project-context.md index 8fa1e45..629c101 100644 --- a/.claude/project-context.md +++ b/.claude/project-context.md @@ -5,6 +5,26 @@ ## RECENT CHANGES (This Session) +**SignalR Real-Time Updates & UI Consistency (Dec 8, 2025):** +- ✅ **Removed Manual Refresh Button** - Removed refresh button from Jobs/Index.razor (SignalR auto-refresh eliminates need) +- ✅ **SignalR on Layers List** - Added real-time updates to Layers/Index with EntityChangeHubService subscription +- ✅ **SignalR on DataInbox List** - Added real-time updates to DataInbox/Index with EntityChangeHubService subscription +- ✅ **SignalR on Layer Details** - Added real-time updates to Layers/Details for both layer and record changes +- ✅ **Consistent UI Behavior** - All lists now have uniform SignalR-based real-time updates +- ✅ **Proper Cleanup** - Implemented IDisposable pattern to unsubscribe from SignalR events on all pages +- ✅ **Jobs Sorting Fix** - Changed sorting from Priority→JobType→CreatedAt DESC to CreatedAt DESC→Priority ASC (newest jobs first, then by priority) +- ✅ **Faster Job Processing** - Reduced JobWorkerService poll interval from 10 seconds to 5 seconds +- Files modified: + - [Jobs/Index.razor](DiunaBI.UI.Shared/Pages/Jobs/Index.razor) - removed refresh button + - [Layers/Index.razor](DiunaBI.UI.Shared/Pages/Layers/Index.razor), [Layers/Index.razor.cs](DiunaBI.UI.Shared/Pages/Layers/Index.razor.cs) - added SignalR + IDisposable + - [DataInbox/Index.razor](DiunaBI.UI.Shared/Pages/DataInbox/Index.razor), [DataInbox/Index.razor.cs](DiunaBI.UI.Shared/Pages/DataInbox/Index.razor.cs) - added SignalR + IDisposable + - [Layers/Details.razor](DiunaBI.UI.Shared/Pages/Layers/Details.razor), [Layers/Details.razor.cs](DiunaBI.UI.Shared/Pages/Layers/Details.razor.cs) - added SignalR + IDisposable + - [JobsController.cs](DiunaBI.API/Controllers/JobsController.cs) - fixed sorting logic + - [JobWorkerService.cs](DiunaBI.Infrastructure/Services/JobWorkerService.cs) - reduced poll interval to 5 seconds +- Status: All lists have consistent real-time behavior, no manual refresh needed, jobs sorted by date first + +--- + **Job Scheduler Race Condition Fix (Dec 8, 2025):** - ✅ **In-Memory Deduplication** - Added `HashSet` to track LayerIds scheduled within the same batch - ✅ **Prevents Duplicate Jobs** - Fixed race condition where same layer could be scheduled multiple times during single "Run All Jobs" operation