# Recipe: add a step

<!-- funnelsgrove:generated:start contract-v3/recipe/add-step -->
Step contract version: `3`

Contract hash: `d761e91d5ac6ff9e72c6d49c5bcd014270912473a66f99c49d726c65998085cf`

| Capability | Allowed types | Allowed identities | Required owner |
| --- | --- | --- | --- |
| `browser-registration-completed` | _None_ | _None_ | `trusted-subscription-claim-server` |
| `checkout` | `paywall_offer`, `upsell_offer`, `checkout` | `any` | `named-payment-helpers` |
| `choice-write` | `single_step_choice`, `single_step_choice_emoji`, `multi_select_choice` | `any` | `useStepChoices` |
| `email-capture` | `form_input` | `email-capture` | `submitEmailCapture` |
| `hardcoded-navigation` | _None_ | _None_ | `manifest-flow-controller` |
| `provider-direct-analytics` | _None_ | _None_ | `analytics-adapter-outbox` |
| `subscription-handoff` | `subscription_handoff`, `purchase_completed` | `any` | `runtime-handoff-helper` |
| `subscription-management` | `subscription_management`, `cancellation_offer` | `any` | `runtime-subscription-helpers` |
<!-- funnelsgrove:generated:end contract-v3/recipe/add-step -->

## Procedure

1. Choose the exact type from the [step-type index](../steps/INDEX.md).
2. Add the component and exported metadata.
3. Add matching manifest metadata, path, file path, and component key.
4. Add the registry entry.
5. Add content/editor definitions and registry entries only when builder-editable.
6. Add manifest edges, branches, assets, and tests required by the behavior.
7. Start from the type’s golden fixture and preserve answer/helper semantics.
8. Run focused tests, then `fgrove validate`.

## Manual QA

Render at all default breakpoints; test keyboard/pointer interaction, refresh/back/exit, answer persistence, lifecycle events, and every outgoing route. The recipe is complete only when the matching QA checklist passes.
