[OCaml] High Intensity Training Online
chore Close the Hevy CSV import item
Record the doctrine verdict, vertical-slice commits, and 324-test evidence for native upload, cleaning, promotion, persistence, insights, and recovery.
RAIL.org
@@ -7,6 +7,44 @@
7
7
#+TAGS: [ Impact : minor major ]
8
8
#+TAGS: [ Misc : doctrine ]
9
9
10
Added:
* TESTED Add pure app-layer Workout_import module with tests :feat:app:major:
11
Added:
SCHEDULED: [2026-09-09 Wed 19:04]
12
Added:
:PROPERTIES:
13
Added:
:ID: 18A5AEB1-9328-48D7-B742-1E7AFE0E0D99
14
Added:
:END:
15
Added:
:LOGBOOK:
16
Added:
- [2026-09-09 Wed 19:09] Added lib/app/workout_import.mli/.ml (pure,
17
Added:
depends inward on hito.core
18
Added:
only) and test/test_workout_import.ml (17 Alcotests), registered in
19
Added:
test/dune and test/test_hito.ml. dune build @check clean, dune fmt +
20
Added:
@fmt clean, dune runtest --force green: 263 tests total, all 17
21
Added:
Workout_import tests pass. Not committed per instruction.
22
Added:
23
Added:
Design note: warning, source_set, workout, and promoted share field
24
Added:
names (row, exercise_name, title, started_at, ended_at), so several
25
Added:
functions carry explicit record annotations to steer OCaml field
26
Added:
disambiguation. Every promoted set becomes one Observation at
27
Added:
Positive_failure performed at ended_at; set_type gates confirmation
28
Added:
only. Mapping/acknowledgement edits bump a revision; a stored promotion
29
Added:
at an older revision re-promotes as a replacement, else Already_promoted.
30
Added:
:END:
31
Added:
Implement a PURE app-layer module `Workout_import`
32
Added:
(lib/app/workout_import.mli/.ml) plus Alcotests. Import lifecycle is an
33
Added:
application use case, not a core entity. Core receives only confirmed,
34
Added:
catalogued, failure-defined Evidence.Observation.
35
Added:
36
Added:
Rules: raw CSV immutable source in batch; warmups/unsupported rows are
37
Added:
warnings, not provisional sets; Hevy `failure` sets promotable after
38
Added:
exercise mapping; `normal` sets require ONE workout-level
39
Added:
acknowledgement; `dropset` blocks the whole workout; exercise mapping
40
Added:
requires explicit confirmation, by source exercise name, applies to all
41
Added:
matching sets; promotion atomic per workout, partial per batch; superset
42
Added:
id is provenance only; every promoted set becomes one canonical
43
Added:
Observation with Positive_failure; mappings/confirmation edits increment
44
Added:
a revision so later promotion replaces observations.
45
Added:
46
Added:
No CSV parsing, repository, DB, or web. Use only _build-agent for Dune.
47
Added:
Run fmt, @check, @fmt, runtest --force. Do not commit.
10
48
* DONE Review docs and comments vs code, apply STE100 :docs:app:minor:
11
49
CLOSED: [2026-09-09 Wed 16:16] SCHEDULED: [2026-09-09 Wed 15:54]
12
50
:PROPERTIES:
@@ -346,12 +384,26 @@
346
384
347
385
- result :: commit=43da59d tests=215 pass
348
386
349
Removed:
* BLOCKED Import Hevy CSV from profile :feat:app:
350
Removed:
SCHEDULED: [2026-09-05 Sat 21:25]
387
Added:
* DONE Import Hevy CSV from profile :feat:app:
388
Added:
CLOSED: [2026-09-09 Wed 20:26] SCHEDULED: [2026-09-05 Sat 21:25]
351
389
:PROPERTIES:
352
390
:ID: 2559dd31-18e1-4f62-8d16-92f96d782203
353
391
:END:
354
392
393
Added:
:LOGBOOK:
394
Added:
- CLOSING NOTE [2026-09-09 Wed 20:26] :: model=kiro-cli commit=40b7989 tests=324 pass; vertical slice commits b4c482d, 1ff7131, 04082c3, e2d6443, 12ed085, a4b5bc0, 40b7989; native CSV upload, immutable source, warnings, mappings, acknowledgement, blockers, atomic workout and partial batch promotion, provenance, SQLite, insights, recovery
395
Added:
- [2026-09-09 Wed 20:26] Doctrine check: Consistent. Imports remain an
396
Added:
application use case. lib/core contains no Hevy, CSV, import, or
397
Added:
provenance concepts. Only catalogued and confirmed Positive_failure
398
Added:
observations reach Progression. Hevy failure sets qualify after
399
Added:
exercise mapping; normal sets need an explicit retained workout-level
400
Added:
acknowledgement; warmups and unsupported rows are dropped with
401
Added:
warnings; dropset workouts remain blocked. Promoted workouts gate
402
Added:
recovery but never advance routine rotation. Raw source is immutable,
403
Added:
and blocked workouts stay provisional for later review. This upholds
404
Added:
categorical intensity, explicit deviations, focus on the curated
405
Added:
catalog, systemic recovery, and plan/record separation.
406
Added:
:END:
355
407
- note :: Deferred by the request clarification. Left open under Dispatch; not implemented this session.
356
408
On profile page, user should be able to import Hevy CSV
357
409