| #29 | Fix fuzzy search: tokenize field values before Levenshtein comparison | Critical | Resolved | 21 Feb 2026 | 21 Feb 2026 |
| #30 | Fix RecurrenceEngineV2 byDay format mismatch with RRuleParser | Critical | Resolved | 21 Feb 2026 | 21 Feb 2026 |
| #32 | Fix fuzzy search — Levenshtein compares against entire field value | Critical | Resolved | 21 Feb 2026 | 20 Mar 2026 |
| #33 | Fix RecurrenceEngineV2 byDay format mismatch with RRuleParser | Critical | Resolved | 21 Feb 2026 | 20 Mar 2026 |
| #37 | Add input size limits to ICS parser | Critical | Resolved | 21 Feb 2026 | 26 Feb 2026 |
| #38 | Add SSRF protection to ICS importFromURL | Critical | Resolved | 21 Feb 2026 | 26 Feb 2026 |
| #51 | CRITICAL: Remove Locker Service evasion in AdaptiveMemoryManager | Critical | Resolved | 26 Feb 2026 | 26 Feb 2026 |
| #52 | CRITICAL: Add SSRF protection to ICSHandler.importFromURL | Critical | Resolved | 26 Feb 2026 | 26 Feb 2026 |
| #53 | CRITICAL: Add size/line/event limits to ICS parser | Critical | Resolved | 26 Feb 2026 | 26 Feb 2026 |
| #54 | CRITICAL: Add field size limits to Event validation | Critical | Resolved | 26 Feb 2026 | 26 Feb 2026 |
| #56 | CRITICAL: Hard cap maxOccurrences in RecurrenceEngine | Critical | Resolved | 26 Feb 2026 | 26 Feb 2026 |
| #76 | EventStore.queryEvents() misses events at month boundaries in non-UTC timezones | Critical | Resolved | 5 Mar 2026 | 5 Mar 2026 |
| #78 | ICSParser.parse() accepts unbounded input size (DoS vulnerability) | Critical | Resolved | 5 Mar 2026 | 5 Mar 2026 |
| #107 | TimezoneManager.parseTimezone() references non-existent database.abbreviations | Critical | Resolved | 20 Mar 2026 | 20 Mar 2026 |
| #108 | ICSParser VALARM export uses reminder.minutes instead of minutesBefore | Critical | Resolved | 20 Mar 2026 | 20 Mar 2026 |
| #109 | DateUtils.isDST() logic is inverted — returns true when NOT in DST | Critical | Resolved | 20 Mar 2026 | 20 Mar 2026 |
| #110 | DateUtils.addHoursWithDST() double-adjusts for DST transitions | Critical | Resolved | 20 Mar 2026 | 20 Mar 2026 |
| #34 | Fix SearchWorkerManager.processPendingSearches — no-op implementation | High | Resolved | 21 Feb 2026 | 20 Mar 2026 |
| #35 | Implement ICS recurring event expansion or remove the stub | High | Resolved | 21 Feb 2026 | 20 Mar 2026 |
| #36 | Fix EnhancedCalendar.getEventsInRange breaking parent API contract | High | Resolved | 21 Feb 2026 | 20 Mar 2026 |
| #55 | HIGH: Deep sanitize setState for prototype pollution | High | Resolved | 26 Feb 2026 | 26 Feb 2026 |
| #65 | DateUtils.differenceInDays uses DST-unsafe millisecond arithmetic | High | Resolved | 5 Mar 2026 | 5 Mar 2026 |
| #66 | ICSParser.parse() silently drops EXDATE (exclusion dates) | High | Resolved | 5 Mar 2026 | 5 Mar 2026 |
| #68 | EventStore.clear() doesn't clear byCategory and byStatus indices | High | Resolved | 5 Mar 2026 | 5 Mar 2026 |
| #69 | AdaptiveMemoryManager: unhandled promise rejections from async setInterval callback | High | Resolved | 5 Mar 2026 | 20 Mar 2026 |
| #70 | ConflictDetector._isWithinBusinessHours has broken hour comparison logic | High | Resolved | 5 Mar 2026 | 11 Jun 2026 |
| #71 | RecurrenceEngineV2: BYSETPOS is a TODO stub | High | Resolved | 5 Mar 2026 | 20 Mar 2026 |
| #75 | Event.addAttendee() bypasses email validation | High | Resolved | 5 Mar 2026 | 20 Mar 2026 |
| #77 | Event.overlaps() has fragile boundary handling with all-day events | High | Resolved | 5 Mar 2026 | 20 Mar 2026 |
| #111 | ReDoS vulnerability in email validation regex (Event.js) | High | Resolved | 20 Mar 2026 | 20 Mar 2026 |
| #183 | HIGH: Unbounded CPU loop when expanding a MONTHLY rule with a signed BYDAY value | High | Resolved | 30 Aug 2026 | 30 Aug 2026 |
| #184 | HIGH: ICS feed URL validation accepted IPv6 literals that embed private IPv4 addresses (SSRF) | High | Resolved | 30 Aug 2026 | 30 Aug 2026 |
| #57 | MEDIUM: Validate BYWEEKNO in RRuleParser | Medium | Resolved | 26 Feb 2026 | 26 Feb 2026 |