Zum Inhalt

Entwicklung und Referenz

Dokumentierter Stand: main bei Commit f7fe401caa7891ad8aa64ae57dfbf678bde1781f vom 21. Juli 2026. Einzelne Details können durch spätere Änderungen überholt sein.

Bauen und testen

Voraussetzungen

Werkzeug Version / Rolle
Node.js mindestens 24
npm Installation und Skripte
JDK 21 für native Android-Builds
Android SDK API 36
Python nur für diese Dokumentations-Site

Webentwicklung

npm ci
npm run dev

Vite lauscht standardmäßig unter http://localhost:5173 und wegen --host 0.0.0.0 auch im lokalen Netzwerk.

Prüfungen

npm run doctor
npm run test:smoke
npm run test:ui
npm run test:release-metadata
npm run build

Android

npm run android:sync
cd android
./gradlew assembleDebug

Unter Windows kann das vorhandene Skript verwendet werden:

npm run android:build:windows

Abhängigkeiten unter Windows gesperrt

Wenn npm ci mit EPERM ... unlink ... .node scheitert, läuft meistens noch ein Node-/Vite- Prozess. Erst alle Node-Prozesse beenden, danach node_modules löschen und npm ci erneut starten.

Quellen


Dokumentation pflegen

Grundprinzip

Die Markdown-Dateien sind die Quelle. Quellcode-Links zeigen bewusst auf den dokumentierten Commit, damit alte Dokumentationsstände reproduzierbar bleiben.

Wann welche Seite aktualisiert werden muss

Codeänderung Dokumentationsseite
neuer Store oder Persistenzpfad Datenmodell, Systemarchitektur
neuer Feldtyp oder Zielmodus Bereich/Feld/Typ/Wert
Änderung an VERSIONED_PROPERTIES Versionierung
neue Eventart Dynamische Ereignisse, Analytics
Änderung an RADAR_SCORE_CONFIG oder Formeln Lebensrad
neue Explorer-Aggregation Analytics-Pipeline
neue Korrelation Explorer und Korrelationen
neue native Sicherheitsgrenze Sicherheit
neuer Companion-Provider AI Companion

Aktualisierungsablauf

  1. aktuellen main-Commit notieren,
  2. Quellenlinks auf diesen Commit setzen,
  3. betroffene Diagramme und Tabellen ändern,
  4. interne Links prüfen,
  5. Markdown in GitHub kontrollieren.

Mermaid-Diagramme

Diagramme bleiben als Text im Markdown und können dadurch gemeinsam mit dem Code reviewed werden. Keine binären Diagrammdateien erforderlich.

Formeln

Formeln verwenden LaTeX/MathJax-Syntax. Variablennamen sollten unmittelbar unter der Formel erklärt werden; Nachvollziehbarkeit ist wichtiger als reine mathematische Eleganz.


Quellcode-Landkarte

Alle Links sind auf Commit f7fe401c fixiert.

Thema Primärquelle
App-Orchestrierung und Navigation src/App.jsx
Standardkonfiguration src/config/app-config.json
eingebaute Felder src/data/v5-field-definitions.json
Datenzugriff und Migration src/db.js
Native Datenbankbrücke src/native-database.js
Tracking-Mutationen src/services/tracking-service.js
Feldversionierung src/field-model.js
Konfigurationsimport src/config-utils.js
dynamische Logs src/DynamicLogs.jsx
Today-Ansicht src/features/today/TodayView.jsx
Journal src/features/journal/JournalView.jsx
Recovery src/features/recovery/RecoveryView.jsx
Analytics-UI src/features/analysis/AnalysisViews.jsx
Explorer-Aggregation src/features/analysis/analysis-metrics.js
Lebensrad-Engine src/features/analysis/radar-score.js
Muster, Personen, Sport, Korrelation src/PatternInsights.jsx
Achsenverwaltung src/features/settings/RadarAxisManager.jsx
Gruppenverwaltung src/features/settings/GroupManager.jsx
Datenschutz src/privacy.js
Backup-Verschlüsselung src/backup-crypto.js
Companion-Kontext src/companion-context.js
Companion-Service src/companion-service.js
Provideradapter src/ai-providers.js
Sicherheitsregeln src/safety.js
Produktregeln docs/PRODUCT.md
Architekturregeln docs/ARCHITECTURE.md
Datenschutzregeln docs/PRIVACY.md
Companion-Vertrag docs/AI-COMPANION.md

