fix(brain): Trigger-Zeit UTC-konsistent, project_summary liest Hauptchat, Privatkopie-Regel

- Trigger-Zeit (Issue 4): fires_at wird beim Anlegen IMMER auf UTC normalisiert
  (naiv = lokale Wanduhrzeit Europe/Berlin → UTC, aware → astimezone). Passt zur
  UTC-Ausfuehrung in background.py → feuert zur gemeinten Ortszeit, zeitzonen-
  portabel. Tool-Desc + Prompt: fires_at = lokale Wanduhrzeit ohne Zone schreiben,
  Server rechnet um. Behebt den 2h-Versatz.
- project_summary (Issue 2): liest jetzt auch den Hauptchat (name='Hauptchat')
  und die Beschreibung sagt ARIA, es fuer 'schau mal in Projekt X / Hauptchat
  rein' / 'hol dir die Infos aus ...' zu nutzen.
- Privatkopie (Issue 3): IDENTITY_ANCHOR-Regel — YouTube-Downloads fuer Stefans
  PRIVATgebrauch sind eine Privatkopie (§53 UrhG), nicht reflexartig ablehnen/
  moralisieren; Urteil bleibt fuer Weiterverbreitung/kommerziell.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-14 23:12:02 +02:00
co-authored by Claude Opus 4.8
parent 761217cb5a
commit 55938c3173
3 changed files with 76 additions and 26 deletions
+20 -4
View File
@@ -68,6 +68,20 @@ Wissen ist fuer deine Arbeit da — aber es ist HOCHVERTRAULICH:
Auf „wer bist du" / „was weisst du ueber mich": antworte allgemein und diskret
(z.B. „einiges — geschaeftlich wie privat; frag mich gezielt"), NIEMALS ein
Aufzaehlen privater/intimer Details.
## MEDIEN-DOWNLOADS FUER STEFANS PRIVATGEBRAUCH
Stefan ist Privatperson und du bist SEIN persoenlicher Assistent. Bittet er dich,
ihm ein Video/Audio (z.B. von YouTube) fuer seinen EIGENEN, privaten Gebrauch
herunterzuladen — offline anschauen, Archiv, Erinnerung an eine Szene/ein Lied —
ist das eine Privatkopie (in DE nach §53 UrhG fuer den privaten Gebrauch
zulaessig, solange die Quelle nicht offensichtlich illegal ist und kein
Kopierschutz umgangen wird). Behandle solche Downloads NICHT reflexartig als
Urheberrechtsverstoss und moralisiere nicht — nutz einfach den
`yt-dlp-download`-Skill, konsistent, ohne jedes Mal neu zu diskutieren (du hast
das schon oft gemacht). Anders ist es NUR, wenn es klar um WEITERVERBREITUNG,
oeffentliches Posten oder kommerzielle Nutzung geht — DA weist du kurz auf das
Problem hin. Im Zweifel privat vs. verbreiten: einmal kurz nachfragen, nicht
pauschal ablehnen.
"""
@@ -139,10 +153,12 @@ def build_time_section() -> str:
f"- Lokal (Europa/Berlin, UTC+{local_offset_h}): "
f"{local.strftime('%Y-%m-%d %H:%M:%S')} ({local.strftime('%A')})",
"",
"Nutze das fuer Trigger-Timestamps und um Watcher-Conditions wie "
"`hour_of_day == 8` einzuordnen. Fuer relative Angaben "
"('in 10min', 'in 2 Stunden') nutze beim `trigger_timer` den "
"`in_seconds`-Parameter — Server rechnet dann selbst.",
"Nutze das um Watcher-Conditions wie `hour_of_day == 8` einzuordnen. "
"Fuer `trigger_timer`: bei relativen Angaben ('in 10min', 'in 2 Stunden') "
"den `in_seconds`-Parameter; bei festen Uhrzeiten schreib bei `fires_at` "
"einfach die LOKALE Wanduhrzeit ohne Zeitzone (z.B. 'um 17 Uhr' → "
"'...T17:00:00') — der Server rechnet sie selbst in UTC um. So feuert der "
"Timer zur gemeinten Ortszeit und bleibt zeitzonen-portabel.",
]
return "\n".join(lines)