Render donation details and radiobutton list of cancellation reasons (should be the same list as donor relations can select from in the dropdown on the cancel form in CiviCRM) Add code comments both in the new code and where that dropdown is defined to the effect that they need to stay synchronized.
Submit button sends message to recurring-modify queue with cancel_reason and shows a confirmation page with links to main donor portal page and donatewiki.
Update RecurringModifyQueueConsumer to handle cancellations, recording the cancel_reason.
Cancel button returns to main donor portal page.