Introduces RunFinishOutcome — a semantic record that wraps the wire FinishResponseDto with the controller-side WasFullClear signal used to fire the challenge_full_clear mission event. The wire response isn't affected (controller unwraps the .Response field before returning to the client); RetireAsync stays returning FinishResponseDto because retire cannot full-clear. Full-clear detection compares run.WinCount against ResolveMaxBattleCountAsync rather than hard-coding 5, so a future TK2 rules-config change tracks automatically. New test covers the full-clear signal explicitly. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
1.1 KiB
1.1 KiB