fix: ntfy ping is her personal text to Brian, by her decision — not a thought dump

Feedback: the push broadcast her raw internal thought ("Eelis Parssinen's
victory is a reminder...") — read like a journal entry, not her texting him.

Now the flow matches the intent: she thinks/journals, then *decides* "I should
tell Brian about this." think() asks for an optional `reach_out` — a real text
message addressed TO him in her own voice, written only when she chooses to. The
ping sends that message (title "Lyra", like a text from her), never the internal
thought. No reach_out = nothing sent (most thoughts stay hers).

- Pinging decoupled from the salience score: her decision (a reach_out) drives it,
  not a threshold. PING_SALIENCE is now an optional floor (default 0.0).
- Defensive: reject the placeholder echo ("reach_out"), too-short junk, or the
  thought pasted back as the message.
- notify.push: title now optional (omitted -> cleaner text-style notification).

Verified live: 3 passes kept private; a decided reach-out lands as a personal
text. Suite 67 green, ruff clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-22 01:39:11 +00:00
parent fef45b3e05
commit 43697f8340
4 changed files with 81 additions and 29 deletions
+3 -1
View File
@@ -26,7 +26,9 @@ def push(title: str, message: str, click: str | None = None,
cfg = config.load()
if not cfg.ntfy_url:
return False
payload: dict = {"topic": cfg.ntfy_topic, "message": message, "title": title}
payload: dict = {"topic": cfg.ntfy_topic, "message": message}
if title:
payload["title"] = title
if click:
payload["click"] = click
if tags: