== 01 non-recurring event unchanged == PASS a one-off event still expands to exactly itself PASS a one-off event keeps its start PASS a one-off event carries its source UID PASS a one-off event has no recurrence identity == 02 ordinary recurring series unchanged == PASS an un-overridden COUNT=4 series still yields 4 occurrences PASS an un-overridden series keeps its wall-clock times PASS generated occurrences carry canonical identities PASS generated occurrences inherit the master UID == 03-05 detached override replaces the generated occurrence == PASS test03: Perth COUNT=4 plus a detached override yields exactly 4 events PASS test04: the stale 18 Aug 15:30 twin is gone PASS test04: the logical identity set is unchanged by the override PASS test05: the override owns the ORIGINAL occurrence identity PASS test05: identity is NOT re-derived from the moved DTSTART PASS test05: the override displays at its new 16:00 start PASS test05: the override displays its new 17:00 end PASS test05: the override carries its own SUMMARY PASS test05: the override keeps the series UID == 06 detached STATUS:CANCELLED suppresses the occurrence == PASS test06: a cancelled occurrence leaves exactly 3 visible events PASS test06: 18 Aug disappears entirely PASS test06: the cancelled component is not emitted as a second event PASS test06: STATUS is retained internally on the parsed component PASS test06: a cancellation beats a modification for the same identity == 07-08 RECURRENCE-ID timezone interpretation == PASS test07: a UTC RECURRENCE-ID matches the same occurrence PASS test07: the UTC-identified override replaces the twin PASS test08: 15:30 Australia/Perth becomes 20260818T073000Z, not a literal 15:30Z PASS test08: a quoted TZID parameter resolves identically PASS test08: a UTC value resolves to the same identity PASS test08: an unzoned value inherits the component DTSTART zone PASS test08: with no TZID and no inherited zone the display timezone governs PASS test08: a date-only value on a timed component names no identity PASS test08: a timed value on an all-day component names no identity PASS test08: a malformed value names no identity == 09-13 genuine Australia/Sydney DST contract == PASS test09: an AEST -> AEDT weekly series yields 3 occurrences PASS test09: it stays at 10:00 local across the transition PASS test09: its canonical identities follow the real UTC offsets PASS test10: an AEDT -> AEST series stays at 10:00 local PASS test10: its identities follow the real UTC offsets PASS test11: WEEKLY BYDAY holds 10:00 local across the transition PASS test11: WEEKLY BYDAY identities match the plain weekly ones PASS test12: a DST-side override still yields exactly 3 events PASS test12: the identity set is unchanged across the transition PASS test12: the override owns 20261005T230000Z PASS test12: no drifted 20261006T000000Z occurrence exists PASS test12: the override displays at 14:00 local PASS test13: a DST-side TZID EXDATE suppresses the far-side 10:00 occurrence PASS test13: an EXDATE naming a different zone is read on that zone clock == 14-15 all-day identities are literal dates == PASS test14: an all-day override still yields exactly 4 events PASS test14: all-day identities stay literal dates PASS test14: the override keeps the 20260818 identity PASS test14: the override displays on 19 Aug PASS test14: no identity was routed through a UTC conversion PASS test14: the identity of an all-day date is the date itself PASS test15: an all-day cancellation leaves exactly 3 events PASS test15: the cancelled all-day date disappears == 16 floating recurrence and the existing fallback timezone rule == PASS test16: a floating feed falls back to CALEE_CALENDAR_TIMEZONE PASS test16: a floating override reconciles on the same fallback clock PASS test16: floating identities use the fallback zone offset PASS test16: the floating override displays at 16:00 == 17-20 EXDATE / RDATE compatibility == PASS test17: a UTC EXDATE removes the matching occurrence PASS test18: a TZID EXDATE removes the matching occurrence PASS test18: two EXDATE lines each keep their own timezone context PASS test18: a comma-separated EXDATE list still removes every value PASS test19: a date-only EXDATE removes the matching all-day occurrence PASS test20: RDATE still adds its occurrence PASS test20: an RDATE occurrence carries a canonical identity PASS EXDATE plus override yields the same four events as the override alone PASS an override is not lost to an EXDATE for its own original occurrence PASS an override replaces an RDATE occurrence without duplicating it PASS the overridden RDATE occurrence keeps its original identity == 21-22 occurrences moved into and out of the visible range == PASS test21: an occurrence moved into the month appears on its new date PASS test21: it appears exactly once PASS test21: the override keeps its ORIGINAL July identity PASS test22: the stale 18 Aug twin does not appear on the August grid PASS test22: only the three remaining occurrences show in August PASS test22: the moved occurrence shows on its new September date == 23 duplicate logical identities are never emitted == PASS test23: no repeated identity in the override fixture PASS test23: no repeated identity in the cancellation fixture PASS test23: no repeated identity in the all-day override fixture PASS test23: no repeated identity in the moved out fixture PASS test23: two overrides for one identity yield one event PASS test23: they resolve to a single canonical identity PASS an override with an uninterpretable RECURRENCE-ID stays visible PASS it suppresses nothing, so the full series survives beside it PASS an uninterpretable cancellation is neither applied nor shown == 24 multi-day non-recurring event unchanged == PASS test24: a 3-day all-day event still spans 10-12 Aug PASS test24: a timed overnight event still spans both days == 25 the #67 Perth display-timezone regression stays green == PASS test25: the feed still infers Australia/Perth PASS test25: "Have a go day" still lands on 2026-08-09 PASS test25: it still shows 14:00, not 06:00 PASS test25: its instant is still 06:00Z PASS test25: display timezone inference is untouched by source identity PASS test25: a RECURRENCE-ID TZID still infers nothing as a display timezone == 26 resource limits remain fail-closed with detached components == PASS test26: an exhausted work budget still throws too_large PASS test26: no partial array is returned on work exhaustion PASS test26: an exhausted iteration guard still throws too_large PASS test26: no partial array is returned on iteration exhaustion PASS test26: an exhausted occurrence cap still throws too_large PASS test26: no partial array is returned on occurrence-cap exhaustion PASS test26: the VEVENT count cap still throws too_large PASS test26: reconciliation still counts as exactly one expansion PASS test26: reconciliation leaves unrelated UIDs untouched PASS test26: the override still resolves inside a large calendar == 27 event objects expose safe UID + canonical occurrence identity == PASS test27: every reconciled event carries the source UID PASS test27: every reconciled event carries a canonical occurrence identity PASS test27: the pair is unique per logical occurrence PASS test27: a UID-less feed still expands normally PASS test27: a UID-less event reports a null UID, never a fabricated one PASS test27: UID-less components never group with each other PASS test27: a UID-less detached component is never reconciled against another == 27b source UID identity is exact (no display sanitisation) == PASS testA: a double-space UID and a single-space UID stay distinct PASS testA: their grouping keys stay distinct PASS testC: the double-space UID is preserved exactly PASS testC: the single-space UID is preserved exactly PASS testC: whitespace is not collapsed PASS testC: the display sanitiser really would have collapsed it PASS testC: UID case is never folded PASS testC: leading/trailing whitespace is never trimmed away PASS testC: all four shapes remain four distinct grouping keys PASS testD: a whitespace-only UID is reported as null PASS testD: an empty UID is reported as null PASS testD: blank-UID components never group with each other PASS testD: a UID shaped like the fallback key cannot collide with it PASS testB: both series survive in full — 8 events, nothing lost PASS testB: only the overridden series moves to 16:00 PASS testB: the overridden series keeps exactly 4 occurrences PASS testB: the untouched series keeps exactly 4 occurrences PASS testB: the override replaced its OWN 18 Aug occurrence PASS testB: the other series 18 Aug occurrence is NOT suppressed PASS testB: both series span the same four canonical identities PASS testB: no (uid, identity) pair is duplicated across the two groups == 28 no raw token or source URL is introduced into rendered output == PASS test28: the embed event-meta contract is still title/date/time only PASS test28: event meta leaks no UID PASS test28: event meta leaks no occurrence identity PASS test28: the embed data-attribute builder is still present PASS test28: it still emits exactly the three display attributes PASS test28: calendar-embed.php renders no occurrence identity PASS test28: calendar-embed.php renders no source UID field PASS test28: calendar-preview.php renders no occurrence identity PASS test28: calendar-preview.php renders no source UID field PASS test28: public-calendar.php renders no occurrence identity PASS test28: public-calendar.php renders no source UID field PASS test28: the only event-scoped data attributes are the three display ones plus the static modal slot PASS test28: no event-scoped attribute carries a token, URL, UID or DAV reference PASS test28: the only URL-bearing attributes are the subscribe link and the Event Link PASS test28: the Event Link attribute is not built inside the display-attribute builder == 29 #83 D1a: detached evidence under a DEGRADED master == FAIL a degraded master emits its DTSTART only (no 10:00 / 11:00 / 12:00) PASS the degraded DTSTART carries no recurrenceId; the neighbour is a one-off PASS the degraded DTSTART reports degraded_unsupported and keeps its RRULE FAIL an override naming the degraded DTSTART replaces it (no stale twin at 09:00) PASS ...the override keeps its explicit RECURRENCE-ID identity FAIL a cancellation naming the degraded DTSTART suppresses it FAIL an override naming an alleged derived 10:00 leaves the DTSTART, the neighbour and itself (orphan) FAIL a cancellation naming an alleged derived 10:00 suppresses nothing (adversarial neighbour survives) FAIL EXDATE naming an alleged derived 10:00 excludes nothing and never the neighbour FAIL EXDATE naming the degraded DTSTART excludes it FAIL an explicit RDATE beside an HOURLY rule is emitted with the DTSTART and nothing inferred FAIL a cancellation naming the explicit RDATE suppresses that RDATE FAIL an EXDATE naming the explicit RDATE excludes that RDATE FAIL a cancellation naming a clamped 28 Feb suppresses neither the 31 Jan DTSTART nor the unrelated Feb 28 event FAIL a supported series in the same feed still reconciles its own cancellation == cross-repo parity with CaleeAdmin/calee-hub-core#420 == PASS parity: 20260818T153000 Australia/Perth -> 20260818T073000Z PASS parity: 29 Sep 2026 10:00 Sydney -> 20260929T000000Z PASS parity: 06 Oct 2026 10:00 Sydney -> 20261005T230000Z PASS parity: 13 Oct 2026 10:00 Sydney -> 20261012T230000Z PASS parity: all-day 18 Aug 2026 -> 20260818 PASS B2b: a Windows series expands on the MAPPED Perth clock PASS B2b: a Windows override REPLACES the occurrence it names (no orphan, no twin) PASS B2b: ...and the logical identities are unchanged by the move PASS B2b: ...and the replaced occurrence carries the OVERRIDE content PASS B2b adversarial: still exactly three occurrences PASS B2b adversarial: the CORRECT occurrence was replaced, not its neighbour PASS B2b: a Windows cancellation suppresses EXACTLY the named occurrence PASS B2b control: an UNKNOWN Windows-shaped name mints no canonical identity PASS B2b: a Paraguay Windows series still DISPLAYS PASS B2b: ... and is INTERPRETED on the mapped clock PASS #573: ... and under contract v3 (the build's mint version) EVERY occurrence mints its mapped identity PASS #573: ... never the stale-DST 14:00Z twin that caused the v2 exclusion PASS #573: ... and the source status under v3 is ok PASS B2b/v2: the same series executed under contract v2 mints NO canonical identity at all PASS B2b/v2: ... and the v2 source status says exactly why PASS B2b/v2: ... while a v3-eligible Windows zone executed under v2 still mints (the refusal is Paraguay-specific) PASS #573 move: three events, not four -- no stale twin, no orphan PASS #573 move: the 11 July occurrence is REPLACED and its neighbours survive PASS #573 move: the replacement carries the ORIGINAL identity, resolved on the Paraguay clock PASS #573 move: the moved DTSTART zone (08:00Z), wall-as-UTC (10:00Z) and stale-DST (14:00Z) readings identify nothing PASS #573 move/v2: the same override executed under contract v2 identifies NOTHING (fail closed, never the neighbour) PASS #573 cancel: exactly 11 July is suppressed; both neighbours survive PASS #573 neighbour: three events PASS #573 neighbour: the 11 July identity is the one replaced, and 12 July keeps its OWN title PASS #573 neighbour cancel: only 11 July is suppressed; the 12 July neighbour the DTSTART names survives PASS #573 inherited: a bare RECURRENCE-ID reads the master's Paraguay clock and replaces 11 July PASS B2b control: an identity-ELIGIBLE Windows series still mints 12 detached-recurrence check(s) FAILED.