Phase 6 of the #391 migration — deliberately deferred until Apple removes xcresulttool --legacy, because the cross-backend differential (#450) only proves parity while both backends run, and it should keep running as long as it can.
Trigger: the toolchain-drift workflow (#392/#442) files/updates its drift issue when xcrun xcresulttool version stops reporting the legacy commands format version marker. That alarm is the signal to do this work — not before.
Scope when it fires:
- Remove the XCResultKit dependency from Package.swift / Package.resolved.
- Delete Sources/XCTestHTMLReportCore/Classes/ResultReading/Legacy/ wholesale (LegacyResultReader + ResultFile, the only XCResultKit importers).
- Retire DifferentialTests, KnownLossMasker, and the allow-list (their job is done); keep the modern-leg tests as the only suite.
- Simplify ResultBackend: legacy becomes a clear error, auto = modern.
- The spec notes the failure-row hoist rule (R8) and legacy-shaped scaffold constraints become deletable at this point; the redesign may restore native nesting if it wants (see the spec's Task 12 execution rules).
- Drop the forced-modern CI leg (redundant once modern is the only backend).
No milestone on purpose — this lands on Apple's schedule, not ours. Refs #391, #450, #392.
Reactions are currently unavailable
Phase 6 of the #391 migration — deliberately deferred until Apple removes xcresulttool --legacy, because the cross-backend differential (#450) only proves parity while both backends run, and it should keep running as long as it can.
Trigger: the toolchain-drift workflow (#392/#442) files/updates its drift issue when xcrun xcresulttool version stops reporting the legacy commands format version marker. That alarm is the signal to do this work — not before.
Scope when it fires:
No milestone on purpose — this lands on Apple's schedule, not ours. Refs #391, #450, #392.