From d6f09c8485a0a1ea046b85cef07fe2acb062f3d8 Mon Sep 17 00:00:00 2001 From: Rain Ocampo Date: Thu, 20 Aug 2026 16:37:12 +0000 Subject: [PATCH] M15/M09-Control-Anbindung final FREIGEGEBEN: Doku-Statusabschluss (M15 FREIGEGEBEN, M15->M09 produktiv verifiziert, README + M09-Control-Gate aktualisiert, 20.08.2026) --- README.md | 11 ++++-- modul-09-execution-service.md | 44 +++++++++++++++++++++++ modul-15-m09-anbindung-implementierung.md | 13 +++---- modul-15-monitoring-control.md | 16 ++++++--- 4 files changed, 70 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 19e78a2..adc6cd6 100644 --- a/README.md +++ b/README.md @@ -42,10 +42,11 @@ Jede Änderung folgt dem **Notation-Format**: Autor (`Alice` / `Rain Ocampo`) + | 12 | Backtesting | ✅ FREIGEGEBEN (backtesting:0.1.2) | 55012 (intern) | | 13 | Optimization | ✅ FREIGEGEBEN (optimization:0.1.0) | 55013 (intern) | | 14 | Notification | ✅ FREIGEGEBEN (notification:0.1.0) | 55014 (intern) | -| 15–17 | … | ⬜ Platzhalter (alpine) | 55015–55017 | +| 15 | Monitoring-Control | ✅ FREIGEGEBEN (monitoring-control:0.1.0) | 55015 (intern) | +| 16–17 | … | ⬜ Platzhalter (alpine) | 55016–55017 | -Details: siehe `modul-03-market-data.md` … `modul-14-notification.md` (Module 03–14 -vollständig implementiert und freigegeben). Modul-15 ff. folgen. +Details: siehe `modul-03-market-data.md` … `modul-15-monitoring-control.md` (Module 03–15 +vollständig implementiert und freigegeben). Modul-16 ff. folgen. --- @@ -90,3 +91,7 @@ Grund: README-Modultabelle aktualisiert — Modul-13 Optimization als FREIGEGEBE Geändert von: Rain Ocampo Datum: 20.08.2026 Grund: README-Modultabelle aktualisiert — Modul-14 Notification als FREIGEGEBEN eingetragen; Details-Link auf modul-14-notification.md erweitert. + +Geändert von: Rain Ocampo +Datum: 20.08.2026 +Grund: README-Modultabelle aktualisiert — Modul-15 Monitoring-Control als FREIGEGEBEN eingetragen; Details-Link auf modul-15-monitoring-control.md erweitert. diff --git a/modul-09-execution-service.md b/modul-09-execution-service.md index d6abf54..c27a0fc 100644 --- a/modul-09-execution-service.md +++ b/modul-09-execution-service.md @@ -100,3 +100,47 @@ sowie `REJECTED`, `CANCELLED`, `FAILED`. (kein öffentlicher Host-Port) - Health/Readiness 200, PG + RabbitMQ erreichbar, Consumer bereit - Env: `EXECUTION_MODE=PAPER`, `TRADING_ENABLED=false`, `DEFAULT_BROKER=paper` + +## Geändert +``` +Geändert von: Rain Ocampo +Datum: 20.08.2026 +Grund: Modul-09-Doku um final freigegebenen Control-Gate-Status (M15→M09, Variante C) ergänzt. + Kernregel, Einbau-Punkt, Audit-Felder, Parameter, Live-E2E-Ergebnisse dokumentiert. +``` + +## Control-Gate (M15→M09, FREIGEGEBEN 20.08.2026) + +**Status: FREIGEGEBEN / PRODUKTIV VERIFIZIERT** — Variante C (Event-Cache-Vorfilter + synchroner HTTP-Final-Check). + +M15 (`Modul-15-Monitoring-Control`) ist die **autoritative Safety-/Trading-Control-Instanz**. +M09 sendet neue Orders (OPEN/INCREASE) **nur**, wenn M15 eindeutig `ENABLED` + frisch bestätigt. + +### Kernregel +| State | OPEN/INCREASE | REDUCE/CLOSE/CANCEL | +|-------|---------------|---------------------| +| `ENABLED` | **ERLAUBT** | erlaubt | +| `PAUSED` | **VERBOTEN** | erlaubt | +| `HALTED` | **VERBOTEN** | erlaubt | +| `UNKNOWN` / M15-down / stale | **VERBOTEN (FAIL-CLOSED)** | erlaubt | + +### Einbau-Punkt +Control-Check zwischen Schritt 4 (Order atomar in DB anlegen) und Schritt 5 (`_submit_and_track`). +Bei OPEN/INCREASE ohne Erlaubnis → Order als `FAILED`/`REJECTED` speichern, **nicht** senden. +`TRADING_ENABLED`-Flag bleibt unverändert (blockiert nur LIVE, nicht PAPER). + +### Audit-Felder je Order +`action_type`, `control_status`, `control_state_version`, `control_expires_at`, +`control_audit_id`, `control_check_source` (`http`|`cache`|`bypass`|`none`). + +### Parameter +- Final-Check-HTTP-Timeout: **500 ms**, Retry: **max 1** sofort. +- `expires_at`-TTL (M15): **500 ms**; Cache-TTL (M09): **5 s**. +- Kein Auto-Resume; kein "Senden ohne Check". + +### Live-E2E (VPS, 20.08.2026) — alle Szenarien grün +S1 ENABLED 9/9 · S2 HALTED 9/9 · S3 PAUSED 4/4 · S4 Risikoabbau 4/4 · S5 M15-down 7/7 · +S6 Cache-vs-Final 2/2 · S7 Race/TTL 2/2 · S8 Event-Cache verifiziert · S9 Recovery 3/3 · +S10 Health/Security verifiziert · S11 Regression bestanden. + +Details: siehe `modul-15-m09-anbindung-implementierung.md` (FREIGEGEBEN). diff --git a/modul-15-m09-anbindung-implementierung.md b/modul-15-m09-anbindung-implementierung.md index 96fd2e7..4da5c51 100644 --- a/modul-15-m09-anbindung-implementierung.md +++ b/modul-15-m09-anbindung-implementierung.md @@ -1,12 +1,12 @@ # Modul-15 → Modul-09 Control-Anbindung — Implementierung & Live-E2E -**Status: IMPLEMENTIERT + LIVE-E2E VERIFIZIERT (alle Szenarien grün).** +**Status: FREIGEGEBEN / PRODUKTIV VERIFIZIERT** (20.08.2026, Nutzer-Bestätigung). **Datum:** 20.08.2026 · **Autor:** Rain Ocampo (Hermes) **Gilt für:** Modul-09-Execution-Service ↔ Modul-15-Monitoring-Control > **Freigabe-Hinweis:** Diese Doku dokumentiert den Implementierungs- und E2E-Stand. -> Die **finale Freigabe** (M15/M09 als FREIGEGEBEN markieren) erfolgt erst nach -> Nutzer-Bestätigung. M16 wird **nicht** begonnen. +> Die **finale Freigabe** (M15/M09 als FREIGEGEBEN markieren) erfolgte am **20.08.2026** +> durch Nutzer-Bestätigung. M16 wird **nicht** begonnen. --- @@ -139,12 +139,13 @@ REDUCE/CLOSE/CANCEL → control_check_source=bypass (erlaubt) --- -## 6. Offene Punkte / Freigabe +## 6. Freigabe-Status -- **Finale Freigabe** M15/M09 als FREIGEGEBEN markieren: **ausstehend** (Nutzer-Bestätigung). +- **FREIGEGEBEN / PRODUKTIV VERIFIZIERT** (20.08.2026, Nutzer-Bestätigung). +- M15/M09-Control-Anbindung ist **final freigegeben** — keine weiteren technischen Änderungen an M09/M15. - M16: **nicht beginnen**. - Credential-Cleanup: temporäre Forgejo-Tokens/Deploy-Keys → count=0 (siehe Git-Commit). --- -*Implementierung + Live-E2E abgeschlossen. Finale Freigabe steht aus.* +*Implementierung + Live-E2E abgeschlossen. Finale Freigabe erteilt (20.08.2026).* diff --git a/modul-15-monitoring-control.md b/modul-15-monitoring-control.md index d51ba06..1d4bd57 100644 --- a/modul-15-monitoring-control.md +++ b/modul-15-monitoring-control.md @@ -1,6 +1,6 @@ # Modul-15: Monitoring-Control -**Status: IMPLEMENTIERT & E2E-verifiziert (noch NICHT freigegeben)** · Container `Modul-15-Monitoring-Control` · Image `monitoring-control:0.1.0` +**Status: FREIGEGEBEN** (20.08.2026) · Container `Modul-15-Monitoring-Control` · Image `monitoring-control:0.1.0` ## Zweck Zentrale **technische Überwachung und Sicherheits-/Kontrollebene** des Trading-Systems. @@ -11,7 +11,7 @@ und PostgreSQL und leitet daraus deterministisch einen **globalen Trading-Status **Restriktionen (Nutzer-Vorgabe):** - **Keine KI/ML**, **keine Trading-Entscheidungen**, **keine Brokerorders**, **keine Shell-/Docker-Control-Rechte**. - **FAIL-CLOSED:** Bei unklarem/kritischem Zustand wird Trading sicher blockiert (`HALTED`). -- M15 unerreichbar → M09 behandelt den Zustand als `HALTED` (siehe Design-Vorschlag M15→M09, noch offen). +- M15 unerreichbar → M09 behandelt den Zustand als `HALTED` (FAIL-CLOSED, siehe M15→M09-Anbindung, FREIGEGEBEN). - **Keine Event-Schleifen:** Events nur bei Status-Änderung, dedupliziert. - Container wird **nicht** automatisch neu gestartet/gekillt — M15 beobachtet und entscheidet Status. - Port 55015 **nur Docker-intern** (`expose`, kein Host-Port). @@ -96,7 +96,7 @@ Events werden **nur bei Status-Änderung** publiziert (Idempotenz) — nie bei j - Env per Compose, Zugangsdaten nur via ENV (`POSTGRES_*`, `RABBITMQ_*`), nie hart kodiert. ## Unit-Tests -- `tests/test_monitoring.py`: **18/18 grün** — deterministische Rules, FAIL-CLOSED (PG/RabbitMQ/Critical), stale, Queue-Consumer, Idempotenz, Audit genau einmal, Recovery, Reconnect, keine Secrets. +- `tests/test_monitoring.py`: **19/19 grün** — deterministische Rules, FAIL-CLOSED (PG/RabbitMQ/Critical), stale, Queue-Consumer, Idempotenz, Audit genau einmal, Recovery, Reconnect, keine Secrets, `state_version`-Inkrementierung. ## E2E-Verifikation (VPS, 20.08.2026) — 17 Szenarien Alle 17 verifiziert (System-/Trading-Status via Loop, API `/control/trading-state` + `/monitoring/status` konsistent): @@ -124,8 +124,8 @@ Alle 17 verifiziert (System-/Trading-Status via Loop, API `/control/trading-stat - **PG-Ausfall ⇒ `PERSISTENCE_FAILURE`**: ohne PG kann `control_event`-Audit nicht geschrieben werden (fachlich korrekt FAIL-CLOSED), aber Audit-Lücke im Fehlerfenster. ## Freigabe -- **Noch NICHT freigegeben.** Implementierung + E2E (17 Szenarien) grün. Freigabe ausstehend. -- M09-Anbindung **nicht** umgesetzt (Design-Vorschlag separat). +- **FREIGEGEBEN** (20.08.2026, Nutzer-Bestätigung). Implementierung + E2E (17 Szenarien) grün. +- M09-Anbindung **umgesetzt** (Variante C, Event-Cache + HTTP-Final-Check) — siehe `modul-15-m09-anbindung-implementierung.md`, FREIGEGEBEN. ## Nächste Module - **Modul-16 ff.** — noch Platzhalter (alpine), NICHT gestartet. @@ -138,3 +138,9 @@ Datum: 20.08.2026 Grund: Modul-15-Monitoring-Control dokumentiert — implementiert + E2E-verifiziert (17 Szenarien grün), Rules/API/Events/Audit/Security dokumentiert, NICHT FREIGEGEBEN. ``` +``` +Geändert von: Rain Ocampo +Datum: 20.08.2026 +Grund: Modul-15-Monitoring-Control auf FREIGEGEBEN gesetzt (Nutzer-Bestätigung 20.08.2026). + M15→M09-Anbindung (Variante C) als umgesetzt/FREIGEGEBEN vermerkt; Unit-Tests 19/19. +```