Use one lifecycle-complete contract for completion funnels

A multi-step completion funnel needs one canonical lifecycle contract. Define the eligible denominator, durable opened and started milestones, per-step reached, attempted, completed, and failed outcomes, and one true user-task-completed milestone.

Do not use an intermediate submission event or a parent entity’s terminal status as a proxy unless the product contract makes them equivalent. Keep fraud or verification outcome separate from whether the user finished the requested work.

This applies to flows with optional or configured steps, retries, security gates, and post-submit work. It is a contract method, not a claim about current production rates.