# RECON-MH v3.2 — Final Review Data Extraction **Datum:** 2026-05-10 **Status:** READ-ONLY · NO IMPLEMENTATION · NO MUTATION **Roadmap-Stand:** v3.2 (Master-Boundaries v3.2 + 4 Session-Audit-Trails) **Bot-Live-Stand:** PID 18185 · master `eda3042` · BINANCE_TESTNET=true · baseline_holdings.json absent · runtime_config.json absent **Boundaries:** keine Code-Änderung, keine Mutation, keine Migration, kein Deploy, kein Restart, kein Worker-Run, kein Mainnet, kein Push. --- ## Executive Summary | Bereich | Bewertung | |---|---| | **Architektur-Konsistenz** | ✅ stark — 21 G-DR + 12 G-SR + 18 MN-DR/SR durchgängig referenziert | | **Cross-References** | ✅ vollständig — alle 11 Phase-Files cross-verweisen sich + Master-Boundaries | | **Erweiterbarkeit** | ✅ gut — G-DR-16..21 (v3.2) verhindern hardcoded Kopplungen | | **Deploy-Readiness RECON-2.3-DEPLOY** | ⚠ **1 File-Drift identifiziert** (`command_worker.py` Host vs Container) | | **Frozen-only Drill Vorbereitung** | ✅ vollständig dokumentiert in `06_testnet_drill.md` | | **MH-1 Readiness** | ⚠ blockiert durch 12 offene Q-MH (asynchron klärbar) + keine Code-Phase begonnen | | **Mainnet-Trennung** | ✅ 5-Layer-Block + organisatorische Disziplin (MN-DR-1..5) | --- # TEIL A · Datei-Inventar ## A.1 · Roadmap-Verzeichnis (`docs/roadmap/recon_managed_holdings/`) ### Phase-Files (12) | # | File | Lines | Zweck | Restart? | Migration? | Mainnet? | Risk | |---|---|---|---|---|---|---|---| | 99 | `99_master_boundaries.md` | 472 | **Zentraler Vertrag** — 21 G-DR + 12 G-SR + 18 Policies. Verbindlich für alle Phasen. | – | – | no | – | | 00 | `00_overview.md` | 254 | Eintrittsstelle, State-Machine ASCII, Roadmap-Tabelle MH-0..9 + MH-0.5 | no | no | no | low | | 01 | `01_foundation.md` | 497 | Schemas baseline_holdings + managed_state + risk_proposals; Reader/Writer-API; Hashing | no | yes (MH-4) | no | low (Reader), medium (Writer/Migration) | | 02 | `02_risk_proposal_engine.md` | 368 | proposal_engine V1-min-Spec + 3-Varianten-Logik + SM-4/5/7 + V2-Roadmap | no | no | no | medium | | 03 | `03_state_machine.md` | 403 | 10 States + 18 Transitions + Drift-Kategorien (6 Stufen) + Persisted-vs-Derived + Sub-State-Pattern | yes (MH-7 Wiring) | no | no | high | | 04 | `04_gui_operator_flow.md` | 416 | Multi-Step-Wizard + 5 UX-Regeln + Audit-Timeline First-Class + Emergency-Action 3 Modi | no | no | no | medium | | 05 | `05_commandbus_worker.md` | 425 | 8 Command-Types + Worker-Handler + Audit-Snapshots + Two-File-Atomic + JSON-SoT | yes (MH-7) | yes (MH-4) | no | high | | 06 | `06_testnet_drill.md` | 349 | Drill-Plan 4 Sub-Phasen (Frozen-only / Single-Asset Promote / Drift-Sim / Cleanup) | yes (MH-8) | no | no | high | | 07 | `07_mainnet_future.md` | 307 | BACKLOG/BLOCKIERT · 5-Layer-Block · MN-SR-1..12 + neue MN-DR-1..5 organisatorisch | yes | tbd | **JA (BACKLOG)** | kritisch | | 08 | `08_open_questions.md` | 475 | Q-MH-1..18 — 6 decided, 12 open, alle mit Defaults | no | no | no | low (Doc), high wenn falsche Antworten | | 09 | `09_test_strategy.md` | 387 | ~280 Tests, 8 Test-Kategorien, Boundaries pro Phase | no | no | no | low | | 10 | `10_backlog_future_extensions.md` | 525 | 14 Backlog-Themen + 4 v3.1-Themen (managed_active Sub-States / Proposal Replay / Quarantine / Risk-Explainability) | tbd | tbd | tbd | – | **Total:** 12 Files, 4.853 Zeilen. ### Session-Audit-Trails (4) | File | Lines | Datum | Inhalt | |---|---|---|---| | `sessions/q_mh_session_2026-05-10_architecture_priming.md` | 376 | 2026-05-10 | Q-MH-Session-Vorlage mit 6 Architektur-prägenden Fragen + Default-Empfehlungen | | `sessions/external_review_2026-05-10.md` | 135 | 2026-05-10 | External Review v2 (A1..A9) Mapping + Lessons-Learned | | `sessions/external_review_v3_2026-05-10.md` | 108 | 2026-05-10 | External Review v3 (R1..R5 + B1..B4) Mapping + Reviewer-Verbote | | `sessions/external_review_v4_2026-05-10.md` | 117 | 2026-05-10 | External Review v4 (S1..S5 + A..D) Mapping + Strategische-Botschaft | **Total:** 4 Sessions, 736 Zeilen. ### Roadmap-Subdirectory Total: **16 Files, 5.589 Zeilen, ~230 KB** ## A.2 · Memory-Pins (in `~/.claude/projects/.../memory/`) | Pin-File | Zweck | |---|---| | `recon_mh_sub_roadmap_pin.md` (15.9 KB) | **Master-Pin** — komplette v3.2-Übersicht mit Patch-Historie | | `recon_status_pin.md` (18.7 KB) | Globaler RECON-Pin (RECON-2.1..2.3c + RECON-MH-Verweis) | | `recon_2_1_status.md` | RECON-2.1 Schema-Scaffolding | | `recon_2_2a_status.md` | RECON-2.2a Bot-Awareness wiring | | `recon_2_2b_status.md` | RECON-2.2b Restart-Drill | | `recon_2_3_status.md` | RECON-2.3 PHP-Side | | `recon_2_3c_status.md` | RECON-2.3c Bot-Worker handlers | | `designer_iter_3_status.md` | Designer-Iteration v3 closed | ## A.3 · Cross-References ### Externe Roadmap-Bezüge | Bezug | Pfad | |---|---| | Original RECON-Architektur | `docs/roadmap/mainnet_preflight_recon.md` (572 Zeilen) | | Monolithisches MH-Quell-Doc | `docs/roadmap/recon_managed_holdings_architecture.md` (574 Zeilen) — bleibt als Synthesis-Referenz | | T-SPLIT-Roadmap | `docs/roadmap/t_split_roadmap.md` | | GUI-Design-Briefings | `docs/gui/iteration_2_briefing.md` + `docs/gui/iteration_3_briefing.md` | | GUI-Iter-3-Archive | `docs/gui/iter3/` (564 KB, 21 Files) | ### Memory-Cross-References (zentral) | Memory-File | Inhalt | |---|---| | `feedback_backup_before_live_actions.md` | DR-9 durable rule (Backup-Pflicht) | | `feedback_testnet_permanent_paper_rename.md` | TESTNET permanent durable rule | | `t_split_status.md` | t3_copy_trading-Block durable für proposal_engine | | `cap_1_preflight_backlog.md` | CAP-1 Integration BACKLOG | | `g10_runtime_config_operator_runbook.md` | G10-Apply-Pattern als Vorbild | | `b_fee_fix_3_status.md` | B-FEE-FIX Mainnet-Blocker durable rule | --- # TEIL B · G-DR / G-SR Audit ## B.1 · 21 Globale Durable Rules | ID | Inhalt (gekürzt) | Quelle | Bewertung | |---|---|---|---| | **G-DR-1** | Frozen-by-default für unbekannte Assets | RECON-2.1 + DR-2 | ✅ kritisch, sauber verankert | | **G-DR-2** | Operator final authority bei state-transitions | DR-11 | ✅ kritisch | | **G-DR-3** | CommandBus-only für File-Mutationen | DR-1 erweitert | ✅ kritisch, source-grep gepinnt | | **G-DR-4** | TESTNET-first dauerhaft | DR-3 | ✅ kritisch | | **G-DR-5** | Audit-heavy (audit_event + Snapshot pro State-Transition) | DR-6 + DR-13 | ✅ stark | | **G-DR-6** | Backup-before-mutate (sha256 + Backup-File) | DR-5 + DR-9 | ✅ stark | | **G-DR-7** | Multi-Step-Wizard für Promote (≥5 Steps) | UX-2 | ✅ verbindlich | | **G-DR-8** | `'managed'` NIE als default_policy_for_unlisted | DR-2 | ✅ kritisch | | **G-DR-9** | Bot autonom managed→frozen verboten | DR-11 | ✅ kritisch | | **G-DR-10** | Risk-Proposals versioniert (proposal_version + risk_model_version) | DR-12 | ✅ stark | | **G-DR-11** | Audit-Prefix-Separation (managed.* / baseline.* / runtime_config.*) | DR-13 | ✅ source-grep gepinnt | | **G-DR-12** | wallet-signature excludes tradable_quote | DR-7 | ✅ stark, RECON-2.2a-implementiert | | **G-DR-13** | Watchdog-clawbot-Konvention | DR-8 | ✅ kritisch (RECON-2.2b Befund) | | **G-DR-14** | Two-File-Atomic-Pattern für Policy-Wechsel | Q-MH-Session 2026-05-10 DR-7 | ✅ stark, neu in v2 | | **G-DR-15** | synthetic_entry NIE als echte Cost-Basis · 4 Pflicht-Metadaten-Felder | External Review v2 A1 + v3 R3 | ✅ stark, Mainnet-relevant | | **G-DR-16** | Policy-Resolver-Pattern statt `if asset == "BTC"` | External Review v4 S1 | ✅ neu in v3.2, future-safe | | **G-DR-17** | Bot↔GUI-Boundary (Bot kennt nur Commands/Policies/State-Files/Events) | External Review v4 S2 | ✅ neu in v3.2, kritisch | | **G-DR-18** | Event-Versionierung (`event_version` Pflicht) | External Review v4 A | ✅ neu in v3.2, ML-Vorbereitung | | **G-DR-19** | Feature-Flag-Service zentralisiert | External Review v4 B | ✅ neu in v3.2 | | **G-DR-20** | Canonical Asset-Identity (`BTC` ≠ `BTCUSDT`) | External Review v4 C | ✅ neu in v3.2, Mainnet-kritisch | | **G-DR-21** | Exposure-Provider-Pattern statt ad-hoc-Berechnungen | External Review v4 D | ✅ neu in v3.2, CAP-1-/T-SPLIT-Vorbereitung | **Bewertung:** - alle 21 G-DR sind **eindeutig formuliert + cross-referenziert** - keine sichtbar redundanten Regeln - G-DR-16..21 (v3.2) sind Constraints für **zukünftige Komponenten** — gut, dass früh verankert - mögliche **Lücke**: G-DR-22 für Bot-side Operator-Notification-Channel-Disziplin (Telegram-only? mehr?) — aktuell nicht erfasst, könnte später nötig werden ## B.2 · 12 Globale Stop-Regeln | ID | Trigger | Status | |---|---|---| | G-SR-1 | außerhalb-CommandBus-Mutation → STOP | ✅ | | G-SR-2 | Proposal ohne `risk_model_version` → STOP | ✅ | | G-SR-3 | Promote ohne user-actor-Audit → STOP | ✅ DR-11 enforcement | | G-SR-4 | Bot autonom managed→frozen → STOP | ✅ DR-11 | | G-SR-5 | command_type_registry-Version-Drift → STOP | ✅ G6.5 invariant | | G-SR-6 | Bot-PID-Wechsel ohne dokumentierten Phasen-Trigger → STOP | ✅ | | G-SR-7 | Drift-Detection autonomous-Sell → STOP | ✅ Bot ist Berater bei Drift | | G-SR-8 | Watchdog steve-tradingbot statt clawbot → STOP | ✅ RECON-2.2b Befund | | G-SR-9 | Confidence < threshold ohne Override → STOP | ✅ SM-4 | | G-SR-10 | Volatility-Kill → autonomous pause (nicht sell) | ✅ SM-5 | | G-SR-11 | Mainnet-Apply-Versuch → STOP (5-Layer halten) | ✅ kritisch | | G-SR-12 | confidence_score Feld fehlt in Proposal → STOP | ✅ | ## B.3 · 18 MN-DR / MN-SR (Mainnet-spezifisch) In `07_mainnet_future.md`: - **MN-SR-1..12:** technische Mainnet-Sicherheitsregeln (aggressive disabled, DCA disabled, t2-fallback, Cooldown 7d, Max-Alloc 5%, Confidence 0.65, Volatility 15%, etc.) - **MN-DR-1..5:** organisatorische Disziplin (separate Branch / Pipeline / .env / Secrets / Audit-Logs / PDF-Preflight + Hotfix-Verbote + Bypass-Verbote) Mainnet-Block ist 5-Layer-redundant (Settings + Writer + Worker + Validator + GUI). ## B.4 · Bewertung G-DR-16..21 spezifisch | ID | Sauber genug? | Zu allgemein? | Zu eng? | Zukünftige Probleme? | Erweiterungspunkte? | |---|---|---|---|---|---| | G-DR-16 (Policy-Resolver) | ✅ | nein, klar abgegrenzt durch Source-Grep-Test | nein | Test muss alle Asset-Symbol-String-Vergleiche erfassen — vorsichtig formulieren | `policy_resolver` Service-Layer in MH-1 implementieren | | G-DR-17 (Bot↔GUI-Boundary) | ✅ | nein, klar Listet 4 erlaubte Concepts | nein | Telegram-Reporter ist Bot-Side aber kommuniziert mit external — könnte als „GUI" fehlinterpretiert werden | **Empfehlung:** in G-DR-17 Klarstellen: „GUI" = Filament/Browser-Layer, nicht alle externen Kanäle | | G-DR-18 (Event-Versionierung) | ✅ | nein | nein | Migration `_v1` → `_v2` Reader-Branches müssen pro Event-Type definiert sein | dual-compute-Pattern aus G-DR-16-Section §16 reused | | G-DR-19 (Feature-Flags) | ✅ | nein | nein | env-spezifische Flags (testnet vs mainnet) müssen klar definiert sein | `FeatureFlags.is_enabled(name, environment=...)` | | G-DR-20 (Canonical Asset-Identity) | ✅ | nein | nein | wrapped Assets vs original (WBTC vs BTC) — semantische Frage was canonical heißt | `asset_identity.py` Mapping-Tabelle in MH-1 oder eigener kleiner Phase | | G-DR-21 (Exposure-Provider) | ✅ | nein | nein | Performance bei vielen Positionen — Provider muss caching haben | CAP-1-Integration verbindlich über Provider | **Insgesamt:** alle 6 neuen G-DR sind **sauber, future-safe, kein Redundanz-Risiko**. --- # TEIL C · Schnittstellen / Extensibility Review ## C.1 · Komponenten-Audit | Komponente | Abstrahiert? | Hardcoded? | Zukünftige Probleme | Empfehlung | |---|---|---|---|---| | **exposure_provider** | ⚠ noch nicht implementiert | nein (G-DR-21 verbietet Hardcode) | Performance-Cache nötig bei vielen Positionen | in MH-1 oder als 1-File-Phase vor MH-3 | | **policy_resolver** | ⚠ noch nicht implementiert | nein (G-DR-16) | Source-Grep-Test muss alle String-Vergleiche erfassen | in MH-1 zwingend | | **strategy_group** | ✅ T-SPLIT-3 etabliert (`t1_core/t2_pump_dump/t3_copy_trading/legacy_unknown`) | nein | t3 ist „planned · disabled", proposal_engine darf t3 NICHT ausgeben | G-SR-14 + Validator | | **managed_state** | ✅ schema-Skizze in `01_foundation §2`, Reader-API geplant | nein | Sub-State-Erweiterung als `{state, substate}` (G-DR-… S3-Pattern) | bereits dokumentiert in `03_state §9.4` | | **baseline_holdings** | ✅ implementiert (RECON-2.1/2.3) | nein | wallet_signature-Drift bei Policy-Wechsel | gelöst durch G-DR-14 (Two-File-Atomic) | | **commandbus** | ✅ G6.5 etabliert + erweitert für MH | nein (CommandTypeRegistry zentral) | Worker-Daemon-Aktivierung in MH-0.5 | bereits geplant | | **audit_snapshots** | ⚠ noch nicht implementiert | nein (immutable per G-DR-5) | File-System-Bloat über Zeit (90-Tage-Cleanup-Job) | in MH-6 zwingend, Cleanup-Phase Backlog | | **proposal_engine** | ⚠ noch nicht implementiert | nein (G-DR-10 + G-DR-21) | V1-min-Scope einhalten (External Review v2 A3) | Scope-Lock in `02_engine §0` | | **wallet_signature** | ✅ implementiert (RECON-2.2a + DR-7-Resolution) | nein | Algorithmus-Migration über `_v1`/`_v2` (G-DR-18) | bereits geplant | ## C.2 · Multi-Exchange-Probleme (zukünftig) | Problem | Risiko | Mitigation in v3.2 | |---|---|---| | BTC vs BTCUSDT in symbol-Mapping | hoch | G-DR-20 Canonical Asset-Identity + `asset_identity.py` | | ccxt-API-Differenzen Coinbase vs Binance | hoch | Backlog `Exchange-Abstraction` (10_backlog §5) | | signature-Format unterschiedlich pro Exchange | mittel | wallet_signature.exchange-Feld bereits im Schema (`baseline_holdings.json§2`) | | Order-API-Differenzen | mittel | LiveTrader.execute_buy bereits exchange-getrennt (binance vs binance_testnet) | ## C.3 · Event-Versionierung (G-DR-18) — wo fehlt sie aktuell? | Stelle | Status | |---|---| | `audit_events.metadata` (DB) | ⚠ kein `event_version`-Feld in v3.2 dokumentiert; **Empfehlung:** in MH-1 oder MH-4 ergänzen | | `commands.payload_json` | ⚠ kein `event_version`; **Empfehlung:** Phase MH-1 | | `risk_proposals/.json` | ✅ `proposal_version` + `risk_model_version` (G-DR-10) | | `managed_state.json` | ✅ `_meta.schema_version` | | `audit_snapshots/.json` | ⚠ noch nicht spezifiziert; **Empfehlung:** in MH-6 ergänzen mit `snapshot_version` | | `baseline_holdings.json` | ✅ `_meta.schema_version` (RECON-2.1) | → G-DR-18 ist **konsequent durchzuziehen** in MH-1/4/6. ## C.4 · Policies hardcoded? | Policy-Bereich | Aktuell | Soll (G-DR-16) | |---|---|---| | Frozen-Check | bereits in `BaselineHoldingsReader.frozen_assets()` | ✅ über Reader | | Strategy-Group-Allowlist | proposal_engine Phase MH-3 | ✅ über Validator + Allowlist | | Drift-Schwellen | aktuell hardcoded in §3.1 (`5%/2-ATR/BEAR↔BULL`) | ⚠ später aus Settings/`runtime_config.json` ziehen, nicht hardcoded im Bot-Code | | Cooldown-Dauer | Q-MH-12 noch open (default 24h/7d) | wird aus `feature_flags` oder `runtime_config` gelesen werden | --- # TEIL D · Deploy-Readiness Review ## D.1 · Live-Stand 2026-05-10 | Indikator | Wert | |---|---| | Bot-PID | **18185** (seit RECON-2.2b 2026-05-09 22:30 UTC) | | Container | `clawbot` (Up) | | master HEAD | `eda3042` | | Bot-Cmdline | `python3 main.py --paper` | | .env mtime | `1778324885` | | BINANCE_TESTNET | `true` ✓ | | baseline_holdings.json | **ABSENT** ✓ | | runtime_config.json | **ABSENT** ✓ | ## D.2 · Container vs Host File-Hash-Audit (9 Files) | File | Host-Hash | Container-Hash | Status | |---|---|---|---| | `baseline_bootstrap.py` | `6dded3ae…` | `6dded3ae…` | ✅ MATCH | | `baseline_holdings_writer.py` | `baca5cf3…` | `baca5cf3…` | ✅ MATCH | | `baseline_holdings_reader.py` | `3861d43a…` | `3861d43a…` | ✅ MATCH | | `execution/balance_provider.py` | `473a58c9…` | `473a58c9…` | ✅ MATCH | | `execution/live_trade.py` | `3855596e…` | `3855596e…` | ✅ MATCH | | `execution/paper_trade.py` | `223cfe71…` | `223cfe71…` | ✅ MATCH | | `main.py` | `d92a57dc…` | `d92a57dc…` | ✅ MATCH | | `scanner/universe.py` | `09020495…` | `09020495…` | ✅ MATCH | | **`command_worker.py`** | **`ecc8a41d…`** | **`17b8ca32…`** | ⚠ **DIFF** (RECON-2.3-DEPLOY pending) | → **8 von 9** Files synchron; **1 File divergent** — exakt der Drift, den RECON-2.3-DEPLOY auflöst. ## D.3 · Deploy-Risiken | Risiko | Severity | Mitigation | |---|---|---| | `command_worker.py` divergent | mittel — Worker läuft heute manuell `--once`, alter Code-Stand wird beim nächsten Aufruf geladen | RECON-2.3-DEPLOY: docker cp + sha256-verify | | Watchdog-Konvention drift | low — wurde in RECON-2.2b auf `clawbot` korrigiert | Pre-Deploy Watchdog-Dry-Run-Check (G-DR-13) | | Backup-Verlust beim Deploy | low (durable rule G-DR-9) | pg_dump + state/ + .env vor Deploy verbindlich | | Bot-Restart unbeabsichtigt | low — Worker-Code-Drop berührt Bot-Prozess nicht | main.py importiert command_worker NICHT — kein Restart-Trigger | ## D.4 · Pre-Deploy Pflicht-Checks (verbindlich für RECON-2.3-DEPLOY) ``` [ ] Backup pg_dump GUI-DB → /srv/shares/backups/recon_2_3_deploy_pre/ [ ] Backup live_portfolio.json [ ] Backup .env (read-only kopiert) [ ] Backup state/ snapshot [ ] Health-Snap (Bot-PID + container-status + key-Files) [ ] Memory tar.gz Snapshot [ ] Pre-cp Hash-Vergleich command_worker.py Host vs Container dokumentiert [ ] Watchdog-Skript clawbot-Konvention verifiziert (G-DR-13) [ ] Settings.BINANCE_TESTNET=true verifiziert [ ] runtime_config.json absent verifiziert [ ] baseline_holdings.json absent verifiziert ``` ## D.5 · Post-Deploy Pflicht-Checks ``` [ ] Post-cp sha256 command_worker.py == Host [ ] Bot-PID 18185 unchanged (kein implizit Restart) [ ] Bot-Stdout: keine neuen Tracebacks [ ] managed.* Audit-Events: 0 (managed-Lifecycle-Phase noch nicht aktiv) [ ] python -c "import command_worker" im Container OK (Import-Sanity) [ ] command_worker.py --help (oder ähnliches) zeigt erweiterte Command-Types OPTIONAL (nicht zu RECON-2.3-DEPLOY gehörig): [ ] worker --once (= RECON-2.4 Frozen-only Drill, NICHT in 2.3-DEPLOY) ``` ## D.6 · Hot-Reload vs Restart-Bound | Komponente | Hot-Reload? | Restart-Bound? | Begründung | |---|---|---|---| | `command_worker.py` Code | ✅ — beim nächsten `--once` neu geladen | nein | Worker ist short-lived per design | | `baseline_holdings.json` Reader | ✅ — Reader.snapshot() liest pro Cycle frisch | nein | RECON-2.2a Pattern | | `managed_state.json` Reader | ✅ — analog (sobald implementiert) | nein | gleiche Architektur | | `main.py` (Bot-Hauptloop) | ❌ | **JA** | nur in MH-7 erforderlich | | `baseline_bootstrap.py` | ❌ | **JA** | läuft nur bei Bot-Start (managed-auto-import + signature-check) | | `paper_trade.py` / `live_trade.py` | ❌ | **JA** | Klassen werden bei Bot-Start instanziert (`paper_trader = LiveTrader()`) | | `scanner/universe.py` | ❌ | **JA** | Funktion wird in main.py importiert | | Settings (`.env`) | ⚠ teils — `runtime_config.json` ist hot-reload via ActiveConfigProvider; `BINANCE_TESTNET` etc. sind restart-bound | teils | G10-4.1 Pattern | ## D.7 · Dormant-Pfade (solange baseline_holdings.json absent) | Pfad | Verhalten | |---|---| | `baseline_bootstrap.bootstrap_baseline()` | wallet_signature wird ALWAYS geloggt, baseline_present=False, kein auto_import | | `universe.get_tradeable_universe(baseline_reader=)` | filter ist no-op (frozen_set leer) | | `paper_trade._is_base_baseline_frozen` | returns False für jeden Symbol | | `live_trade.execute_buy` Guard | greift nicht | | `balance_provider._baseline_frozen_subtract` | no-op | → **100% Legacy-Verhalten** solange JSON absent. RECON-2.3-DEPLOY ändert das **nicht** — File bleibt absent. --- # TEIL E · State-Machine Review ## E.1 · 10 States (5 persisted + 5 derived, External Review v3 R2) ### Persisted States (5) | State | In `managed_state.json` | Persistierungs-Grund | |---|---|---| | `frozen` | implizit (kein Eintrag) | Default | | `proposal_pending` | ja | UI zeigt Spinner; TTL-Job liest | | `risk_proposed` | ja | TTL-Job liest | | `managed_active` | ja | Bot-Decision-Cycle liest | | `managed_paused` | ja | Bot stoppt Trades | | `release_pending` | ja | Bot wartet auf Position-Close | ### Derived States (5) | State | Berechnet aus | Anzeige | |---|---|---| | `proposal_aborted` | letztes audit_event = `managed.asset_proposal_aborted` | UI-Badge | | `proposal_rejected` | persisted=`frozen` + audit_event | UI-Badge | | `managed_drift_alert` | persisted=`managed_active` + Drift-Detection | UI-Banner red | | `exit_executed` | persisted=`frozen` + audit_event | UI-Badge | | `cooldown_active` | now - last_release_ts < cooldown_threshold | UI-Badge | ## E.2 · Übergangs-Matrix (18 Transitions) aus `03_state_machine §2` — vollständig dokumentiert. Auszug der kritischsten: | From | To | Actor | Guard | |---|---|---|---| | frozen → proposal_pending | user | wallet qty > 0 + Cooldown abgelaufen | | risk_proposed → managed_active | user | Hard-Confirm `:` + Confidence-Override-Flag falls < threshold | | risk_proposed → proposal_rejected (TTL) | system | proposal.expires_at < now | | managed_active → managed_drift_alert | **bot** | qty/price/regime drift threshold | | managed_*/managed_active → frozen | **NIE bot** (G-DR-9) | nur user oder system (TTL/release) | ## E.3 · Drift-Kategorien (6 Stufen, External Review v3 R1) | # | Drift-Typ | Schwelle | Reaktion | |---|---|---|---| | D1 | Rundungsdrift | <0.5% | Warning-Audit, kein State-Change | | D2 | Externer Transfer | 5%+ | Freeze (managed_drift_alert) | | D3 | Massive Qty-Abweichung | >50% | Hard-Stop + Telegram | | D4 | Asset fehlt | qty_real==0 | Pause | | D5 | Neues unbekanntes Asset | nicht in baseline | Quarantine-Hint | | D6 | Wallet-Hash-Mismatch | beim Bot-Restart | Refuse to start (sys.exit(1)) | ## E.4 · Identifizierte Risiken (von vorigen Reviews + Re-Audit) | Risiko | Mitigation in v3.2 | Restrisiko | |---|---|---| | R1 (Operator approve + Bot drift Race) | row-level lock + idempotency_key | ✅ low | | R2 (Wallet-Balance ändert sich während Engine-Run) | Engine refetcht balance pre-write | ✅ low | | R3 (Zwei Admins approven gleichzeitig) | idempotency_key on proposal_id | ✅ low | | R4 (Bot-Cycle vs Pause-Command-Race) | **Worker-Daemon required** (Q-MH-14 decided MH-0.5) | ✅ gelöst sobald MH-0.5 läuft | | R5 (Worker --once Latency vs Bot-Cycle) | identisch zu R4 | ✅ gelöst durch MH-0.5 | | R6 (TTL-Expiry vs Operator approve) | row-lock | ✅ low | | Deadlock-Risiko | keiner identifiziert (alle State-Transitions sind asynchron) | ✅ none | | Drift-Risiko | in 6 Kategorien aufgeteilt | ✅ verbessert | | Operator-vs-Bot-Konflikt C1 (Override SL) | managed_state speichert HIST-Wert; state['positions'] LIVE | ✅ | | C2 (Bot SELL vs Operator Pause) | Worker-Daemon (MH-0.5) | ✅ ab MH-0.5 | | C3 (Operator setzt managed→frozen via Apply) | G-DR-14 Two-File-Atomic + DR-11 enforcement | ✅ | ## E.5 · Zukünftige State-Probleme | Problem | Mitigation | |---|---| | managed_active wird zu generisch | G-DR-…(S3-Pattern): `{state, substate}` statt `state_v2` (BACKLOG R2) | | Quarantine-Lifecycle nicht definiert | BACKLOG B2 in `10_backlog §17` | | Sub-State-Übergänge zwischen tracking_only/trading/dca/exit_only/reduce_only | später in eigener Phase, nicht jetzt | --- # TEIL F · GUI / UX Review ## F.1 · Wizard (5 Steps, UX-2) | Step | Inhalt | Pflicht? | |---|---|---| | 1 | Asset & Intent | ja, Begründung ≥20 chars | | 2 | Bot-Proposal Review | ja, Bot fertig | | 3 | Variant Selection + Override | env-abhängig (Testnet 3, Mainnet 2) + Synthetic-Entry-Marker | | 4 | Risk-Summary + Exposure-Impact | UX-3 + UX-4 | | 5 | Hard-Confirm `:` | ja, Override-Pfad: `:override:` | **Bewertung:** Wizard ist **ausreichend differenziert** für Operator-Mental-Model. ## F.2 · Hard-Confirm-Patterns (4 verschiedene) | Action | Pattern | |---|---| | Apply Profile (G10-6) | `$record->name` (case-sensitive) | | Clear Runtime Config (G10-6) | `$record->name` | | Apply Baseline (RECON-2.3) | `:` z.B. `47:b25e09fb` | | Approve Managed Proposal (RECON-MH) | `:` z.B. `SOL:recommended` | | Override-Pfad | `:override:` | | Clear Baseline | statisch `clear-baseline` | | Emergency Action 3 Modi | `FREEZE-ALL-MANAGED` / `EXIT-ONLY-MANAGED` / `REDUCE-ONLY-MANAGED` | **Bewertung:** alle Patterns dokumentiert, **keine Kollision identifiziert**. ## F.3 · Mögliche UX-Fallen | UX-Falle | Mitigation in v3.2 | Restrisiko | |---|---|---| | Operator klickt durch Wizard ohne zu lesen | Multi-Step-Wizard ≥5 Steps + Hard-Confirm dynamisch | ✅ low | | Confidence-Score wird ignoriert | Hard-Gate bei Score < threshold (SM-4) → Override-Confirm zwingend | ✅ | | Synthetic-Entry wird als echte Cost-Basis interpretiert | UI-Marker `synthetic/estimated/imported/unresolved` (G-DR-15) | ✅ | | Mainnet-Verwechselung | sticky Mainnet-Banner permanent + permanent rote Color-Coding | ✅ | | Drift-Warning übersehen | Banner-red + sticky in Page-Header | ✅ | | Quarantine-UX | nicht implementiert (BACKLOG) | ⚠ | | 3 Emergency-Modi werden verwechselt | jeder Modus eigener Hard-Confirm-String | ✅ | ## F.4 · Audit-Timeline First-Class (External Review v2 A8) - in v3 explizit zur Hauptkomponente befördert - Filter / Pagination / Export / JSON-Diff (Detail-Route) dokumentiert - 30s Polling - color-coded prefix (managed.* / baseline.* / runtime_config.* / risk_settings.*) **Bewertung:** ✅ ausreichend dokumentiert. ## F.5 · Mainnet-Warnungen + Drift-Warnungen | Element | Mainnet | Testnet | |---|---|---| | Mainnet-Banner sticky top | red + permanent | red statisch | | Variant-Selector | aggressive ausgeblendet (Q-MH-13) | alle 3 sichtbar | | Confidence-Threshold | 0.65 | 0.50 | | Volatility-Kill-Threshold | 15% | 25% | **Bewertung:** ✅ konsequent. ## F.6 · Default-Buttons-Risiko | Default-Button | Gefährlich? | Mitigation | |---|---|---| | Wizard „Next" Step 1→2 | nein | nur Trigger der Bot-Analyse | | Wizard Submit Step 5 | wäre gefährlich | Hard-Confirm-String dynamisch verhindert Auto-Submit | | Pause-Button | ja, einfach | Hard-Confirm `pause-` | | Release-Button | ja, weil destruktiv | Hard-Confirm `release-` + Q-MH-4 Behavior-Choice | | Emergency-Action-Button | sehr gefährlich | 3 verschiedene Match-Strings + sticky-rot | --- # TEIL G · Test-Strategie Review ## G.1 · Geschätzte Tests pro Phase (aus `09_test_strategy.md`) | Phase | Bot-Tests | PHP-Tests | Boundary | Gesamt | |---|---|---|---|---| | MH-1 (Registry) | 0 | ~25 | 5 | ~30 | | MH-2 (Reader) | ~25 | 0 | 5 | ~30 | | MH-3 (proposal_engine) | ~30 | 0 | 5 | ~35 | | MH-4 (Services + Migration) | 0 | ~30 | 5 | ~35 | | MH-5 (Filament UI) | 0 | ~25 | 5 | ~30 | | MH-6 (Worker-Handler) | ~50 | 0 | 5 | ~55 | | MH-7 (Bot-Wiring) | ~25 | 0 | 5 | ~30 | | MH-8 (Drill) | 0 | 0 | 0 | manual | | MH-9 (Daemon) | ~10 | ~10 | 5 | ~25 | | **Total** | **~165** | **~115** | **~40** | **~280** | ## G.2 · Boundary-AST-Test-Coverage (Soll vs Ist) | Test-Bereich | Soll | Ist (in v3.2 spezifiziert) | |---|---|---| | `proposal_engine` ohne commands-INSERT / order-API | ✅ | dokumentiert | | `managed_state_writer` ohne ccxt | ✅ | dokumentiert | | `managed_state_reader` ohne file-mutation | ✅ | dokumentiert | | Worker-Handler audit-Emit Anfang+Ende | ✅ | dokumentiert | | **G-DR-14 Boundary** (tradable_quote-Crossings reject) | ✅ | dokumentiert | | **Two-File-Atomic** Tests | ✅ | dokumentiert | | **JSON-SoT** (kein DB-Read aus Bot) | ✅ | dokumentiert | | **G-DR-16** Policy-Resolver source-grep | ✅ neu in v3.2 | | **G-DR-17** Bot-GUI-Boundary source-grep | ✅ neu in v3.2 | | **G-DR-18** Event-Versionierung Test | ⚠ erwähnt aber nicht detailliert | | **G-DR-19** Feature-Flags zentralisiert source-grep | ⚠ erwähnt aber nicht detailliert | | **G-DR-20** Asset-Identity Test | ⚠ noch nicht spezifiziert | | **G-DR-21** Exposure-Provider source-grep | ⚠ noch nicht spezifiziert | → **Empfehlung:** Test-Plan-Erweiterung für G-DR-18..21 in einem v3.3-Patch (nach RECON-2.3-DEPLOY). ## G.3 · Restart-Tests - post-MH-7 Restart-Test: bootstrap importiert nur managed_active, NICHT pause/drift/exit - wallet_signature mismatch → sys.exit(1) - post-Restart kein Behaviour-Drift (Cycle weiter wie vorher) ## G.4 · Drift-Tests - 6 Drift-Kategorien à mindestens 2 Tests (positive + negative-Schwelle) = 12 Tests in MH-7 ## G.5 · Replay-Tests ⚠ noch nicht spezifiziert — gehört zur Backlog-Phase **Proposal Replay System** (B1). ## G.6 · Rollback-Tests - Two-File-Atomic-Rollback: einer der Files schlägt fehl → Backup-Restore beider + audit - managed_state restore from snapshot (BACKLOG) - baseline_holdings clear → Bot fällt auf Legacy zurück (RECON-2.3 implementiert) ## G.7 · GUI-Tests | Bereich | Tests in MH-5 | |---|---| | ManagedHoldings-Page admin-only | 5 | | Wizard skippable=false | 5 | | Hard-Confirm dynamic validation | 5 | | Polling/Stale-Threshold | 5 | | Audit-Trail-Read | 5 | | Boundary-AST | 5 | ## G.8 · Worker-Tests - pro Handler ~6-7 Tests in MH-6 (8 × 6 = 48 Tests) - Two-File-Atomic-Test pro Handler der beide Files schreibt - DR-11 enforcement: Bot-actor wird abgelehnt für managed→frozen ## G.9 · Bewertung - **realistisch?** ja — ~280 Tests sind angemessen für Risk-Profile - **ausreichend?** medium — G-DR-18..21 brauchen Test-Plan-Erweiterung - **unterdimensioniert?** Replay-Tests + Quarantine-Tests fehlen — beides BACKLOG - **gefährliche Lücken?** keine kritischen — die Lücken sind alle in BACKLOG-Themen, die explicit Backlog sind --- # TEIL H · Offene Entscheidungen ## H.1 · 12 offene Q-MH-Fragen | Q-MH | Frage | Default | Priorität | |---|---|---|---| | Q-MH-1 | Proposal-TTL | 7 Tage | mittel | | Q-MH-3 | Operator-Override-Tiefe | medium (SL/TP/max_alloc/trailing/dca) | mittel | | Q-MH-4 | release_pending Behavior | choice (default graceful) | mittel | | Q-MH-5 | Multi-Asset-Bulk-Proposal | C (Bulk-Markierung mit Einzel-Workflows) | niedrig | | Q-MH-6 | Bot self-initiated Proposals | B (Bot darf alerten, Operator-Confirm) | niedrig | | Q-MH-7 | Drift-Schwellen | qty>5%, price>2-ATR, regime BEAR↔BULL | mittel | | Q-MH-8 | Pause-Verhalten | A (SL/TP bleibt aktiv) | mittel | | Q-MH-9 | Re-Engage nach exit_executed | A (frozen, manuell propose) | niedrig | | Q-MH-10 | synthetic_entry-Method | D (Operator-choice, default current_price) | mittel | | Q-MH-12 | Cool-down nach reject/release | D (24h Testnet, 7d Mainnet) | mittel | | Q-MH-16 | Cooldown-Override durch Operator | B (mit extra Hard-Confirm) | niedrig | | Q-MH-17 | Confidence-Threshold-Wert | 0.50 Testnet, 0.65 Mainnet | mittel | | Q-MH-18 | Volatility-Kill-Schwelle | 25% Testnet, 15% Mainnet | mittel | ## H.2 · Offene technische Entscheidungen | Bereich | Status | |---|---| | `policy_resolver.py` Implementation | offen (in MH-1) | | `asset_identity.py` Mapping-Tabelle | offen (in MH-1) | | `feature_flags.py` Service | offen (in MH-1) | | `exposure_provider.py` Service | offen (vor MH-3) | | Event-Versionierung pro Event-Typ | offen (in MH-1) | | audit_snapshots Cleanup-Job | offen (BACKLOG, post-MH-9) | ## H.3 · Offene organisatorische Entscheidungen | Bereich | Status | Mainnet-relevant? | |---|---|---| | 2-Personen-Sign-Off Process | offen | ja | | Mainnet-Branch-Setup | offen | ja | | Mainnet-CI/CD-Pipeline | offen | ja | | Mainnet-Secrets-Storage (Vault?) | offen | ja | | Telegram-Push-Channel-Config für Mainnet | offen | ja | | Mainnet-Drill-Frequency (alle 30 Tage) | offen | ja | ## H.4 · Mainnet-Blocker Alle 5 Layer sind aktiv. Mainnet bleibt blockiert bis: - ✓ alle MH-1..9 abgeschlossen - ✓ Q-MH-1..18 alle decided - ✓ B-FEE-FIX 1-4 verifiziert auf Mainnet-Sample - ✓ B-OUTAGE-RES-1 Operator-Drill auf Mainnet-Connection grün - ✓ Frozen-only Drill (RECON-2.4) erfolgreich - ✓ MH-8 Testnet-Drill 4 Sub-Phasen grün - ✓ Operator-Drill 502 Mainnet-Wiederholung grün - ✓ 2-Personen-Sign-Off etabliert - ✓ 5-Min-Rollback-Plan auf TESTNET geübt ## H.5 · Offene Deploy-Themen | Thema | Status | |---|---| | RECON-2.3-DEPLOY | **bereit** — 1 File-Drift, alle anderen synchron | | Frozen-only Drill | dokumentiert in `06_testnet_drill §3` | | MH-0.5 Worker-Daemon-Aktivierung | dokumentiert in `00_overview §4` + `05_commandbus_worker §6` | | MH-7 Bot-Side-Wiring Restart | dokumentiert in `05_commandbus_worker §7` | --- # TEIL I · Review-Fazit ## I.1 · Gesamtbewertung der Architektur ✅ **Reife: hoch.** Nach 4 externen Reviews + 6 Q-MH-Decisions + v3.1+v3.2 Patches ist die Architektur **konsistent**, **erweiterbar**, **auditierbar** und **rollbackfähig**. Strategische Einordnung (vom 4. Reviewer): *„Das Projekt entwickelt sich inzwischen eher wie ein echtes Operator- und Risk-System mit kontrollierter Trading-Engine, nicht mehr wie ein einfacher Trading-Bot."* ## I.2 · Größte Risiken | # | Risiko | Mitigation | |---|---|---| | 1 | **State-Drift während Mainnet** — externe Wallet-Mutationen, Delistings, Symbol-Renames | 6 Drift-Kategorien + G-DR-14 + G-DR-15 + G-DR-20 | | 2 | **Operator-Fatigue** auf Mainnet → unbedachte Approves | Multi-Step-Wizard + Hard-Confirm dynamisch + Confidence-Hard-Gate | | 3 | **synthetic_entry wird stillschweigend zur „Wahrheit"** | G-DR-15 mit 4 Pflicht-Marker + UI-Banner | | 4 | **MH-1 wird zu groß** (Big-Bang) | A9 MH-1-Scope-Lock (External Review v2) | | 5 | **Worker-Daemon-Crash unbemerkt** | MH-0.5 Healthcheck + Telegram-Notification | | 6 | **organisatorischer Mainnet-Bypass** | MN-DR-1..5 Verbote + 2-Personen-Sign-Off | ## I.3 · Größte Stärken | # | Stärke | |---|---| | 1 | **frozen-by-default + Operator-Authority** als unumstößliches Fundament (G-DR-1+2+9) | | 2 | **CommandBus-only** als einziger Mutation-Pfad (G-DR-3) — verhindert State-Korruption | | 3 | **5-Layer-Mainnet-Block** + organisatorische Disziplin | | 4 | **modulare 12-File-Sub-Roadmap** + 4 Audit-Trail-Files für Reviewer-Trace | | 5 | **21 G-DR durable rules** als zukunftssicherer Vertrag — Architekturdisziplin festgehalten | | 6 | **Multi-Step-Wizard** mit Hard-Confirm dynamisch — kein One-Click-Promote möglich | | 7 | **immutable Audit-Snapshots** + JSON-SoT + DB-Cache — Forensik + Compliance bereit | | 8 | **Two-File-Atomic-Pattern** (G-DR-14) — verhindert wallet-signature-Drift bei Policy-Wechsel | ## I.4 · Was noch fehlt | Bereich | Status | Wann fertig? | |---|---|---| | RECON-2.3-DEPLOY | bereit, noch nicht ausgeführt | Operator-GO erforderlich | | Frozen-only Drill | bereit dokumentiert | nach RECON-2.3-DEPLOY | | MH-1 Code | nicht begonnen | nach Drill | | 12 verbleibende Q-MH | offen mit Defaults | asynchron entscheidbar | | Test-Plan G-DR-18..21 Detail | erwähnt aber nicht ausgearbeitet | v3.3-Patch nach Drill | | Mainnet-Branch-Setup | offen | weit in Zukunft | ## I.5 · Was überengineered wirkt Nach Re-Audit: **nichts kritisches**. Jede der 21 G-DR + 12 G-SR + 18 MN-DR/SR ist auf konkrete Risiken zurückführbar. **Mögliche Vereinfachung später:** - 14 Backlog-Themen sind viel — könnten in „Phase-Sets" gruppiert werden bei Aktivierung (CAP-Set, T-SPLIT-Set, Mobile-Set, etc.) - 4 Hard-Confirm-Patterns könnten in einer Helper-Funktion zentralisiert werden ## I.6 · Was gefährlich unterengineered wäre | Bereich | Risiko falls nicht früh gemacht | |---|---| | **Worker-Daemon (MH-0.5)** | R4-Race in Mainnet wäre fatal | | **Asset-Identity (G-DR-20)** | wrapped-Assets-Verwechselung kann Mainnet-Verluste verursachen | | **Event-Versionierung (G-DR-18)** | Replay-System / ML-Auswertung später unmöglich nachzuziehen | | **Two-File-Atomic (G-DR-14)** | wallet-signature-Drift würde Mainnet-Bot crashen | | **G-DR-15 synthetic_entry-Marker** | Operator-Verwirrung + Tax-Layer-Probleme | ## I.7 · Was vor MH-1 zwingend geklärt sein muss ✅ **Q-MH-2/11/13/14/15 + DR-7 sind decided.** Damit ist MH-1 startbar. **Empfohlene zusätzliche Klärung VOR MH-1 (nicht zwingend, aber sinnvoll):** - Q-MH-17 (Confidence-Threshold) — beeinflusst proposal_engine V1 - Q-MH-18 (Volatility-Kill-Threshold) — beeinflusst proposal_engine V1 Restliche 10 Q-MH können asynchron während Code-Phase entschieden werden. ## I.8 · Ist RECON-2.3-DEPLOY bereit? ✅ **JA.** Begründung: - 1 File-Drift identifiziert (`command_worker.py`) - alle anderen 8 RECON-2.3-relevanten Files synchron - Watchdog-Konvention OK (clawbot) - Backup-Strategie etabliert (G-DR-9) - Pre/Post-Check-Liste in Teil D.4/D.5 verbindlich - kein Bot-Restart erforderlich (main.py importiert command_worker NICHT) - vollständig reversibel via docker cp + alter Hash **Zeit-Aufwand:** ~30-45 min mit Backup + Hash-Verify. ## I.9 · Ist Frozen-only Drill (RECON-2.4) sinnvoll vorbereitet? ✅ **JA, voll dokumentiert.** In `06_testnet_drill §3 Sub-Phase A`: - 10 Schritte - Acceptance-Criteria (5 Punkte) - Restore-Plan - Failure-Szenarien **Voraussetzung:** RECON-2.3-DEPLOY abgeschlossen. ## I.10 · Empfohlene Reihenfolge ab jetzt | # | Phase | Aufwand | Risk | |---|---|---|---| | 1 | **RECON-2.3-DEPLOY** | 30-45 min | low | | 2 | **Frozen-only Drill (RECON-2.4 Sub-Phase A)** | 1-2h | medium | | 3 | **MH-0.5 Worker-Daemon-Aktivierung** | 2-3h + 24h Beobachtung | medium | | 4 | **MH-1 minimal** (Schemas + Reader/Writer + Canonicalization + Validation + Tests) | 2-3 Tage | low (Scope-Lock) | | 5 | **MH-2 + MH-4 parallelisierbar** | je 2-3 Tage | medium | | 6 | **MH-3 (proposal_engine V1-min)** | 3-4 Tage | medium | | 7 | **MH-5 (Filament UI)** | 3-4 Tage | medium | | 8 | **MH-6 (Worker-Handler)** | 4-5 Tage | high | | 9 | **MH-7 (Bot-Side-Wiring + Restart)** | 1-2 Tage + Drill | high | | 10 | **MH-8 (Testnet-Drill 4 Sub-Phasen)** | 1 Tag manueller Drill | high | | 11 | **MH-9 (Hardening)** | 2-3 Tage | medium | **Gesamt geschätzt:** ~3-4 Wochen MH-Code-Phase nach RECON-2.3-DEPLOY + Frozen-only Drill. ## I.11 · Technische-Schulden-Bewertung | Schuldenkategorie | Bewertung | |---|---| | Architektur-Design | ✅ keine Schulden — Reviews 4× durch | | Datenmodell | ✅ keine Schulden — Schemas in `01_foundation` vollständig | | State-Machine | ✅ keine Schulden — 10 States + 18 Transitions + 6 Drift-Kategorien | | Test-Strategie | ⚠ minor — G-DR-18..21 Detail-Tests fehlen (v3.3-Patch nach Drill) | | Backlog-Management | ✅ saubere Trennung BACKLOG vs Active | | Versionierung | ✅ Master-Boundaries v3.2 + Changelog | --- # Final-Bewertung **Architektur-Freigabe:** ✅ erteilt **Deploy-Freigabe RECON-2.3-DEPLOY:** ✅ erteilt (mit Pre/Post-Checks Teil D.4/D.5) **Frozen-only-Drill-Entscheidung:** ✅ bereit, kann nach RECON-2.3-DEPLOY starten **MH-1 Readiness:** ⚠ bereit, aber empfohlene Q-MH-17/18 Klärung kann parallel laufen **Langfristige Erweiterbarkeit:** ✅ sehr gut (G-DR-16..21 future-safe) **Risiko-Level (Gesamtprojekt):** mittel — alle kritischen Risiken haben Mitigations **Technische Schulden:** ✅ keine kritischen --- — Ende RECON-MH v3.2 Final Review Data Extraction (2026-05-10) —