Tear down ntfy, consolidate fleet alerting into Telegram (coilyco_ops_bot, green/red chats) #369
Labels
No labels
burndown-2026-06
burndown-2026-08
autonomy
async-consult
autonomy
epic
autonomy
headless
autonomy
live-collab
coherence-core
priority
P0
priority
P1
priority
P2
priority
P3
priority
P4
qa-fixture
role/advocate
role/director
role/exec
role/frontend
role/gamedev
role/human
role/platform
role/qa
role/science
role/sysadmin
state
ambient
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
coilyco-flight-deck/infrastructure#369
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Tear down self-hosted ntfy and consolidate all fleet alerting into Telegram via the existing
coilyco_ops_bot. Replaces the ntfy server + thexenrox/ntfy-alertmanagerbridge + the direct-curl producers.Routing model: two chats
/coilysiren/telegram/green-chat-id) — good news: successful deploys,fleet-convergeapplied-a-commit, clean git-state sweeps./coilysiren/telegram/red-chat-id) — failures/alerts: every vmalert rule, converge FAILED, git drift/unreachable, deploy job failures./coilysiren/telegram/bot-token(SecureString). Bot:coilyco_ops_bot(local: coilyco-ops).Inventory (what posts to ntfy today)
Cluster path (deploy repo,
services/ser8-observability/): vmalert → VictoriaMetrics bundled Alertmanager →xenrox/ntfy-alertmanagerbridge → ntfy topicalerts. AM is upstream-Prometheus-compatible, so it speakstelegram_configsnatively — drop the bridge, swap thentfyreceiver for a Telegram red receiver.Direct-curl scripts (this repo):
ansible/roles/git-state-watch/files/fleet-git-state.sh— daily git drift sweep. clean→green, drift/unreachable→red.ansible/roles/fleet-converge/files/fleet-converge.shnotify()— every 30 min. applied→green, FAILED→red.scripts/coilysiren-mirror-reconcile.sh— already DEAD (itsmirror-sync.ymlnever setsNTFY_URL); migrate for completeness.Plumbing to retire:
deploy/ntfy.yml(binwiederhier server, Flux + tailscale sidecar),ansible/roles/o11y-ntfy/(SSM base-url cache role), SSM/coilysiren/ntfy/{base-url,ts-authkey}, the flux kustomization + tailscale service entries,~/.config/fleet-o11y/ntfy-base-url.Stages (dual-ship so no alert gap)
coilyco_ops_bot. Done out-of-band.o11y-telegramansible role caching the 3 SSM params host-local (mirrors o11y-ntfy); swap the 3 scripts' ntfy curl for TelegramsendMessagewith green/red selection; add the Telegram red receiver todeployvmalert-values.yml. Both fire in parallel; confirm Telegram lands.ntfy.yml+o11y-ntfyrole + flux/tailscale/SSM entries; update all docs/FEATURES (infra + deploy).Open detail
Alertmanager
telegram_configsneedsbot_token/chat_id— keep them out of tracked files. Eitherbot_token_file+ out-of-band config Secret (same precedent as today's imperative ntfy-bridge Secret), or keep a thin Telegram webhook relay fed by an ExternalSecret. Decide at cluster-path authoring time.Out of scope
Discord
#coilyco-alerting— its only producer is the retiredcoilybinary (coily repo, not here); deferred, tracked separately.Decisions locked: two chats (green/red); Discord deferred. Bot
coilyco_ops_botpre-exists.Additional teardown item folded in (found during the cluster red-receiver apply):
Dead
grafana-adminExternalSecret on ser8 —infrastructure/deploy/observability/admin-password-externalsecret.ymlsyncs/grafana/admin-passwordinto the ser8observabilitynamespace, but:ser8-observabilitydocs/ser8-k3s.md: "No Grafana: vmui for ad-hoc queries").no matches for kind "ExternalSecret" in version "external-secrets.io/v1"), so it could never have applied anyway.Action during the sweep: delete
admin-password-externalsecret.yml, and (if unused) retire the/grafana/admin-passwordSSM param. Same root cause as the ntfy plumbing — ser8 secrets are imperative, not SSM-synced.Live cluster follow-up from 2026-07-22:
ntfy/ntfy-ts-authkeyremainsReady=Falsebecause/coilysiren/ntfy/ts-authkeyis absent. The teardown should remove this ExternalSecret and its dependent Tailscale wiring instead of recreating a credential for the retiring service. Infrastructure #500 also tracks deletion of the live ntfy namespace.Closed in the 2026-08-26 backlog burn-down (coilyco-bridge/agentic-os-kai#901).
Verified as already landed: Closing: the teardown landed. Commit
2675b2de3bde-provisioned ntfy, deploy/ntfy.yml and ansible/roles/o11y-ntfy are gone along with the dead grafana admin-password ExternalSecret, and ansible/roles/o11y-telegram now records Telegram green/red as the sole o11y notification channel.This issue was open only because nothing closed it when the work shipped. If the verification is wrong, reopen it. The whole set is recoverable with
state:closed label:burndown-2026-08.