Skip to main content

Qapu AI Memory

Bu dosya, project-qapu icindeki kararlarin, servis varsayimlarinin ve acik islerin kaybolmamasini saglamak icin tutulur.

Kullanım Kurali

  • Her calisma sonunda "Bugun Alinan Kararlar" bolumu guncellenir.
  • Her yeni iste once bu dosya okunur.
  • Kesinlesen kararlar kisa ve net yazilir.
  • Gecici fikirler "Acik Konular" bolumune yazilir.
  • Her buyuk degisiklikte "Sistem Envanteri" bolumu da guncellenir.

Dokumantasyon Stili (Merkezi Kurallar)

Bu baslik, project-qapu altindaki dokuman yazim stilinin tek kaynak referansidir.

  • Servis index.mdx sayfalari davranis, sinir ve akis odakli yazilir.
  • Tablo kolon detayi servis index sayfalarinda verilmez; yalniz data-model sayfalarinda tutulur.
  • Servis index'te tablolar icin sadece "Ilgili Veri Modeli" referans linkleri verilir.
  • Link patikalari /projects/qapu/... route base'i ile yazilir ve kirik linke izin verilmez.
  • Topic (tasima kanali) ve event (payload semasi) ayrimi acik tutulur.
  • Servis dokuman seti mumkun oldugunda standart parcali yapida tutulur:
    • index.mdx
    • flow-chart.mdx
    • event-contracts.mdx
    • data-layer-write-order-chart.mdx
    • faq.mdx
  • Docusaurus uyumlu admonition yazimi kullanilir (:::info[Baslik] formu).
  • Ayni kural birden fazla memory dosyasina dagitilmaz; stil guncellemeleri bu baslikta yapilir.

Qapu Genel Haritasi

Servis Gruplari

  • Core Data Pipeline: redis, ingest, stream, calibration, raw-writer, synthesis, window
  • Decision and Execution: rule, action, communication
  • Platform and Integration: api, automation, egress, fota
  • Observability and Trust: observer, heartbeat, ledger, kafka

Data Model Domain Aileleri

  • kullanici-ve-yetki
  • mesajlasma-ve-bildirim
  • adres-ve-konum
  • sozluk
  • altyapi
  • cihaz-ve-detay
  • log
  • iot-altyapi
  • iot-iletisim
  • telemetri-ve-olcum
  • kural-ve-aksiyon
  • finans-uygulamasi
  • not-uygulamasi

Sistem Envanteri (Geriye Donuk)

Servisler

  • services/redis: Pipeline state ve buffer sozlesmesi
  • services/ingest: Cihaz paket girisi ve zincir tetikleme
  • services/stream: Parca birlestirme / finalize
  • services/calibration: Kalibrasyon uygulama katmani
  • services/raw-writer: Ham segment yazimi
  • services/synthesis: Turetilmis metrik hesaplama
  • services/window: Zaman penceresi hesaplari
  • services/rule: Kural degerlendirme ve trigger/reset
  • services/action: Aksiyon icrasi
  • services/communication: Cihaz komut iletimi
  • services/api: Mobil/Admin API katmani
  • services/automation: Zamanlanmis gorev ve komut talebi
  • services/egress: Dis sistem aktarimi
  • services/ftp (slug fota): Firmware dagitim katmani
  • services/observer: Hata/lag/retry gozlemi
  • services/heartbeat: SIM merkezli canlilik takibi
  • services/ledger: Cihaz bazli hash-zincirli denetim kaydi

Heartbeat Dokuman Seti

  • services/heartbeat/index.mdx
  • services/heartbeat/flow-chart.mdx
  • services/heartbeat/data-layer-write-order-chart.mdx
  • services/heartbeat/event-contracts.mdx
  • services/heartbeat/faq.mdx

Bugun Alinan Kararlar

