docs correct inaccuracies in ARCHITECTURE

Audited every claim against the interfaces rather than against memory. - Muscle no longer claims all thirteen targets are HD1's. Glutes appear nowhere in the book and forearms only anatomically; both exist so a compound has something able to serve the muscle it pre-exhausts, and saying otherwise dressed an addition up as a citation. - The principle table attributed one-drive-per-slot to Workout_prescription construction, which validates no such thing. It is the shape of Prescription — there is no set count to raise. Added a note distinguishing the runtime checks from the type-level ones. - Recorded that Progression can decline to judge: Insufficient_data rather than a guess when the record is too short or too recent. - Noted that nothing automates applying a remedy to a routine; the dashed arrow in the diagram needs a tier that does not exist yet. - Clarified that doc/ is gitignored, so the source text is not in the repo and citations name sections rather than line numbers. - Added the test convention: one suite per module, registered in layer order.

Commit
96f8a04932c55cccc5a020293cba555efa2c1fc4
Author
Marius Peter <dev@marius-peter.com>
Author date
Committer
Marius Peter <dev@marius-peter.com>
Committer date
ARCHITECTURE.md
index 95732a69..6cc40878 100644..100644
@@ -47,15 +47,19 @@
47 47 `Principle` module: a module cohering around "things that are true" is a
48 48 constants bag, and each principle is instead enforced where it bites.
49 49
50 Removed: | Principle | Enforced at |
51 Removed: |---|---|
52 Removed: | 6-12 stimulus window | `Prescription.rep_limits` |
53 Removed: | one drive to failure per slot | `Workout_prescription` construction |
54 Removed: | isolation into compound, sharing a muscle | `Exercise.may_pre_exhaust` |
55 Removed: | every other day, then two days off | `Routine.recovery_after` |
56 Removed: | load rises at twelve reps, by 10-20% | `Progression.judge_load` |
57 Removed: | never add work on a stall | `Progression.remedy` |
50 Added: | Principle | Enforced at |
51 Added: |-------------------------------------------|-------------------------------------------------------|
52 Added: | 6-12 stimulus window | `Prescription.rep_limits` |
53 Added: | one drive to failure per slot | `Prescription`'s shape — no set count exists to raise |
54 Added: | isolation into compound, sharing a muscle | `Exercise.may_pre_exhaust` |
55 Added: | every other day, then two days off | `Routine.recovery_after` |
56 Added: | load rises at twelve reps, by 10-20% | `Progression.judge_load` |
57 Added: | never add work on a stall | `Progression.remedy` |
58 58
59 Added: Only the first, third and fourth are runtime checks; the second is the absence of
60 Added: a field, and the last two are the shape of a return type. That is the intended
61 Added: bias — a principle enforced by a type cannot be forgotten at a call site.
62 Added:
59 63 `lib/app` and `lib/web` are parked (`dune.disabled`) — their stubs predate this
60 64 ontology.
61 65
@@ -65,8 +69,11 @@
65 69
66 70 - **Units** — `Weight` (kg, zero for bodyweight movements), `Reps`, `Rep_range`.
67 71 Abstract, reachable only through validating constructors.
68 Removed: - **Muscle** — the thirteen targets HD1 names. Deliberately minimal: it exists
69 Removed: only so a pre-exhaust pairing can be checked.
72 Added: - **Muscle** — the training targets HD1 names, plus the assisting muscles its
73 Added: weak-link argument needs. Glutes never appear in HD1 and forearms only
74 Added: anatomically; both are here because a compound must have something able to
75 Added: serve the muscle it pre-exhausts. Deliberately minimal otherwise: nothing but
76 Added: pre-exhaust validation consults it.
70 77 - **Exercise** — the curated catalog, each movement carrying a mechanic
71 78 (isolation or compound) and the muscles it works. Substitutions come from HD1's
72 79 own "or" lists, grouped so symmetry is structural.
@@ -109,8 +116,10 @@
109 116 is an increase in reps, weight or both, one rep being significant. A stall is
110 117 progress ceasing entirely for two weeks, and its single remedy subtracts: a
111 118 week off, one fewer stimulus per workout, an extra rest day. There is no
112 Removed: additive remedy, structurally. Diagnostics report habits HD1 names as causes of
113 Removed: overtraining.
119 Added: additive remedy, structurally. It can also decline to judge: too short or too
120 Added: recent a record yields `Insufficient_data` rather than a guess, so two flat
121 Added: sessions a day apart never condemn a routine. Diagnostics report habits HD1
122 Added: names as causes of overtraining.
114 123
115 124 ## The cycle
116 125
@@ -128,6 +137,15 @@
128 137
129 138 Plan and record are distinct types with a one-way transition. Prescriptions never
130 139 learn what was performed; the logbook never interprets.
140 Added:
141 Added: The dashed arrow is the one link nothing automates: `Progression.remedy` returns
142 Added: a remedy, but no code applies it to a routine. Acting on it belongs to a tier
143 Added: that does not exist yet.
144 Added:
145 Added: ## Tests
146 Added:
147 Added: One Alcotest suite per module, `test/test_<module>.ml`, each exposing a `suite`
148 Added: value registered in `test/test_hito.ml` in layer order. `dune runtest`.
131 149
132 150 ## Deviations and tensions
133 151