feat: T4 wave 10 – bottling quality, phenology and honey chain UI, Telegram link/receive and ops

- Bottling quality: water content above the legal limit (strict >) answers
  409 CONFIRMATION_REQUIRED bound to the measured value; prefill for jar
  size, best-before (shelfLifeMonths, month-end clamping) and water content;
  impossible dates give 400; water-content checks in src/common/quality.
- Frontend phenology: "Entwicklung melden" sheet, IndexedDB v4 queue,
  season header on the apiary page, confirmed revoke for all apiaries.
- Frontend honey chain: "Vorschlag aus …" hints with explicit take-over,
  prefill status note, movement ledger with withdraw/correct dialogs.
- Telegram: link tokens (hashed, single use), private-chat receiver with
  lease and offset CAS, bounded poison-update skip, Retry-After, pending
  deliveries skipped on disconnect; system API for deliveries and retry;
  worker-only secret wiring and manifest policy tests.
- ARCHITECTURE.md §7, §9, §10, §11.11–11.13, Annahmen 51–55.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
This commit is contained in:
Nick SzaunigandClaude Opus 5.5 committed 2026-10-14 22:47:17 +02:00
1 parent 16cc557462
commit fab7f7e12f
91 files changed
+8463 -104

No files matched your search

@@ -45,6 +45,9 @@ data:
# WEATHER_USER_AGENT_CONTACT: ""
# Telegram-Erinnerungen (optional). Name des Bots ohne @ (5-32 Zeichen:
# Buchstaben, Ziffern, Unterstrich) fuer den Deep Link; API und Worker lesen
# ihn aus dieser ConfigMap. Das Token steht NICHT hier, siehe Kommentar in
# secret.example.yaml (Secret apicore-telegram, nur Worker).
# TELEGRAM_BOT_USERNAME: "<bot-username>"
# ihn aus dieser ConfigMap. Leer = Telegram ist in der App nicht
# eingerichtet (Platzhalter; Runbook: Bot bei BotFather anlegen, ohne
# Gruppen (/setjoingroups) und ohne Webhook, je Umgebung ein eigener Bot,
# dann hier den Namen eintragen). Das Token steht NICHT hier, siehe Kommentar
# in secret.example.yaml (Secret apicore-telegram, nur Worker).
TELEGRAM_BOT_USERNAME: ""
+2 -1
View File
@@ -43,7 +43,8 @@ stringData:
# Telegram-Bot-Token (optional) - NICHT in diesem Secret, sondern im eigenen
# Secret apicore-telegram, das nur der Worker einbindet (Secret mit
# TELEGRAM_BOT_TOKEN, envFrom/secretKeyRef mit optional: true). Der API-Pod
# TELEGRAM_BOT_TOKEN; einzelne secretKeyRef-Variable (optional: true), kein
# envFrom, kein Volume). Der API-Pod
# darf es nicht einbinden. Der Inhaber legt den Bot bei BotFather und das
# Secret selbst an; ohne Token laeuft Telegram nicht, alles andere schon.
#