2026-04-14

  • Data model icin ayri hafiza karti acildi: project-qapu/data-model/AI_MEMORY.md.
  • Variable structure icin ayri hafiza karti acildi: project-qapu/variable-structure/AI_MEMORY.md.
  • Blockchain servisi Ledger olarak yeniden adlandirildi: services/ledger.
  • Ledger modeli netlesti: per-device hash zinciri ledger_transactions tablosunda tutulacak.
  • Ledger payload karari: ingest sonrasi CPS normalize snapshot saklanacak; base + synthesis + window bloklari dahil olabilir.
  • Ledger tetikleme noktasi netlesti: window.ready.v1 sonrasi asenkron/eszamanli islenecek.
  • Ledger dokuman seti olusturuldu:
    • services/ledger/index.mdx
    • services/ledger/flow-chart.mdx
    • services/ledger/error-flow-chart.mdx
    • services/ledger/data-layer-write-order-chart.mdx
    • services/ledger/event-contracts.mdx
    • services/ledger/faq.mdx
  • Ledger event adlari netlesti: ledger.committed.v1, ledger.failed.v1.
  • Communication servisinin giris kaynaklari netlesti: Action Executor (action.execute.requested.v1), Automation (automation.command.requested.v1) ve API (api.command.requested.v1).
  • Communication komutlari her kaynaktan gelse de tek komut sozlugu device_commands uzerinden cozulur.
  • Heartbeat servisi SIM merkezli modele cevrildi.
  • Heartbeat hedef secimi: sim.sims icinde status='active' ve static_ip IS NOT NULL kayitlari.
  • Heartbeat yazim modeli:
    • Tum denemeler sim.heartbeats tablosuna yazilir.
    • Son durum ozeti sim.connectivity_state tablosuna upsert edilir.
  • Heartbeat dokuman seti tamamlandi:
    • services/heartbeat/index.mdx
    • services/heartbeat/flow-chart.mdx
    • services/heartbeat/data-layer-write-order-chart.mdx
    • services/heartbeat/event-contracts.mdx
    • services/heartbeat/faq.mdx
  • MQTT konusu icin karar:
    • Mevcut ingest'e direkt gommek yerine ileride ayri bir mqtt-ingest servisi dusunulecek.
  • Automation, Communication, Action, Egress ve Ledger index sayfalari stil kurallarina uygun sekilde sadelelestirildi.

