From adcae09317bc3d29cc1bd8ea4d7a9bf02ded4125 Mon Sep 17 00:00:00 2001 From: Axel Hocks Date: Tue, 18 Aug 2026 23:31:52 +0200 Subject: [PATCH] Ruhende Messungen als RUHT markieren statt als "sammelt" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Zwei Messungen brauchen SQUEEZE-Trades, und auto_squeeze ist seit dem 11.08. aus -- seit dem 17.08. auch begruendet (B5-Regel gefallen). Ihre Zaehler stehen seither still: Stop-Order-Umbau 8/12, Nacht-Fenster 3/15. Als "sammelt (67 %)" angezeigt suggerierten sie einen Fortschritt, den es nicht gibt: sie laufen NIE ab. Jetzt erscheinen sie als ⏸ ... [RUHT] 8/12 ... -- steht STILL braucht SQUEEZE-Trades -- auto_squeeze ist AUS ... RUHEND heisst: die Messung ist nicht langsam, sie ist BLOCKIERT -- und die Blockade ist eine ENTSCHEIDUNG, keine Datenfrage. Wer den Trader wieder einschaltet, laesst beide automatisch weiterlaufen; es ist nichts nachzuholen. Umsetzung: RUHT-Tabelle mit je einer Pruef-Funktion; _auto_squeeze_an() liest core.live_config (ini + runtime_state in der Vorrangfolge des Engine-Starts). Faellt die Pruefung aus, gilt "nicht ruhend" -- lieber ein Zaehler zu viel als eine still verschwundene Messung. Die sechs uebrigen Messungen laufen unveraendert als "sammelt". ⚠ Beim Bau in die dokumentierte \n-Falle gelaufen: ein per Heredoc geschriebenes f"\n..." wurde zum echten Umbruch im String-Literal (SyntaxError). CLAUDE.md sagt genau das ("NIE per Heredoc -- den Edit-Weg nehmen"); ueber den Edit-Weg behoben, check_nfalle laeuft sauber. Co-Authored-By: Claude Opus 5 --- measurement_reminder.py | 51 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/measurement_reminder.py b/measurement_reminder.py index fadc0ab..914430a 100644 --- a/measurement_reminder.py +++ b/measurement_reminder.py @@ -596,6 +596,48 @@ def _popup(title: str, text: str) -> None: print(f"Popup fehlgeschlagen: {e}\n{text}") +def _auto_squeeze_an() -> bool: + """Laeuft der Auto-Squeeze? (ini + runtime_state, Vorrang wie beim Start)""" + try: + from core.live_config import LiveConfig + return bool(LiveConfig.laden().auto_squeeze) + except Exception: + return True # im Zweifel NICHT als ruhend melden + + +# ── RUHENDE Messungen ──────────────────────────────────────────────────────── +# ⚠⚠ ANLASS (2026-08-18): zwei Messungen brauchen SQUEEZE-Trades — und +# `auto_squeeze` ist seit dem 11.08. aus, seit dem 17.08. auch begruendet +# (B5-Regel gefallen). Ihre Zaehler stehen seither still: 8/12 und 3/15. +# Als „sammelt (67 %)" angezeigt suggerieren sie einen Fortschritt, den es +# nicht gibt — sie laufen NIE ab. +# RUHEND heisst: die Messung ist nicht langsam, sie ist BLOCKIERT — und die +# Blockade ist eine ENTSCHEIDUNG, keine Datenfrage. Wer den Trader wieder +# einschaltet, laesst beide automatisch weiterlaufen; hier ist nichts zu tun. +RUHT = { + "squeeze_entry_gap": ( + _auto_squeeze_an, + "braucht SQUEEZE-Trades — `auto_squeeze` ist AUS (B5-Regel am 17.08. " + "gefallen). Zaehler steht seit dem 11.08. still."), + "night_window_0127": ( + _auto_squeeze_an, + "braucht SQUEEZE-Trades aus 0/1/2/7 Uhr — `auto_squeeze` ist AUS. " + "Zaehler steht seit dem 11.08. still."), +} + + +def ruht(key: str): + """(True, Grund) wenn die Messung blockiert ist, sonst (False, '').""" + e = RUHT.get(key) + if not e: + return False, "" + pruef, grund = e + try: + return (not pruef()), grund + except Exception: + return False, "" + + def main() -> None: os.makedirs(MARKER_DIR, exist_ok=True) due, pending = [], [] @@ -611,7 +653,8 @@ def main() -> None: elif ready: pending.append((c, have, "gemeldet")) else: - pending.append((c, have, "sammelt")) + _sch, _ = ruht(c["key"]) + pending.append((c, have, "RUHT" if _sch else "sammelt")) # ── Config-Drift: welche Messung ist durch eine Config-Änderung veraltet? # Marker enthält den Wert → ändert der User später erneut, wird neu gemeldet. @@ -637,6 +680,12 @@ def main() -> None: print(f" {have:.0f}/{c['need']} {c['unit']}") print(f" → {c['cmd']}") for c, have, st in pending: + if st == "RUHT": + _, _grund = ruht(c["key"]) + print(f"\n ⏸ {c['title']} [RUHT]") + print(f" {have:.0f}/{c['need']} {c['unit']} — steht STILL") + print(f" ⚠ {_grund}") + continue pct = min(100, have / c["need"] * 100) if c["need"] else 0 print(f"\n ⏳ {c['title']} [{st}]") print(f" {have:.0f}/{c['need']} {c['unit']} ({pct:.0f} %)")