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.

Commit
d983f4f6ec6ad9f5e500c9352013506af244b58d
Author
Marius Peter <dev@marius-peter.com>
Author date
Committer
Marius Peter <dev@marius-peter.com>
Committer date
Changed files
lib/core/evidence.ml
index 1d5a4bdc..74d33054 100644..100644
@@ -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
index 3da9d59b..74ee2fac 100644..100644
@@ -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