2026-04-15

  • device_commands tablosuna is_system_only alani eklendi (DEFAULT: false).
  • Bu alan ile komutlarin API/kullanici kaynakli mi yoksa sadece sistem kaynakli mi calisabilecegi veri modelinden yonetilecek.
  • Kural netlestirildi: API kaynakli komut taleplerinde is_system_only=true kayitlar reddedilir; Automation/Action/internal akislar kullanabilir.
  • Sistem kaynakli islemler icin user_id=0 rezerv sistem kullanicisi kullanilacak; user_id=null deseni otomasyon tarafinda kaldirildi.
  • Egress servisi kapsamı netlesti: kurumsal musteri talepleri icin Qapu verisinin CRM/ERP/SCADA gibi dis sistemlere policy bazli aktarimi.
  • Egress tetikleme kaynagi olarak window.ready.v1 ve otomasyon olaylari (requested/completed/failed) benimsendi.
  • Egress payload'inin tek global formatta sabitlenmeyecegi; partner/policy bazli transform modeli uygulanacagi netlesti.
  • Egress hata politikasinda retry + DLQ + opsiyonel ilgili birime bildirim aksiyonu yaklasimi benimsendi.
  • Egress data-model yapisi iot-iletisim altinda netlestirildi: policy tanimlari egress_policies, delivery deneme/sonuc kayitlari egress_deliveries tablosunda tutulacak.
  • Egress topic standardi sadelelestirildi: cikis eventleri tek ana topic qapu.egress.events icinde tasinacak; qapu.dlq.egress yalniz DLQ icin ayrik kalacak.
  • Kafka servisinde topic kurgusu icin merkezi referans olusturuldu: services/kafka/topic-standard (servis bazli tek ana topic + servis DLQ modeli).
  • qapu.egress.events adi qapu.egress olarak guncellendi; tum servisler icin .events suffix kullanilmaz.
  • Kafka topic-standard dokumani tamamlandi ve production referans kalitesine ulasti (9.5/10).
  • Topic modeli kesinlesti: qapu.<service> (ana) + qapu.dlq.<service> (DLQ). Event turu topic adinda degil, payload event alaninda farklilasir.
  • Shared topicler netlesti: qapu.system.audit, qapu.system.alerts, qapu.integration.events, qapu.log.error, qapu.log.event.
  • DLQ+Log hibrit politikasi: per-servis DLQ replay/izolasyon icin; qapu.log.error merkezi gozlem icin (replay kaynagi degildir).
  • Retention sureleri standartlastirildi: ana=7g, DLQ=30g, log.error=14g, log.event=7g.
  • Compact topic politikasi: servis ana topiclerinde yasak; yalniz "son durum" senaryolari icin ve architecture review ile acilabilir.
  • Consumer Group formati: cg.qapu.<service>; rol farki icin suffix: cg.qapu.egress.dispatch.
  • Consumer lag mudahale sirasi: once consumer scale-out, sonra partition artisi (rebalance planli yapilmali).
  • PENDING: tum diger servis dokumanlari yeni qapu.<service> topic modeline gore capraz guncellenmeli.
  • schema_version alanı meta içinden kaldırıldı — event adındaki .vN yeterli; payload değişim breaking change ise event adını v2 yapar (producers her ikisini taşıyabilir).
  • Event envelope yapısı kesinleşti: event, meta (trace_id, producer_service, produced_at, process_ms), context, data, error.
  • trace_id UUID v7 format olarak standardize edildi. Ingest servisi oluşturur; downstream pass-through yapar. Config-driven eventlerde (rule.completed) yeni trace_id üretilir.
  • Envelope kataloğu tamamlandı: services/kafka/envelope/index.mdx (global standart, 41-event katalog) + 14 servis sayfası (ingest, stream, calibration, raw-writer, synthesis, window, rule, action, communication, automation, heartbeat, ledger, egress, fota).
  • Her servis envelope sayfası: Topic + DLQ, Her event için özet tablosu (topic, producer, consumer, kritiklik), JSON payload örneği, alan açıklamaları.
  • ingest.mdx tamamen yeniden yazıldı: 2 event → 4 event (accepted, failed, duplicate_detected, stuck_detected). Hata detayları eklendi (HTTP status, error codes: PARSE_ERROR, SCHEMA_VALIDATION_ERROR, AUTHENTICATION_ERROR, RAW_STORAGE_ERROR, REDIS_ERROR, PAYLOAD_SIZE_ERROR; retryable flag). Context standardizasyonu tamamlandı (8-field schema). Event adı device.ingest_duplicate_detected.v1ingest.duplicate_detected.v1 düzeltildi (device.* inventory events için ayrılmış). Message_type örneği "timed" ile standardize edildi.

2026-04-15 (Devamı) — Merkezi Envelope Konsolidasyonu

  • Servis Index Dosyaları Güncelleme: Tüm 14 servis index sayfası (ingest, stream, calibration, raw-writer, synthesis, window, rule, action, communication, automation, heartbeat, ledger, egress) merkezi services/kafka/envelope/ linklerine yönlendirildi.
    • Her servis index'inde "Event Envelopeları" veya "Event Detayları" info bloku güncellenmiştir.
    • Örnek format: :::info[{SERVICE} Event Envelopeları] ... sayfasına bakınız. **[{SERVICE} Event Envelopeları](/projects/qapu/services/kafka/envelope/{service})**
    • Türkçe karakter kuralları (Sözleşmeleri → Envelopeları) uygulandı.
  • Service-Level Event-Contracts Deprecation Planning:
    • 11 servisin event-contracts.mdx dosyası (services/{service}/event-contracts.mdx):
      • stream, calibration, raw-writer, synthesis, window, communication, automation, heartbeat, ledger, egress
    • 1 servisin events.mdx dosyası: rule
    • Şimdi merkezi kafka/envelope/ directory'de definitive hale gelmiştir.
    • Sonraki adım: Service-level event-contracts dosyalarını deprecation mesajıyla birlikte silmek veya archive etmek.
  • FOTA Servisi Notu: services/fota/index.mdx dosyası bulunmadığından güncellenmemiştir. FOTA (firmware OTA) servisi var ancak docusaurus index sayfası henüz oluşturulmamıştır.

