feat(notifications): expose canonical Telegram routing
Some checks failed
CD Pipeline / workflow-shape (push) Successful in 1s
CD Pipeline / cancel-stale-cd (push) Has been skipped
CD Pipeline / build-and-deploy (push) Has been cancelled
CD Pipeline / post-deploy-checks (push) Has been cancelled
CD Pipeline / tests (push) Has been cancelled

This commit is contained in:
ogt
2026-07-15 08:29:05 +08:00
parent 2d6416c322
commit 088d8a509d
8 changed files with 522 additions and 25 deletions

View File

@@ -1,7 +1,8 @@
# Telegram 監控告警路由總帳
> 狀態:`source_policy_ready_runtime_not_applied`
> 真相邊界本表把「已證明現況」、「建議目的地」、「目前阻擋」、「source risk」與「receipt 強度」分開。建議不等於 live routealias 不是 numeric chat ID本變更沒有送 Telegram、讀 token/chat ID、改 runtime route 或部署。
> Source snapshot 狀態:`source_policy_ready_runtime_not_applied`(保留 2026-07-14 產生當下的歷史邊界,不回寫成 runtime 綠燈)
> Runtime projection 狀態:`runtime_policy_enforced_product_delivery_receipts_partial`(由 production gateway 相同 fail-closed resolver 即時計算4 條 allow、16 條 block
> 真相邊界本表把「已證明現況」、「建議目的地」、「目前阻擋」、「source risk」與「receipt 強度」分開。建議不等於 delivery receiptalias 不是 numeric chat IDreadback 不送 Telegram、不讀 token/chat ID、不改 runtime route。是否已部署仍以 exact-SHA CD、deploy marker 與 production API/UI readback 為準。
## 判讀規則
@@ -44,7 +45,7 @@
- Alertmanager 產品規則現在帶 `awoooi_product_id``awoooi_signal_family``awoooi_route_severity`gateway 以這組明確 context 覆蓋 legacy `TYPE-3`,所以 blocked product 不會再落到 shared SRE。
- SignOz public receiver 尚無 source authentication因此即使 payload 自稱 canonical labels 也固定 no-egressSentrysignature verified與 HMAC generic webhook 缺完整 namespaced context 時一律 `UNKNOWN / blocked_no_egress`。Alertmanager 另要求 direct peer 與完整 forwarded chain 都是 private IP不再信任單一可偽造的 forwarded value。
- `docker-compose`、production ConfigMap、docker-health scripts 與 7 個 Gitea workflows 的 11 個 raw destination defaults 已移除runtime 只可由既有 secret/env alias 注入,缺值即 fail closed。白名單也不再內嵌 numeric default。
- 本次只改 source policy,沒有讀 token、呼叫 Bot API、改 Telegram 群組、送測試訊息或偽造 delivery receipt。
- Runtime readback 只透過與 gateway pre-send gate 相同的 resolver 投影 symbolic policy;不讀 token、呼叫 Bot API、改 Telegram 群組、送測試訊息或偽造 delivery receipt。
## 11 產品路由清冊
@@ -89,6 +90,8 @@
- Registry`docs/security/telegram-canonical-routing-registry.snapshot.json`
- Schema`docs/schemas/telegram_canonical_routing_registry_v1.schema.json`
- Resolver`apps/api/src/services/notification_matrix.py`
- Tests`apps/api/tests/test_telegram_canonical_routing_registry.py`
- API readback`GET /api/v1/agents/telegram-canonical-routing-runtime-readback`
- UI cockpit`/{locale}/notifications`
- Tests`apps/api/tests/test_telegram_canonical_routing_registry.py``apps/api/tests/test_telegram_canonical_routing_readback_api.py`
Production apply 前仍需同一 route change run 留下 source diff、check-mode、bounded apply、durable delivery receipt、post-verifier、rollback/no-write terminal 與 learning/writeback本 source-only 交付不代表 runtime route 已更動
Source snapshot 的 `runtime_not_applied` 是歷史產生狀態API 會另以目前 resolver 重算 runtime enforcement兩者不得互相覆寫。任何 route change 仍需同一 run 留下 source diff、check-mode、bounded apply、durable delivery receipt、post-verifier、rollback/no-write terminal 與 learning/writebackAPI/UI 綠燈本身不代表所有產品 delivery 已閉環