Recalculated EndedAt for 2 pass records for CarrierInstanceId 1, EdgerRollPartId 1001 PassCampaignsAffected:2 M2.TrackPassCampaignsJob @StartDate = '2024-01-15 02:00:00', @EndDate = '2026-10-07 19:12:43', @EdgerRollPartId = 1001, @PassNumber = NULL Created CarrierInstancePass (Id 1) for Carrier 'CARRIER-1' (InstanceId 1) with EdgerRoll 'EROLL-TOP' Pass 1 started at '2024-01-15 10:00:00' Recalculated EndedAt for 1 pass records for CarrierInstanceId 1, EdgerRollPartId 1001 PassCampaignsAffected:1 M2.TrackPassCampaignsJob @StartDate = '2024-01-15 10:00:00', @EndDate = '2026-10-07 19:12:43', @EdgerRollPartId = 1001, @PassNumber = NULL Created CarrierInstancePass (Id 2) for Carrier 'CARRIER-1' (InstanceId 1) with EdgerRoll 'EROLL-BOT' Pass 1 started at '2024-01-15 10:00:00' Recalculated EndedAt for 1 pass records for CarrierInstanceId 1, EdgerRollPartId 1002 PassCampaignsAffected:2 M2.TrackPassCampaignsJob @StartDate = '2024-01-15 10:00:00', @EndDate = '2026-10-07 19:12:43', @EdgerRollPartId = 1002, @PassNumber = NULL Created CarrierInstancePass (Id 3) for Carrier 'CARRIER-1' (InstanceId 1) with EdgerRoll 'EROLL-TOP' Pass 2 started at '2024-01-15 12:00:00' Recalculated EndedAt for 2 pass records for CarrierInstanceId 1, EdgerRollPartId 1001 PassCampaignsAffected:3 M2.TrackPassCampaignsJob @StartDate = '2024-01-15 10:00:00', @EndDate = '2026-10-07 19:12:43', @EdgerRollPartId = 1001, @PassNumber = NULL Created CarrierInstancePass (Id 4) for Carrier 'CARRIER-1' (InstanceId 1) with EdgerRoll 'EROLL-BOT' Pass 2 started at '2024-01-15 12:00:00' Recalculated EndedAt for 2 pass records for CarrierInstanceId 1, EdgerRollPartId 1002 PassCampaignsAffected:4 M2.TrackPassCampaignsJob @StartDate = '2024-01-15 10:00:00', @EndDate = '2026-10-07 19:12:43', @EdgerRollPartId = 1002, @PassNumber = NULL Recalculated EndedAt for 1 pass records for CarrierInstanceId 1, EdgerRollPartId 1001 PassCampaignsAffected:1 M2.TrackPassCampaignsJob @StartDate = '2024-01-15 10:00:00', @EndDate = '2026-10-07 19:12:43', @EdgerRollPartId = 1001, @PassNumber = NULL Created CarrierInstancePass (Id 1) for Carrier 'CARRIER-1' (InstanceId 1) with EdgerRoll 'EROLL-TOP' Pass 1 started at '2024-01-15 10:00:00' Recalculated EndedAt for 1 pass records for CarrierInstanceId 1, EdgerRollPartId 1001 PassCampaignsAffected:1 M2.TrackPassCampaignsJob @StartDate = '2024-01-15 10:00:00', @EndDate = '2026-10-07 19:12:44', @EdgerRollPartId = 1001, @PassNumber = NULL Created CarrierInstancePass (Id 2) for Carrier 'CARRIER-1' (InstanceId 1) with EdgerRoll 'EROLL-BOT' Pass 1 started at '2024-01-15 10:00:00' Recalculated EndedAt for 1 pass records for CarrierInstanceId 1, EdgerRollPartId 1002 PassCampaignsAffected:2 M2.TrackPassCampaignsJob @StartDate = '2024-01-15 10:00:00', @EndDate = '2026-10-07 19:12:44', @EdgerRollPartId = 1002, @PassNumber = NULL Recalculated EndedAt for 1 pass records for CarrierInstanceId 1, EdgerRollPartId 1001 PassCampaignsAffected:1 M2.TrackPassCampaignsJob @StartDate = '2024-01-15 06:00:00', @EndDate = '2026-10-07 19:12:44', @EdgerRollPartId = 1001, @PassNumber = NULL Deleted CarrierInstancePass (Id 1) for Carrier 'CARRIER-1' (InstanceId 1) EdgerRoll 'EROLL-TOP' Pass 1 EmailId SenderName RecipientsTO RecipientsCC RecipientsBCC Subject Body SendTime CreatedAt CreatedBy SentAt Retries EmailTopicId ----------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------- ----------------------- ---------------------------------------------------------------------------------------------------- ----------------------- ----------- ------------ 331 MES Roll Shop Alerts lrueda@dexteel.com, mreser@dexteel.com, eramadori@dexteel.com NULL swv-mill@dexteel.com [REVIEW] Pass Deleted - CARRIER-1 tedAt to InstalledAt and last EndedAt to UninstalledAt when window changes]| 132|Success| |105|[M2_CarrierInstancesPasses_Tests].[test RecalculatePassTimes adjusts only first StartedAt to InstalledAt when window shifts keeping same duration] | 196|Success| |106|[M2_CarrierInstancesPasses_Tests].[test RecalculatePassTimes chains EndedAt for multiple records] | 212|Success| |107|[M2_CarrierInstancesPasses_Tests].[test RecalculatePassTimes does not scale single pass] | 158|Success| |108|[M2_CarrierInstancesPasses_Tests].[test RecalculatePassTimes does not scale when window unchanged] | 197|Success| |109|[M2_CarrierInstancesPasses_Tests].[test RecalculatePassTimes fails with non-existent CarrierInstance] | 118|Success| |110|[M2_CarrierInstancesPasses_Tests].[test RecalculatePassTimes fails without CarrierInstanceId] | 98|Success| |111|[M2_CarrierInstancesPasses_Tests].[test RecalculatePassTimes fails without EdgerRollPartId] | 135|Success| |112|[M2_CarrierInstancesPasses_Tests].[test RecalculatePassTimes recalculates only the specified EdgerRoll leaving other rolls unchanged] | 179|Success| |113|[M2_CarrierInstancesPasses_Tests].[test RecalculatePassTimes returns 0 when no records] | 98|Success| |114|[M2_CarrierInstancesPasses_Tests].[test RecalculatePassTimes scales passes proportionally when window expands] | 106|Success| |115|[M2_CarrierInstancesPasses_Tests].[test RecalculatePassTimes sets EndedAt to UninstalledAt for single record] | 188|Success| |116|[M2_CarrierInstancesPasses_Tests].[test RecalculatePassTimes sets NULL EndedAt when not uninstalled] | 131|Success| |117|[M2_CarrierInstancesPasses_Tests].[test UpsertCarrierInstancePass creates first record with InstalledAt] | 195|Success| |118|[M2_CarrierInstancesPasses_Tests].[test UpsertCarrierInstancePass creates with explicit StartedAt] | 237|Success| |119|[M2_CarrierInstancesPasses_Tests].[test UpsertCarrierInstancePass fails changing to same active pass] | 139|Success| |120|[M2_CarrierInstancesPasses_Tests].[test UpsertCarrierInstancePass fails when EdgerRoll not in Rollset] | 110|Success| |121|[M2_CarrierInstancesPasses_Tests].[test UpsertCarrierInstancePass fails with non-existent CarrierInstance] | 110|Success| |122|[M2_CarrierInstancesPasses_Tests].[test UpsertCarrierInstancePass fails with non-existent pass] | 192|Success| |123|[M2_CarrierInstancesPasses_Tests].[test UpsertCarrierInstancePass fails with StartedAt after UninstalledAt] | 135|Success| |124|[M2_CarrierInstancesPasses_Tests].[test UpsertCarrierInstancePass fails with StartedAt before InstalledAt] | 203|Success| |125|[M2_CarrierInstancesPasses_Tests].[test UpsertCarrierInstancePass fails without CarrierInstanceId] | 70|Success| |126|[M2_CarrierInstancesPasses_Tests].[test UpsertCarrierInstancePass fails without EdgerRollPartId] | 139|Success| |127|[M2_CarrierInstancesPasses_Tests].[test UpsertCarrierInstancePass replaces record with same StartedAt] | 167|Success| |128|[M2_CarrierProtection_Tests].[test DeleteArbor deactivates UniversalRoll Part] | 183|Success| |129|[M2_CarrierProtection_Tests].[test DeleteArbor fails when carrier status is U] | 126|Success| |130|[M2_CarrierProtection_Tests].[test DeleteArbor in rollset deactivates UR and rollset] | 195|Success| |131|[M2_CarrierProtection_Tests].[test DeleteArbor succeeds when arbor not in any universal roll] | 265|Success| |132|[M2_CarrierProtection_Tests].[test DeleteArbor succeeds when carrier status is X] | 138|Success| |133|[M2_CarrierProtection_Tests].[test DeleteArbor succeeds when rollset has no carrier] | 212|Success| |134|[M2_CarrierProtection_Tests].[test DeleteArbor succeeds when universal roll not in rollset] | 294|Success| |135|[M2_CarrierProtection_Tests].[test DeleteDonut fails when carrier status is C] | 110|Success| |136|[M2_CarrierProtection_Tests].[test DeleteDonut fails when carrier status is S] | 134|Success| |137|[M2_CarrierProtection_Tests].[test DeleteDonut in rollset updates UR and deactivates rollset] | 130|Success| |138|[M2_CarrierProtection_Tests].[test DeleteDonut keeps UniversalRoll active] | 131|Success| |139|[M2_CarrierProtection_Tests].[test DeleteDonut multiple donuts succeeds when none in active carrier] | 195|Success| |140|[M2_CarrierProtection_Tests].[test DeleteDonut sets UniversalRoll DonutPartId to NULL] | 143|Success| |141|[M2_CarrierProtection_Tests].[test DeleteDonut succeeds when carrier status is F] | 175|Success| |142|[M2_CarrierProtection_Tests].[test DeleteDonut succeeds when donut not in any universal roll] | 118|Success| |143|[M2_CarrierProtection_Tests].[test DeleteDonut succeeds when rollset has no carrier] | 200|Success| |144|[M2_CarrierProtection_Tests].[test DeleteDonut succeeds when universal roll not in rollset] | 102|Success| |145|[M2_CarrierProtection_Tests].[test DeleteRoll deactivates rollset when carrier status is E] | 150|Success| |146|[M2_CarrierProtection_Tests].[test DeleteRoll deactivates rollset when no carrier instance] | 102|Success| |147|[M2_CarrierProtection_Tests].[test DeleteRoll edger deactivates rollset when carrier status is F] | 105|Success| |148|[M2_CarrierProtection_Tests].[test DeleteRoll edger deactivates rollset when no carrier] | 221|Success| |149|[M2_CarrierProtection_Tests].[test DeleteRoll edger fails when carrier status is A] | 164|Success| |150|[M2_CarrierProtection_Tests].[test DeleteRoll edger fails when carrier status is I] | 126|Success| |151|[M2_CarrierProtection_Tests].[test DeleteRoll edger succeeds when not in any rollset] | 163|Success| |152|[M2_CarrierProtection_Tests].[test DeleteRoll error message contains carrier name] | 94|Success| |153|[M2_CarrierProtection_Tests].[test DeleteRoll error message contains CarrierInstanceId] | 208|Success| |154|[M2_CarrierProtection_Tests].[test DeleteRoll error message contains roll name] | 102|Success| |155|[M2_CarrierProtection_Tests].[test DeleteRoll fails when carrier status is A] | 142|Success| |156|[M2_CarrierProtection_Tests].[test DeleteRoll fails when carrier status is I] | 94|Success| |157|[M2_CarrierProtection_Tests].[test DeleteRoll multiple rolls fails if any in active carrier] | 241|Success| |158|[M2_CarrierProtection_Tests].[test DeleteRoll roll stays active when blocked] | 138|Success| |159|[M2_CarrierProtection_Tests].[test DeleteRoll succeeds when roll not in any rollset] | 167|Success| |160|[M2_CarrierProtection_Tests].[test UpsertRollset change rolls fails when in active carrier] | 130|Success| |161|[M2_CarrierProtection_Tests].[test UpsertRollset deactivate fails when in active carrier] | 143|Success| |162|[M2_CarrierProtection_Tests].[test UpsertRollset implicit deactivation fails when other in active carrier] | 264|Success| |163|[M2_CarrierProtection_Tests].[test UpsertRollset implicit deactivation succeeds when no carrier] | 236|Success| |164|[M2_CarrierProtection_Tests].[test UpsertRollset use roll from active carrier fails] | 180|Success| |165|[M2_CarrierProtection_Tests].[test UpsertUniversalRoll change arbor fails when in active carrier] | 102|Success| |166|[M2_CarrierProtection_Tests].[test UpsertUniversalRoll change arbor succeeds when carrier status E] | 326|Success| |167|[M2_CarrierProtection_Tests].[test UpsertUniversalRoll change arbor succeeds when no rollset] | 285|Success| |168|[M2_CarrierProtection_Tests].[test UpsertUniversalRoll change donut fails when in active carrier] | 130|Success| |169|[M2_CarrierProtection_Tests].[test UpsertUniversalRoll change donut in rollset deactivates rollset] | 252|Success| |170|[M2_CarrierProtection_Tests].[test UpsertUniversalRoll change donut succeeds when carrier status F] | 260|Success| |171|[M2_CarrierProtection_Tests].[test UpsertUniversalRoll change donut succeeds when no rollset] | 360|Success| |172|[M2_CarrierProtection_Tests].[test UpsertUniversalRoll remove arbor fails when in active carrier] | 115|Success| |173|[M2_CarrierProtection_Tests].[test UpsertUniversalRoll remove arbor succeeds when no rollset] | 376|Success| |174|[M2_CarrierProtection_Tests].[test UpsertUniversalRoll remove donut fails when in active carrier] | 154|Success| |175|[M2_CarrierProtection_Tests].[test UpsertUniversalRoll remove donut succeeds when no rollset] | 408|Success| |176|[M2_DeleteEvent_Tests].[test Delete: matched delete leaves no Production overlap] | 36|Success| |177|[M2_DeleteEvent_Tests].[test Delete: matched Production event keeps its End] | 45|Success| |178|[M2_DeleteEvent_Tests].[test Delete: unmatched Production event is recomputed] | 60|Success| |179|[M2_DeleteEvent_Tests].[test Draft: matched Production event keeps its End] | 127|Success| |180|[M2_DetectRollsetDisruption_Tests].[test Broken rollset alert includes roll names] | 171|Success| |181|[M2_DetectRollsetDisruption_Tests].[test Broken rollset alert uses past tense] | 200|Success| |182|[M2_DetectRollsetDisruption_Tests].[test Default diameter tolerance is zero] | 102|Success| |183|[M2_DetectRollsetDisruption_Tests].[test Diameter mismatch alert created when exceeds tolerance] | 123|Success| |184|[M2_DetectRollsetDisruption_Tests].[test Diameter mismatch alert has no mm unit] | 114|Success| |185|[M2_DetectRollsetDisruption_Tests].[test Diameter tolerance from catSettings] | 101|Success| |186|[M2_DetectRollsetDisruption_Tests].[test Disruption created when affected rollsets exist] | 212|Success| |187|[M2_DetectRollsetDisruption_Tests].[test Handles missing diameter data gracefully] | 73|Success| |188|[M2_DetectRollsetDisruption_Tests].[test Multiple affected rollsets create multiple alerts] | 138|Success| |189|[M2_DetectRollsetDisruption_Tests].[test Multiple alert types created in single disruption] | 155|Success| |190|[M2_DetectRollsetDisruption_Tests].[test No diameter alert when within tolerance] | 89|Success| |191|[M2_DetectRollsetDisruption_Tests].[test No disruption created when no conflicts exist] | 150|Success| |192|[M2_DetectRollsetDisruption_Tests].[test No orphans stored for Swap action] | 97|Success| |193|[M2_DetectRollsetDisruption_Tests].[test No position swap alert for Any position roll] | 123|Success| |194|[M2_DetectRollsetDisruption_Tests].[test No position swap alert when position matches] | 118|Success| |195|[M2_DetectRollsetDisruption_Tests].[test Orphaned rolls identified when breaking rollset] | 171|Success| |196|[M2_DetectRollsetDisruption_Tests].[test Orphans linked to correct RollsetBrokenAlert] | 114|Success| |197|[M2_DetectRollsetDisruption_Tests].[test Orphans stored for Create action] | 85|Success| |198|[M2_DetectRollsetDisruption_Tests].[test Orphans stored for Mix action] | 89|Success| |199|[M2_DetectRollsetDisruption_Tests].[test Position swap alert created for Bottom to Top] | 131|Success| |200|[M2_DetectRollsetDisruption_Tests].[test Position swap alert created for Top to Bottom] | 122|Success| |201|[M2_DetectRollsetDisruption_Tests].[test Position swap alert uses past tense] | 135|Success| |202|[M2_DetectRollsetDisruption_Tests].[test PrevRollsetId adds rollset to affected list] | 163|Success| |203|[M2_DetectRollsetDisruption_Tests].[test PrevRollsetId creates orphans from previous rollset] | 139|Success| |204|[M2_DetectRollsetDisruption_Tests].[test RollsetBrokenAlerts populated for affected rollsets] | 78|Success| |205|[M2_DetectRollsetDisruption_Tests].[test RollshopAlert always created even without alerts] | 94|Success| |206|[M2_DetectRollsetDisruption_Tests].[test RollshopAlert default StatusCode is P] | 168|Success| |207|[M2_DetectRollsetDisruption_Tests].[test RollshopAlert has CreatedBy populated] | 155|Success| |208|[M2_DisruptionTracking_Tests].[test AcknowledgeNotification: Error when already acknowledged] | 101|Success| |209|[M2_DisruptionTracking_Tests].[test AcknowledgeNotification: Status changes from P to A] | 118|Success| |210|[M2_DisruptionTracking_Tests].[test Detection: Diameter mismatch alert created when difference exceeds tolerance] | 298|Success| |211|[M2_DisruptionTracking_Tests].[test Detection: Multiple affected rollsets identified] | 397|Success| |212|[M2_DisruptionTracking_Tests].[test Detection: Multiple orphaned rolls identified] | 302|Success| |213|[M2_DisruptionTracking_Tests].[test Detection: No diameter alert when within tolerance] | 331|Success| |214|[M2_DisruptionTracking_Tests].[test Detection: Position swap alert created for Bottom to Top] | 269|Success| |215|[M2_DisruptionTracking_Tests].[test Detection: Position swap alert created for Top to Bottom] | 261|Success| |216|[M2_DisruptionTracking_Tests].[test Detection: Single affected rollset identified] | 313|Success| |217|[M2_DisruptionTracking_Tests].[test Detection: Single orphaned roll identified] | 543|Success| |218|[M2_DisruptionTracking_Tests].[test ErrorHandling: Rollset created even if detection fails] | 232|Success| |219|[M2_DisruptionTracking_Tests].[test Integration: Multiple alert types in one disruption] | 330|Success| |220|[M2_DisruptionTracking_Tests].[test UpsertRollset: ActionTypeCode C recorded correctly] | 277|Success| |221|[M2_DisruptionTracking_Tests].[test UpsertRollset: ActionTypeCode M recorded correctly] | 364|Success| |222|[M2_DisruptionTracking_Tests].[test UpsertRollset: ActionTypeCode S recorded correctly] | 351|Success| |223|[M2_DisruptionTracking_Tests].[test UpsertRollset: Default ActionTypeCode is C] | 281|Success| |224|[M2_DraftEvents_Tests].[test ConfirmEvents: Deletes Main events not in active Draft] | 122|Success| |225|[M2_DraftEvents_Tests].[test ConfirmEvents: Error when ConfirmUntilEventId not found] | 40|Success| |226|[M2_DraftEvents_Tests].[test ConfirmEvents: Inserts new Draft events to Main] | 106|Success| |227|[M2_DraftEvents_Tests].[test ConfirmEvents: Partial confirmation with ConfirmUntilEventId] | 171|Success| |228|[M2_DraftEvents_Tests].[test ConfirmEvents: Publishes Draft to Main] | 98|Success| |229|[M2_DraftEvents_Tests].[test DeleteEvent DeleteMode Both: Deletes from both tables] | 110|Success| |230|[M2_DraftEvents_Tests].[test DeleteEvent DeleteMode Both: Error when not found in Draft] | 86|Success| |231|[M2_DraftEvents_Tests].[test DeleteEvent DeleteMode Both: Error when not found in Main] | 70|Success| |232|[M2_DraftEvents_Tests].[test DeleteEvent DeleteMode Both: IsMatched in Draft prevents deletion] | 58|Success| |233|[M2_DraftEvents_Tests].[test DeleteEvent DeleteMode Both: IsMatched in Main prevents deletion] | 61|Success| |234|[M2_DraftEvents_Tests].[test DeleteEvent DeleteMode Default: Defaults to Main] | 53|Success| |235|[M2_DraftEvents_Tests].[test DeleteEvent DeleteMode Draft: Dilated event handling in Draft] | 118|Success| |236|[M2_DraftEvents_Tests].[test DeleteEvent DeleteMode Draft: Error when not found in Draft] | 77|Success| |237|[M2_DraftEvents_Tests].[test DeleteEvent DeleteMode Draft: IsMatched prevents deletion] | 70|Success| |238|[M2_DraftEvents_Tests].[test DeleteEvent DeleteMode Draft: Only deletes from Draft table] | 57|Success| |239|[M2_DraftEvents_Tests].[test DeleteEvent DeleteMode Invalid: Throws error for invalid mode] | 65|Success| |240|[M2_DraftEvents_Tests].[test DeleteEvent DeleteMode Main: Dilated event handling] | 69|Success| |241|[M2_DraftEvents_Tests].[test DeleteEvent DeleteMode Main: Error when not found in Main] | 49|Success| |242|[M2_DraftEvents_Tests].[test DeleteEvent DeleteMode Main: IsMatched prevents deletion] | 65|Success| |243|[M2_DraftEvents_Tests].[test DeleteEvent DeleteMode Main: Only deletes from Main table] | 106|Success| |244|[M2_DraftEvents_Tests].[test DeleteEvent: Both mode syncs delete to Draft] | 105|Success| |245|[M2_DraftEvents_Tests].[test DeleteEvent: Draft mode does not affect Main] | 57|Success| |246|[M2_DraftEvents_Tests].[test DeleteEvent: Error when EventId not found in Draft] | 37|Success| |247|[M2_DraftEvents_Tests].[test DeleteEvent: Error when EventId not found in Main] | 33|Success| |248|[M2_DraftEvents_Tests].[test DeleteEvent: Error when IsMatched = 1 in Draft mode] | 94|Success| |249|[M2_DraftEvents_Tests].[test DeleteEvent: Error when IsMatched = 1] | 44|Success| |250|[M2_DraftEvents_Tests].[test Edge: ConfirmEvents when already in sync] | 82|Success| |251|[M2_DraftEvents_Tests].[test Edge: Multiple Production events sync correctly] | 159|Success| |252|[M2_DraftEvents_Tests].[test Edge: ResetDraft with empty Main clears Draft] | 69|Success| |253|[M2_DraftEvents_Tests].[test Isolation: Draft and Main can differ] | 57|Success| |254|[M2_DraftEvents_Tests].[test Isolation: Draft changes do not affect Main] | 48|Success| |255|[M2_DraftEvents_Tests].[test MergeToDraft: All production fields sync correctly] | 156|Success| |256|[M2_DraftEvents_Tests].[test MergeToDraft: DELETE soft-deletes in Draft] | 53|Success| |257|[M2_DraftEvents_Tests].[test MergeToDraft: Error when EventId not found] | 32|Success| |258|[M2_DraftEvents_Tests].[test MergeToDraft: Fixed event copies Start/End exactly] | 78|Success| |259|[M2_DraftEvents_Tests].[test MergeToDraft: New Fixed event creates in Draft with cascade] | 106|Success| |260|[M2_DraftEvents_Tests].[test MergeToDraft: Reactivates inactive Draft event on Main update] | 146|Success| |261|[M2_DraftEvents_Tests].[test ResetDraft: Deletes Draft-only events] | 181|Success| |262|[M2_DraftEvents_Tests].[test ResetDraft: Inserts Main-only events to Draft] | 184|Success| |263|[M2_DraftEvents_Tests].[test ResetDraft: Restores Draft from Main] | 90|Success| |264|[M2_DraftEvents_Tests].[test Sync Scenario: Different ScheduledRollingHours in Main and Draft] | 115|Success| |265|[M2_DraftEvents_Tests].[test Sync Scenario: Different Start times preserved until confirmed] | 188|Success| |266|[M2_DraftEvents_Tests].[test Sync Scenario: Different StatusCode in Main and Draft] | 253|Success| |267|[M2_DraftEvents_Tests].[test Sync Scenario: Event active in Main but inactive in Draft] | 220|Success| |268|[M2_DraftEvents_Tests].[test Sync Scenario: Event exists only in Draft] | 213|Success| |269|[M2_DraftEvents_Tests].[test Sync Scenario: Event exists only in Main] | 160|Success| |270|[M2_DraftEvents_Tests].[test Sync Scenario: IsMatched in Main but not in Draft] | 86|Success| |271|[M2_DraftEvents_Tests].[test Sync Scenario: MergeToDraft preserves Draft Start] | 93|Success| |272|[M2_DraftEvents_Tests].[test SyncCampaigns: Creates event in both Main and Draft] | 338|Success| |273|[M2_DraftEvents_Tests].[test SyncDelete: Delete Both then resync recreates both] | 216|Success| |274|[M2_DraftEvents_Tests].[test SyncDelete: Delete Draft preserves Main state] | 207|Success| |275|[M2_DraftEvents_Tests].[test SyncDelete: Delete Draft then resync restores Draft via MergeToDraft] | 183|Success| |276|[M2_DraftEvents_Tests].[test SyncDelete: Delete Main preserves Draft state independently] | 159|Success| |277|[M2_DraftEvents_Tests].[test SyncDelete: Delete Main then resync recreates Main] | 301|Success| |278|[M2_DraftEvents_Tests].[test SyncDelete: IsMatched prevents delete in all modes] | 134|Success| |279|[M2_DraftEvents_Tests].[test UpsertDraftEvent: Create Downtime in Draft] | 48|Success| |280|[M2_DraftEvents_Tests].[test UpsertDraftEvent: Create Holiday only in Draft] | 94|Success| |281|[M2_DraftEvents_Tests].[test UpsertDraftEvent: Create Maintenance in Draft] | 167|Success| |282|[M2_DraftEvents_Tests].[test UpsertDraftEvent: Error when Start is NULL] | 114|Success| |283|[M2_DraftEvents_Tests].[test UpsertDraftProductionEvent: Error when SectionId missing] | 85|Success| |284|[M2_DraftEvents_Tests].[test UpsertDraftProductionEvent: IsMatched allows non-date changes] | 161|Success| |285|[M2_DraftEvents_Tests].[test UpsertDraftProductionEvent: IsMatched prevents date changes] | 66|Success| |286|[M2_DraftEvents_Tests].[test UpsertDraftProductionEvent: New event only in Draft not Main] | 485|Success| |287|[M2_DraftEvents_Tests].[test UpsertDraftProductionEvent: Update only affects Draft not Main] | 163|Success| |288|[M2_DraftEvents_Tests].[test UpsertProductionEvent: Anchor logic positions Draft event correctly] | 199|Success| |289|[M2_DraftEvents_Tests].[test UpsertProductionEvent: IsMatched syncs to Draft] | 167|Success| |290|[M2_DraftEvents_Tests].[test UpsertProductionEvent: New event creates in both Main and Draft] | 232|Success| |291|[M2_DraftEvents_Tests].[test UpsertProductionEvent: No anchor uses Main Start for Draft] | 188|Success| |292|[M2_DraftEvents_Tests].[test UpsertProductionEvent: ScheduledRollingHours change recalculates Draft End] | 195|Success| |293|[M2_DraftEvents_Tests].[test UpsertProductionEvent: Update syncs fields to Draft but not Start] | 171|Success| |294|[M2_EdgerRollPass_Tests].[test UpsertEdgerRollPass adds first pass with defaults] | 53|Success| |295|[M2_EdgerRollPass_Tests].[test UpsertEdgerRollPass adds pass as not diagonal by default] | 69|Success| |296|[M2_EdgerRollPass_Tests].[test UpsertEdgerRollPass adds sequential passes up to 4] | 92|Success| |297|[M2_EdgerRollPass_Tests].[test UpsertEdgerRollPass clears the diagonal on all the passes] | 107|Success| |298|[M2_EdgerRollPass_Tests].[test UpsertEdgerRollPass fails with inactive PartId] | 53|Success| |299|[M2_EdgerRollPass_Tests].[test UpsertEdgerRollPass fails with invalid PassNumber] | 49|Success| |300|[M2_EdgerRollPass_Tests].[test UpsertEdgerRollPass fails with invalid PassStatusCode] | 65|Success| |301|[M2_EdgerRollPass_Tests].[test UpsertEdgerRollPass fails with non-EdgerRoll Part] | 53|Success| |302|[M2_EdgerRollPass_Tests].[test UpsertEdgerRollPass fails with non-existent PartId] | 102|Success| |303|[M2_EdgerRollPass_Tests].[test UpsertEdgerRollPass keeps IsDiagonal when not provided] | 87|Success| |304|[M2_EdgerRollPass_Tests].[test UpsertEdgerRollPass marks all the passes as diagonal] | 57|Success| |305|[M2_EdgerRollPass_Tests].[test UpsertEdgerRollPass returns PassNumber on update] | 45|Success| |306|[M2_EdgerRollPass_Tests].[test UpsertEdgerRollPass updates IsDiagonal on a single pass] | 91|Success| |307|[M2_EdgerRollPass_Tests].[test UpsertEdgerRollPass updates status to Damaged] | 111|Success| |308|[M2_EdgerRollPass_Tests].[test UpsertEdgerRollPass updates status to Used] | 57|Success| |309|[M2_EventErrorHandling_Tests].[test Cascade: Max cascade iterations throws descriptive error] | 57|Success| |310|[M2_EventErrorHandling_Tests].[test Cascade: Max Fixed resolution iterations throws descriptive error] | 78|Success| |311|[M2_EventErrorHandling_Tests].[test Compaction: Max iterations throws descriptive error] | 45|Success| |312|[M2_EventErrorHandling_Tests].[test Defaults: PreProcessEvent uses fallback limit] | 49|Success| |313|[M2_EventErrorHandling_Tests].[test ErrorMessage: Clean extraction removes technical context] | 90|Success| |314|[M2_EventErrorHandling_Tests].[test PreProcess: Error message contains context information] | 36|Success| |315|[M2_EventErrorHandling_Tests].[test PreProcess: Max iterations reached throws descriptive error] | 62|Success| |316|[M2_EventErrorHandling_Tests].[test Transaction: UpsertEvent rollback on PreProcess error] | 172|Success| |317|[M2_EventErrorHandling_Tests].[test Transaction: UpsertProductionEvent rollback on validation error] | 82|Success| |318|[M2_EventIntegration_Tests].[test Cascade: Long chain with intercalated Fixed] | 306|Success| |319|[M2_EventIntegration_Tests].[test Cascade: Stress test 10 consecutive events] | 256|Success| |320|[M2_EventIntegration_Tests].[test Compact: Blocked by Fixed event] | 310|Success| |321|[M2_EventIntegration_Tests].[test Compact: Complete gap closure] | 195|Success| |322|[M2_EventIntegration_Tests].[test Compact: Preserves dilation downstream] | 211|Success| |323|[M2_EventIntegration_Tests].[test Complex: BaseDuration preserved through complete cycle] | 208|Success| |324|[M2_EventIntegration_Tests].[test Complex: Complete production schedule with Fixed events] | 220|Success| |325|[M2_EventIntegration_Tests].[test Complex: Update triggers cascade and compaction] | 228|Success| |326|[M2_EventIntegration_Tests].[test Create: Production with minimal fields] | 241|Success| |327|[M2_EventIntegration_Tests].[test EdgeCase: Production spans midnight] | 262|Success| |328|[M2_EventIntegration_Tests].[test EdgeCase: Very long BaseDuration 24h] | 147|Success| |329|[M2_EventIntegration_Tests].[test EdgeCase: Very short BaseDuration 5min] | 234|Success| |330|[M2_EventIntegration_Tests].[test Insert: Fixed between Productions cascades] | 237|Success| |331|[M2_EventIntegration_Tests].[test PreProcess: Multiple consecutive Fixed events MOVE] | 237|Success| |332|[M2_EventIntegration_Tests].[test PreProcess: Overlapping Fixed events smart dilation] | 249|Success| |333|[M2_EventIntegration_Tests].[test PreProcess: Production vs Production MOVE] | 163|Success| |334|[M2_EventIntegration_Tests].[test STEP4: Shrinking Fixed readjusts dilated Production] | 191|Success| |335|[M2_EventIntegration_Tests].[test Update: Change Production SectionId] | 279|Success| |336|[M2_EventIntegration_Tests].[test Update: Moving Fixed triggers cascade] | 381|Success| |337|[M2_EventIntegration_Tests].[test Update: Multiple modifications preserve BaseDuration] | 163|Success| |338|[M2_EventIntegration_Tests].[test Update: Multiple Production fields batch] | 187|Success| |339|[M2_EventIntegration_Tests].[test Update: Start moves into collision zone] | 237|Success| |340|[M2_EventIntegration_Tests].[test UpsertEvent: Create compatible Downtime and Maintenance] | 197|Success| |341|[M2_EventIntegration_Tests].[test UpsertEvent: Update Fixed event adjusts affected Production] | 245|Success| |342|[M2_EventIntegration_Tests].[test UpsertProductionEvent: Auto-moves after Holiday] | 204|Success| |343|[M2_EventIntegration_Tests].[test UpsertProductionEvent: Create with all fields populated] | 263|Success| |344|[M2_EventIntegration_Tests].[test UpsertProductionEvent: Dilates around Downtime] | 295|Success| |345|[M2_EventIntegration_Tests].[test UpsertProductionEvent: Update preserves BaseDuration] | 163|Success| |346|[M2_EventIntegration_Tests].[test Validation: Downtime vs Downtime overlap is allowed] | 144|Success| |347|[M2_EventIntegration_Tests].[test Validation: Downtime vs Holiday overlap is allowed] | 189|Success| |348|[M2_EventIntegration_Tests].[test Validation: End before Start throws error] | 65|Success| |349|[M2_EventIntegration_Tests].[test Validation: Holiday vs Holiday overlap is allowed] | 177|Success| |350|[M2_EventIntegration_Tests].[test Validation: Invalid EventTypeCode error] | 32|Success| |351|[M2_EventIntegration_Tests].[test Validation: Invalid SectionId throws error] | 61|Success| |352|[M2_EventIntegration_Tests].[test Workflow: StatusCode P to I to C progression] | 167|Success| |353|[M2_GetCampaignsByEventId_Tests].[test RECONCILE #2258: apportioned detail sums to month and campaign totals] | 102|Success| |354|[M2_GetCampaignsByEventId_Tests].[test RECONCILE #2258: cobbles excluded from length shares but totals reconcile] | 180|Success| |355|[M2_GetCampaignsByEventId_Tests].[test Rejected weight is not subtracted from finished tons or yield] | 98|Success| |356|[M2_GetProductionMonth_Tests].[test ASSET ISOLATION: Mill #1 shifts are ignored by M2] | 16|Success| |357|[M2_GetProductionMonth_Tests].[test FALLBACK: scalar falls back to calendar month when no shift] | 8|Success| |358|[M2_GetProductionMonth_Tests].[test HALF-OPEN: boundary instant belongs to the next shift] | 12|Success| |359|[M2_GetProductionMonth_Tests].[test ITVF: returns no row when no shift covers the instant] | 13|Success| |360|[M2_GetProductionMonth_Tests].[test SHIFT-ALIGNED: Feb-calendar instant in a Jan-ProductionDate shift returns January] | 17|Success| |361|[M2_GetProductionMonth_Tests].[test SHIFT-ALIGNED: Jan-calendar instant in a Feb-ProductionDate shift returns February] | 12|Success| |362|[M2_NonProductiveOverlap_Tests].[test Dilation: Production dilates by the union of D M H] | 20|Success| |363|[M2_NonProductiveOverlap_Tests].[test Merge: chained events collapse into one island] | 20|Success| |364|[M2_NonProductiveOverlap_Tests].[test Merge: contained event adds no extra time] | 28|Success| |365|[M2_NonProductiveOverlap_Tests].[test Merge: disjoint events are summed] | 25|Success| |366|[M2_NonProductiveOverlap_Tests].[test Merge: inactive events are ignored] | 20|Success| |367|[M2_NonProductiveOverlap_Tests].[test Merge: intervals are clipped to the window] | 21|Success| |368|[M2_NonProductiveOverlap_Tests].[test Merge: partial overlap counts the union once] | 25|Success| |369|[M2_NonProductiveOverlap_Tests].[test Merge: Production events are excluded] | 24|Success| |370|[M2_NonProductiveOverlap_Tests].[test Merge: two overlapping Holidays count once] | 21|Success| |371|[M2_NonProductiveOverlap_Tests].[test ScheduledEnd: stretches by the union of D M H] | 21|Success| |372|[M2_PassCampaigns_Tests].[test GetPassCampaignData fails with invalid time range] | 81|Success| |373|[M2_PassCampaigns_Tests].[test GetPassCampaignData fails without EdgerRollPartId] | 61|Success| |374|[M2_PassCampaigns_Tests].[test GetPassCampaignData filters by PassNumber] | 82|Success| |375|[M2_PassCampaigns_Tests].[test GetPassCampaignData returns calculated totals] | 102|Success| |376|[M2_PassCampaigns_Tests].[test GetPassCampaignData returns data for EdgerRoll] | 110|Success| |377|[M2_PassCampaigns_Tests].[test UpdatePassCampaignOffsets fails with deleted pass] | 126|Success| |378|[M2_PassCampaigns_Tests].[test UpdatePassCampaignOffsets fails with non-existent id] | 118|Success| |379|[M2_PassCampaigns_Tests].[test UpdatePassCampaignOffsets fails without any offset] | 61|Success| |380|[M2_PassCampaigns_Tests].[test UpdatePassCampaignOffsets fails without id] | 105|Success| |381|[M2_PassCampaigns_Tests].[test UpdatePassCampaignOffsets returns correct id] | 110|Success| |382|[M2_PassCampaigns_Tests].[test UpdatePassCampaignOffsets updates multiple offsets] | 85|Success| |383|[M2_PassCampaigns_Tests].[test UpdatePassCampaignOffsets updates OffsetBillets] | 163|Success| |384|[M2_PassCampaigns_Tests].[test UpdatePassCampaignOffsets updates OffsetLength] | 94|Success| |385|[M2_PassCampaigns_Tests].[test UpdatePassCampaignOffsets updates OffsetWeight] | 175|Success| |386|[M2_ResolveEventCollisions_Tests].[test Cascade: Five event cascade chain] | 90|Success| |387|[M2_ResolveEventCollisions_Tests].[test Cascade: Last event collides with Fixed] | 36|Success| |388|[M2_ResolveEventCollisions_Tests].[test Cascade: Middle event already dilated] | 65|Success| |389|[M2_ResolveEventCollisions_Tests].[test Cascade: Moving Production pushes subsequent Production events] | 77|Success| |390|[M2_ResolveEventCollisions_Tests].[test Cascade: Production cascade blocked by Fixed wall] | 29|Success| |391|[M2_ResolveEventCollisions_Tests].[test Cascade: Production pushes another Production around Fixed event] | 57|Success| |392|[M2_ResolveEventCollisions_Tests].[test Cascade: Productions with large gaps between them] | 40|Success| |393|[M2_ResolveEventCollisions_Tests].[test Complex: Production DILATE then CASCADE another dilated Production] | 65|Success| |394|[M2_ResolveEventCollisions_Tests].[test Complex: Production DILATE through overlapping Downtime and Maintenance] | 29|Success| |395|[M2_ResolveEventCollisions_Tests].[test Edge: Event with minimum duration one minute] | 49|Success| |396|[M2_ResolveEventCollisions_Tests].[test Edge: Event with very long duration spans days] | 17|Success| |397|[M2_ResolveEventCollisions_Tests].[test Edge: Multiple events same start different durations] | 20|Success| |398|[M2_ResolveEventCollisions_Tests].[test Edge: Production ending exactly at Fixed start has no collision] | 24|Success| |399|[M2_ResolveEventCollisions_Tests].[test Edge: Production one second after Fixed has no collision] | 49|Success| |400|[M2_ResolveEventCollisions_Tests].[test Edge: Production one second before Fixed has no collision] | 25|Success| |401|[M2_ResolveEventCollisions_Tests].[test Edge: Production with no collisions remains unchanged] | 21|Success| |402|[M2_ResolveEventCollisions_Tests].[test Fixed: every D M H overlap combination is allowed] | 20|Success| |403|[M2_ResolveEventCollisions_Tests].[test O1: Multiple Other events can overlap] | 13|Success| |404|[M2_ResolveEventCollisions_Tests].[test O1: Other does not collide with Holiday] | 57|Success| |405|[M2_ResolveEventCollisions_Tests].[test O1: Other does not collide with Production] | 20|Success| |406|[M2_ResolveEventCollisions_Tests].[test O1: Production not affected by Other event] | 54|Success| |407|[M2_ResolveEventCollisions_Tests].[test P1: Multiple Productions overlapping simultaneously] | 28|Success| |408|[M2_ResolveEventCollisions_Tests].[test P1: Production completely contained moves after] | 21|Success| |409|[M2_ResolveEventCollisions_Tests].[test P1: Production containing existing moves after] | 20|Success| |410|[M2_ResolveEventCollisions_Tests].[test P1: Production moves after existing Production when S < NS] | 53|Success| |411|[M2_ResolveEventCollisions_Tests].[test P1: Production with same start time moves after existing] | 28|Success| |412|[M2_ResolveEventCollisions_Tests].[test P2: Production completely inside Fixed MOVES after] | 32|Success| |413|[M2_ResolveEventCollisions_Tests].[test P2: Production DILATE around Fixed when NS < S] | 29|Success| |414|[M2_ResolveEventCollisions_Tests].[test P2: Production DILATE through contiguous Fixed events] | 24|Success| |415|[M2_ResolveEventCollisions_Tests].[test P2: Production DILATE through Fixed events with variable gaps] | 53|Success| |416|[M2_ResolveEventCollisions_Tests].[test P2: Production DILATE through four consecutive Fixed events] | 21|Success| |417|[M2_ResolveEventCollisions_Tests].[test P2: Production DILATE through mixed Fixed event types] | 25|Success| |418|[M2_ResolveEventCollisions_Tests].[test P2: Production DILATE through multiple Holidays] | 20|Success| |419|[M2_ResolveEventCollisions_Tests].[test P2: Production DILATE through overlapping Fixed events without double counting] | 20|Success| |420|[M2_ResolveEventCollisions_Tests].[test P2: Production DILATE through three Fixed events with gaps] | 20|Success| |421|[M2_ResolveEventCollisions_Tests].[test P2: Production DILATE with Fixed ending at exact original P_End] | 20|Success| |422|[M2_ResolveEventCollisions_Tests].[test P2: Production MOVE after Fixed when S <= NS] | 49|Success| |423|[M2_ResolveEventCollisions_Tests].[test P2: Production MOVE then DILATE in sequence] | 25|Success| |424|[M2_ResolveEventCollisions_Tests].[test P2: Production starting at Fixed end has no collision] | 37|Success| |425|[M2_ResolveEventCollisions_Tests].[test P2: Production with Fixed starting at exact P_Start MOVES] | 25|Success| |426|[M2_ResolveEventCollisions_Tests].[test P2: Short Production DILATE through long Fixed event] | 20|Success| |427|[M2_ResolveEventCollisions_Tests].[test Stress: High density Fixed events 12 in 2 hours] | 20|Success| |428|[M2_ResolveEventCollisions_Tests].[test Stress: Multi-day Production through multiple Fixed events] | 89|Success| |429|[M2_ResolveEventCollisions_Tests].[test Update: Event excludes itself from collision detection] | 28|Success| |430|[M2_ResolveEventCollisions_Tests].[test Update: Event in middle of dilated chain] | 20|Success| |431|[M2_ResolveEventCollisions_Tests].[test Update: Fixed event moved away from collision] | 12|Success| |432|[M2_ResolveEventCollisions_Tests].[test Update: Production BaseDuration increased significantly] | 20|Success| |433|[M2_ResolveEventCollisions_Tests].[test Update: Production BaseDuration reduced significantly] | 17|Success| |434|[M2_ScheduleCompaction_Tests].[test Basic: 2-event compaction moves P2 backward] | 77|Success| |435|[M2_ScheduleCompaction_Tests].[test Basic: 3-event compaction cascades through all events] | 69|Success| |436|[M2_ScheduleCompaction_Tests].[test Basic: Partial gap elimination completes gracefully] | 53|Success| |437|[M2_ScheduleCompaction_Tests].[test Edge: Final event encounters Fixed during compaction] | 40|Success| |438|[M2_ScheduleCompaction_Tests].[test Edge: Gap fully eliminated creates contiguous events] | 66|Success| |439|[M2_ScheduleCompaction_Tests].[test Edge: No compaction when event not shortened] | 28|Success| |440|[M2_ScheduleCompaction_Tests].[test Edge: No subsequent events completes immediately] | 74|Success| |441|[M2_ScheduleCompaction_Tests].[test Fixed: Compaction DILATE around Fixed event] | 61|Success| |442|[M2_ScheduleCompaction_Tests].[test Fixed: Compaction MOVE after Fixed event] | 74|Success| |443|[M2_ScheduleCompaction_Tests].[test Fixed: Compaction MOVE then DILATE sequence] | 86|Success| |444|[M2_ScheduleCompaction_Tests].[test Fixed: Compaction stops when Fixed blocks entire remaining gap] | 94|Success| |445|[M2_ScheduleCompaction_Tests].[test Fixed: Compaction through mixed Fixed event types] | 36|Success| |446|[M2_ScheduleCompaction_Tests].[test Fixed: Compaction through multiple consecutive Fixed events] | 65|Success| |447|[M2_ScheduleCompaction_Tests].[test Fixed: Compaction through overlapping Fixed events without double counting] | 70|Success| |448|[M2_ScheduleCompaction_Tests].[test Fixed: Fixed event at exact gap boundary causes MOVE] | 45|Success| |449|[M2_ScheduleCompaction_Tests].[test Gap: Middle event shortening compacts subsequent events] | 49|Success| |450|[M2_ScheduleCompaction_Tests].[test Gap: Variable gaps between events compact correctly] | 70|Success| |451|[M2_ScheduleCompaction_Tests].[test Gap: Very large gap 5 hours compacts correctly] | 110|Success| |452|[M2_ScheduleCompaction_Tests].[test Gap: Very small gap 3 minutes compacts correctly] | 69|Success| |453|[M2_ScheduleCompaction_Tests].[test Integration: CompactSchedule disabled skips compaction] | 57|Success| |454|[M2_ScheduleCompaction_Tests].[test Integration: UpsertEvent skips compaction with blocking events] | 74|Success| |455|[M2_ScheduleCompaction_Tests].[test Integration: UpsertEvent triggers compaction on shortening] | 155|Success| |456|[M2_SwapRollsetsRolls_Tests].[test Error: BottomRollId1 is required] | 49|Success| |457|[M2_SwapRollsetsRolls_Tests].[test Error: BottomRollId2 does not exist in Rolls table] | 106|Success| |458|[M2_SwapRollsetsRolls_Tests].[test Error: BottomRollId2 required when RollsetId2 provided] | 142|Success| |459|[M2_SwapRollsetsRolls_Tests].[test Error: Cannot swap rollsets in different sections] | 74|Success| |460|[M2_SwapRollsetsRolls_Tests].[test Error: Cannot swap rollsets in different stands] | 86|Success| |461|[M2_SwapRollsetsRolls_Tests].[test Error: Rollset1 must have both rolls assigned] | 53|Success| |462|[M2_SwapRollsetsRolls_Tests].[test Error: RollsetId1 and RollsetId2 must be different] | 74|Success| |463|[M2_SwapRollsetsRolls_Tests].[test Error: RollsetId1 does not exist] | 45|Success| |464|[M2_SwapRollsetsRolls_Tests].[test Error: RollsetId1 is required] | 44|Success| |465|[M2_SwapRollsetsRolls_Tests].[test Error: RollsetId2 does not exist] | 49|Success| |466|[M2_SwapRollsetsRolls_Tests].[test Error: TopRollId1 does not exist in Rolls table] | 89|Success| |467|[M2_SwapRollsetsRolls_Tests].[test Error: TopRollId1 is required] | 49|Success| |468|[M2_SwapRollsetsRolls_Tests].[test Error: TopRollId2 required when RollsetId2 provided] | 49|Success| |469|[M2_SwapRollsetsRolls_Tests].[test Success: Create new rollset with specified rolls] | 159|Success| |470|[M2_SwapRollsetsRolls_Tests].[test Success: Swap rolls between two rollsets] | 280|Success| |471|[M2_SwapRollsetsRolls_Tests].[test Success: Use any valid rolls] | 208|Success| |472|[M2_SyncCampaignsToProductionEvents_Tests].[test CASCADE: Chain stops at matched barrier] | 150|Success| |473|[M2_SyncCampaignsToProductionEvents_Tests].[test CASCADE: Matched events are immovable barriers] | 81|Success| |474|[M2_SyncCampaignsToProductionEvents_Tests].[test CASCADE: Updating IsMatched prevents future cascade] | 114|Success| |475|[M2_SyncCampaignsToProductionEvents_Tests].[test COMPLEX: Multiple section changes create multiple events] | 134|Success| |476|[M2_SyncCampaignsToProductionEvents_Tests].[test COMPLEX: ResolveEventCascade called for each group] | 142|Success| |477|[M2_SyncCampaignsToProductionEvents_Tests].[test COMPLEX: StatusCode K preserved when updating] | 93|Success| |478|[M2_SyncCampaignsToProductionEvents_Tests].[test EDGE CASE: Date filters work correctly] | 114|Success| |479|[M2_SyncCampaignsToProductionEvents_Tests].[test EDGE CASE: Empty campaigns table produces no events] | 69|Success| |480|[M2_SyncCampaignsToProductionEvents_Tests].[test EDGE CASE: No campaigns returns gracefully] | 69|Success| |481|[M2_SyncCampaignsToProductionEvents_Tests].[test FIXED: Dilates unmatched but not matched] | 118|Success| |482|[M2_SyncCampaignsToProductionEvents_Tests].[test FIXED: Does not dilate matched events] | 86|Success| |483|[M2_SyncCampaignsToProductionEvents_Tests].[test GROUPING: Consecutive campaigns same section create single event] | 106|Success| |484|[M2_SyncCampaignsToProductionEvents_Tests].[test GROUPING: Section change creates separate events] | 134|Success| |485|[M2_SyncCampaignsToProductionEvents_Tests].[test GROUPING: Single campaign creates single event] | 106|Success| |486|[M2_SyncCampaignsToProductionEvents_Tests].[test ISMATCHED: Last group updates status P to I when matched] | 114|Success| |487|[M2_SyncCampaignsToProductionEvents_Tests].[test ISMATCHED: Matched event updated with IsMatched = 1] | 106|Success| |488|[M2_SyncCampaignsToProductionEvents_Tests].[test ISMATCHED: New event created with IsMatched = 1] | 171|Success| |489|[M2_SyncCampaignsToProductionEvents_Tests].[test ISMATCHED: Prevents duplicate events on resync] | 155|Success| |490|[M2_SyncCampaignsToProductionEvents_Tests].[test ISMATCHED: Unmatched future event matched in next run] | 135|Success| |491|[M2_SyncCampaignsToProductionEvents_Tests].[test LINKING: All campaigns in group linked to same event] | 158|Success| |492|[M2_SyncCampaignsToProductionEvents_Tests].[test LINKING: EventId preserved for already-linked campaigns] | 85|Success| |493|[M2_SyncCampaignsToProductionEvents_Tests].[test MATCHING: Closest match selected when multiple exist] | 98|Success| |494|[M2_SyncCampaignsToProductionEvents_Tests].[test MATCHING: Event expands with campaigns] | 94|Success| |495|[M2_SyncCampaignsToProductionEvents_Tests].[test MATCHING: Event times adjust to campaigns] | 98|Success| |496|[M2_SyncCampaignsToProductionEvents_Tests].[test MATCHING: Exact temporal overlap matches event] | 114|Success| |497|[M2_SyncCampaignsToProductionEvents_Tests].[test MATCHING: Fallback respects section] | 159|Success| |498|[M2_SyncCampaignsToProductionEvents_Tests].[test MATCHING: Fallback to next unmatched same section] | 106|Success| |499|[M2_SyncCampaignsToProductionEvents_Tests].[test MATCHING: Inactive events not matched] | 167|Success| |500|[M2_SyncCampaignsToProductionEvents_Tests].[test MATCHING: New event created when no match found] | 167|Success| |501|[M2_SyncCampaignsToProductionEvents_Tests].[test MATCHING: Proximity window 48h enforced] | 147|Success| |502|[M2_SyncCampaignsToProductionEvents_Tests].[test MATCHING: Proximity window matches close event] | 101|Success| |503|[M2_SyncCampaignsToProductionEvents_Tests].[test SMART START: First sync detects production run start] | 159|Success| |504|[M2_SyncCampaignsToProductionEvents_Tests].[test SMART START: Mixed matched and unmatched timeline] | 130|Success| |505|[M2_SyncCampaignsToProductionEvents_Tests].[test SMART START: Second sync continues from last matched event] | 142|Success| |506|[M2_SyncCampaignsToProductionEvents_Tests].[test SPLIT #2258: cross-month event gets one PEA row per production month] | 122|Success| |507|[M2_SyncCampaignsToProductionEvents_Tests].[test SPLIT #2258: resync does not duplicate PEA EventMonth rows] | 150|Success| |508|[M2_SyncCampaignsToProductionEvents_Tests].[test TIMESTAMPS: Continuity maintained between groups] | 212|Success| |509|[M2_SyncCampaignsToProductionEvents_Tests].[test TIMESTAMPS: FirstBilletTimestamp is first campaign start] | 130|Success| |510|[M2_SyncCampaignsToProductionEvents_Tests].[test TIMESTAMPS: TrackedEnd is last campaign end] | 138|Success| |511|[M2_TrackPassCampaignsJob_Tests].[test TrackPassCampaignsJob calculates cumulative start values] | 73|Success| |512|[M2_TrackPassCampaignsJob_Tests].[test TrackPassCampaignsJob calculates metrics from billets] | 77|Success| |513|[M2_TrackPassCampaignsJob_Tests].[test TrackPassCampaignsJob creates new campaign] | 102|Success| |514|[M2_TrackPassCampaignsJob_Tests].[test TrackPassCampaignsJob only counts billets in time range] | 118|Success| |515|[M2_TrackPassCampaignsJob_Tests].[test TrackPassCampaignsJob preserves offset values] | 114|Success| |516|[M2_TrackPassCampaignsJob_Tests].[test TrackPassCampaignsJob skips deleted carriers] | 110|Success| |517|[M2_TrackPassCampaignsJob_Tests].[test TrackPassCampaignsJob skips inactive passes] | 163|Success| |518|[M2_TrackPassCampaignsJob_Tests].[test TrackPassCampaignsJob updates existing campaign] | 110|Success| -------------------------------------------------------------------------------------------- Test Case Summary: 518 test case(s) executed, 518 succeeded, 0 skipped, 0 failed, 0 errored. --------------------------------------------------------------------------------------------