feat/zwift-workout-skill
main
Bike-only Zwift .zwo workout skill.
.zwo
Workflow: draft spec → human-readable preview → user confirms → publish via hosting → file into Knowledge Wiki.
Contents
scripts/zwo_builder.py
scripts/zwo.py
references/zwo-format.md
assets/example-vo2max.zwo
tests/test_zwo.py
Guardrails: power range 0.20–1.50 FTP, integer seconds, bike-only sportType, XML escaping, round-trip parse check, no publish before confirmation.
Format ground truth: h4l/zwift-workout-file-reference. Never commits to main (feature branch + PR).
h4l/zwift-workout-file-reference
Bike-only Zwift .zwo generator with human-readable preview + confirmation loop. - scripts/zwo_builder.py: spec<->.zwo build/validate/parse/render/TSS estimate - scripts/zwo.py: CLI (build, from-template, validate, parse, render, templates) - references/zwo-format.md: condensed offline format reference - assets/example-vo2max.zwo + tests/test_zwo.py (9 tests) - Publishes via hosting skill; files result into Knowledge Wiki Format ground truth: h4l/zwift-workout-file-reference
No dependencies set.
The note is not visible to the blocked user.
Bike-only Zwift
.zwoworkout skill.Workflow: draft spec → human-readable preview → user confirms → publish via hosting → file into Knowledge Wiki.
Contents
scripts/zwo_builder.py– spec↔.zwo build/validate/parse/render + TSS estimatescripts/zwo.py– CLI: build, from-template, validate, parse, render, templatesreferences/zwo-format.md– condensed offline format referenceassets/example-vo2max.zwo+tests/test_zwo.py(9/9 passing)Guardrails: power range 0.20–1.50 FTP, integer seconds, bike-only sportType, XML escaping, round-trip parse check, no publish before confirmation.
Format ground truth:
h4l/zwift-workout-file-reference. Never commits to main (feature branch + PR).