docs Correct stale and vague comments against the code

Fix drift found by a per-module accuracy audit: - view_model.ml header claimed pages still take entities; every page now crosses as a DTO. - The feedback form comment said "leveled selects" and "three radio buttons"; the form renders five radio buttons per factor, one factor at a time. Correct the control type and count, and drop the duplicate comment. - exercise.mli may_pre_exhaust stated only the shared-target condition; state the full gate (isolation targets one muscle, compound trains it, compound trains two or more). Comment-only; build @check and @fmt clean, 245 tests pass.

Commit
0d0425dfff848b8b2cfe1586d712f06fd0d4dc83
Author
Marius Peter <dev@marius-peter.com>
Author date
Committer
Marius Peter <dev@marius-peter.com>
Committer date
Changed files
lib/core/exercise.mli
index 5a2b9a48..349734ab 100644..100644
@@ -65,7 +65,9 @@
65 65 val pp : Format.formatter -> t -> unit
66 66
67 67 val may_pre_exhaust : isolation:t -> compound:t -> bool
68 Removed: (** Whether the pair shares the isolation's target. *)
68 Added: (** Whether the isolation and the compound may pair. True only when the
69 Added: isolation targets one muscle, the compound trains that muscle, and the
70 Added: compound trains two or more muscles. *)
69 71
70 72 val may_substitute : original:t -> candidate:t -> bool
71 73 (** Whether [candidate] is author-approved for [original]. *)
lib/web/pages.ml
index 1c82a140..218f4358 100644..100644
@@ -1034,13 +1034,11 @@
1034 1034 else []);
1035 1035 ]
1036 1036
1037 Removed: (* The subjective feedback form. Leveled selects report sleep, appetite,
1037 Added: (* The subjective feedback form. Radio groups report sleep, appetite,
1038 1038 readiness, motivation, and difficulty against a personal baseline. Flags
1039 1039 report pain, injury, and insufficient preparation. A field left blank reports
1040 1040 nothing, so the trainee submits only what they mean to. Feedback is
1041 1041 standalone — recorded from the Logbook at any time. *)
1042 Removed: (* Each subjective metric uses three unselected radio buttons styled as inline buttons.
1043 Removed: Leaving a group untouched records no signal for that metric. *)
1044 1042 type feedback_flow = { step : int; answers : (string * string) list }
1045 1043
1046 1044 let feedback_factors =
@@ -1052,7 +1050,7 @@
1052 1050 ("difficulty", "Perceived difficulty");
1053 1051 ]
1054 1052
1055 Removed: (* Each subjective metric uses three unselected radio buttons styled as inline
1053 Added: (* Each subjective metric uses five unselected radio buttons styled as inline
1056 1054 buttons. The server shows one metric at a time. *)
1057 1055 let feedback_level_buttons field label =
1058 1056 let choice code text =
lib/web/view_model.ml
index 4a65260e..3d5e5fef 100644..100644
@@ -6,9 +6,8 @@
6 6 entity into a view model, and the presenter ({!Pages}) renders the view
7 7 model without ever naming an inner-circle type.
8 8
9 Removed: Migrated so far: the signed-in viewer, application feedback, and subjective
10 Removed: feedback. Other pages still take entities directly. They move here page by
11 Removed: page. *)
9 Added: Every page now crosses the boundary as a DTO. No page names a core entity.
10 Added: Add a page DTO here before the presenter renders it. *)
12 11
13 12 module Viewer = struct
14 13 type t = { username : string }