[OCaml] High Intensity Training Online
docs apply STE100 fixes to prose
Split semicolons into sentences, drop contractions, remove non-inclusive term (whitelist -> allowlist), and fix passive voice in steering docs and the doctrine-check skill. No content or guidance changed, wording only.
Changed files
.kiro/skills/doctrine-check/SKILL.md
@@ -57,8 +57,8 @@
57
57
1. The doctrine wins — the target must change, or
58
58
2. The conflict is raised explicitly.
59
59
60
Removed:
Never let a conflict pass in silence. A silent deviation is the failure this
61
Removed:
check exists to prevent.
60
Added:
Never allow a silent conflict. A silent deviation is the failure this check
61
Added:
exists to prevent.
62
62
63
63
## What to test against
64
64
@@ -66,27 +66,27 @@
66
66
target touches; do not pad the report with untouched ones.
67
67
68
68
- **Intensity is categorical, not scalar.** A working set ends at momentary
69
Removed:
muscular failure; that is its definition (HD1, "The Intensity Factor": 0% at
69
Added:
muscular failure. That is its definition (HD1, "The Intensity Factor": 0% at
70
70
rest, 100% at failure). Effort past failure is qualitative
71
71
(`Beyond_failure`: forced reps, negatives, static hold — each a count).
72
Removed:
Rest-pause is not in HD1; flag any attempt to add it. Flag any
72
Added:
Rest-pause is not in HD1. Flag any attempt to add it. Flag any
73
73
numeric "intensity score".
74
Removed:
- **Recovery produces growth; the gym only stimulates it.** Stimulation is
75
Removed:
immediate; production is not (HD1, "The Economics of Growth and Recovery").
76
Removed:
Recovery is systemic and time-based; a hard workout gates the next one.
74
Added:
- **Recovery produces growth. The gym only stimulates it.** Stimulation is
75
Added:
immediate. Production is not (HD1, "The Economics of Growth and Recovery").
76
Added:
Recovery is systemic and time-based. A hard workout gates the next one.
77
77
- **Volume beyond the minimum is harmful.** One working set per exercise is
78
Removed:
nominal; three sets per muscle is the ceiling. The net negative of each extra
78
Added:
nominal. Three sets per muscle is the ceiling. The net negative of each extra
79
79
set increases geometrically. Rising volume is a diagnostic warning, never an
80
80
achievement or a target.
81
81
- **Progressive overload is the progress signal.** Progress is more reps,
82
Removed:
weight, or both; one extra rep counts. Reps are an outcome, never a target —
82
Added:
weight, or both. One extra rep counts. Reps are an outcome, never a target —
83
83
a set ends at failure, not a number. The band only calibrates load. Raise the
84
84
load 10-20% once twelve reps are reached. A 6-10 band is not breached at
85
85
eleven.
86
86
- **Brief, infrequent, intense.** Shorter sessions at equal or better overload
87
87
are favourable (HD1, "Regulating Volume and Frequency").
88
Removed:
- **Focus over novelty.** Exercises come from a curated catalog. Substitutions
89
Removed:
follow author-specified whitelists; a routine may only narrow them.
88
Added:
- **Focus over novelty.** Exercises come from a curated catalog. Author-specified
89
Added:
allowlists limit substitutions. A routine may only narrow them.
90
90
- **On a stall, the answer is never more work.** After two weeks of no
91
91
progress: a week off, then *reduce* volume and frequency — drop sets, add
92
92
rest days (HD1, "Regulating Volume and Frequency"). No remedy may add volume
@@ -98,9 +98,9 @@
98
98
runtime.
99
99
- Deviations (training early, extra volume) must be possible but never silent:
100
100
require an explicit acknowledgement and retain it.
101
Removed:
- Keep plan and record distinct: prescription/routine vs logged workout;
102
Removed:
prescription vs progression.
103
Removed:
- The logbook records; it never interprets. Invariants belong on authored
101
Added:
- Keep plan and record distinct. Separate prescription or routine from logged
102
Added:
workout, and prescription from progression.
103
Added:
- The logbook records. It never interprets. Invariants belong on authored
104
104
plans, not on observed history. A log that refuses to state what happened is
105
105
worse than one that records an error.
106
106
@@ -119,4 +119,4 @@
119
119
state the tension plainly and ask for a decision. Do not resolve it silently.
120
120
121
121
Keep it terse. Cite the doctrine for every claim. Do not invent doctrine that
122
Removed:
is not in HD1 or `domain.md`; if the source is silent, say so.
122
Added:
is not in HD1 or `domain.md`. If the source is silent, say so.
.kiro/steering/domain.md
@@ -2,8 +2,8 @@
2
2
3
3
hito is a Heavy Duty training tracker.
4
4
5
Removed:
- Source of doctrine: `doc/Mike_Mentzer_Heavy_Duty_I.md` (HD1). Every domain
6
Removed:
decision must be justified against it.
5
Added:
- Source of doctrine: `doc/Mike_Mentzer_Heavy_Duty_I.md` (HD1). You must
6
Added:
justify every domain decision against it.
7
7
- It is copyrighted local reference material, gitignored, and never committed.
8
8
- On conflict between a design choice and the doctrine:
9
9
1. The doctrine wins, or
@@ -12,26 +12,26 @@
12
12
## Principles that bind the model
13
13
14
14
- **Intensity is categorical, not scalar.**
15
Removed:
- A working set is taken to momentary muscular failure; that *is* its
15
Added:
- You take a working set to momentary muscular failure. That *is* its
16
16
definition (HD1, "The Intensity Factor": the only accurate measures are 0%
17
17
at rest and 100% at failure).
18
18
- Going further is qualitative — `Beyond_failure`: forced reps, negatives,
19
19
static hold. Each is a count (reps, or seconds held). Rest-pause is not in
20
20
HD1 and is not modeled.
21
21
- Never introduce a numeric "intensity score".
22
Removed:
- **Recovery produces growth; the gym only stimulates it.**
23
Removed:
- Stimulation is immediate; production is not (HD1, "The Economics of Growth
22
Added:
- **Recovery produces growth. The gym only stimulates it.**
23
Added:
- Stimulation is immediate. Production is not (HD1, "The Economics of Growth
24
24
and Recovery": recovery precedes growth).
25
25
- Recovery is systemic and time-based — any hard workout gates the next one.
26
26
- **Volume beyond the minimum is harmful.**
27
Removed:
- One working set per exercise is nominal; three sets per muscle is the ceiling.
27
Added:
- One working set per exercise is nominal. Three sets per muscle is the ceiling.
28
28
A prescription that exceeds it is unrepresentable — `Prescription.Workout.make`
29
29
refuses it.
30
30
- The net negative effect of each extra set increases geometrically.
31
31
- Rising volume is a diagnostic warning — never an achievement or a progress
32
32
target.
33
33
- **Progressive overload is the progress signal.**
34
Removed:
- Progress = an increase in reps, weight, or both; one extra rep counts.
34
Added:
- Progress is an increase in reps, weight, or both. One extra rep counts.
35
35
- Reps are an *outcome*, never a target — a set ends at failure, not at a
36
36
number. The prescribed band only calibrates load.
37
37
- Raise the load once twelve reps are reached, by 10-20%, so failure returns
@@ -41,8 +41,8 @@
41
41
- Shorter sessions at equal or better overload are favourable.
42
42
- **Focus over novelty.**
43
43
- Exercises come from a curated catalog.
44
Removed:
- Substitutions are limited to author-specified whitelists, which a routine
45
Removed:
may only narrow.
44
Added:
- Author-specified allowlists limit substitutions. A routine may only
45
Added:
narrow them.
46
46
47
47
## Encoding rules
48
48
@@ -55,7 +55,7 @@
55
55
- Keep plan and record distinct:
56
56
- Prescription/routine vs logged workout.
57
57
- Prescription vs progression (plan vs observation).
58
Removed:
- The logbook records; it never interprets.
58
Added:
- The logbook records. It never interprets.
59
59
- Judgement belongs to one module.
60
60
- Invariants belong on plans, which are authored — not on history, which is
61
61
observed.
.kiro/steering/ocaml.md
@@ -4,8 +4,8 @@
4
4
5
5
- `.mli` files are the specification and outrank tests.
6
6
- If an interface and a test disagree, fix the test.
7
Removed:
- Changing an interface is a deliberate design decision — raise it, don't drift
8
Removed:
into it.
7
Added:
- Changing an interface is a deliberate design decision. Raise it. Do not let
8
Added:
the change drift in unannounced.
9
9
10
10
## Style
11
11
@@ -16,9 +16,9 @@
16
16
- Reach for `let*` when it flattens nested cases — chained `result` or
17
17
`result Lwt.t` plumbing where each step short-circuits on error. Used this
18
18
way, a bind improves flow and cuts indentation.
19
Removed:
- A single `match` is clearer than a monad; don't reach for one reflexively.
19
Added:
- A single `match` is clearer than a monad. Do not reach for one reflexively.
20
20
- Two or three cascading `match ... with Error _ -> ... | Ok x -> ...`
21
Removed:
steps are the signal to switch to `let*`.
21
Added:
steps are the signal to change to `let*`.
22
22
- Abstract types with smart constructors for anything carrying an invariant.
23
23
- Use `result` for expected, recoverable failure.
24
24
- This includes converting untrusted external data and domain feedback a caller
@@ -28,7 +28,7 @@
28
28
- Raise a module-specific exception for a violated authored-plan precondition
29
29
after validation.
30
30
- Do not use exceptions for normal domain outcomes or recorded deviations.
31
Removed:
- Prefer closed variants — they keep `match` exhaustiveness working for you.
31
Added:
- Prefer closed variants — they keep `match` exhaustiveness complete.
32
32
- Total functions where practical; make partiality visible in the type.
33
33
34
34
## Layering
@@ -55,7 +55,7 @@
55
55
56
56
Rules:
57
57
58
Removed:
- Ports are module types; adapters implement them; `Service.Make` and
58
Added:
- Ports are module types. Adapters implement them. `Service.Make` and
59
59
`Handlers.Make` are the dependency inversion.
60
60
- Persistence identity is assigned in `hito.app`, not in the core.
61
61
- Data crossing a boundary is a plain value: a view-model DTO outward, a core
.kiro/steering/workflow.md
@@ -42,13 +42,13 @@
42
42
Written for a human skimming the repo, not for completeness.
43
43
44
44
- Terse, idiomatic OCaml documentation.
45
Removed:
- Refactor docs aggressively; delete anything stale or redundant in the same
45
Added:
- Refactor docs aggressively. Delete anything stale or redundant in the same
46
46
change that outdates it.
47
47
- Interface docs state **intention**, not implementation. One line where one
48
48
line will do.
49
49
- A module header says what the module is for and which invariant it upholds.
50
50
- No Markdown files unless asked.
51
Removed:
- Don't restate the signature in prose. Document the *why* and the edge cases.
51
Added:
- Do not restate the signature in prose. Document the *why* and the edge cases.
52
52
53
53
54
54
## Build directory safety
@@ -64,7 +64,7 @@
64
64
65
65
Never run `dune fmt` while a watch build runs. `dune fmt` ignores
66
66
`--build-dir` and connects to the Dune RPC server that the watch process owns.
67
Removed:
That connection is dropped mid-rebuild, and the failure looks like a build
67
Added:
Dune drops that connection mid-rebuild. The failure then looks like a build
68
68
error when the code is fine.
69
69
70
70
Format with `ocamlformat` directly, which does not touch the RPC server: