Current section
Files
Jump to
Current section
Files
priv/conformance/valid/personalization-valid.json
{
"$schema": "https://wpl.dev/schemas/wpl/v1.schema.json",
"version": "1.6.0",
"plan": {
"id": "plan_personalized_full",
"name": "Adaptive Strength Plan",
"description": "Exercises every action type and condition shape; nothing should fire INVALID_PERSONALIZATION_RULE.",
"type": "workout",
"visibility": "template",
"metadata": {
"tags": [
"personalization",
"adaptive"
],
"difficulty": "adaptive",
"estimated_duration_days": 28,
"language": "en"
},
"goals": [
{
"id": "goal_adapt",
"type": "primary",
"category": "strength",
"name": "Adapt to user constraints"
}
],
"personalization": {
"inputs": [
{
"id": "age",
"type": "number",
"source": "user.age"
},
{
"id": "experience",
"type": "string",
"source": "user.experience_level"
},
{
"id": "injuries",
"type": "array",
"source": "user.injuries"
},
{
"id": "has_barbell",
"type": "boolean",
"source": "user.equipment.barbell"
}
],
"rules": [
{
"id": "rule_senior_intensity",
"condition": {
"field": "age",
"op": "gte",
"value": 60
},
"actions": [
{
"type": "modify_intensity",
"scope": "plan",
"factor": 0.9,
"delta_percent": -10
},
{
"type": "increase_rest",
"scope": "plan",
"extra_seconds": 30
}
]
},
{
"id": "rule_beginner_volume",
"condition": {
"field": "experience",
"op": "eq",
"value": "beginner"
},
"actions": [
{
"type": "reduce_sets",
"scope": "phase",
"by": 1
},
{
"type": "add_warmup_time",
"scope": "day",
"extra_minutes": 5
}
]
},
{
"id": "rule_back_issue",
"condition": {
"operator": "and",
"conditions": [
{
"field": "injuries",
"op": "contains",
"value": "lower_back"
},
{
"field": "experience",
"op": "neq",
"value": "advanced"
}
]
},
"actions": [
{
"type": "exclude_exercise",
"scope": "plan",
"exercise_ref": "deadlift"
},
{
"type": "replace_exercise",
"scope": "plan",
"from": "back_squat",
"to": "leg_press"
}
]
},
{
"id": "rule_no_barbell",
"condition": {
"field": "has_barbell",
"op": "eq",
"value": false
},
"actions": [
{
"type": "modify_exercise",
"scope": "activity",
"modality": "dumbbell"
}
]
}
]
},
"phases": [
{
"id": "phase_1",
"name": "Block 1",
"order": 1,
"duration": {
"value": 1,
"unit": "weeks"
},
"weeks": [
{
"id": "wk_1",
"name": "Week 1",
"order": 1,
"days": [
{
"id": "d_1",
"day_of_week": 1,
"name": "Day 1",
"type": "training"
}
]
}
]
}
]
}
}