# Cerebro

## [v0.10.31](https://github.com/Shezzannn/Cerebro/tree/v0.10.31) (2026-03-20)
[Full Changelog](https://github.com/Shezzannn/Cerebro/compare/v0.10.30...v0.10.31) 

- chore: Bump version to 0.10.31  
    Batch EPGP broadcast reduces boss kill sync from 120-180s to ≤5s. Adds convergence tracking, Sync Leader exclusive boss kill processing, and PR sort tiebreaker in RCLC voting frame.  
- Merge pull request #37 from Shezzannn/feature/sync-efficiency  
    feat(sync): Batch EPGP broadcast, convergence tracking, Sync Leader boss kill  
- fix(sync): address PR37 validation findings — quarantine guard, dedup, ACK hardening  
    C1: Add quarantine guard to BATCH\_EPGP\_UPDATE handler (blocks ingestion  
        during factory reset window)  
    C2: Add IsOfficerSafe() guard to BATCH\_ACK handler (only Sync Leader  
        needs convergence tracking)  
    C3: Add dual-channel batch dedup via batchKey (senderName:timestamp)  
        to prevent double-processing  
    A1: InvalidateHashCache() before ComputeRosterHash in ACK path so  
        the ACK carries post-award hash, not stale cached value  
    B:  Change BroadcastBatchEPGPUpdate from dual-channel (RAID+GUILD) to  
        single-channel (RAID when in raid, GUILD otherwise); benched  
        players receive awards via PushAfterAward snapshot sync  
- fix(ui): CustomEP popup crash on WoW 12.x (self.text → self.Text)\n\nStaticPopup frames renamed 'text' to 'Text' (capital T) in WoW 12.x.\nBoth OnShow callbacks now use defensive fallback: (self.Text or self.text)\nto support both old and new client versions.  
- fix(sync): add IsOfficer guard to BATCH\_EPGP\_UPDATE, Sync Leader-only heartbeat, RCLC PR sort tiebreaker\n\n- BATCH\_EPGP\_UPDATE handler: add IsOfficer(sender) guard at handler level\n  (prevents wasted iteration and false BATCH\_ACK for non-officer senders)\n- SyncScheduler:OnHeartbeat(): gate periodic V2 heartbeats to Sync Leader\n  only during raids (~85% bandwidth reduction). Event-driven heartbeats\n  via NotifyStateChange() are unaffected.\n- RCLC\_Bridge: 3-tier tiebreaker in PR sort (PR → response rank → name)\n  to eliminate visual shuffle from Lua's unstable table.sort  
- feat(sync): batch EPGP broadcast, convergence tracking, Sync Leader boss kill  
    9 changes to reduce EP/GP sync latency from 120-180s to ≤5s:  
    - Change 1: BroadcastBatchEPGPUpdate (1 RPC instead of N)  
    - Change 2: BATCH\_EPGP\_UPDATE RPC handler with BATCH\_ACK  
    - Change 3: PushAfterAward immediate snapshot push (1s debounce)  
    - Change 4: Frame-level hash caching for ComputeRosterHash/ConfigHash  
    - Change 5: Batch-aware AwardEPToSelected (silent collect + batch)  
    - Change 6: Sync Leader exclusive boss kill (IsSyncLeader gate)  
    - Change 7: Dynamic combat exit polling via UnitAffectingCombat  
    - Change 8: Silent award option for AwardEP/ChargeGP  
    - Change 9: Convergence tracker with straggler retry + officer reports  
    Files changed: EPGP.lua, Session.lua, CommunicationV2.lua, SyncScheduler.lua, .luacheckrc  
