[OCaml] High Intensity Training Online
chore Close the two refactors and the profile dropdown
Record the DONE transitions and closing-note evidence for the persistence split, the password-hashing port, and the profile drop-down. The dropdown item moves out of BLOCKED, with the accepted deviation noted: Settings points at /profile, since account settings live there and there is no separate page.
RAIL.org
@@ -7,6 +7,46 @@
7
7
#+TAGS: [ Impact : minor major ]
8
8
#+TAGS: [ Misc : doctrine ]
9
9
10
Added:
* DONE Split hito.app into use-case and adapter libs :refactor:app:major:
11
Added:
CLOSED: [2026-09-09 Wed 12:14] SCHEDULED: [2026-09-09 Wed 11:33]
12
Added:
:PROPERTIES:
13
Added:
:ID: B999926A-3FF6-4118-9FE1-5C9CE905A00D
14
Added:
:END:
15
Added:
:LOGBOOK:
16
Added:
- CLOSING NOTE [2026-09-09 Wed 12:14] :: model=kiro-cli commit=260d559 tests=247 pass; boundary now structural: hito.app depends on hito.core only; adapters in new hito.persistence lib
17
Added:
:END:
18
Added:
The Clean Architecture review found that the Dependency Rule holds by
19
Added:
convention rather than by construction at the persistence
20
Added:
boundary. hito.app is one dune library holding the use case (Service),
21
Added:
the port (Repository), and the adapters (Sqlite_repo, Memory_repo,
22
Added:
Codec, Migrations). Its dune stanza depends on caqti,
23
Added:
caqti-driver-sqlite3, safepass and uri, so nothing stops Service from
24
Added:
calling Caqti directly. Today service.ml opens only Lwt, so the
25
Added:
discipline holds, but the compiler does not enforce it.
26
Added:
27
Added:
Split hito.app into a use-case library that depends on hito.core and the
28
Added:
port only, and an adapter library that holds the SQLite adapter, the
29
Added:
codec and the migrations. Then the boundary is structural.
30
Added:
31
Added:
Note: two further deviations were reviewed and accepted, not
32
Added:
captured. Lwt appears in the port and in every use-case
33
Added:
signature. Entities cross outward into the view, because pages.mli takes
34
Added:
Evidence.Workout.t and Repository.record rather than view models.
35
Added:
* DONE Move password hashing behind a port :refactor:app:minor:
36
Added:
CLOSED: [2026-09-09 Wed 13:33] SCHEDULED: [2026-09-09 Wed 11:33]
37
Added:
:PROPERTIES:
38
Added:
:ID: 034E3D12-4797-4F0B-A369-79BD39F0876E
39
Added:
:END:
40
Added:
:LOGBOOK:
41
Added:
- CLOSING NOTE [2026-09-09 Wed 13:33] :: model=kiro-cli commit=060df21 tests=251 pass; Password_hash.S port in hito.app; Bcrypt_hash adapter in hito.persistence; Service.Make (R)(H); Trainee names no hashing lib
42
Added:
:END:
43
Added:
The Clean Architecture review found that Trainee is bound to one hashing
44
Added:
library: trainee.ml calls Bcrypt.hash and Bcrypt.verify from
45
Added:
safepass. An entity-like type therefore carries an outer-circle
46
Added:
mechanism, and the algorithm cannot change without touching the type.
47
Added:
48
Added:
Keep the credential opaque and move hashing behind a port, so the
49
Added:
algorithm becomes a detail of an adapter.
10
50
* DONE Add a time graph of feedback elements to the logbook :feat:ui:
11
51
CLOSED: [2026-09-06 Sun 14:23] SCHEDULED: [2026-09-06 Sun 13:43]
12
52
:PROPERTIES:
@@ -40,10 +80,13 @@
40
80
Remove the black line after the masthead
41
81
42
82
- result :: model=kiro-cli commit=d6b3b97 tests=241 pass
43
Removed:
* BLOCKED Add profile dropdown actions :feat:app:
44
Removed:
SCHEDULED: [2026-09-06 Sun 13:09]
83
Added:
* DONE Add profile dropdown actions :feat:app:
84
Added:
CLOSED: [2026-09-09 Wed 13:37] SCHEDULED: [2026-09-06 Sun 13:09]
45
85
:PROPERTIES:
46
86
:ID: db8901b3-f932-4c88-8d0d-7ddadfb97f32
87
Added:
:END:
88
Added:
:LOGBOOK:
89
Added:
- CLOSING NOTE [2026-09-09 Wed 13:37] :: model=kiro-cli commit=8fc7223 tests=251 pass; details/summary dropdown with Profile, Settings, Sign out; accepted deviation: Settings points at /profile (no separate settings page)
47
90
:END:
48
91
Source: application feedback (VPS, trainee t1, sequence 5, submitted 2026-09-05T22:18:25Z)
49
92