kafka.mdx Senkronizasyon ve Güncelleme (2026-04-15):

  • ✅ Event Envelope Standardında schema_version kaldırıldı; UUID v7 format belirtildi
  • ✅ Context alanları 8-field standardına tamamlandı: device_id, raw_id, stream_id, device_time, stream_time, iccid, imei, firmware
  • ✅ Akış Özeti güncellenmiş topic adları (qapu.ingest, qapu.stream, vs., .raw/.ready suffixleri kaldırıldı)
  • ✅ Producer/Consumer Matrisi genişletildi: 14 topic + event adları; ingest 4 event mukayyedesi
  • ✅ Tüm örnek payloadlar güncellenmiş:
    • Ingest: 4 event örneği (accepted, failed, duplicate_detected, stuck_detected)
    • Stream, Calibration, Raw Writer, Synthesis, Window: Context tamamlandı, schema_version kaldırıldı
    • Failed Event Standard: Context tamamlandı, schema_version kaldırıldı
  • ✅ Topic adlandırması standardizasyonu: qapu.<service> (no .raw/.ready/.failed suffix) model uygulandı
  • ✅ Envelope-Kafka senkronizasyonu tamamlandı: her iki dokü tutarlı Observer Envelope Dosyası Oluşturma (2026-04-15 Devamı):
  • services/kafka/envelope/observer.mdx oluşturuldu: 5 event (buffer.duplicate, buffer.replaced, retry.requested, escalated, completed)
  • ✅ Observer Event Envelopeları index'e eklendi
  • ✅ Observer index.mdx güncellendi: merkezi envelope linkine yönlendirildi
  • ✅ Kafka Envelope toplam: 15 dosya (index + 14 servis + observer = 15 servis sayfası)

Geriye Donuk Stabil Kararlar

  • Qapu servisleri event tabanli zincirle ilerler; topic/event ayrimi korunur.
  • Link yapilarinda route base daima /projects/qapu/... ile verilmelidir.
  • Broken link olusmamasi icin servisler arasi referanslar slug bazli dogrulanir.
  • Yazi stili kurallari icin bu dosyadaki "Dokumantasyon Stili" basligi esas alinir.

Servis Notlari

Servis Bazli Ozet (2026-04-14)

  • ingest: CPS paket giris noktasi; CRC/duplicate kontrolu yapar, raw kayit olusturur ve pipeline'i tetikler.
  • stream: stream_id ureterek akisi kimliklendirir; IMEI/ICCID/firmware envanterini senkronize eder.
  • calibration: Ham olcumu kalibrasyon profiline gore normalize eder; cihaz profili global profile ustundur.
  • raw-writer: Kalibre olcumleri segment tablolara idempotent yazar; sentez yapmaz.
  • synthesis: Turetilmis metrikleri hesaplar; Redis buffer + typed sentez tablolarina yazar.
  • window: 1D/1W/1M pencere hesaplarini yapar; 1D incremental, 1W/1M donem sonu rollup.
  • rule: Kural gruplarini (all/any/not) degerlendirir; trigger/reset eventleri uretir.
  • action: Rule ciktisini kanal bazli aksiyona cevirir (push/email/webhook vb.); retry + DLQ uygular.
  • communication: Action Executor, Automation veya API kaynakli downlink komutlarini cihaza iletir; ACK/NACK, timeout ve idempotency yonetir.
  • automation: Zamanlanmis/manuel gorev tetikler; cakisma kontrolu ve at-least-once scheduling uygular.
  • heartbeat: Sabit IP'li aktif SIM'lere ping atar; sim.heartbeats + sim.connectivity_state uzerinden canlilik tutar.
  • egress: Veriyi dis sistemlere policy tabanli aktarir; transform, retry ve DLQ yonetir.
  • fota (services/ftp): Telit modemler icin FTP tabanli firmware dagitimi yapar.
  • observer: Stage bazli hata/lag/retry takibi yapar; pipeline saglik izleme ve replay orkestrasyonu saglar.
  • ledger: Cihaz bazli hash-zincirli denetim kaydi olusturur.
  • redis: Pipeline ortak state katmanidir; device_buffer sozlesmesi servisler arasi ownership sinirini belirler.
  • kafka: Servisler arasi event tasima omurgasidir; partition key genel olarak device_id bazlidir.

