PR #TBD — Making the First Win Reach S10
The Decision
Task 4 of gh:#2310 asked whether first_win_loop.py was still dead code after the onboarding
engine wiring work. A fresh read of the wizard and Vizor flow showed that S10 existed in the
state machine, but neither live surface called execute_first_win_cycle().
The fate decision is therefore to keep and wire the module. Its git-diff-based
verify_first_win_effect() helper has no equivalent helper elsewhere in the codebase, so it
remains the single-purpose verification helper rather than being duplicated or replaced.
What Changed
The wizard now runs the first-win cycle after an accepted remediation and reports the resulting
S10 state. The Vizor onboarding step endpoint uses the same cycle when the requested stage is
S10_BuildExperience. A flow-level test drives cmd_wizard_init, including the accepted first-win
path, and verifies the persisted state reaches S10.
This closes the gap that let the original first-win module pass isolated tests while remaining unreachable from onboarding.