@bitcobblers/wod-wiki-tools 0.0.0-stage → 0.36.2134
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin/wod.cjs +3543 -0
- package/dist/bin/wod.cjs.map +1 -0
- package/dist/bin/wod.d.cts +1 -0
- package/dist/bin/wod.d.ts +1 -0
- package/dist/bin/wod.mjs +27 -0
- package/dist/bin/wod.mjs.map +1 -0
- package/dist/chunk-32FASQP5.mjs +123 -0
- package/dist/chunk-32FASQP5.mjs.map +1 -0
- package/dist/chunk-6L5ZDZJ7.mjs +15 -0
- package/dist/chunk-6L5ZDZJ7.mjs.map +1 -0
- package/dist/chunk-B3QJYJVI.mjs +2061 -0
- package/dist/chunk-B3QJYJVI.mjs.map +1 -0
- package/dist/chunk-EUQWEX6Z.mjs +253 -0
- package/dist/chunk-EUQWEX6Z.mjs.map +1 -0
- package/dist/chunk-K3GZZFAC.mjs +300 -0
- package/dist/chunk-K3GZZFAC.mjs.map +1 -0
- package/dist/compiler-KT6P3AC6.mjs +730 -0
- package/dist/compiler-KT6P3AC6.mjs.map +1 -0
- package/dist/index.cjs +3548 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +356 -0
- package/dist/index.d.ts +356 -0
- package/dist/index.mjs +12 -0
- package/dist/index.mjs.map +1 -0
- package/dist/server/app.cjs +299 -0
- package/dist/server/app.cjs.map +1 -0
- package/dist/server/app.d.cts +24 -0
- package/dist/server/app.d.ts +24 -0
- package/dist/server/app.mjs +9 -0
- package/dist/server/app.mjs.map +1 -0
- package/dist/server-3TJZDKQC.mjs +11 -0
- package/dist/server-3TJZDKQC.mjs.map +1 -0
- package/dist/web/playground/ai-skills/parse.md +656 -0
- package/dist/web/playground/assets/main-Bhn9NHgQ.css +2 -0
- package/dist/web/playground/assets/main-Bj_mxNMk.js +212 -0
- package/dist/web/playground/assets/rolldown-runtime-C0FnF6B9.js +1 -0
- package/dist/web/playground/assets/statementBuilderFlow-DXlHS86r.js +2 -0
- package/dist/web/playground/assets/vendor-BlJqgFME.js +201 -0
- package/dist/web/playground/assets/vendor-codemirror-BtJgoBjf.js +40 -0
- package/dist/web/playground/fonts/Inter-Regular.woff2 +0 -0
- package/dist/web/playground/fonts/Inter-SemiBold.woff2 +0 -0
- package/dist/web/playground/images/hero/editing.png +0 -0
- package/dist/web/playground/images/hero/journal.png +0 -0
- package/dist/web/playground/images/hero/results.png +0 -0
- package/dist/web/playground/images/hero/timer.png +0 -0
- package/dist/web/playground/images/wod-wiki-logo-dark.png +0 -0
- package/dist/web/playground/images/wod-wiki-logo-light.png +0 -0
- package/dist/web/playground/index.html +60 -0
- package/dist/web/playground/seed/core/chunks/canvas.054cd7db.json +1 -0
- package/dist/web/playground/seed/core/chunks/template.e5e0e82d.json +1 -0
- package/dist/web/playground/seed/core/manifest.json +24 -0
- package/dist/web/playground/seed/core/report.html +43 -0
- package/dist/web/server/ai-skills/parse.md +656 -0
- package/dist/web/server/assets/main-Bhn9NHgQ.css +2 -0
- package/dist/web/server/assets/main-CfAVkURA.js +211 -0
- package/dist/web/server/assets/rolldown-runtime-C0FnF6B9.js +1 -0
- package/dist/web/server/assets/statementBuilderFlow-CXugzTXB.js +2 -0
- package/dist/web/server/assets/vendor-BlJqgFME.js +201 -0
- package/dist/web/server/assets/vendor-codemirror-BtJgoBjf.js +40 -0
- package/dist/web/server/fonts/Inter-Regular.woff2 +0 -0
- package/dist/web/server/fonts/Inter-SemiBold.woff2 +0 -0
- package/dist/web/server/images/hero/editing.png +0 -0
- package/dist/web/server/images/hero/journal.png +0 -0
- package/dist/web/server/images/hero/results.png +0 -0
- package/dist/web/server/images/hero/timer.png +0 -0
- package/dist/web/server/images/wod-wiki-logo-dark.png +0 -0
- package/dist/web/server/images/wod-wiki-logo-light.png +0 -0
- package/dist/web/server/index.html +60 -0
- package/dist/web/server/seed/core/chunks/canvas.054cd7db.json +1 -0
- package/dist/web/server/seed/core/chunks/template.e5e0e82d.json +1 -0
- package/dist/web/server/seed/core/manifest.json +24 -0
- package/dist/web/server/seed/core/report.html +43 -0
- package/package.json +46 -4
- package/README.md +0 -3
|
@@ -0,0 +1,656 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: wod-extraction
|
|
3
|
+
description: 'Extract and convert any workout description into WOD Wiki syntax. Understands workout intent to determine which metrics to collect (time, reps, distance, weight) based on the workout type and structure.'
|
|
4
|
+
license: MIT
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# WOD Extraction — Converting Workouts to Whiteboard Script
|
|
8
|
+
|
|
9
|
+
## Overview
|
|
10
|
+
|
|
11
|
+
Take any workout description — from a whiteboard photo, a coach's programming post, a competition event description, or a casual text message — and produce well-formed WOD Wiki syntax that captures both the workout structure and the **implied measurements** the athlete cares about.
|
|
12
|
+
|
|
13
|
+
## When to Use
|
|
14
|
+
|
|
15
|
+
Use this skill when:
|
|
16
|
+
|
|
17
|
+
- A user provides a workout in plain English (or any natural language) and wants it converted to WOD Wiki syntax
|
|
18
|
+
- A user asks to "write this workout in wod syntax" or "encode this workout"
|
|
19
|
+
- A competition workout needs to be transcribed into the project's `wod/` library
|
|
20
|
+
- The user wants help understanding what metrics a workout is tracking
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Core Concept: What Does the Athlete Want to Measure?
|
|
25
|
+
|
|
26
|
+
The fundamental insight behind WOD Wiki syntax is that **every workout implies what should be measured**. The syntax encodes both the workout prescription AND the collectible metrics. Understanding the workout's intent lets you choose the right syntax.
|
|
27
|
+
|
|
28
|
+
| Workout Intent | What the Athlete Measures | Syntax Signal |
|
|
29
|
+
|---|---|---|
|
|
30
|
+
| "For Time" | **Time** to complete | Use `:?` (collectible timer) or `^:?` (count-up collectible) on the overall set |
|
|
31
|
+
| "AMRAP in X minutes" | **Rounds** completed | Use a fixed timer like `20:00` with a label `AMRAP` |
|
|
32
|
+
| "EMOM for X minutes" | **Completion** within each interval | Use `(rounds) :60 EMOM` pattern |
|
|
33
|
+
| "Run for 20 minutes" | **Distance** covered | Use fixed timer + `?m` or `?mile` (collectible distance) |
|
|
34
|
+
| "Run 5K" | **Time** it took | Use distance `5000m` or `5km` + `:?` (collectible timer) |
|
|
35
|
+
| "Work up to a heavy single" | **Weight** achieved | Use `?lb` or `?kg` (collectible resistance) |
|
|
36
|
+
| "Max reps in 1 minute" | **Reps** performed | Use fixed timer + `?` (collectible reps) |
|
|
37
|
+
| "X reps at fixed weight" | **Time** to complete | Reps are specified, weight is specified, time is the unknown |
|
|
38
|
+
|
|
39
|
+
### The Collectible Rule
|
|
40
|
+
|
|
41
|
+
When a value is **prescribed** (given to the athlete), write it literally. When a value is the **outcome** (what the athlete discovers by doing the workout), use the `?` placeholder to make it collectible:
|
|
42
|
+
|
|
43
|
+
- `?` — collectible reps (how many did you do?)
|
|
44
|
+
- `:?` — collectible timer (how long did it take?)
|
|
45
|
+
- `^:?` — collectible count-up timer (elapsed time, counting up)
|
|
46
|
+
- `?lb` / `?kg` — collectible resistance (what weight did you reach?)
|
|
47
|
+
- `?m` / `?mile` / `?km` — collectible distance (how far did you go?)
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## Whiteboard Script Reference
|
|
52
|
+
|
|
53
|
+
### Statement Structure
|
|
54
|
+
|
|
55
|
+
Each line in a WOD Wiki script is a **statement**. A statement can contain any combination of these fragments, in any order:
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
[group-prefix] [rounds] [timer] [reps] [effort] [resistance] [distance] [action]
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Indentation creates parent-child relationships: indented lines are children of the nearest less-indented line above them.
|
|
62
|
+
|
|
63
|
+
### Fragment Reference
|
|
64
|
+
|
|
65
|
+
#### Timer — Duration/Time
|
|
66
|
+
```
|
|
67
|
+
5:00 → 5 minutes (countdown timer)
|
|
68
|
+
1:30 → 1 minute 30 seconds
|
|
69
|
+
:30 → 30 seconds
|
|
70
|
+
1:00:00 → 1 hour
|
|
71
|
+
^5:00 → 5 minutes, counting UP (^ modifier)
|
|
72
|
+
:? → collectible timer (athlete records elapsed time)
|
|
73
|
+
^:? → collectible count-up timer
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
#### Reps — Repetition Count
|
|
77
|
+
```
|
|
78
|
+
21 → 21 reps (when followed by an effort/exercise name)
|
|
79
|
+
? → collectible reps (athlete records how many they did)
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Note: A bare number is interpreted as reps when it precedes an effort (exercise name). Numbers adjacent to distance/weight units are parsed as part of those fragments instead.
|
|
83
|
+
|
|
84
|
+
#### Effort — Exercise Name
|
|
85
|
+
```
|
|
86
|
+
Thrusters → exercise name (single word)
|
|
87
|
+
Clean & Jerk → exercise name (multi-word, parsed as consecutive identifiers)
|
|
88
|
+
Air Squats → exercise name
|
|
89
|
+
KB Swings → exercise name
|
|
90
|
+
Rest → rest period (when combined with a timer like :30 Rest)
|
|
91
|
+
AMRAP → label (when combined with a timer like 20:00 AMRAP)
|
|
92
|
+
EMOM → label (when combined with rounds+timer like (30) :60 EMOM)
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
#### Resistance — Weight/Load
|
|
96
|
+
```
|
|
97
|
+
95lb → 95 pounds
|
|
98
|
+
32kg → 32 kilograms
|
|
99
|
+
bw → bodyweight
|
|
100
|
+
1.5bw → 1.5x bodyweight
|
|
101
|
+
?lb → collectible weight in pounds
|
|
102
|
+
?kg → collectible weight in kilograms
|
|
103
|
+
@135lb → resistance with @ prefix (alternative notation)
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
#### Distance
|
|
107
|
+
```
|
|
108
|
+
400m → 400 meters
|
|
109
|
+
1000m → 1000 meters
|
|
110
|
+
1mile → 1 mile
|
|
111
|
+
5km → 5 kilometers
|
|
112
|
+
?m → collectible distance in meters
|
|
113
|
+
?mile → collectible distance in miles
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
#### Rounds — Repetition Structure
|
|
117
|
+
```
|
|
118
|
+
(3) → repeat children 3 times
|
|
119
|
+
(5) → repeat children 5 times
|
|
120
|
+
(21-15-9) → 3 rounds, with 21 reps first, then 15, then 9
|
|
121
|
+
(50-40-30-20-10) → 5 rounds with descending reps
|
|
122
|
+
(10-9-8-7-6-5-4-3-2-1) → 10 rounds descending by 1
|
|
123
|
+
(EMOM) → named round label
|
|
124
|
+
(Warmup) → named round label
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
#### Group Prefix — Child Relationship Type
|
|
128
|
+
```
|
|
129
|
+
- → "round" group: each child line runs as a separate step within the round
|
|
130
|
+
+ → "compose" group: consecutive + lines are bundled into a single composed set
|
|
131
|
+
(no prefix) → "repeat" group: default when a line is indented under a parent
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
The distinction between `-` and `+`:
|
|
135
|
+
- **`-` (round)**: Lines run sequentially as separate steps. Use when exercises are done one at a time in order.
|
|
136
|
+
- **`+` (compose)**: Lines are combined into a single logical set. Use for EMOMs, complexes, or supersets where all exercises are done together within each round.
|
|
137
|
+
|
|
138
|
+
#### Action — Side-Effect Commands
|
|
139
|
+
```
|
|
140
|
+
[:action-name] → triggers a named action (e.g., sound, event)
|
|
141
|
+
[:!pinned] → pinned action (persists across rounds)
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
#### Trend — Increment Modifier
|
|
145
|
+
```
|
|
146
|
+
^ → increment/trend up modifier (when standalone, not before timer)
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### Indentation Rules
|
|
150
|
+
|
|
151
|
+
Indentation defines the hierarchical structure of a workout:
|
|
152
|
+
|
|
153
|
+
```time
|
|
154
|
+
(3) ← parent: 3 rounds
|
|
155
|
+
400m Run ← child: runs within each round (implicitly "repeat" group)
|
|
156
|
+
21 KB Swings 53lb ← child: runs within each round
|
|
157
|
+
12 Pullups ← child: runs within each round
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
Children inherit the round count from their parent. Deeper indentation creates deeper nesting.
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## Conversion Patterns
|
|
165
|
+
|
|
166
|
+
### Pattern 1: "For Time" Workouts
|
|
167
|
+
|
|
168
|
+
The athlete is prescribed the work. The measurement is **how long it takes**.
|
|
169
|
+
|
|
170
|
+
**Natural language:**
|
|
171
|
+
> Fran: 21-15-9 Thrusters (95lb) and Pullups, for time
|
|
172
|
+
|
|
173
|
+
**WOD Wiki syntax:**
|
|
174
|
+
```time
|
|
175
|
+
(21-15-9)
|
|
176
|
+
Thrusters 95lb
|
|
177
|
+
Pullups
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
The time is the collectible — the system tracks it automatically via the round structure. No explicit `:?` is needed because the runtime measures elapsed time for all "for time" workouts by default.
|
|
181
|
+
|
|
182
|
+
### Pattern 2: AMRAP (As Many Rounds As Possible)
|
|
183
|
+
|
|
184
|
+
The athlete is given a fixed time. The measurement is **rounds completed**.
|
|
185
|
+
|
|
186
|
+
**Natural language:**
|
|
187
|
+
> 20-minute AMRAP: 5 pullups, 10 pushups, 15 air squats
|
|
188
|
+
|
|
189
|
+
**WOD Wiki syntax:**
|
|
190
|
+
```time
|
|
191
|
+
20:00 AMRAP
|
|
192
|
+
5 Pullups
|
|
193
|
+
10 Pushups
|
|
194
|
+
15 Air Squats
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
The timer `20:00` is the prescribed duration. `AMRAP` is an effort label. The round count is the collectible — tracked automatically.
|
|
198
|
+
|
|
199
|
+
### Pattern 3: EMOM (Every Minute On the Minute)
|
|
200
|
+
|
|
201
|
+
The athlete is given intervals. The measurement is **completion within each interval**.
|
|
202
|
+
|
|
203
|
+
**Natural language:**
|
|
204
|
+
> EMOM 30 minutes: 5 pullups, 10 pushups, 15 air squats
|
|
205
|
+
|
|
206
|
+
**WOD Wiki syntax:**
|
|
207
|
+
```time
|
|
208
|
+
(30) :60 EMOM
|
|
209
|
+
+ 5 Pullups
|
|
210
|
+
+ 10 Pushups
|
|
211
|
+
+ 15 Air Squats
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
The `+` prefix composes the exercises into a single set done each minute. `(30)` is rounds. `:60` is the interval timer. `EMOM` is a label.
|
|
215
|
+
|
|
216
|
+
### Pattern 4: Timed Intervals with Rest
|
|
217
|
+
|
|
218
|
+
**Natural language:**
|
|
219
|
+
> 4 rounds of 100m swim with 30 seconds rest
|
|
220
|
+
|
|
221
|
+
**WOD Wiki syntax:**
|
|
222
|
+
```time
|
|
223
|
+
(4) Warmup
|
|
224
|
+
100m Swim
|
|
225
|
+
:30 Rest
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### Pattern 5: Single-Modality For Time
|
|
229
|
+
|
|
230
|
+
**Natural language:**
|
|
231
|
+
> 150 wall ball shots at 20lb, for time
|
|
232
|
+
|
|
233
|
+
**WOD Wiki syntax:**
|
|
234
|
+
```time
|
|
235
|
+
150 Wall Ball Shots 20lb
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
### Pattern 6: Distance-Based With Known Prescription
|
|
239
|
+
|
|
240
|
+
**Natural language:**
|
|
241
|
+
> Row 1000m, then 50 thrusters at 45lb, then 30 pullups — for time
|
|
242
|
+
|
|
243
|
+
**WOD Wiki syntax:**
|
|
244
|
+
```time
|
|
245
|
+
1000m Row
|
|
246
|
+
50 Thrusters 45lb
|
|
247
|
+
30 Pullups
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
### Pattern 7: Max Weight / Working Up
|
|
251
|
+
|
|
252
|
+
When the goal is to find a max weight, the weight is the collectible.
|
|
253
|
+
|
|
254
|
+
**Natural language:**
|
|
255
|
+
> Work up to a 1-rep max clean & jerk
|
|
256
|
+
|
|
257
|
+
**WOD Wiki syntax:**
|
|
258
|
+
```time
|
|
259
|
+
1 Clean & Jerk ?lb
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
The `?lb` makes weight the collectible — the athlete enters what they achieved.
|
|
263
|
+
|
|
264
|
+
### Pattern 8: Max Reps in a Time Domain
|
|
265
|
+
|
|
266
|
+
**Natural language:**
|
|
267
|
+
> In 1 minute, do as many pushups as possible
|
|
268
|
+
|
|
269
|
+
**WOD Wiki syntax:**
|
|
270
|
+
```time
|
|
271
|
+
1:00 ? Pushups
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
The `?` makes reps the collectible.
|
|
275
|
+
|
|
276
|
+
### Pattern 9: Run for Time, Measure Distance
|
|
277
|
+
|
|
278
|
+
**Natural language:**
|
|
279
|
+
> Run for 20 minutes, record distance
|
|
280
|
+
|
|
281
|
+
**WOD Wiki syntax:**
|
|
282
|
+
```time
|
|
283
|
+
20:00 ?m Run
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
The timer is fixed. The distance `?m` is the collectible.
|
|
287
|
+
|
|
288
|
+
### Pattern 10: Run a Distance, Measure Time
|
|
289
|
+
|
|
290
|
+
**Natural language:**
|
|
291
|
+
> Run 5K for time
|
|
292
|
+
|
|
293
|
+
**WOD Wiki syntax:**
|
|
294
|
+
```time
|
|
295
|
+
5km Run
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
The distance is prescribed. The system automatically tracks time.
|
|
299
|
+
|
|
300
|
+
### Pattern 11: Complexes and Supersets
|
|
301
|
+
|
|
302
|
+
When exercises are done together as a unit (barbell complex, superset), use `+` group prefix.
|
|
303
|
+
|
|
304
|
+
**Natural language:**
|
|
305
|
+
> EMOM 20 minutes: 2 cleans, 1 press, 3 front squats
|
|
306
|
+
|
|
307
|
+
**WOD Wiki syntax:**
|
|
308
|
+
```time
|
|
309
|
+
(20) 1:00
|
|
310
|
+
+ 2 Clean
|
|
311
|
+
+ 1 Press
|
|
312
|
+
+ 3 Front Squat
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
### Pattern 12: Descending Rep Schemes
|
|
316
|
+
|
|
317
|
+
**Natural language:**
|
|
318
|
+
> 21-15-9 deadlifts at 225lb and handstand pushups
|
|
319
|
+
|
|
320
|
+
**WOD Wiki syntax:**
|
|
321
|
+
```time
|
|
322
|
+
(21-15-9)
|
|
323
|
+
Deadlift 225lb
|
|
324
|
+
Handstand Pushups
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
The `(21-15-9)` creates 3 rounds. The rep count for each round is encoded in the sequence. Exercises inherit the rep count from their parent round.
|
|
328
|
+
|
|
329
|
+
### Pattern 13: Multi-Section Workouts
|
|
330
|
+
|
|
331
|
+
When a workout has distinct phases (warmup, main set, cooldown), write each section as a separate top-level block.
|
|
332
|
+
|
|
333
|
+
**Natural language:**
|
|
334
|
+
> Warmup: 4x100m swim with 30s rest. Main set: 8x50m kick with 30s rest. Cooldown: 400m easy swim.
|
|
335
|
+
|
|
336
|
+
**WOD Wiki syntax:**
|
|
337
|
+
```time
|
|
338
|
+
(4) Warmup
|
|
339
|
+
100m Swim
|
|
340
|
+
:30 Rest
|
|
341
|
+
|
|
342
|
+
(8)
|
|
343
|
+
50m Kick
|
|
344
|
+
:30 Rest
|
|
345
|
+
|
|
346
|
+
400m Cooldown
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
### Pattern 14: With Structured Rest Between Rounds
|
|
350
|
+
|
|
351
|
+
**Natural language:**
|
|
352
|
+
> 5 rounds of 20 pullups, 30 pushups, 40 situps, 50 air squats. Rest 3 minutes between rounds.
|
|
353
|
+
|
|
354
|
+
**WOD Wiki syntax:**
|
|
355
|
+
```time
|
|
356
|
+
(5)
|
|
357
|
+
+ 20 Pullups
|
|
358
|
+
+ 30 Pushups
|
|
359
|
+
+ 40 Situps
|
|
360
|
+
+ 50 Air Squats
|
|
361
|
+
3:00 Rest
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
### Pattern 15: Bodyweight Percentage Loads
|
|
365
|
+
|
|
366
|
+
**Natural language:**
|
|
367
|
+
> 10-9-8-7-6-5-4-3-2-1 of Deadlift at 1.5x bodyweight, Bench Press at bodyweight, Clean at 0.75x bodyweight
|
|
368
|
+
|
|
369
|
+
**WOD Wiki syntax:**
|
|
370
|
+
```time
|
|
371
|
+
(10-9-8-7-6-5-4-3-2-1)
|
|
372
|
+
|
|
373
|
+
Deadlift 1.5bw
|
|
374
|
+
Bench Press 1bw
|
|
375
|
+
Clean 0.75bw
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
### Pattern 16: Timed Sections Within a Workout
|
|
379
|
+
|
|
380
|
+
**Natural language:**
|
|
381
|
+
> 5 minutes: 100 KB Swings at 70lb. 1 minute rest. 10 minutes: 10 Turkish Getups at 70lb.
|
|
382
|
+
|
|
383
|
+
**WOD Wiki syntax:**
|
|
384
|
+
```time
|
|
385
|
+
5:00 100 KB Swings 70lb
|
|
386
|
+
1:00 Rest
|
|
387
|
+
10:00 10 Turkish Getups 70lb
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
### Pattern 17: Competition Events (For Time with Mixed Modality)
|
|
391
|
+
|
|
392
|
+
**Natural language:**
|
|
393
|
+
> For time: Run 800 meters, 100 Pistols, 50 Pull-ups, Run 800 meters
|
|
394
|
+
|
|
395
|
+
**WOD Wiki syntax:**
|
|
396
|
+
```time
|
|
397
|
+
800m Run
|
|
398
|
+
100 Pistols
|
|
399
|
+
50 Pullups
|
|
400
|
+
800m Run
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
---
|
|
404
|
+
|
|
405
|
+
## Decision Framework
|
|
406
|
+
|
|
407
|
+
When converting a workout, follow this decision tree:
|
|
408
|
+
|
|
409
|
+
### Step 1: Identify the Workout Type
|
|
410
|
+
|
|
411
|
+
| Clue in Description | Workout Type | Key Syntax Element |
|
|
412
|
+
|---|---|---|
|
|
413
|
+
| "For time" | For Time | Reps/distance prescribed, time is outcome |
|
|
414
|
+
| "AMRAP", "as many rounds as possible" | AMRAP | `XX:00 AMRAP` with prescribed exercises |
|
|
415
|
+
| "EMOM", "every minute on the minute" | EMOM | `(N) :60 EMOM` with `+` grouped children |
|
|
416
|
+
| "Max reps", "as many as possible" | Max Reps | Fixed timer + `?` reps |
|
|
417
|
+
| "Max weight", "work to a heavy", "find your 1RM" | Max Weight | Exercise + `?lb` or `?kg` |
|
|
418
|
+
| "For distance", "run/row for X minutes" | For Distance | Fixed timer + `?m` or `?mile` |
|
|
419
|
+
| "Intervals", "X rounds of Y with rest" | Intervals | `(N)` rounds with exercises + `:XX Rest` |
|
|
420
|
+
| "Tabata" | Tabata | `(8) :20` work, `:10 Rest` pattern |
|
|
421
|
+
|
|
422
|
+
### Step 2: Determine What's Prescribed vs Collected
|
|
423
|
+
|
|
424
|
+
For each element of the workout, ask: **"Is this given to the athlete, or does the athlete discover it?"**
|
|
425
|
+
|
|
426
|
+
| Element | Prescribed (write literally) | Collected (use ?) |
|
|
427
|
+
|---|---|---|
|
|
428
|
+
| Time | `5:00`, `20:00`, `:30` | `:?` or `^:?` |
|
|
429
|
+
| Reps | `21`, `15`, `9` | `?` |
|
|
430
|
+
| Weight | `95lb`, `32kg` | `?lb`, `?kg` |
|
|
431
|
+
| Distance | `400m`, `5km` | `?m`, `?km` |
|
|
432
|
+
|
|
433
|
+
### Step 3: Determine Exercise Grouping
|
|
434
|
+
|
|
435
|
+
- **Sequential exercises** (done one at a time, in order): use no prefix or `-` prefix
|
|
436
|
+
- **Composed exercises** (done together as a set/complex): use `+` prefix
|
|
437
|
+
- **Exercises in rounds**: indent under a `(N)` parent
|
|
438
|
+
|
|
439
|
+
### Step 4: Assemble the Syntax
|
|
440
|
+
|
|
441
|
+
1. Write the round/time structure first (outermost container)
|
|
442
|
+
2. Indent child exercises under their parent
|
|
443
|
+
3. Add group prefixes (`+` or `-`) based on grouping intent
|
|
444
|
+
4. Include resistance with the exercise on the same line
|
|
445
|
+
5. Include distance with the movement on the same line
|
|
446
|
+
6. Add rest periods as separate lines when explicitly prescribed
|
|
447
|
+
|
|
448
|
+
---
|
|
449
|
+
|
|
450
|
+
## Common Mistakes to Avoid
|
|
451
|
+
|
|
452
|
+
### DON'T: Add collectible markers when the system tracks automatically
|
|
453
|
+
```diff
|
|
454
|
+
# BAD: :? is redundant — "for time" workouts track time by default
|
|
455
|
+
- (21-15-9)
|
|
456
|
+
- :? Thrusters 95lb
|
|
457
|
+
- Pullups
|
|
458
|
+
|
|
459
|
+
# GOOD: Just write the prescription
|
|
460
|
+
+ (21-15-9)
|
|
461
|
+
+ Thrusters 95lb
|
|
462
|
+
+ Pullups
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
### DON'T: Use `+` prefix when exercises are sequential (not composed)
|
|
466
|
+
```diff
|
|
467
|
+
# BAD: These are done one after another, not composed
|
|
468
|
+
- (3)
|
|
469
|
+
- + 400m Run
|
|
470
|
+
- + 21 KB Swings 53lb
|
|
471
|
+
- + 12 Pullups
|
|
472
|
+
|
|
473
|
+
# GOOD: No prefix needed for sequential exercises in rounds
|
|
474
|
+
+ (3)
|
|
475
|
+
+ 400m Run
|
|
476
|
+
+ 21 KB Swings 53lb
|
|
477
|
+
+ 12 Pullups
|
|
478
|
+
```
|
|
479
|
+
|
|
480
|
+
Use `+` only when exercises are done together within the same time interval (EMOMs, complexes, supersets).
|
|
481
|
+
|
|
482
|
+
### DON'T: Forget that rounds define the rep scheme
|
|
483
|
+
```diff
|
|
484
|
+
# BAD: Redundant reps when rounds already specify the scheme
|
|
485
|
+
- (21-15-9)
|
|
486
|
+
- 21 Thrusters 95lb
|
|
487
|
+
- 21 Pullups
|
|
488
|
+
|
|
489
|
+
# GOOD: Reps come from the round scheme, not the exercise line
|
|
490
|
+
+ (21-15-9)
|
|
491
|
+
+ Thrusters 95lb
|
|
492
|
+
+ Pullups
|
|
493
|
+
```
|
|
494
|
+
|
|
495
|
+
### DON'T: Mix units without proper syntax
|
|
496
|
+
```diff
|
|
497
|
+
# BAD: Weight unit with bare number and no unit
|
|
498
|
+
- 21 Thrusters 95
|
|
499
|
+
|
|
500
|
+
# GOOD: Always include the unit
|
|
501
|
+
+ 21 Thrusters 95lb
|
|
502
|
+
```
|
|
503
|
+
|
|
504
|
+
### DON'T: Write "For Time" or "For time" as a literal effort
|
|
505
|
+
```diff
|
|
506
|
+
# BAD: "For Time" is a workout descriptor, not an exercise
|
|
507
|
+
- For Time
|
|
508
|
+
- 100 Burpees
|
|
509
|
+
|
|
510
|
+
# GOOD: Just write the exercises — time tracking is implicit
|
|
511
|
+
+ 100 Burpees
|
|
512
|
+
```
|
|
513
|
+
|
|
514
|
+
---
|
|
515
|
+
|
|
516
|
+
## Output Format
|
|
517
|
+
|
|
518
|
+
When converting a workout, produce a markdown document with this structure:
|
|
519
|
+
|
|
520
|
+
````markdown
|
|
521
|
+
# Workout Name
|
|
522
|
+
|
|
523
|
+
**Category**: [CrossFit Benchmark | StrongFirst | Competition | Custom]
|
|
524
|
+
**Type**: [For Time | AMRAP | EMOM | Max Weight | Intervals]
|
|
525
|
+
**Difficulty**: [Beginner | Intermediate | Advanced]
|
|
526
|
+
|
|
527
|
+
## Description
|
|
528
|
+
Brief description of the workout.
|
|
529
|
+
|
|
530
|
+
```time
|
|
531
|
+
[WOD Wiki syntax here]
|
|
532
|
+
```
|
|
533
|
+
|
|
534
|
+
## Breakdown
|
|
535
|
+
- **Rounds/Duration**: ...
|
|
536
|
+
- **Exercises**: ...
|
|
537
|
+
- **Goal**: ...
|
|
538
|
+
|
|
539
|
+
## Collectible Metrics
|
|
540
|
+
- [What this workout measures and why]
|
|
541
|
+
````
|
|
542
|
+
|
|
543
|
+
The `## Collectible Metrics` section should explicitly state what the athlete is expected to record and why, tying back to the workout intent.
|
|
544
|
+
|
|
545
|
+
---
|
|
546
|
+
|
|
547
|
+
## Worked Examples
|
|
548
|
+
|
|
549
|
+
### Example 1: Converting a CrossFit Open Workout
|
|
550
|
+
|
|
551
|
+
**Input:**
|
|
552
|
+
> 24.3: For time — 10 thrusters (95/65), 10 chest-to-bar pull-ups, 10 thrusters (135/95), 10 bar muscle-ups, 10 thrusters (155/105), 10 bar muscle-ups. Time cap: 15 minutes.
|
|
553
|
+
|
|
554
|
+
**Analysis:**
|
|
555
|
+
- Type: For Time (time is the measurement)
|
|
556
|
+
- No repeating rounds — each line is a distinct movement at a distinct weight
|
|
557
|
+
- Time cap is prescribed context, not part of the syntax (it's metadata)
|
|
558
|
+
|
|
559
|
+
**Output:**
|
|
560
|
+
```time
|
|
561
|
+
10 Thrusters 95lb
|
|
562
|
+
10 Chest to Bar Pullups
|
|
563
|
+
10 Thrusters 135lb
|
|
564
|
+
10 Bar Muscle Ups
|
|
565
|
+
10 Thrusters 155lb
|
|
566
|
+
10 Bar Muscle Ups
|
|
567
|
+
```
|
|
568
|
+
|
|
569
|
+
### Example 2: Converting a Strength Session
|
|
570
|
+
|
|
571
|
+
**Input:**
|
|
572
|
+
> Back Squat: Work up to a heavy set of 3. Then 3x5 at 80% of that weight.
|
|
573
|
+
|
|
574
|
+
**Analysis:**
|
|
575
|
+
- Part 1: Max weight is the goal — weight is collectible
|
|
576
|
+
- Part 2: Prescribed reps and sets at a computed weight
|
|
577
|
+
|
|
578
|
+
**Output:**
|
|
579
|
+
```time
|
|
580
|
+
3 Back Squat ?lb
|
|
581
|
+
|
|
582
|
+
(3)
|
|
583
|
+
5 Back Squat 80%
|
|
584
|
+
```
|
|
585
|
+
|
|
586
|
+
### Example 3: Converting a Running Workout
|
|
587
|
+
|
|
588
|
+
**Input:**
|
|
589
|
+
> Run 1 mile, then 50 sandbag over shoulder (100 lbs), then run 1 mile. For time.
|
|
590
|
+
|
|
591
|
+
**Output:**
|
|
592
|
+
```time
|
|
593
|
+
1mile Run
|
|
594
|
+
50 Sandbag Over Shoulder 100lb
|
|
595
|
+
1mile Run
|
|
596
|
+
```
|
|
597
|
+
|
|
598
|
+
### Example 4: Converting a Tabata
|
|
599
|
+
|
|
600
|
+
**Input:**
|
|
601
|
+
> Tabata air squats (8 rounds: 20 seconds on, 10 seconds off). Record lowest round.
|
|
602
|
+
|
|
603
|
+
**Output:**
|
|
604
|
+
```time
|
|
605
|
+
(8)
|
|
606
|
+
:20 ? Air Squats
|
|
607
|
+
:10 Rest
|
|
608
|
+
```
|
|
609
|
+
|
|
610
|
+
The `?` on reps makes each round's count collectible.
|
|
611
|
+
|
|
612
|
+
---
|
|
613
|
+
|
|
614
|
+
## Edge Cases
|
|
615
|
+
|
|
616
|
+
### No Equipment / Bodyweight Only
|
|
617
|
+
Omit resistance entirely:
|
|
618
|
+
```time
|
|
619
|
+
100 Burpees
|
|
620
|
+
75 Situps
|
|
621
|
+
50 Pushups
|
|
622
|
+
25 Handstand Pushups
|
|
623
|
+
```
|
|
624
|
+
|
|
625
|
+
### Mixed Modality (Cardio + Lifting)
|
|
626
|
+
Different fragments coexist on the same line:
|
|
627
|
+
```time
|
|
628
|
+
(5)
|
|
629
|
+
400m Run
|
|
630
|
+
15 Overhead Squats 95lb
|
|
631
|
+
```
|
|
632
|
+
|
|
633
|
+
### Asymmetrical Loading (Left/Right)
|
|
634
|
+
Write separate lines for each side:
|
|
635
|
+
```time
|
|
636
|
+
(20)
|
|
637
|
+
+ 1 Clean & Press Left
|
|
638
|
+
+ 1 Clean & Press Right
|
|
639
|
+
+ 2 Front Squat Right
|
|
640
|
+
```
|
|
641
|
+
|
|
642
|
+
### Rest Periods
|
|
643
|
+
Rest is just an effort name with a timer:
|
|
644
|
+
```time
|
|
645
|
+
:30 Rest
|
|
646
|
+
1:00 Rest
|
|
647
|
+
3:00 Rest
|
|
648
|
+
```
|
|
649
|
+
|
|
650
|
+
### Named Sections
|
|
651
|
+
Use labels as effort names on the round line:
|
|
652
|
+
```time
|
|
653
|
+
(4) Warmup
|
|
654
|
+
100m Swim
|
|
655
|
+
:30 Rest
|
|
656
|
+
```
|