9ddea840dd
`run_campaign_returning` runs the resolve->execute body and returns a `CampaignRun` bundle (outcome + campaign/strategies/server); `present_campaign` consumes it for the stdout tail; `run_campaign_by_id` becomes their composition. Behaviour-preserving — the existing campaign + sweep-sugar e2e stay green (research_docs 54/0 incl. the real-data e2e, sweep dissolution e2e green). Exposes the outcome so the forthcoming generalize sugar can read it without the presentation tail. refs #210