Servis Kritik Sinirlar

  • Ana hat sirali event zinciri: ingest -> stream -> calibration -> raw-writer -> synthesis -> window -> rule -> action/communication.
  • Yan prosesler: heartbeat, egress, observer, ledger.
  • Topic (tasima kanali) ile event (payload sozlesmesi) ayrimi korunur.
  • Kalici dogru kaynak DB'dir; Redis hizli state/ara katmandir.

Ingest (Detay Hafiza Karti)

  • Ana amac: Cihazdan gelen CPS uyumlu paketi hizli kabul etmek, kalici raw kayit + canonical Redis state yazip pipeline'i tetiklemek.
  • Protokol: HTTP girisi; cihazi bekletmeden kabul zinciri tamamlanirsa 200 OK.
  • Ingest ne yapar:
    • Parse + CPS schema dogrulama
    • DS28C device_id kontrolu (uzunluk, CRC8, family code)
    • Duplicate kontrolu
    • Raw payload'i DB'ye yazma
    • Canonical normalize state'i Redis device_buffer:{device_id} altina yazma
    • Kafka tetikleyici event uretme
  • Ingest ne yapmaz:
    • Sentez/window/rule hesabi
    • Business tablo hesaplari
  • Veri ayrimi karari:
    • DB: wire/raw payload (audit, replay, inceleme)
    • Redis: canonical isleme state'i
  • Ana tetikleyici event: ingest.accepted.v1 (topic: qapu.ingest.raw)
  • Hata eventi: ingest.failed.v1 (topic: qapu.ingest.failed)
  • Uyari eventleri: duplicate/stuck/flood tespitleri (qapu.ingest.warning)
  • Bilinen hata siniflari:
    • PARSE_ERROR
    • SCHEMA_VALIDATION_ERROR
    • AUTHENTICATION_ERROR
    • RAW_STORAGE_ERROR
    • REDIS_ERROR
    • PAYLOAD_SIZE_ERROR
  • Kritik bagimliliklar:
    • services/redis/device-buffer-contract
    • data-model/tables/telemetri-ve-olcum/raw_data
    • variable-structure/cps
  • Ownership siniri: Ingest device buffer'i baslatir; downstream servisler kendi stage alanlarini yazar.
  • Operasyon notu: Kafka full payload tasimaz; downstream veri kaynagi Redis device_buffer olur.

Stream (Detay Hafiza Karti)

  • Ana amac: qapu.ingest.raw eventinden sonra envanter kontrolu yapip streams kaydi acmak ve stream_id uretmek.
  • Ne yapar:
    • Redis device_buffer state'ini okur.
    • devices/modems/sims/firmwares envanterini kontrol eder, degisim varsa gunceller.
    • streams tablosuna insert eder, stream_id'yi Redis'e write-back yapar.
    • Basarida stream.created.v1, hatada stream.failed.v1 uretir.
  • Kritik kurallar:
    • Duplicate kontrolu Stream'de degil, Ingest'tedir.
    • message_type pakette yoksa reject edilmez; var ama sozlukte yoksa message_type_id=null + inceleme eventi.
    • stream_id DB sequence ile uretilir.
  • Audit eventleri:
    • device.inventory.created/updated.v1
    • modem.inventory.created.v1, device.modem.changed.v1
    • sim.inventory.created.v1, device.sim.changed.v1
    • device.firmware.recorded/changed.v1
  • Kritik bagimliliklar:
    • data-model/tables/telemetri-ve-olcum/streams
    • data-model/tables/cihaz-ve-detay/devices, firmwares
    • data-model/tables/iot-altyapi/modems, sims, sim_assignments

