Capture pipeline
Every channel funnels respondent answers into the same idempotent capture into response.transaction. There are three entry points, all converging on the repository's capture / saveProgress methods (packages/adapters/src/repositories/responses.ts):
Completion runtime
The completion runtime is the public, respondent-facing survey page served at /s/:surveyId (frontend/src/pages/SurveyCompletionPage.tsx). It reads a published survey, renders it page by page, persists progress as the respondent advances, and finalises on submit. It talks only to the unauthenticated /public/surveys/* endpoints — there is no tenant session.