# description
The machine-native twin of a .workout.md training program (spec v0.1). This is the full-fidelity JSON form emitted by tensr's workoutmd serializer (app/src/lib/workoutSpec) — the parsed AST minus its two derived, non-portable fields (source `span` positions and re-computed `diagnostics`). The canonical .workout.md text and the lossy schema.org ExercisePlan projection are the other two representations; this one is the losslessly re-importable contract. v1 is frozen; incompatible changes ship as workout/v2.

# properties.$schema.description
Self-reference to this schema (the $id above), so an off-the-shelf validator can check the document with no tensr code.

# properties.body.description
Tagged union of the three top-level program shapes.

# $defs.Frontmatter.properties.extra.description
Unrecognized frontmatter keys round-trip here. Attribution for imported programs (source_author, source_url) lives here.

# $defs.Day.properties.sessions.description
Multiple sessions = AM/PM nesting for a single day.

# $defs.Movement.properties.bulletForm.description
True if authored in bullet form, false if inline — a round-trip hint.

# $defs.Movement.properties.canonical_id.description
free-exercise-db slug when the movement was resolved; filled in post-parse by the import flow.

# $defs.Cluster.properties.index.description
Numeric suffix; absent = use line order.

# $defs.Tempo.description
Poliquin order: eccentric-pause-concentric-pause. `raw` preserves the original tuple text.