phase0: Nachtmeldungen kommen wieder an, Sicherung mit Lucys Gedaechtnis, Token-Datei raus
Ampel / ampel (push) Successful in 26s

- notify.sh sammelt nachts (00-07 Uhr) wie bisher, aber jetzt liefert mc2-morgenmeldung.timer
  um 07:00 alles als eine Telegram-Nachricht aus. Seit dem 21.08. las niemand die
  Warteschlange, alle Nachtmeldungen (auch die Sonntags-Updates) gingen verloren.
  Dringendes (-d, Betreff Alarm/Notfall, Text beginnt mit KRITISCH) geht sofort raus;
  autoupdate.sh markiert seine KRITISCH-Meldungen ausdruecklich.
- backup.sh sichert zusaetzlich ~/.hermes/memories, SOUL.md, skills/, scripts/, den
  Box-Wart-Zustand (/srv/models/mc2-*.json), User-Units, llama-swap-Drop-ins und Lucys
  Stimmreferenz. restore.sh spielt Gedaechtnis und Zustand nur zurueck, wenn sie fehlen
  oder --mit-gedaechtnis gesetzt ist.
- Update-Verlauf zaehlt die Morgenmeldung nicht als eigenen Lauf.
- Waechter und Flugplan kennen den neuen Timer; deploy.sh installiert ihn.
- .claude/settings.local.json aus dem Repo genommen (lokal behalten), .gitignore ergaenzt.
- ruff wieder gruen (4x RUF100), AGENTS.md: Deploy macht git pull, Remote ist SSH.

Tests: 86 gruen (neu: Nachtruhe, Dringendes, Morgenmeldung inkl. Telegram-Ausfall).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Hitonabi
2026-09-24 14:42:19 +02:00
co-authored by Claude Opus 5.5
parent 4a05bc2a05
commit 648be33d21
17 changed files with 329 additions and 139 deletions
+48
View File
@@ -0,0 +1,48 @@
#!/usr/bin/env bash
# Morgenmeldung (07:00, mc2-morgenmeldung.timer): schickt die nachts gesammelten Meldungen als
# EINE Telegram-Nachricht. notify.sh parkt zwischen 00:00 und 06:59 alles Nicht-Dringende in der
# Nacht-Warteschlange; ohne diesen Lauf käme es nie an (so geschehen vom 21.08. bis 24.09.2026).
#
# Scheitert Telegram dreimal, bleibt der Stapel liegen und kommt mit der nächsten Morgenmeldung —
# verloren geht nichts. Leere Warteschlange = keine Nachricht.
set -uo pipefail
QUEUE="${MC_NIGHT_QUEUE:-$HOME/.hermes/night-queue.txt}"
ARBEIT="$QUEUE.senden"
SRC_DIR="$(cd "$(dirname "$0")" && pwd)"
MAX_ZEICHEN="${MC_MORGENMELDUNG_MAX:-3500}" # Telegram erlaubt 4096 Zeichen je Nachricht
VERSUCHE="${MC_MORGENMELDUNG_VERSUCHE:-3}"
PAUSE="${MC_MORGENMELDUNG_PAUSE:-60}"
[ -s "$QUEUE" ] || [ -s "$ARBEIT" ] || exit 0
# Warteschlange übernehmen. mv ist atomar: Was notify.sh währenddessen anhängt, landet entweder
# noch im übernommenen Stapel oder in einer frischen Warteschlange. Ein Stapel, der beim letzten
# Mal nicht rausging, steht vorne.
if [ -s "$QUEUE" ]; then
mv "$QUEUE" "$QUEUE.uebernahme" && cat "$QUEUE.uebernahme" >> "$ARBEIT" && rm -f "$QUEUE.uebernahme"
fi
ANZAHL="$(grep -c '^- ' "$ARBEIT" || true)"
[ "$ANZAHL" = "1" ] && WORT="Meldung" || WORT="Meldungen"
TEXT="$(head -c "$MAX_ZEICHEN" "$ARBEIT")"
if [ "$(wc -c < "$ARBEIT")" -gt "$MAX_ZEICHEN" ]; then
TEXT="$TEXT
… gekürzt. Alle Meldungen stehen im Cockpit unter Meldungen."
fi
NACHRICHT="Guten Morgen, Commander. Heute Nacht gab es $ANZAHL $WORT:
$TEXT"
for ((i = 1; i <= VERSUCHE; i++)); do
# Als 07:00 senden (außerhalb der Nachtruhe); NO_ANNOUNCE, weil jede Meldung schon einzeln im
# Briefkasten liegt.
if MC_NOTIFY_STRICT=1 MC_NOTIFY_NO_ANNOUNCE=1 MC_NOTIFY_STUNDE=07 \
bash "$SRC_DIR/notify.sh" -s "[Morgenmeldung]" "$NACHRICHT"; then
mv -f "$ARBEIT" "$QUEUE.zuletzt-gesendet"
exit 0
fi
[ "$i" -lt "$VERSUCHE" ] && sleep "$PAUSE"
done
echo "Morgenmeldung: Telegram nicht erreichbar, $ANZAHL $WORT bleiben für den nächsten Lauf liegen." >&2
exit 1