Repository navigation
Releases: Nicolas78240/WODCraft
Release list
WODCraft 1.2.1
Fixes
wodc timershows the caps of a session too: a section whosecap:covers several blocks gets its
cap: the clock stopsline at its place in the session — the section's start plus its cap — in
clock order with the other sections' caps. It was compiled but not shown. Block caps and the cap of
a single block still add no line. The MCPtimeline_wodresult shows these lines inrendered
(itscap_sstays null for a session), and WODCraftKit hasTimeline.caps(of:)and
Timeline.render(_:caps:)behindtimerText(); Python hastimer_caps. A new conformance case,
session_section_caps, carries such a session.
Docs
- The MCP server, its syntax guide and its prompt name the spec version they implement (they said 1.0).
docs/mcp.mdliststimeline_wod'scap_s;integration-oko.fr.mdgets a dated status box.
Who made it
A collaboration: Nicolas Caussin set the course and had the idea, orchestrated, corrected and approved; most of the writing was done by Claude (Anthropic) with Claude Code.
WODCraft 1.2.0 — the CrossFit Total
The CrossFit Total, decided with Nicolas on 8 October 2026. Every 1.0 and 1.1 document still
compiles to exactly the same JSON, with the same stamp; a document that uses a 1.2 construct is
stamped "1.2", and the schema accepts all three.
The language
- Attempts:
Max load, 3 attempts(French3 essais, written back in English bywodc fmt).
The best attempt counts; aRestwritten last in the block is the rest between the attempts
(three attempts, two rests). Elsewhere than on Max load it isE014; fewer than one isE035. - Totals:
score: load, total(Frenchcharge, total) adds the parts up. Over several timed
blocks the score is{"type": "multi", "aggregate": "sum", "unit": "load", "parts": […]}, every
part scored by the value (E036on a part that cannot be); over a single block it is the value
with"aggregate": "sum"(score: reps, totalfor Lynne).totalis the only modifier (E013). - One cap or the other (SPEC §6.1):
cap:caps the whole workout — on a single block it is still
that block's cap; over several blocks it is the workout's newcap_sinstead of the first block's.
Combined with block caps it is the newE037, instead of disappearing without a word.
The library
- New collection
benchmarks/withcrossfit_total(use benchmarks/crossfit_total): back
squat, shoulder press, deadlift, three attempts each, 2:00 between attempts, 3:00 between lifts,
and no cap, like the original (the library keeps only official caps). - Lynne scores
reps, total, and its note no longer explains the count.
Fixes
- Several block caps now add up in
estimate.capped_s, with the rest between the blocks (three lifts
capped at 10:00 reported 10:00). - A
Max loadwithout sets is estimated as a build-up — its attempts, or five efforts, about 30 s
each with the rest between them — instead of a few seconds (the Total went from 0:09 to
17:38–32:46). The timer sizes such a lift on its own. wodc show --lang frtranslates the board's labels:Charge max · 3 essais,Repos,
Score : total des charges (meilleur essai de chaque barre),Durée :,Note :… Format names
other than Max load stay in English, as on French-speaking whiteboards.wodc timershows the cap of the whole workout as the moment the clock stops
(30:00 cap: the clock stops), in its place in time; block caps change nothing. The
MCPtimeline_wodresult carries it ascap_s, and WODCraftKit hasTimeline.cap(of:),
Timeline.render(_:cap:)andtimerText().wodc libaligns its columns on the longest path.
Tooling
- Schema
spec/workout.schema.jsonmoves to…/schema/1.2/:attemptson a block,aggregate
anduniton the score,cap_son the workout; seven new conformance cases. swift/WODCraftKitimplements all of the above (Block.attempts,Score.aggregate,
Score.unit,Score.isTotal,Workout.capS, the French board), checked by the same conformance
suite and by the differential check.- Editor grammar, completions and the MCP guide know attempts, totals and
E037.
Who made it
A collaboration: Nicolas Caussin set the course and had the idea, orchestrated, corrected and approved; most of the writing was done by Claude (Anthropic) with Claude Code.
WODCraft 1.1.1
Catalog
- Five movements validated by the product owner from a real board (oKo, 6 October):
commando_push_up,
box_bar_muscle_up,kettlebell_side_bend,press_backandharlow(228 movements).press_back
andharloware minimal entries — name and French name only — until their standard is described.
Packaging
- A
Package.swiftat the root of the repository: an application can depend on
https://github.com/Nicolas78240/WODCraftat an exact tag.swift/WODCraftKit/Package.swiftstays
where the tests run.
Docs
docs/amelioration-continue.fr.md: how a gap found in an application becomes a WODCraft change, and
how the application picks up the release.
Who made it
A collaboration: Nicolas Caussin set the course and had the idea, orchestrated, corrected and approved; most of the writing was done by Claude (Anthropic) with Claude Code.
WODCraft 1.1.0
WODCraft 1.1 — the language, its compiler, 82 benchmark workouts and the site https://wodcraft.dev, where the compiler runs in your browser.
pip install wodcraftAdditions for real training sessions (the whiteboard of 29 September: warm-up, skill, team chipper,
core work). Every 1.0 document still compiles to exactly the same JSON, stamped "wodcraft": "1.0";
a document that uses a 1.1 construct is stamped "1.1", and the schema accepts both.
The language
- Generic ergometer:
ergometer(ergo,cal ergo,machine,ergomètre), in calories,
distance or time; the machine is chosen when the score is logged. Alsoyoga push-upand the
scap pullalias. hold, a standard modifier:1 Wall walk (hold 10 s); the duration adds to every rep in
estimates.- Alternatives:
10 Ring row | 8 Scapular pull-up. The item is the first option, the others go
inor; an option without a quantity takes the first one's; levels apply to every option; the board
says "or" ("ou" in French). - Level quantities, after the arrow only:
Chest-to-bar pull-up -> 2x Ring row(factor),
Wall walk -> 3 Inchworm(new quantity). Any other quantity in a level block is stillE014. - There and back:
For time, teams of 2, cap 25:00, there and back(aller-retouraccepted) —
the list in order, then back without repeating the last line. The block and its score carry
there_and_back; estimates count the whole path. Adapted:: what one athlete actually did, with the same lines as a level plus bare counts
(5 Wall walk). Compiled inadapted; resolution applies it after the chosen level and sets
resolved.adapted.
The library
- Christine joins the Girls (22), and the Heroes grow from 10 to 51: Adam Brown, Arnie, Blake,
Brenton, Bull, Bulger, Capoot, Coe, Daniel, Danny, Erin, Forrest, Garrett, Griff, Hall, Hansen,
Helton, Jack, Jason, Johnson, Joshie, Luce, Lumberjack 20, Marco, McGhee, Mr. Joshua, Nutts, PK,
Paul, RJ, Roy, Ryan, Servais, Severin, Stephen, The Seven, Thompson, Tommy V, Tyler, War Frank,
Whitten. Prescriptions follow the CrossFit definitions; where the original gives men's loads only,
the women's load is the commonly used one and anote:says so. - New catalog movements:
l_pull_up,ring_push_up,ring_handstand_push_up,
dumbbell_squat_clean,dumbbell_split_clean,kettlebell_overhead_squat,
plate_overhead_lunge,plate_carry,stiff_legged_deadlift(thestiff leg deadliftalias moves
fromromanian_deadliftto it).
Fixes
wodc fmtno longer turnsAMRAP 5:00+1-2-3 ...into a bare ladder (it dropped the clock).- The board shows the ladder of an AMRAP:
AMRAP 5:00 · 1-2-3 ….
Tooling
- Schema
spec/workout.schema.jsonmoves to…/schema/1.1/:or,factor,quantityon level
operations,there_and_back,adapted,resolved.adapted; every expected conformance document is
now validated against it. swift/WODCraftKitimplements all of the above (Movement.or/options,Movement.factor,
LevelOperation.factor/quantity,Block.thereAndBack,Score.thereAndBack,
Workout.adapted,Resolved.adapted), with the same conformance suite.- New example:
examples/session-2026-09-29.wod.
Who made it
A collaboration: Nicolas Caussin set the course and had the idea, orchestrated, corrected and approved; most of the writing was done by Claude (Anthropic) with Claude Code.