Skip to content

feat(ops): SSOT registry for everything that reaches the operator's Telegram - #445

Merged
github-actions[bot] merged 1 commit into
mainfrom
ops/telegram-ssot
Aug 29, 2026
Merged

feat(ops): SSOT registry for everything that reaches the operator's Telegram#445
github-actions[bot] merged 1 commit into
mainfrom
ops/telegram-ssot

Conversation

@catomean

Copy link
Copy Markdown
Collaborator

George: telegram should still update me on things. and we should have ssot for things telegram does/updates me on. i do like when it tells me when there is feedback sent through the feedback form, for example.

The registry

docs/telegram-notifications.md — one row per notification class, grouped by why it exists:

  • Requested updates (keepers): visitor feedback from the feedback form (src/lib/feedback/notify-new.ts — verified live on main, fires on POST /api/feedback for genuine visitor rows), agent run outcomes (notifyOnClose), and Loki's briefings (their schedule SSOT stays jobs.json on bitbaum — the registry points, never copies).
  • Incidents: the post-feat(ops): a page queues its own fix — incident dispatch into FleetCrown #443/refactor(ops): one voice on the phone — grace, digests, backoff, subjects #444 voice — DOWN pages with the fix agent dispatched, sweep digests, auto-repairs, resource transitions, on-box + off-box URL monitors, deploy failures, conformance/agent-work/register findings.
  • Platform self-checks: telemetry, runner stall/version, pending approvals, model-id rot, run escalations, one-shot gates.
  • Off-repo senders registered with pointers to their own SSOT (OpenClaw cron, orangecat's uptime workflow).

Plus the rules for adding one: channel question first, route through the two blessed send paths (lib-alert.sh, telegram-send.ts), register in the same PR, never test-send live.

The enforcement

scripts/ci/check-telegram-registry.sh, wired into npm run verify: finds every sender surface in the repo — direct api.telegram.org calls, importers of telegram-send.ts, box scripts sourcing lib-alert.sh — and fails naming any path missing from the registry. The SSOT is binding, not aspirational.

Mutation-proven: a planted unregistered sender file turned the gate red naming the file; removing it went green (22 sender files registered).

🤖 Generated with Claude Code

https://claude.ai/code/session_018RmMktaYn8MuJdEqjp5gWU

…elegram

George: 'telegram should still update me on things. and we should have ssot
for things telegram does/updates me on. i do like when it tells me when there
is feedback sent through the feedback form.'

docs/telegram-notifications.md is now that SSOT: every notification class —
requested updates (visitor feedback, run outcomes, Loki briefings), incidents
(with the fix-agent dispatch), platform self-checks, and off-repo senders
(Loki cron, orangecat uptime) — one row each: what arrives, when, from where.

Enforced, not aspirational: scripts/ci/check-telegram-registry.sh (wired into
npm run verify) finds every sender surface in the repo — direct
api.telegram.org calls, importers of telegram-send.ts, box scripts sourcing
lib-alert.sh — and fails when a path is missing from the registry. Adding a
notification without registering it turns CI red in the same PR.

Mutation-proven: a planted unregistered sender fails the gate naming the
file; removing it goes green (22 sender files registered).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018RmMktaYn8MuJdEqjp5gWU
@github-actions
github-actions Bot merged commit 7c12ddb into main Aug 29, 2026
3 checks passed
@github-actions
github-actions Bot deleted the ops/telegram-ssot branch August 29, 2026 10:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant