chore: initial import

This commit is contained in:
2026-07-24 21:37:03 +02:00
commit 6b4ed9bc36
111 changed files with 95131 additions and 0 deletions
+156
View File
@@ -0,0 +1,156 @@
{
"release": "training-tools-2.0.0",
"components": {
"trainingsplan": "2.0.0",
"trainingstracker": "2.0.0"
},
"contracts": {
"plan_schema": 3,
"training_contract": 2,
"tracker_schema": 7,
"result_data": 2
},
"analysis_storage": "one-current-file-per-week-and-overall; overwrite on regeneration",
"files": [
{
"path": "MIGRATION.md",
"size": 2397,
"sha256": "691c9ce3c9bbc2c535896b9b1cacc51e54b691099d538fe5372c02ff696b1107"
},
{
"path": "RELEASE-NOTES.md",
"size": 1926,
"sha256": "e9cee71dfb96d619e8f013f0b174681c4304f07aaa6ae5c7f61dd0f3304ca3db"
},
{
"path": "data/trainingsplan/plans/calihoss-newbie-8-wochen.json",
"size": 419707,
"sha256": "8365b612ed2b0d6d49db5844c1db8b9d1e001ce1b5d09fdda25c0612374cffbd"
},
{
"path": "data/trainingsplan/plans/phase-1.json",
"size": 575838,
"sha256": "f61d90bedb1bff15bdb667ef7c49428ddd1d8e36ad5f39acf52085fbf641c618"
},
{
"path": "plugins/trainingsplan/TOOL-README.md",
"size": 4055,
"sha256": "1c26eb25d57eca965cb71d7ac0baf0a93a53ba94c89521b76330d4011a6b5ba3"
},
{
"path": "plugins/trainingsplan/app.py",
"size": 21571,
"sha256": "367b30e3cf62cb816c34099c67417495fe58fd243975beb46a22e6e000031e87"
},
{
"path": "plugins/trainingsplan/backend.py",
"size": 1180,
"sha256": "9efa3cac72842c5c8548e3dcc4cd337579890eafd11d64be462c3581fad9f689"
},
{
"path": "plugins/trainingsplan/plan_builder.py",
"size": 46127,
"sha256": "f8a9ade995272402bb32350e2686c0374945581a6bfbfbad9adb4a553159f49a"
},
{
"path": "plugins/trainingsplan/plugin.json",
"size": 1292,
"sha256": "cac5da0eb04e320b07904ada1786f7b9c5cd43fd7aaac8bd584918e0cbc7db9e"
},
{
"path": "plugins/trainingsplan/presets/couchsnacks.json",
"size": 74860,
"sha256": "73e70d563f32a540b3e140888adf30e56c39babb7aff6118ab8e0690a389f93b"
},
{
"path": "plugins/trainingsplan/presets/fruehstueck.json",
"size": 60871,
"sha256": "1bace5aa1d97346600408020cefcc23481e40adb577c939bda0da781432935b0"
},
{
"path": "plugins/trainingsplan/presets/granola.json",
"size": 39330,
"sha256": "73983b3ffd72a998f0136fea2df9e6278b1076366adf89bd60f2d5f5c7327d17"
},
{
"path": "plugins/trainingsplan/presets/nachmittags.json",
"size": 66551,
"sha256": "65c7e11a9728597c725ae8af128f62ee25a70095b8f78f99972a879688c528ec"
},
{
"path": "plugins/trainingsplan/recipe_builder.py",
"size": 18387,
"sha256": "c9738a7c5e0e178cd8f91be5cbdacd13ee100eea4413d4ed4e101c33f6881e48"
},
{
"path": "plugins/trainingsplan/schema_contract.py",
"size": 20726,
"sha256": "4b02ed3b22f014c17b4f960521ee89bd0081309587c065619f67950923814a75"
},
{
"path": "plugins/trainingsplan/static/index.html",
"size": 69985,
"sha256": "f86b38f18eaba2bcf10683d0cf4e8c32061c5a35f8dd53ab56b46d16df7d06e8"
},
{
"path": "plugins/trainingsplan/storage.py",
"size": 1091,
"sha256": "a5ce0c9159d4a102b465e436e715e6c820cfbfeae0489773ea2d007f553e510c"
},
{
"path": "plugins/trainingsplan/tests/test_contract.py",
"size": 3301,
"sha256": "7d6c4f807c3ce28dcb84d0ab918aae77c8ac9419a84ea72c132f755fa1cb1061"
},
{
"path": "plugins/trainingstracker/README.md",
"size": 4240,
"sha256": "a237661fb657cabdc32592bcc65d948b3cacd837bd8dc9aef74af1e8619733b1"
},
{
"path": "plugins/trainingstracker/analysis_store.py",
"size": 832,
"sha256": "b13402ddf8fd4b8d049ffa0200c02b7f32ef329aa9c93c9fd2156ef469e84293"
},
{
"path": "plugins/trainingstracker/app.py",
"size": 143226,
"sha256": "f7f87f43ca7d13c09b98b7e5364d350ad6e11d6a9da3ecca4b78dbfcae0de761"
},
{
"path": "plugins/trainingstracker/backend.py",
"size": 1453,
"sha256": "57490ca4d1283ad6084817e50e1331e2a2be80138f172b050905d1f2b8996c63"
},
{
"path": "plugins/trainingstracker/contract.py",
"size": 269,
"sha256": "5b73a9698f41300b5a21390bab1393bdca431676aead6d986520da492c97bac3"
},
{
"path": "plugins/trainingstracker/plugin.json",
"size": 1531,
"sha256": "8e3f10ac7a8325e925ad222561cd6d1d537c21059bebd517aa3afaea4937a604"
},
{
"path": "plugins/trainingstracker/session_store.py",
"size": 1186,
"sha256": "4af7c49cdaaf3acea311e1f54a3f922b8503111550a2dc0c1c7a3089b6463b1f"
},
{
"path": "plugins/trainingstracker/static/index.html",
"size": 116266,
"sha256": "3a37bf462667350f2104b362c90d4dde3eca92e2ecfe4a71f58f0fb39f213e40"
},
{
"path": "plugins/trainingstracker/tests/test_app.py",
"size": 21391,
"sha256": "d101b1a64ba7f954148d2da82a15a85843bd77f9b2144381c1b74c2920683e4c"
},
{
"path": "plugins/trainingstracker/tests/test_stability.py",
"size": 2012,
"sha256": "30f8af88f8f43b0294b860b8e35c4325aadfb477934a115b12eba1c84d0c58e4"
}
]
}
+63
View File
@@ -0,0 +1,63 @@
# Migration auf Trainingsplan / Trainingstracker 2.0
## Enthaltene Komponenten
```text
plugins/trainingsplan/
plugins/trainingstracker/
data/trainingsplan/plans/phase-1.json
data/trainingsplan/plans/calihoss-newbie-8-wochen.json
```
Es werden keine anderen boehmitools-Komponenten verändert.
## Installation
1. boehmitools beziehungsweise den betroffenen Container stoppen.
2. Die beiden bestehenden Plugin-Ordner sichern.
3. `plugins/trainingsplan/` und `plugins/trainingstracker/` durch die Ordner aus dem Paket ersetzen.
4. Die beiden mitgelieferten Plan-JSONs nach `data/trainingsplan/plans/` kopieren.
5. boehmitools wieder starten.
## Bestehende Sessiondateien
Die Dateien unter `data/trainingstracker/sessions/` müssen nicht manuell geändert werden.
- Alte Positionsschlüssel wie `d1-r0-e0` bleiben lesbar.
- Die neuen Pläne speichern den ursprünglichen Positionsschlüssel dauerhaft als `legacy_id`.
- Beim Öffnen und nächsten Speichern einer Session wird der Eintrag auf die stabile Übungs-ID migriert.
- Bereits dokumentierte Sessiondaten erhalten beim nächsten Speichern die aktuelle `plan_id` und `plan_revision`, ohne Ergebnisse oder Notizen zu verwerfen.
Vorhandene Sessiondateien sollten trotzdem einmal separat gesichert werden.
## Bestehende Analysen
Der Tracker führt künftig genau eine aktuelle Analyse je Woche und eine Gesamtanalyse:
```text
analyses/<Plan-Dateiname>/week-01.json
analyses/<Plan-Dateiname>/week-02.json
analyses/<Plan-Dateiname>/overall.json
```
Beim ersten Lesen eines alten Analyseordners wird die im bisherigen `index.json` als aktuell markierte Analyse übernommen. Ältere Zeitstempeldateien und das alte History-Feld werden entfernt. Eine neue Analyse überschreibt anschließend immer dieselbe Datei.
## Planrevisionen
Jede Plandatei enthält jetzt:
- `config`: die veröffentlichte, vom Tracker gelesene Fassung
- `draft`: den bearbeitbaren Entwurf
- `revision`: Bearbeitungsrevision für Konfliktschutz
- `published_revision`: veröffentlichte Planrevision
Das Speichern eines Entwurfs verändert laufende Sessions nicht. Erst **Entwurf veröffentlichen** stellt die neue Fassung dem Tracker bereit.
## Bewusste Nicht-Funktionen
Nicht eingebaut wurden:
- strukturierte Technik-, RIR- oder RPE-Werte
- unterschiedliches Gewicht pro Satz
- Trainings- oder Tabata-Timer
- mehrere Versionen oder Historien von KI-Analysen
+41
View File
@@ -0,0 +1,41 @@
# Trainingstools 2.0
## Datenmodell und Stabilität
- stabile IDs für Plan, Phasen, Tage, Rotationen, Übungsinstanzen, Bewegungen, Progressionen und Progressionsstufen
- dauerhaft gespeicherte `legacy_id` für die sichere Migration alter Positionsschlüssel
- Progressionsstufen als Objekte mit Name, Schema, Cluster, Faktor und Phasenbezug
- gemeinsamer, versionierter Datenvertrag zwischen Planeditor und Tracker
- veröffentlichte Planfassung und bearbeitbarer Entwurf getrennt
- Planrevision pro Session gespeichert
- atomische Plan- und Tracker-Schreibvorgänge
- Konfliktschutz über Revisionsnummern und Session-Patches
## Planeditor
- Validierung vor Veröffentlichung
- stabil-ID-basierter Änderungsbericht
- Tracker-Vorschau für Ergebnisfelder und feste Intervalle
- automatische, anschließend editierbare Migration fehlender Ergebnisschemata
- planbezogene Übungsbibliothek mit Bewegungsclustern und Progressionsfaktoren
- KI-Vorschläge mit Ziel-IDs, direkter Navigation zum Ziel und manueller Bestätigung
## Tracker
- Übungen können erledigt, teilweise erledigt oder mit Grund übersprungen werden
- Woche kann explizit geöffnet oder abgeschlossen werden
- Sessiondaten werden nur als Patch gespeichert
- historische Sessions bleiben ihrer Planrevision zugeordnet
- robuste Analysejobs mit Dateisperre, Heartbeat und Ablauf-Lease
- Analysehash berücksichtigt Planrevision, Schema-, Prompt-, Modell- und Normalisierungsversion
- genau eine aktuelle Analyse je Woche und eine Gesamtanalyse
- Neuberechnung überschreibt die vorhandene Analyse
- alte Analysehistorien werden automatisch auf das Ein-Datei-Modell reduziert
- strukturierte Planvorschläge werden an den Planeditor übergeben
## Nicht enthalten
- keine strukturierten Technik-, RIR- oder RPE-Werte
- kein unterschiedliches Gewicht pro Satz
- kein Trainings- oder Intervalltimer
- keine Analysehistorie und keine Analyseversionierung