Progression Policy
The Progression Policy (POLICY_TYPE_PROGRESSION) controls automated behaviors related to participant progression through tournament structures, including qualifier placement, double-exit BYE propagation, and qualifier replacement rules.
Policy Type: progression
When to Use:
- Automatically placing qualifiers into main draws
- Controlling BYE propagation in double-exit scenarios
- Managing qualifier replacement when matchUp outcomes change
- Automating participant flow between structures
- Enforcing federation-specific progression rules
Policy Structure
{
progression: {
policyName?: string; // Optional policy identifier
doubleExitPropagateBye?: boolean; // BYE instead of WALKOVER (default: false)
autoPlaceQualifiers?: boolean; // Auto-place qualifiers (default: false)
autoReplaceQualifiers?: boolean; // Replace if winningSide changes (default: false)
autoRemoveQualifiers?: boolean; // Remove if winningSide cleared (default: false)
}
}
Attributes:
-
doubleExitPropagateBye: When
true, a BYE propagates to loser position instead of producing a WALKOVER in double-exit structures. Significant for providers who don't award ranking points for first-round walkovers. -
autoPlaceQualifiers: When
true, qualifiers are randomly assigned to qualifier positions in the main draw when qualifying completes. -
autoReplaceQualifiers: When
true, placed qualifiers will be replaced in target structures if the qualifying matchUp'swinningSideis changed. -
autoRemoveQualifiers: When
true, placed qualifiers will be removed from target structures if the qualifying matchUp'swinningSideis removed.
Default Policy
import { POLICY_PROGRESSION_DEFAULT } from 'tods-competition-factory';
// Defaults:
// {
// progression: {
// doubleExitPropagateBye: false, // Produce walkovers (standard)
// autoPlaceQualifiers: false, // Manual qualifier placement
// autoReplaceQualifiers: false, // Manual replacement
// autoRemoveQualifiers: false // Manual removal
// }
// }
Double-Exit BYE Propagation
Standard Behavior (default: false)
// When a participant withdraws before their first match in a double-exit structure:
// Opponent gets a WALKOVER win → advances
// Loser bracket receives a WALKOVER (may award ranking points)
const standardPolicy = {
[POLICY_TYPE_PROGRESSION]: {
policyName: 'Standard Progression',
doubleExitPropagateBye: false // Default
}
};
BYE Propagation (doubleExitPropagateBye: true)
// When a participant withdraws before their first match:
// Opponent gets a BYE → advances
// Loser bracket receives a BYE (no ranking points)
const byePropagationPolicy = {
[POLICY_TYPE_PROGRESSION]: {
policyName: 'BYE Propagation',
doubleExitPropagateBye: true // BYE instead of WALKOVER
}
};
tournamentEngine.attachPolicies({
policyDefinitions: byePropagationPolicy
});
Use Cases:
- ITF events where first-round walkovers don't award ranking points
- Tournaments wanting consistent BYE handling
- Federations with specific walkover policies
Automatic Qualifier Placement
Manual Placement (default: false)
// Default: tournament directors manually place qualifiers
const manualPlacement = {
[POLICY_TYPE_PROGRESSION]: {
autoPlaceQualifiers: false // Default
}
};
// Manual placement workflow:
// 1. Qualifying completes
// 2. TD reviews qualifiers
// 3. TD manually assigns qualifiers to main draw positions
Automatic Placement (autoPlaceQualifiers: true)
// Qualifiers automatically placed when qualifying completes
const autoPlacement = {
[POLICY_TYPE_PROGRESSION]: {
policyName: 'Auto Qualifier Placement',
autoPlaceQualifiers: true // Automatic random assignment
}
};
tournamentEngine.attachPolicies({
policyDefinitions: autoPlacement
});
// Automatic workflow:
// 1. Qualifying completes
// 2. Qualifiers automatically assigned to available qualifier positions
// 3. Random distribution among available qualifier slots
Use Cases:
- Streamlined tournament operations
- Events with many qualifiers
- Automated tournament management systems
- Consistency in qualifier placement
Qualifier Replacement and Removal
Replacement on winningSide Change
const replacementPolicy = {
[POLICY_TYPE_PROGRESSION]: {
policyName: 'Auto Replacement',
autoPlaceQualifiers: true, // Enable automatic placement
autoReplaceQualifiers: true // Replace if outcome changes
}
};
// Scenario:
// 1. Qualifier A wins final qualifying matchUp → placed in main draw
// 2. Referee changes winningSide to Qualifier B → A removed, B placed
// 3. Main draw automatically updated
Removal on winningSide Cleared
const removalPolicy = {
[POLICY_TYPE_PROGRESSION]: {
policyName: 'Auto Removal',
autoPlaceQualifiers: true,
autoRemoveQualifiers: true // Remove if winningSide cleared
}
};
// Scenario:
// 1. Qualifier A placed in main draw
// 2. Referee clears winningSide from qualifying matchUp
// 3. Qualifier A automatically removed from main draw
Combined Replacement and Removal
const fullAutomation = {
[POLICY_TYPE_PROGRESSION]: {
policyName: 'Full Qualifier Automation',
autoPlaceQualifiers: true, // Auto-place when qualifying completes
autoReplaceQualifiers: true, // Replace if winningSide changes
autoRemoveQualifiers: true // Remove if winningSide cleared
}
};
tournamentEngine.attachPolicies({
policyDefinitions: fullAutomation
});
Real-World Examples
ITF Event With BYE Propagation
import { POLICY_TYPE_PROGRESSION } from 'tods-competition-factory';
// ITF rules: first-round walkovers don't award ranking points
const itfProgressionPolicy = {
[POLICY_TYPE_PROGRESSION]: {
policyName: 'ITF Progression',
doubleExitPropagateBye: true, // Use BYEs instead of walkovers
autoPlaceQualifiers: false // Manual qualifier placement (ITF standard)
}
};
tournamentEngine.attachPolicies({
policyDefinitions: itfProgressionPolicy
});
Automated Tournament System
// Fully automated progression for online tournament platform
const automatedProgressionPolicy = {
[POLICY_TYPE_PROGRESSION]: {
policyName: 'Fully Automated Progression',
doubleExitPropagateBye: false,
autoPlaceQualifiers: true,
autoReplaceQualifiers: true,
autoRemoveQualifiers: true
}
};
// Benefits:
// - No manual intervention needed
// - Real-time updates as qualifying completes
// - Automatic corrections if results change
// - Consistent behavior across all events
Conservative Manual Control
// Tournament director maintains full control
const manualControlPolicy = {
[POLICY_TYPE_PROGRESSION]: {
policyName: 'Manual Control',
doubleExitPropagateBye: false, // Standard walkovers
autoPlaceQualifiers: false, // Manual placement
autoReplaceQualifiers: false, // Manual replacement
autoRemoveQualifiers: false // Manual removal
}
};
// Use when:
// - Special considerations for qualifier placement
// - Seeding adjustments needed
// - Complex multi-event scenarios
// - TD preference for manual control
Policy Application
Event-Level Progression
// Different progression rules for different events
tournamentEngine.attachPolicies({
policyDefinitions: {
[POLICY_TYPE_PROGRESSION]: {
autoPlaceQualifiers: true,
autoReplaceQualifiers: true
}
},
eventId: 'singles-event-id'
});
tournamentEngine.attachPolicies({
policyDefinitions: {
[POLICY_TYPE_PROGRESSION]: {
autoPlaceQualifiers: false // Manual for doubles
}
},
eventId: 'doubles-event-id'
});
Notes
- Default behavior: All automation features disabled for maximum control
- doubleExitPropagateBye: Only affects double-exit structures (e.g., double-elimination, Curtis Consolation)
- autoPlaceQualifiers: Requires qualifier positions defined in main draw
- autoReplaceQualifiers: Only works when
autoPlaceQualifiers: true - autoRemoveQualifiers: Only works when
autoPlaceQualifiers: true - Policies affect progression between linked structures
- Tournament-level policy applies to all events unless overridden
- Event-level policy overrides tournament-level settings
- Automatic placement is random among available qualifier positions
- BYE vs. WALKOVER distinction important for ranking points
- Qualifier replacement preserves draw integrity
- Manual control allows for special seeding considerations
Related Concepts
- Draw Structures - Understanding structure types
- Draw Types - Double-exit and qualifying scenarios