Calibration (Detay Hafiza Karti)

  • Ana amac: stream.created.v1 sonrasinda ham olcumleri CT + kalibrasyon kurallariyla normalize etmek.
  • Ne yapar:
    • CT ratio cozer (device detail Redis -> DB fallback).
    • Kural cozer (cihaz ozel -> global fallback).
    • Degisken bazli value_ct * gain + offset uygular.
    • Sonucu Redis buffers.measurements alanina in-place yazar.
    • Basarida calibration.ready.v1, hatada calibration.failed.v1 uretir.
  • Kritik kurallar:
    • Kural yoksa degisken pas gecilir.
    • CT donusumu once, diger kalibrasyonlar sonra uygulanir.
    • Kural secimi deterministic: priority ASC, esitlikte update_time en yeni.
    • ct_ratio bulunamazsa ct_ratio=1 fallback ile devam.
  • Kritik bagimliliklar:
    • data-model/tables/telemetri-ve-olcum/calibration_profiles
    • data-model/tables/telemetri-ve-olcum/calibration_assignments

Raw Writer (Detay Hafiza Karti)

  • Ana amac: calibration.ready.v1 sonrasinda kalibre/pass-through olcumleri ham segment tablolara kalici yazmak.
  • Ne yapar:
    • Redis buffers.measurements verisini segmentlere dagitir.
    • Voltage/current/power/energy + device/register/environment/water/location tablolarina yazar.
    • Segment disi skalar alanlari generic measurements tablosuna yazar.
    • Basarida raw.persisted.v1, hatada raw.failed.v1 uretir.
  • Kritik kurallar:
    • Yazim anahtari stream_id (idempotent upsert).
    • Transaction modeli all-or-nothing (segment yazimlari toplu commit/rollback).
    • Sentez katmani yalniz raw.persisted.v1 ile ilerler.
  • Kritik bagimliliklar:
    • data-model/tables/telemetri-ve-olcum/measurements_*
    • data-model/tables/telemetri-ve-olcum/measurements

Sentez / Synthesis (Detay Hafiza Karti)

  • Ana amac: raw.persisted.v1 sonrasinda turetilmis metrikleri hesaplayip Redis + synthesis tablolara yazmak.
  • Ne yapar:
    • Redis device_buffer okur; eksikse DB fallback ile girdiyi tamamlar.
    • Sentez kural snapshot cozer (cihaz ozel -> global).
    • Kurallari deterministic sirada calistirir.
    • buffers.synthesis patch yazar ve typed synthesis tablolarina upsert eder.
    • Basarida synth.ready.v1, hatada synth.failed.v1 uretir.
  • Kritik kurallar:
    • stream_id idempotency anahtaridir.
    • synth.ready.v1 sadece tum hedef tablo yazimlari tamamlaninca uretilir.
    • Retry/DLQ ayrimi retryable kararina gore yapilir.
  • Kritik bagimliliklar:
    • data-model/tables/telemetri-ve-olcum/synthesis_voltage/current/power/energy
    • data-model/tables/telemetri-ve-olcum/synthesis_rules, synthesis_assignments

Window / Windows (Detay Hafiza Karti)

  • Ana amac: synth.ready.v1 sonrasinda zaman pencerelerini (1D/1W/1M) guncellemek ve finalize etmek.
  • Ne yapar:
    • Redis synthesis agirlikli girdi okur; eksikse DB fallback kullanir.
    • windows_1d incremental yazar.
    • Donem kapanisinda windows_1d finalize eder, 1W/1M rollup yazar.
    • Basarida window.ready.v1, hatada window.failed.v1 uretir.
  • Kritik kurallar:
    • Grid hizalama zorunlu (WINDOW_GRID_MISALIGNED reddi).
    • Saatlik pencere uretilmez; minimum granulerlik 1D.
    • finalized=true pencere normal worker tarafinda degistirilmez; replay akisinda kontrollu guncellenir.

