2.2 KiB
2.2 KiB
Wizard Auto-Skip Detection - Implementation Guide
Problem
iRacing wizard auto-skips steps 8-10 when defaults are acceptable, causing Step 8→11 jump that breaks automation validation.
Solution Architecture
3 Core Methods (Infrastructure Layer Only)
1. Detection - detectActualWizardPage(): Promise<number | null>
// Check which #set-* container exists
const mapping = {
'#set-cars': 8, '#set-track': 11, '#set-time-limit': 7,
// ... other steps
};
// Return step number of first found container
2. Synchronization - synchronizeStepCounter(expected: number): Promise<StepSyncResult>
const actual = await this.detectActualWizardPage();
if (actual > expected) {
return {
skippedSteps: [expected...actual-1], // e.g., [8,9,10]
actualStep: actual
};
}
3. Execution Integration - Modify executeStep()
async executeStep(stepId: StepId, config) {
if (this.isRealMode()) {
const sync = await this.synchronizeStepCounter(step);
if (sync.skippedSteps.length > 0) {
sync.skippedSteps.forEach(s => this.handleSkippedStep(s)); // Log only
return this.executeStepLogic(sync.actualStep, config);
}
}
return this.executeStepLogic(step, config);
}
TDD Plan (4 Phases)
- Unit: Test detection returns correct step number
- Unit: Test sync calculates skipped steps correctly
- Integration: Test executeStep handles skips
- E2E: Verify real wizard behavior
Key Decisions
| Aspect | Choice | Why |
|---|---|---|
| Detection | Container existence | Fast, reliable, already mapped |
| Timing | Pre-execution | Clean separation, testable |
| Skip Handling | Log + no-op | Wizard handled it, no validation needed |
| Layer | Infrastructure only | Playwright-specific |
Success Criteria
- ✅ Step 8→11 skip detected and handled
- ✅ All existing tests pass unchanged
- ✅ Detection <50ms overhead
- ✅ Clear logging for debugging
Files Modified
PlaywrightAutomationAdapter.ts(3 new methods + executeStep modification)- Tests: 3 new test files (unit, integration, E2E)
Complete design: WIZARD_AUTO_SKIP_DESIGN.md