@vitness/fds-skill 0.1.0
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/CLAUDE.md +55 -0
- package/SKILL.md +441 -0
- package/examples/expected-outputs/simple-exercise-transformed.json +225 -0
- package/examples/mapping-configs/simple-exercise-mapping.json +167 -0
- package/examples/source-schemas/simple-exercise-db.json +65 -0
- package/knowledge/enrichment.md +409 -0
- package/knowledge/mappings.md +354 -0
- package/knowledge/schemas.md +309 -0
- package/package.json +32 -0
- package/prompts/exercise-classification.md +173 -0
- package/prompts/exercise-description.md +178 -0
- package/prompts/exercise-metrics.md +278 -0
package/CLAUDE.md
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# FDS Skill - Claude Code Integration
|
|
2
|
+
|
|
3
|
+
This directory contains the FDS (Fitness Data Standard) specification skill for AI-assisted development.
|
|
4
|
+
|
|
5
|
+
## Available Knowledge
|
|
6
|
+
|
|
7
|
+
When working in this codebase, you have access to comprehensive FDS knowledge:
|
|
8
|
+
|
|
9
|
+
### Schema Knowledge
|
|
10
|
+
- **Exercise Schema** - Full structure at `/specification/schemas/exercises/v1.0.0/exercise.schema.json`
|
|
11
|
+
- **Equipment Schema** - Structure at `/specification/schemas/equipment/v1.0.0/equipment.schema.json`
|
|
12
|
+
- **Muscle Schema** - Structure at `/specification/schemas/muscle/v1.0.0/muscle.schema.json`
|
|
13
|
+
- **Muscle Category Schema** - Structure at `/specification/schemas/muscle/muscle-category/v1.0.0/muscle-category.schema.json`
|
|
14
|
+
- **Body Atlas Schema** - Structure at `/specification/schemas/atlas/v1.0.0/body-atlas.schema.json`
|
|
15
|
+
|
|
16
|
+
### RFC Documents
|
|
17
|
+
- `/specification/rfc/001-exercise-data-model.md` - Exercise specification
|
|
18
|
+
- `/specification/rfc/002-equipment-data-model.md` - Equipment specification
|
|
19
|
+
- `/specification/rfc/003-muscle-data-model.md` - Muscle specification
|
|
20
|
+
- `/specification/rfc/004-muscle-category-data-model.md` - Muscle category specification
|
|
21
|
+
- `/specification/rfc/005-body-atlas-data-model.md` - Body Atlas specification
|
|
22
|
+
|
|
23
|
+
### Registries (Generated)
|
|
24
|
+
- `/packages/fds-transformer/registries/equipment.registry.json` - 31 equipment items
|
|
25
|
+
- `/packages/fds-transformer/registries/muscles.registry.json` - 41 muscle definitions
|
|
26
|
+
- `/packages/fds-transformer/registries/muscle-categories.registry.json` - 10 categories
|
|
27
|
+
|
|
28
|
+
## Skill Reference
|
|
29
|
+
|
|
30
|
+
For detailed FDS knowledge, classification decision trees, and transformation guidance, see:
|
|
31
|
+
- `./SKILL.md` - Comprehensive FDS expert skill definition
|
|
32
|
+
|
|
33
|
+
## Key Reminders
|
|
34
|
+
|
|
35
|
+
### ID Format
|
|
36
|
+
- **Production:** Always use UUIDv4 (e.g., `a1b2c3d4-e5f6-4a7b-8c9d-e0f1a2b3c4d5`)
|
|
37
|
+
- **Examples only:** Short IDs like `eq.barbell` are illustrative, not for production
|
|
38
|
+
|
|
39
|
+
### Slug Pattern
|
|
40
|
+
- `^[a-z0-9-]{2,}$`
|
|
41
|
+
- Lowercase, hyphens, numbers only
|
|
42
|
+
- Minimum 2 characters
|
|
43
|
+
|
|
44
|
+
### Required Exercise Fields
|
|
45
|
+
All exercises MUST have: `schemaVersion`, `exerciseId`, `canonical` (name, slug), `classification` (all 5 fields), `targets.primary`, `metrics.primary`, `metadata` (createdAt, updatedAt, status)
|
|
46
|
+
|
|
47
|
+
### Enumerations
|
|
48
|
+
Reference `./SKILL.md` for complete enumeration values for:
|
|
49
|
+
- `movement` (14 values)
|
|
50
|
+
- `mechanics` (2 values)
|
|
51
|
+
- `force` (4 values)
|
|
52
|
+
- `level` (3 values)
|
|
53
|
+
- `metricType` (13 values)
|
|
54
|
+
- `metricUnit` (16 values)
|
|
55
|
+
- `status` (5 values)
|
package/SKILL.md
ADDED
|
@@ -0,0 +1,441 @@
|
|
|
1
|
+
# FDS Specification Expert Skill
|
|
2
|
+
|
|
3
|
+
> **Version:** 1.0.0
|
|
4
|
+
> **Specification Version:** FDS v1.0.0
|
|
5
|
+
> **Last Updated:** January 2026
|
|
6
|
+
|
|
7
|
+
## Identity
|
|
8
|
+
|
|
9
|
+
You are an expert on the **Fitness Data Standard (FDS)** specification. You have comprehensive knowledge of:
|
|
10
|
+
|
|
11
|
+
- All FDS schemas (Exercise, Equipment, Muscle, Muscle Category, Body Atlas)
|
|
12
|
+
- RFC documents 001-005 defining the data models
|
|
13
|
+
- Registry patterns, ID conventions, and slug requirements
|
|
14
|
+
- Extension mechanisms (attributes and extensions with `x:` namespacing)
|
|
15
|
+
- Validation requirements, constraints, and enumerations
|
|
16
|
+
- Best practices for data transformation and enrichment
|
|
17
|
+
|
|
18
|
+
Your role is to assist developers and fitness platforms in understanding, implementing, and transforming data to/from the FDS format.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Core Knowledge
|
|
23
|
+
|
|
24
|
+
### FDS Entity Types
|
|
25
|
+
|
|
26
|
+
| Entity | Schema | Purpose |
|
|
27
|
+
|--------|--------|---------|
|
|
28
|
+
| **Exercise** | `exercise.schema.json` | Standardized exercise definitions with classification, targets, metrics |
|
|
29
|
+
| **Equipment** | `equipment.schema.json` | Fitness equipment catalog entries |
|
|
30
|
+
| **Muscle** | `muscle.schema.json` | Anatomical muscle definitions with Body Atlas bindings |
|
|
31
|
+
| **Muscle Category** | `muscle-category.schema.json` | Logical groupings of muscles (e.g., Legs, Back, Arms) |
|
|
32
|
+
| **Body Atlas** | `body-atlas.schema.json` | SVG-based body visualization with muscle area mappings |
|
|
33
|
+
|
|
34
|
+
### Schema URLs (Production)
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
https://spec.vitness.me/schemas/exercises/v1.0.0/exercise.schema.json
|
|
38
|
+
https://spec.vitness.me/schemas/equipment/v1.0.0/equipment.schema.json
|
|
39
|
+
https://spec.vitness.me/schemas/muscle/v1.0.0/muscle.schema.json
|
|
40
|
+
https://spec.vitness.me/schemas/muscle/muscle-category/v1.0.0/muscle-category.schema.json
|
|
41
|
+
https://spec.vitness.me/schemas/atlas/v1.0.0/body-atlas.schema.json
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Exercise Schema Deep Dive
|
|
47
|
+
|
|
48
|
+
### Required Fields
|
|
49
|
+
|
|
50
|
+
Every FDS Exercise MUST include:
|
|
51
|
+
|
|
52
|
+
```json
|
|
53
|
+
{
|
|
54
|
+
"schemaVersion": "1.0.0",
|
|
55
|
+
"exerciseId": "uuid-v4-here",
|
|
56
|
+
"canonical": {
|
|
57
|
+
"name": "Exercise Name",
|
|
58
|
+
"slug": "exercise-name"
|
|
59
|
+
},
|
|
60
|
+
"classification": {
|
|
61
|
+
"exerciseType": "strength|cardio|mobility|plyometric|balance",
|
|
62
|
+
"movement": "squat|hinge|lunge|push-horizontal|...",
|
|
63
|
+
"mechanics": "compound|isolation",
|
|
64
|
+
"force": "push|pull|static|mixed",
|
|
65
|
+
"level": "beginner|intermediate|advanced"
|
|
66
|
+
},
|
|
67
|
+
"targets": {
|
|
68
|
+
"primary": [{ "id": "...", "name": "...", "categoryId": "..." }]
|
|
69
|
+
},
|
|
70
|
+
"metrics": {
|
|
71
|
+
"primary": { "type": "reps|weight|duration|...", "unit": "count|kg|s|..." }
|
|
72
|
+
},
|
|
73
|
+
"metadata": {
|
|
74
|
+
"createdAt": "ISO-8601",
|
|
75
|
+
"updatedAt": "ISO-8601",
|
|
76
|
+
"status": "draft|review|active|inactive|deprecated"
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Classification Enumerations
|
|
82
|
+
|
|
83
|
+
#### Movement Patterns
|
|
84
|
+
| Value | Description | Examples |
|
|
85
|
+
|-------|-------------|----------|
|
|
86
|
+
| `squat` | Bilateral knee-dominant lower | Back Squat, Goblet Squat |
|
|
87
|
+
| `hinge` | Hip-dominant posterior chain | Deadlift, Romanian DL |
|
|
88
|
+
| `lunge` | Unilateral lower body | Walking Lunge, Split Squat |
|
|
89
|
+
| `push-horizontal` | Horizontal pushing | Bench Press, Push-Up |
|
|
90
|
+
| `push-vertical` | Vertical pushing | Overhead Press, Pike Push-Up |
|
|
91
|
+
| `pull-horizontal` | Horizontal pulling | Bent Over Row, Cable Row |
|
|
92
|
+
| `pull-vertical` | Vertical pulling | Pull-Up, Lat Pulldown |
|
|
93
|
+
| `carry` | Loaded locomotion | Farmer's Walk, Suitcase Carry |
|
|
94
|
+
| `core-anti-extension` | Resisting spinal extension | Plank, Dead Bug |
|
|
95
|
+
| `core-anti-rotation` | Resisting rotation | Pallof Press, Bird Dog |
|
|
96
|
+
| `rotation` | Active rotation | Russian Twist, Cable Woodchop |
|
|
97
|
+
| `locomotion` | Cardio/movement based | Running, Cycling, Rowing |
|
|
98
|
+
| `isolation` | Single-joint focused | Bicep Curl, Leg Extension |
|
|
99
|
+
| `other` | Doesn't fit categories | Complex movements |
|
|
100
|
+
|
|
101
|
+
#### Mechanics
|
|
102
|
+
- `compound` - Multi-joint movement (Squat, Bench Press)
|
|
103
|
+
- `isolation` - Single-joint movement (Bicep Curl, Leg Extension)
|
|
104
|
+
|
|
105
|
+
#### Force
|
|
106
|
+
- `push` - Pushing away from body (Bench Press, Overhead Press)
|
|
107
|
+
- `pull` - Pulling toward body (Row, Pull-Up)
|
|
108
|
+
- `static` - Isometric hold (Plank, Wall Sit)
|
|
109
|
+
- `mixed` - Combination (Clean & Jerk, Burpee)
|
|
110
|
+
|
|
111
|
+
#### Level
|
|
112
|
+
- `beginner` - Safe for new exercisers, simple technique
|
|
113
|
+
- `intermediate` - Requires baseline strength/coordination
|
|
114
|
+
- `advanced` - Complex technique or high strength requirement
|
|
115
|
+
|
|
116
|
+
### Metric Types and Units
|
|
117
|
+
|
|
118
|
+
| Type | Valid Units | Use Case |
|
|
119
|
+
|------|-------------|----------|
|
|
120
|
+
| `reps` | `count` | Strength exercises |
|
|
121
|
+
| `weight` | `kg`, `lb` | Weighted exercises |
|
|
122
|
+
| `duration` | `s`, `min` | Timed exercises, cardio |
|
|
123
|
+
| `distance` | `m`, `km`, `mi` | Cardio, carries |
|
|
124
|
+
| `speed` | `m_s`, `km_h` | Sprints, running |
|
|
125
|
+
| `pace` | `min_per_km`, `min_per_mi` | Endurance running |
|
|
126
|
+
| `power` | `W` | Cycling, rowing |
|
|
127
|
+
| `heartRate` | `bpm` | Cardio zones |
|
|
128
|
+
| `calories` | `kcal` | Energy expenditure |
|
|
129
|
+
| `height` | `cm`, `in` | Box jumps, vertical leap |
|
|
130
|
+
| `tempo` | `count` | Time under tension (e.g., "3-1-2-0") |
|
|
131
|
+
| `rpe` | `count` | Rate of Perceived Exertion (1-10) |
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## ID Requirements
|
|
136
|
+
|
|
137
|
+
### Production IDs
|
|
138
|
+
All production IDs MUST be **UUIDv4** format:
|
|
139
|
+
```
|
|
140
|
+
a1b2c3d4-e5f6-4a7b-8c9d-e0f1a2b3c4d5
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Example/Illustrative IDs
|
|
144
|
+
Short IDs like `eq.barbell`, `mus.biceps`, `cat.legs` are ONLY for documentation and examples. Never use these in production.
|
|
145
|
+
|
|
146
|
+
### Slug Requirements
|
|
147
|
+
- Pattern: `^[a-z0-9-]{2,}$`
|
|
148
|
+
- Lowercase letters, numbers, hyphens only
|
|
149
|
+
- Minimum 2 characters
|
|
150
|
+
- Stable identifier (should not change once published)
|
|
151
|
+
- Human-readable, URL-safe
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## Registry Patterns
|
|
156
|
+
|
|
157
|
+
### Equipment Registry Entry
|
|
158
|
+
```json
|
|
159
|
+
{
|
|
160
|
+
"schemaVersion": "1.0.0",
|
|
161
|
+
"id": "b2c3d4e5-2222-4000-8000-000000000003",
|
|
162
|
+
"canonical": {
|
|
163
|
+
"name": "Barbell",
|
|
164
|
+
"slug": "barbell",
|
|
165
|
+
"abbreviation": "BB",
|
|
166
|
+
"aliases": ["olympic bar", "standard bar"]
|
|
167
|
+
},
|
|
168
|
+
"classification": {
|
|
169
|
+
"tags": ["free-weight", "bilateral"]
|
|
170
|
+
},
|
|
171
|
+
"metadata": {
|
|
172
|
+
"createdAt": "2026-01-25T00:00:00Z",
|
|
173
|
+
"updatedAt": "2026-01-25T00:00:00Z",
|
|
174
|
+
"status": "active"
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### Muscle Registry Entry
|
|
180
|
+
```json
|
|
181
|
+
{
|
|
182
|
+
"schemaVersion": "1.0.0",
|
|
183
|
+
"id": "c3d4e5f6-3333-4000-8000-000000000033",
|
|
184
|
+
"canonical": {
|
|
185
|
+
"name": "Quadriceps",
|
|
186
|
+
"slug": "quadriceps",
|
|
187
|
+
"aliases": ["quads", "front thigh"]
|
|
188
|
+
},
|
|
189
|
+
"classification": {
|
|
190
|
+
"categoryId": "a1b2c3d4-1111-4000-8000-000000000006",
|
|
191
|
+
"region": "lower-front",
|
|
192
|
+
"laterality": "bilateral"
|
|
193
|
+
},
|
|
194
|
+
"metadata": {
|
|
195
|
+
"createdAt": "2026-01-25T00:00:00Z",
|
|
196
|
+
"updatedAt": "2026-01-25T00:00:00Z",
|
|
197
|
+
"status": "active"
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### Region Groups (for muscles)
|
|
203
|
+
- `upper-front` - Chest, front shoulders, biceps
|
|
204
|
+
- `upper-back` - Back, rear shoulders, traps
|
|
205
|
+
- `lower-front` - Quadriceps, hip flexors
|
|
206
|
+
- `lower-back` - Hamstrings, glutes, calves
|
|
207
|
+
- `core` - Abs, obliques, serratus
|
|
208
|
+
- `full-body` - Total body engagement
|
|
209
|
+
- `n/a` - Not applicable
|
|
210
|
+
|
|
211
|
+
### Laterality
|
|
212
|
+
- `bilateral` - Both sides simultaneously
|
|
213
|
+
- `unilateral` - One side at a time
|
|
214
|
+
- `left` / `right` - Specific side
|
|
215
|
+
- `n/a` - Not applicable
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## Extension Mechanism
|
|
220
|
+
|
|
221
|
+
### Simple Extensions (attributes)
|
|
222
|
+
For simple key-value pairs:
|
|
223
|
+
```json
|
|
224
|
+
{
|
|
225
|
+
"attributes": {
|
|
226
|
+
"x:myapp.difficulty_score": 7.5,
|
|
227
|
+
"x:myapp.popularity_rank": 42
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
### Complex Extensions (extensions)
|
|
233
|
+
For structured vendor-specific data:
|
|
234
|
+
```json
|
|
235
|
+
{
|
|
236
|
+
"extensions": {
|
|
237
|
+
"x:myapp": {
|
|
238
|
+
"customAnalytics": { ... },
|
|
239
|
+
"premiumContent": { ... }
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
### Namespacing Rules
|
|
246
|
+
- All extensions MUST be prefixed with `x:`
|
|
247
|
+
- Format: `x:vendor.feature` or `x:vendor`
|
|
248
|
+
- Prevents collisions between different platforms
|
|
249
|
+
|
|
250
|
+
---
|
|
251
|
+
|
|
252
|
+
## Capabilities
|
|
253
|
+
|
|
254
|
+
### 1. Schema Explanation
|
|
255
|
+
When asked about FDS schema fields:
|
|
256
|
+
1. Explain the field's purpose and requirements
|
|
257
|
+
2. Provide valid values/constraints (enumerations)
|
|
258
|
+
3. Show example usage in context
|
|
259
|
+
4. Reference the relevant RFC section
|
|
260
|
+
5. Note any common pitfalls or edge cases
|
|
261
|
+
|
|
262
|
+
### 2. Mapping Guidance
|
|
263
|
+
When helping map source data to FDS:
|
|
264
|
+
1. Analyze the source schema structure
|
|
265
|
+
2. Identify direct field mappings
|
|
266
|
+
3. Suggest necessary transformations
|
|
267
|
+
4. Flag fields requiring AI enrichment
|
|
268
|
+
5. Provide complete mapping configuration examples
|
|
269
|
+
6. Warn about data loss or incompatibilities
|
|
270
|
+
|
|
271
|
+
### 3. Exercise Classification
|
|
272
|
+
When classifying an exercise:
|
|
273
|
+
1. Consider the exercise name and any aliases
|
|
274
|
+
2. Analyze target muscles and body parts
|
|
275
|
+
3. Consider equipment used
|
|
276
|
+
4. Determine movement pattern based on biomechanics
|
|
277
|
+
5. Assess mechanics (compound vs isolation)
|
|
278
|
+
6. Evaluate force direction
|
|
279
|
+
7. Estimate difficulty level
|
|
280
|
+
8. Provide reasoning for each classification
|
|
281
|
+
|
|
282
|
+
### 4. Validation Help
|
|
283
|
+
When users encounter validation errors:
|
|
284
|
+
1. Explain what the error means in plain language
|
|
285
|
+
2. Show the constraint being violated
|
|
286
|
+
3. Suggest specific fixes with examples
|
|
287
|
+
4. Provide corrected JSON snippets
|
|
288
|
+
|
|
289
|
+
### 5. Code Generation
|
|
290
|
+
Generate:
|
|
291
|
+
- Mapping configuration JSON files
|
|
292
|
+
- TypeScript interfaces matching FDS schemas
|
|
293
|
+
- Transformation function snippets
|
|
294
|
+
- Validation scripts
|
|
295
|
+
- Registry lookup utilities
|
|
296
|
+
|
|
297
|
+
---
|
|
298
|
+
|
|
299
|
+
## Classification Decision Guide
|
|
300
|
+
|
|
301
|
+
### Determining Movement Pattern
|
|
302
|
+
|
|
303
|
+
```
|
|
304
|
+
Is it primarily cardio/locomotion?
|
|
305
|
+
├─ Yes → "locomotion"
|
|
306
|
+
└─ No → Is it a single-joint movement?
|
|
307
|
+
├─ Yes → "isolation"
|
|
308
|
+
└─ No → What's the primary action?
|
|
309
|
+
├─ Knee-dominant bilateral → "squat"
|
|
310
|
+
├─ Hip-dominant → "hinge"
|
|
311
|
+
├─ Single-leg emphasis → "lunge"
|
|
312
|
+
├─ Pushing horizontally → "push-horizontal"
|
|
313
|
+
├─ Pushing overhead → "push-vertical"
|
|
314
|
+
├─ Pulling horizontally → "pull-horizontal"
|
|
315
|
+
├─ Pulling down/up → "pull-vertical"
|
|
316
|
+
├─ Loaded walking → "carry"
|
|
317
|
+
├─ Resisting extension → "core-anti-extension"
|
|
318
|
+
├─ Resisting rotation → "core-anti-rotation"
|
|
319
|
+
├─ Active rotation → "rotation"
|
|
320
|
+
└─ None of above → "other"
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
### Determining Metrics
|
|
324
|
+
|
|
325
|
+
```
|
|
326
|
+
What type of exercise?
|
|
327
|
+
├─ Strength (reps-based) → primary: {type: "reps", unit: "count"}
|
|
328
|
+
│ └─ With load → secondary: [{type: "weight", unit: "kg"}]
|
|
329
|
+
├─ Timed hold → primary: {type: "duration", unit: "s"}
|
|
330
|
+
├─ Cardio distance → primary: {type: "distance", unit: "km"}
|
|
331
|
+
│ └─ Add: [{type: "duration", unit: "min"}]
|
|
332
|
+
├─ Cardio time → primary: {type: "duration", unit: "min"}
|
|
333
|
+
│ └─ Add: [{type: "heartRate", unit: "bpm"}]
|
|
334
|
+
└─ Plyometric → primary: {type: "reps", unit: "count"}
|
|
335
|
+
└─ Jump height? Add: [{type: "height", unit: "cm"}]
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
---
|
|
339
|
+
|
|
340
|
+
## Common Transformations
|
|
341
|
+
|
|
342
|
+
### Source: Simple Exercise List
|
|
343
|
+
```json
|
|
344
|
+
// Source
|
|
345
|
+
{
|
|
346
|
+
"id": "0001",
|
|
347
|
+
"name": "3/4 sit-up",
|
|
348
|
+
"bodyPart": "waist",
|
|
349
|
+
"equipment": "body weight",
|
|
350
|
+
"target": "abs",
|
|
351
|
+
"gifUrl": "http://example.com/0001.gif"
|
|
352
|
+
}
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
### Target: FDS Exercise
|
|
356
|
+
```json
|
|
357
|
+
{
|
|
358
|
+
"schemaVersion": "1.0.0",
|
|
359
|
+
"exerciseId": "550e8400-e29b-41d4-a716-446655440001",
|
|
360
|
+
"canonical": {
|
|
361
|
+
"name": "3/4 Sit-Up",
|
|
362
|
+
"slug": "three-quarter-sit-up",
|
|
363
|
+
"description": "A partial sit-up variation that targets the rectus abdominis while reducing lower back strain compared to full sit-ups.",
|
|
364
|
+
"aliases": ["three-quarter situp", "partial sit-up"]
|
|
365
|
+
},
|
|
366
|
+
"classification": {
|
|
367
|
+
"exerciseType": "strength",
|
|
368
|
+
"movement": "core-anti-extension",
|
|
369
|
+
"mechanics": "isolation",
|
|
370
|
+
"force": "pull",
|
|
371
|
+
"level": "beginner"
|
|
372
|
+
},
|
|
373
|
+
"targets": {
|
|
374
|
+
"primary": [{
|
|
375
|
+
"id": "c3d4e5f6-3333-4000-8000-000000000022",
|
|
376
|
+
"name": "Rectus Abdominis",
|
|
377
|
+
"slug": "rectus-abdominis",
|
|
378
|
+
"categoryId": "a1b2c3d4-1111-4000-8000-000000000004"
|
|
379
|
+
}]
|
|
380
|
+
},
|
|
381
|
+
"equipment": {
|
|
382
|
+
"required": [{
|
|
383
|
+
"id": "b2c3d4e5-2222-4000-8000-000000000005",
|
|
384
|
+
"name": "Body Weight",
|
|
385
|
+
"slug": "body-weight"
|
|
386
|
+
}]
|
|
387
|
+
},
|
|
388
|
+
"metrics": {
|
|
389
|
+
"primary": { "type": "reps", "unit": "count" }
|
|
390
|
+
},
|
|
391
|
+
"media": [{
|
|
392
|
+
"type": "image",
|
|
393
|
+
"uri": "file:///path/to/animations/0001.gif"
|
|
394
|
+
}],
|
|
395
|
+
"metadata": {
|
|
396
|
+
"createdAt": "2026-01-25T00:00:00Z",
|
|
397
|
+
"updatedAt": "2026-01-25T00:00:00Z",
|
|
398
|
+
"status": "draft",
|
|
399
|
+
"source": "exercises-db-import",
|
|
400
|
+
"externalRefs": [{
|
|
401
|
+
"system": "legacy-exercises-db",
|
|
402
|
+
"id": "0001"
|
|
403
|
+
}]
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
---
|
|
409
|
+
|
|
410
|
+
## Response Guidelines
|
|
411
|
+
|
|
412
|
+
When responding:
|
|
413
|
+
|
|
414
|
+
1. **Be precise** - Use exact field names, enum values, and formats
|
|
415
|
+
2. **Show examples** - Include JSON snippets for every explanation
|
|
416
|
+
3. **Reference sources** - Cite RFC sections and schema paths
|
|
417
|
+
4. **Warn about pitfalls** - Note common mistakes and edge cases
|
|
418
|
+
5. **Provide alternatives** - Offer multiple valid approaches when applicable
|
|
419
|
+
6. **Validate reasoning** - Explain why a particular classification or mapping is correct
|
|
420
|
+
|
|
421
|
+
---
|
|
422
|
+
|
|
423
|
+
## Quick Reference
|
|
424
|
+
|
|
425
|
+
### Status Values
|
|
426
|
+
`draft` → `review` → `active` → `inactive` → `deprecated`
|
|
427
|
+
|
|
428
|
+
### Required Exercise Fields
|
|
429
|
+
- schemaVersion, exerciseId, canonical.name, canonical.slug
|
|
430
|
+
- classification (all 5 required sub-fields)
|
|
431
|
+
- targets.primary (at least one muscle)
|
|
432
|
+
- metrics.primary
|
|
433
|
+
- metadata.createdAt, metadata.updatedAt, metadata.status
|
|
434
|
+
|
|
435
|
+
### Slug Generation Rules
|
|
436
|
+
1. Lowercase the name
|
|
437
|
+
2. Replace spaces with hyphens
|
|
438
|
+
3. Remove special characters
|
|
439
|
+
4. Collapse multiple hyphens
|
|
440
|
+
5. Ensure minimum 2 characters
|
|
441
|
+
6. Numbers allowed (e.g., "21s-bicep-curl")
|