Rule (Detay Hafiza Karti)

  • Ana amac: window.ready.v1 sonrasinda kural gruplarini degerlendirip trigger/reset ve aksiyon cikisi uretmek.
  • Ne yapar:
    • Device buffer + Redis rule cache + DB fallback ile kural baglamini toplar.
    • Grup ve kural priority'sine gore degerlendirme yapar.
    • multi_trigger, cooldown, notify_on_reset davranislarini uygular.
    • device_rule_state gunceller, rule_events append eder.
    • Action Executor'a olay/aksiyon gonderir.
  • Kritik kurallar:
    • Match tipi: all/any/not.
    • Duration counter Redis'te tutulur.
    • Publish gating kaynagi measurements_register.publish alanidir.
  • Kritik bagimliliklar:
    • data-model/tables/kural-ve-aksiyon/*
    • data-model/tables/telemetri-ve-olcum/measurements_register

Observer (Detay Hafiza Karti)

  • Ana amac: ingest.accepted.v1 ile baslayan akisi disaridan izlemek; takilma/hata durumunda stage bazli kontrollu retry yapmak.
  • Ne yapar:
    • Stage success/failed eventlerini dinler.
    • Akisin kaldigi stage'i takip eder, basi degil kaldigi yerden retry ister.
    • Basarili bitiste performans metriklerini kaydeder.
    • completed veya permanent_failed durumda device_buffer temizler.
  • Kritik kurallar:
    • Hardcoded max retry: 3.
    • Consumer group izolasyonu: cg.qapu.observer.
    • Yeni stream geldiginde eski in-progress buffer stale ise replace edilebilir.
    • Rule asamasinda no-trigger da basarili terminal durum kabul edilir.
  • Kritik bagimliliklar:
    • data-model/tables/log/observer_pipeline_runs (onerilen performans tablosu)
    • Tum stage event kontratlari ve retry topicleri

Heartbeat

  • Durum modeli: online, degraded, offline.
  • Onerilen esikler:
    • heartbeat_period_ms = 60000
    • degraded_rtt_ms = 1500
    • offline_timeout_ms = 5000
    • offline_consecutive_fail_count = 3

Ingest / MQTT (Backlog)

  • MQTT cihazlari icin liveness takibi ping yerine broker tabanli sinyallerle yapilabilir:
    • Keepalive
    • LWT
    • App heartbeat topic
  • Olası mimari: mqtt-ingest -> normalize -> Kafka (mevcut ingest event kontrati ile uyumlu).

Rule / Data Model Linkleri

  • Rule servisinde data-model linkleri /projects/qapu/data-model/... prefix'i ile kullanilir.
  • measurement_register kanonik yolu: telemetri-ve-olcum/measurements_register.

Acik Konular

  • sim.sims dokumaninda static_ip kolonu resmi olarak eklenmeli mi?
  • Heartbeat alarm esikleri ortama gore farklilastirilacak mi?
  • sim_assignments filtrelemesi heartbeat seciminde zorunlu olacak mi?

Sonraki Adimlar

  • project-qapu/data-model/tables/iot-altyapi/sims.mdx dosyasina static_ip kolonunu dokumante et.
  • Heartbeat event kontratlarini Observer ile capraz kontrol et.
  • Gerekirse mqtt-ingest icin ayri servis taslak sayfasi ac.
  • Data-model degisikligi yapildiginda project-qapu/data-model/AI_MEMORY.md dosyasini da guncelle.
  • Variable-structure degisikligi yapildiginda project-qapu/variable-structure/AI_MEMORY.md dosyasini da guncelle.

Guncelleme Protokolu

  • Her yeni oturumda ilk adim: bu dosyanin tamamini oku.
  • Her biten iste su 3 satiri ekle:
    • Ne degisti?
    • Neden degisti?
    • Sonraki en dogru adim ne?
  • Karar geri alinmissa ilgili satiri silme; ustune "geri alindi" notu dus.