---
title: Phone notification + 30/60/90 stall escalation (vault-internal sibling)
date: 2026-05-08
authored_by: claude-code-orchestrator
shared_lesson: "C:\\Users\\mclou\\lfcs-lessons-learned\\lesson-2026-05-08-notification-chase.md"
session_id: orchestrator-2026-05-08-PM-v2-lifecycle-build
tags: [notifications, ntfy, daemon]
---

# Notification chase — session-internal record

## Action rule (mirror of shared lesson)

See `C:/Users/mclou/lfcs-lessons-learned/lesson-2026-05-08-notification-chase.md`.

## Configuration

- ntfy.sh topic: `rocky-lfcs-in76m24d`
- Config file: `Codebase/lfcs-orchestrator/standards/notification-config.md`
- Subscription instructions for Rocky's phone in config file.

## Daemon code (Build 2 commit)

`Codebase/lfcs-orchestrator/daemon/lfo_handoff_daemon.py`
- `send_ntfy(topic, title, body, priority)` — POST to `https://ntfy.sh/{topic}`
- `tick()` — one poll cycle: detect file changes, fire notifications, advance escalation counters
- Escalation tiers: `ESCALATION_INTERVALS_MIN = (30, 60, 90)`
- 3rd escalation also writes stall diagnostic block to `pricer-to-orch.md`

## Privacy guard enforced in daemon body templates

- Phase + bid_id + "check handoff" only
- NEVER: client names, contract values, rate sheets

## Follow-up cleanup queue

- Live POST test deferred to Rocky's first daemon launch (sandbox network egress blocked).
- Calibrate 30/60/90 cadence after first 3 stalls.
- Investigate ntfy Pro authenticated topics if body content needs hardening.

## Commit

`009fe57a` — claude-code-orchestrator: build 3 — phone notifications via ntfy.sh