Begriffe

Begriff Bedeutung in Steady
Bereich / Section sichtbare Gruppe von Feldern im Tages-Check-in
Feld Definition eines einzelnen täglichen Werts
Feldversion konkrete historische Ausprägung eines Felds
logicalId gemeinsame fachliche Identität mehrerer Feldversionen
Entry ein Tagesdatensatz mit sparse Feldwerten
Event wiederholbares Ereignis an einem Datum
Catalog Item wiederverwendbare Person, Sportart, Mahlzeit oder Trigger
Evidenz wie stark ein Signal zum aktuellen Analysebild beiträgt
Qualität wie günstig ein Signal gemäß Zielrichtung bewertet wird
Momentum sättigende Funktion der aktuellen, zeitgewichteten Evidenz
Lebensrad kompakter 0–100-Überblick mehrerer konfigurierbarer Achsen
Aggregation Zusammenfassung nach Tag, Woche, Monat, Quartal oder Jahr
Spearman-ρ Korrelation der Ränge zweier Messreihen
Recovery-Profil ausgewählte Veränderungsbereiche und optionale Programmkontexte
Counter aus Start-/Resetzeitpunkten berechneter laufender Zeitraum
Sparse nur tatsächlich vorhandene Werte werden gespeichert
Atomar mehrere Änderungen werden vollständig gemeinsam oder gar nicht gespeichert

Grenzen und offene Punkte

Aktuelle Grenzen der Feld-/Achsen-Zuordnung

  • Lebensrad-Achsen sind konfigurierbar.
  • Gruppen können jeweils genau einer Achse zugeordnet werden.
  • Felder erben die Achse ihrer Gruppe.
  • Ein Feld kann nicht gleichzeitig gewichtet zu mehreren Achsen beitragen.
  • Feldgewichte sind nicht frei konfigurierbar.
  • Ein Feld mit goal: neutral liefert keinen Lebensrad-Beitrag.
  • Auswahl- und Textfelder fließen nicht automatisch in das Lebensrad ein.

Analytische Grenzen

  • Lebensradparameter sind global im Code festgelegt, nicht in der UI.
  • Die vordefinierten Korrelationen decken nur ausgewählte Beziehungen ab.
  • Korrelationen sind beobachtend und nicht kausal.
  • Häufiges Tracking beeinflusst Momentum; die Interpretation muss deshalb immer die Datenabdeckung berücksichtigen.
  • Ein Score ist eine Produktmetrik und keine klinisch validierte Kennzahl.

Architektonische Grenzen

  • App.jsx trägt weiterhin viel Orchestrierungslogik.
  • Statistiken werden im Frontend berechnet.
  • Browser und Android verwenden verschiedene Persistenzadapter.
  • Es gibt keinen Server, keine Synchronisierung und keine Mehrgeräteauflösung.

Nächste saubere Ausbaustufe

Eine mögliche Weiterentwicklung wäre eine versionierte Feldzuordnung wie:

{
  "radar": {
    "links": [
      { "axis": "regulation", "weight": 0.7 },
      { "axis": "connection", "weight": 0.3 }
    ],
    "mode": "goal"
  }
}

Das würde Feld- statt Gruppenzuordnung ermöglichen, müsste aber gemeinsam in Feldeditor, Versionierung, Konfigurationsimport, Validierung und Radar-Engine umgesetzt werden.

Quellen