[OCaml] High Intensity Training Online
refactor Trim Feedback to HD1-grounded signals
HD1 gauges recovery by time (72 hours) and detects its failure by effect — a halt or decompensation — not by a battery of subjective wellness proxies, an approach HD1 argues against. Keep only the two signals HD1 grounds: Motivation (chapter 6, and a recognized overtraining symptom) and Difficulty (HD1's "the weights feel much heavier than usual"). Drop Readiness, Sleep, Appetite, Pain, Injury, and Preparation_insufficient. None appear in HD1's recovery vocabulary. This narrows the widest, least-grounded part of the core perimeter.
Changed files
lib/core/evidence.ml
@@ -84,16 +84,7 @@
84
84
| 5 -> Some Very_good
85
85
| _ -> None
86
86
87
Removed:
type signal =
88
Removed:
| Sleep of level
89
Removed:
| Appetite of level
90
Removed:
| Readiness of level
91
Removed:
| Motivation of level
92
Removed:
| Difficulty of level
93
Removed:
| Pain
94
Removed:
| Injury
95
Removed:
| Preparation_insufficient
96
Removed:
87
Added:
type signal = Motivation of level | Difficulty of level
97
88
type t = { reported_at : Recovery.timestamp; signals : signal list }
98
89
type error = Duplicate_signal of signal
99
90
@@ -101,15 +92,7 @@
101
92
102
93
let same_category left right =
103
94
match (left, right) with
104
Removed:
| Sleep _, Sleep _
105
Removed:
| Appetite _, Appetite _
106
Removed:
| Readiness _, Readiness _
107
Removed:
| Motivation _, Motivation _
108
Removed:
| Difficulty _, Difficulty _
109
Removed:
| Pain, Pain
110
Removed:
| Injury, Injury
111
Removed:
| Preparation_insufficient, Preparation_insufficient ->
112
Removed:
true
95
Added:
| Motivation _, Motivation _ | Difficulty _, Difficulty _ -> true
113
96
| _ -> false
114
97
115
98
let make ~reported_at signals =
lib/core/evidence.mli
@@ -62,9 +62,9 @@
62
62
| Good
63
63
| Very_good
64
64
(** A five-point subjective score. [Very_poor] is 1, [Very_good] is 5.
65
Removed:
These are wellness and readiness self-reports, never a measure of
66
Removed:
the working set's intensity, which is categorical (0% at rest, 100%
67
Removed:
at failure). *)
65
Added:
These are subjective self-reports, never a measure of the working
66
Added:
set's intensity, which is categorical (0% at rest, 100% at failure).
67
Added:
*)
68
68
69
69
val level_to_score : level -> int
70
70
(** The score in 1..5. *)
@@ -73,14 +73,15 @@
73
73
(** [Some] for 1..5, [None] otherwise. *)
74
74
75
75
type signal =
76
Removed:
| Sleep of level
77
Removed:
| Appetite of level
78
Removed:
| Readiness of level
79
76
| Motivation of level
80
77
| Difficulty of level
81
Removed:
| Pain
82
Removed:
| Injury
83
Removed:
| Preparation_insufficient
78
Added:
(** The only self-reports HD1 grounds. Motivation is HD1 chapter 6, and
79
Added:
a halt in it is a recognized overtraining symptom ("with those who
80
Added:
chronically overtrain, such a disinclination is easy to
81
Added:
understand"). Difficulty is HD1's "the weights feel much heavier
82
Added:
than usual" — a depletion symptom. HD1 gauges recovery by time and
83
Added:
by effect (a stall or decompensation), not by a wider battery of
84
Added:
wellness proxies, so none are modeled. *)
84
85
85
86
type t
86
87
type error = Duplicate_signal of signal