docs write the README in Org mode

The project is developed in Emacs, so the README belongs in Org mode. Replace README.md with README.org carrying the same content.

Commit
d3ddc4bc6fd25db4a5059a639cb530020df6e16b
Author
Marius Peter <dev@marius-peter.com>
Author date
Committer
Marius Peter <dev@marius-peter.com>
Committer date
Changed files
README.md
index eedf2bfa..00000000 100644..000000
@@ -1,76 +0,0 @@
1 Removed: # hito
2 Removed:
3 Removed: A Heavy Duty training tracker. hito records workouts the way Mike Mentzer's
4 Removed: Heavy Duty prescribes them: one working set to failure per exercise, recovery
5 Removed: gating the next session, and progress measured as more reps or more load.
6 Removed:
7 Removed: The domain refuses states the doctrine cannot read. A routine cannot exceed
8 Removed: three sets per muscle. A workout cannot begin before recovery without an
9 Removed: explicit, recorded override. A stall is corrected by resting more and doing
10 Removed: less, never by adding work.
11 Removed:
12 Removed: ## Layout
13 Removed:
14 Removed: Six libraries, dependencies pointing inward only. The build graph enforces
15 Removed: the rule: a library cannot name what it does not link.
16 Removed:
17 Removed: | Library | Role |
18 Removed: |--------------------|---------------------------------------------------------------|
19 Removed: | `hito.core` | Pure domain. No framework, database, or Lwt. |
20 Removed: | `hito.app` | Ports (`Repository`, `Password_hash`, `Importer`), `Service`. |
21 Removed: | `hito.import` | Adapters for third-party exports (`Hevy_csv`). |
22 Removed: | `hito.persistence` | SQLite adapter, bcrypt adapter, stored-record codecs. |
23 Removed: | `hito.presenter` | View models and pages. Depends on Dream only. |
24 Removed: | `hito.web` | Controllers. Maps entities to view models. |
25 Removed:
26 Removed: `bin/` is the composition root: it alone names both an adapter and the port
27 Removed: it plugs into.
28 Removed:
29 Removed: ## Run
30 Removed:
31 Removed: hito needs OCaml 5.1 or later and the pinned dependencies in `hito.opam`.
32 Removed:
33 Removed: ```sh
34 Removed: opam install . --deps-only --with-test
35 Removed: dune build
36 Removed: dune exec hito
37 Removed: ```
38 Removed:
39 Removed: Configuration comes from the environment. All variables have defaults.
40 Removed:
41 Removed: | Variable | Purpose |
42 Removed: |----------------------|------------------------------------------------------------|
43 Removed: | `HITO_DB` | Caqti URI. Default `sqlite3:local_db/hito.sqlite`. |
44 Removed: | `HITO_SECRET` | Signs sessions and CSRF tokens. Set it in production. |
45 Removed: | `HITO_PORT` | TCP port. Default `8080`. The server binds loopback. |
46 Removed: | `HITO_VERSION` | Deployment identifier shown in the footer. |
47 Removed: | `HITO_SEED` | `1` seeds one account on startup. Default `0`. |
48 Removed: | `HITO_SEED_PASSWORD` | Required when `HITO_SEED=1`. |
49 Removed: | `HITO_SEED_CSV` | Hevy export imported for the seeded account. |
50 Removed:
51 Removed: Sessions live in a signed cookie. The server sets a same-origin content
52 Removed: security policy and refuses framing. Put a TLS-terminating proxy in front of
53 Removed: it.
54 Removed:
55 Removed: ## Develop
56 Removed:
57 Removed: Three gates define done, in this order. `scripts/ci.sh` runs all three and
58 Removed: exits non-zero on any failure.
59 Removed:
60 Removed: ```sh
61 Removed: dune build @check # type-check libraries and tests
62 Removed: dune runtest # every Alcotest suite
63 Removed: dune build @fmt # ocamlformat and dune formatting applied
64 Removed: ```
65 Removed:
66 Removed: Format with `ocamlformat --inplace` on the files you touched. Run
67 Removed: `scripts/install-hooks.sh` once per clone to run the gates before every push.
68 Removed: `scripts/coverage.sh` renders a coverage report when `bisect_ppx` is
69 Removed: installed.
70 Removed:
71 Removed: ## Doctrine
72 Removed:
73 Removed: Design decisions answer to *Heavy Duty I*. The steering files under
74 Removed: `.kiro/steering/` state the principles the model encodes and the rules the
75 Removed: code follows. The book itself is copyrighted reference material and is not
76 Removed: part of the repository.
README.org
index 00000000..1531b707 000000..100644
@@ -0,0 +1,77 @@
1 Added: #+TITLE: hito
2 Added: #+AUTHOR: Marius Peter
3 Added:
4 Added: A Heavy Duty training tracker. hito records workouts the way Mike Mentzer's
5 Added: Heavy Duty prescribes them: one working set to failure per exercise, recovery
6 Added: gating the next session, and progress measured as more reps or more load.
7 Added:
8 Added: The domain refuses states the doctrine cannot read. A routine cannot exceed
9 Added: three sets per muscle. A workout cannot begin before recovery without an
10 Added: explicit, recorded override. A stall is corrected by resting more and doing
11 Added: less, never by adding work.
12 Added:
13 Added: * Layout
14 Added:
15 Added: Six libraries, dependencies pointing inward only. The build graph enforces
16 Added: the rule: a library cannot name what it does not link.
17 Added:
18 Added: | Library | Role |
19 Added: |--------------------+---------------------------------------------------------------|
20 Added: | ~hito.core~ | Pure domain. No framework, database, or Lwt. |
21 Added: | ~hito.app~ | Ports (~Repository~, ~Password_hash~, ~Importer~), ~Service~. |
22 Added: | ~hito.import~ | Adapters for third-party exports (~Hevy_csv~). |
23 Added: | ~hito.persistence~ | SQLite adapter, bcrypt adapter, stored-record codecs. |
24 Added: | ~hito.presenter~ | View models and pages. Depends on Dream only. |
25 Added: | ~hito.web~ | Controllers. Maps entities to view models. |
26 Added:
27 Added: ~bin/~ is the composition root: it alone names both an adapter and the port
28 Added: it plugs into.
29 Added:
30 Added: * Run
31 Added:
32 Added: hito needs OCaml 5.1 or later and the pinned dependencies in ~hito.opam~.
33 Added:
34 Added: #+begin_src sh
35 Added: opam install . --deps-only --with-test
36 Added: dune build
37 Added: dune exec hito
38 Added: #+end_src
39 Added:
40 Added: Configuration comes from the environment. All variables have defaults.
41 Added:
42 Added: | Variable | Purpose |
43 Added: |----------------------+-------------------------------------------------------|
44 Added: | ~HITO_DB~ | Caqti URI. Default ~sqlite3:local_db/hito.sqlite~. |
45 Added: | ~HITO_SECRET~ | Signs sessions and CSRF tokens. Set it in production. |
46 Added: | ~HITO_PORT~ | TCP port. Default ~8080~. The server binds loopback. |
47 Added: | ~HITO_VERSION~ | Deployment identifier shown in the footer. |
48 Added: | ~HITO_SEED~ | ~1~ seeds one account on startup. Default ~0~. |
49 Added: | ~HITO_SEED_PASSWORD~ | Required when ~HITO_SEED=1~. |
50 Added: | ~HITO_SEED_CSV~ | Hevy export imported for the seeded account. |
51 Added:
52 Added: Sessions live in a signed cookie. The server sets a same-origin content
53 Added: security policy and refuses framing. Put a TLS-terminating proxy in front of
54 Added: it.
55 Added:
56 Added: * Develop
57 Added:
58 Added: Three gates define done, in this order. ~scripts/ci.sh~ runs all three and
59 Added: exits non-zero on any failure.
60 Added:
61 Added: #+begin_src sh
62 Added: dune build @check # type-check libraries and tests
63 Added: dune runtest # every Alcotest suite
64 Added: dune build @fmt # ocamlformat and dune formatting applied
65 Added: #+end_src
66 Added:
67 Added: Format with ~ocamlformat --inplace~ on the files you touched. Run
68 Added: ~scripts/install-hooks.sh~ once per clone to run the gates before every push.
69 Added: ~scripts/coverage.sh~ renders a coverage report when ~bisect_ppx~ is
70 Added: installed.
71 Added:
72 Added: * Doctrine
73 Added:
74 Added: Design decisions answer to /Heavy Duty I/. The steering files under
75 Added: ~.kiro/steering/~ state the principles the model encodes and the rules the
76 Added: code follows. The book itself is copyrighted reference material and is not
77 Added: part of the repository.