<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Engineering on Denomas Handbook</title><link>https://handbook.orneksirket.com/tags/engineering/</link><description>Recent content in Engineering on Denomas Handbook</description><generator>Hugo</generator><language>tr</language><atom:link href="https://handbook.orneksirket.com/tags/engineering/index.xml" rel="self" type="application/rss+xml"/><item><title>Açık Kaynak Stratejisi</title><link>https://handbook.orneksirket.com/engineering/open-source-strategy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://handbook.orneksirket.com/engineering/open-source-strategy/</guid><description>&lt;h1 id="açık-kaynak-stratejisi"&gt;Açık Kaynak Stratejisi&lt;/h1&gt;
&lt;p&gt;Denomas, açık kaynaklı projelerin üzerinde katma değer yaratan bir şirkettir. Açık kaynak ekosistemine aktif katkı sağlamak stratejik bir önceliktir.&lt;/p&gt;
&lt;h2 id="upstream-first-yaklaşım"&gt;Upstream-First Yaklaşım&lt;/h2&gt;
&lt;p&gt;Bir açık kaynaklı projede bug fix veya iyileştirme yaptığımızda:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Önce upstream'e gönder&lt;/strong&gt; — Değişikliği orijinal projeye PR/MR olarak gönder&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kabul edilene kadar fork'ta tut&lt;/strong&gt; — Upstream kabul edene kadar kendi fork'umuzda kullan&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Upstream kabul edince fork'u senkronize et&lt;/strong&gt; — Fork'taki özel patch'i kaldır&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Bu yaklaşım:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Toplulukla ilişkimizi güçlendirir&lt;/li&gt;
&lt;li&gt;Fork bakım yükünü azaltır&lt;/li&gt;
&lt;li&gt;Ürün kalitesini artırır&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="fork-kuralları"&gt;Fork Kuralları&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Durum&lt;/th&gt;
 &lt;th&gt;Aksiyon&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Bug fix&lt;/td&gt;
 &lt;td&gt;Upstream'e PR + fork'ta geçici patch&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Yeni özellik (genel)&lt;/td&gt;
 &lt;td&gt;Upstream'e PR&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Denomas'a özel entegrasyon&lt;/td&gt;
 &lt;td&gt;Sadece fork'ta, ayrı katman&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Güvenlik yaması&lt;/td&gt;
 &lt;td&gt;Upstream'e sorumlu ifşa + fork'ta patch&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="td-alert td-alert--md alert alert-info" role="alert"&gt;&lt;div class="td-alert-heading alert-heading" role="heading"&gt;ürünleşme yaklaşımı İlişkisi&lt;/div&gt;
 &lt;div class="td-alert-body"&gt;
 &lt;p&gt;Fork'lar, Mühendislik'nin COPY fazına karşılık gelir. COMBINE ve TRANSFORM fazları ise Denomas'a özel katma değeri temsil eder. Bu katmanlar upstream'e gönderilmez.&lt;/p&gt;</description></item><item><title>AI Agent Specialist</title><link>https://handbook.orneksirket.com/hiring/job-families/ai-agent-specialist/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://handbook.orneksirket.com/hiring/job-families/ai-agent-specialist/</guid><description>&lt;h1 id="ai-agent-specialist-yapay-zeka-asistanı-uzmanı"&gt;AI Agent Specialist (Yapay Zeka Asistanı Uzmanı)&lt;/h1&gt;
&lt;p&gt;AI Agent Specialist rolü, Denomas AI-Force ekosistemindeki Yapay Zeka Asistanlarının tasarımı, geliştirilmesi, optimizasyonu ve işletilmesinden sorumludur. Prompt mühendisliği, context yönetimi, çoklu asistan orkestrasyonu ve skill framework geliştirme bu rolün temel alanlarıdır.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="kariyer-seviyeleri-ve-denomas-yetkinlik-çerçevesi-gereksinimleri"&gt;Kariyer Seviyeleri ve Denomas Yetkinlik Çerçevesi Gereksinimleri&lt;/h2&gt;
&lt;h3 id="ai-agent-developer--yetkinlik-seviyesi-3"&gt;AI Agent Developer — Yetkinlik Seviyesi 3&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Yetkinlik&lt;/th&gt;
 &lt;th&gt;Seviye&lt;/th&gt;
 &lt;th&gt;Açıklama&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;PROG&lt;/td&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;td&gt;Asistan geliştirme&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;IRMG&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;Bilgi yönetimi&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;TEST&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;Asistan testi&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Temel Sorumluluklar:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Asistan SKILL.md dosyaları oluşturma ve bakım&lt;/li&gt;
&lt;li&gt;Prompt mühendisliği ve optimizasyon&lt;/li&gt;
&lt;li&gt;Asistan testleri yazma ve çalıştırma&lt;/li&gt;
&lt;li&gt;Context bütçesi izleme&lt;/li&gt;
&lt;li&gt;Mevcut skill'leri kullanarak asistan görev akışı kurma&lt;/li&gt;
&lt;li&gt;Handbook entegrasyonu&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Aranan Nitelikler:&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>AI-Force</title><link>https://handbook.orneksirket.com/engineering/ai-force/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://handbook.orneksirket.com/engineering/ai-force/</guid><description>&lt;h1 id="ai-force"&gt;AI-Force&lt;/h1&gt;
&lt;p&gt;AI-Force, Denomas mühendislik departmanının Yapay Zeka Asistanı geliştirme ve yönetim birimidir. BMad Ajan Framework üzerinde çalışan Yapay Zeka Asistanları, &lt;strong&gt;IECO (Integrated Ecosystem)&lt;/strong&gt; mimarisi ile deterministik görev akışları yürütür.&lt;/p&gt;
&lt;h2 id="birim-misyonu"&gt;Birim Misyonu&lt;/h2&gt;
&lt;p&gt;AI-Force'un temel misyonu: &lt;strong&gt;insan-asistan işbirliğini deterministik, ölçülebilir ve güvenli&lt;/strong&gt; hale getirmek. Asistanlar handbook'u tek gerçek kaynağı (single source of truth) olarak kullanır ve Human Gate protokolünü GitLab issue, MR, reviewer ve CI zinciri üzerinden uygular.&lt;/p&gt;
&lt;h2 id="alt-sayfalar"&gt;Alt Sayfalar&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Sayfa&lt;/th&gt;
 &lt;th&gt;Açıklama&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Yapay Zeka Asistanı Genel Bakış&lt;/td&gt;
 &lt;td&gt;Asistan türleri — Düşünürler, Yapanlar, Denetleyenler&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Skill Framework&lt;/td&gt;
 &lt;td&gt;175+ yetenek tanımı ve yükleme protokolü&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Yetkinlik Çerçevesi&lt;/td&gt;
 &lt;td&gt;Denomas Yetkinlik 9 tabanlı yetkinlik haritası&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Context Yönetimi&lt;/td&gt;
 &lt;td&gt;Token ekonomisi ve hafıza yönetimi&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="https://handbook.orneksirket.com/engineering/ai-force/ieco-overview/"&gt;IECO v6.0&lt;/a&gt;
&lt;/td&gt;
 &lt;td&gt;Bütünleşik Yapay Zeka Asistanı ekosistemi mimarisi&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Yapay Zeka Asistanı İş Akışı SOP&lt;/td&gt;
 &lt;td&gt;Standart operasyon prosedürü&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Yapay Zeka Asistanı Onboarding&lt;/td&gt;
 &lt;td&gt;Yeni Yapay Zeka Asistanı başlatma rehberi&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="td-alert td-alert--md alert alert-agent" role="alert"&gt;&lt;div class="td-alert-heading alert-heading" role="heading"&gt;AI Mühendisleri İçin&lt;/div&gt;
 &lt;div class="td-alert-body"&gt;
 &lt;p&gt;Bu bölüm Yapay Zeka Asistanı geliştirme ve yönetim süreçlerini kapsar. Yeni Yapay Zeka Asistanı başlatmadan önce &lt;a href="https://handbook.orneksirket.com/engineering/ai-force/agent-onboarding/"&gt;Yapay Zeka Asistanı Onboarding&lt;/a&gt;
 rehberini okuyun.&lt;/p&gt;</description></item><item><title>AI-Force Genel Bakış</title><link>https://handbook.orneksirket.com/engineering/ai-force/agent-overview/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://handbook.orneksirket.com/engineering/ai-force/agent-overview/</guid><description>&lt;h1 id="ai-force-genel-bakış"&gt;AI-Force Genel Bakış&lt;/h1&gt;
&lt;p&gt;AI-Force, Denomas'ın Yapay Zeka Asistanı ekosistemidir. İnsan çalışanlar ve Yapay Zeka Asistanları, aynı Denomas Yetkinlik Çerçevesi altında, aynı handbook kurallarına tabi olarak birlikte çalışır. Her Yapay Zeka Asistanı FreeIPA kimliği, yetkinlik profili ve tanımlı yetki sınırlarına sahiptir.&lt;/p&gt;
&lt;h2 id="vizyon"&gt;Vizyon&lt;/h2&gt;
&lt;div class="callout callout-info" role="alert"&gt;&lt;p&gt;Her rutin görevi otomatize et, her insanı yaratıcı işe odakla.&lt;/p&gt;

 &lt;/div&gt;&lt;h2 id="üç-asistan-kategorisi"&gt;Üç Asistan Kategorisi&lt;/h2&gt;
&lt;h3 id="1-düşünürler-thinkers"&gt;1. Düşünürler (Thinkers)&lt;/h3&gt;
&lt;p&gt;Analiz, planlama ve strateji oluşturma görevlerini üstlenir. Araştırma yapar, seçenek sunar ve karar süreçlerini destekler. Yetkinlik seviyesi PROG:4-7 arasındadır. Karar yetkisi öneri niteliğindedir; nihai karar insana aittir.&lt;/p&gt;</description></item><item><title>Altyapı</title><link>https://handbook.orneksirket.com/engineering/infrastructure/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://handbook.orneksirket.com/engineering/infrastructure/</guid><description>&lt;h1 id="altyapı"&gt;Altyapı&lt;/h1&gt;
&lt;p&gt;Denomas altyapı birimi, on-premise ve bulut ortamlarının hibrit yönetimini, izleme standartlarını ve sürekli erişilebilirliği sağlar.&lt;/p&gt;
&lt;h2 id="alt-sayfalar"&gt;Alt Sayfalar&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Sayfa&lt;/th&gt;
 &lt;th&gt;Açıklama&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="https://handbook.orneksirket.com/engineering/infrastructure/hybrid-cloud/"&gt;Hibrit Bulut&lt;/a&gt;
&lt;/td&gt;
 &lt;td&gt;On-premise + cloud strateji, Docker Compose ve Kubernetes geçiş planı&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="https://handbook.orneksirket.com/engineering/infrastructure/monitoring-standards/"&gt;İzleme Standartları&lt;/a&gt;
&lt;/td&gt;
 &lt;td&gt;Altyapı izleme standartları, Prometheus, Grafana, Zabbix&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="td-alert td-alert--md alert alert-info" role="alert"&gt;&lt;div class="td-alert-heading alert-heading" role="heading"&gt;Altyapı Standartları&lt;/div&gt;
 &lt;div class="td-alert-body"&gt;
 &lt;p&gt;Operasyonel altyapı standartları (sunucu hazırlama, yedekleme, felaket kurtarma) için Operasyonlar / Altyapı Standartları bölümüne bakın.&lt;/p&gt;
 &lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="ilgili-sayfalar"&gt;İlgili Sayfalar&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://handbook.orneksirket.com/engineering/architecture-principles/"&gt;Mimari Prensipler&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://handbook.orneksirket.com/engineering/monitoring-observability/"&gt;İzleme ve Gözlemlenebilirlik&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://handbook.orneksirket.com/engineering/ci-cd-pipeline/"&gt;CI/CD Pipeline&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Altyapı İzleme Standartları</title><link>https://handbook.orneksirket.com/engineering/infrastructure/monitoring-standards/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://handbook.orneksirket.com/engineering/infrastructure/monitoring-standards/</guid><description>&lt;h1 id="altyapı-izleme-standartları"&gt;Altyapı İzleme Standartları&lt;/h1&gt;
&lt;p&gt;Tüm Denomas altyapı bileşenlerinde aşağıdaki izleme standartları uygulanır.&lt;/p&gt;
&lt;h2 id="zorunlu-metrikler"&gt;Zorunlu Metrikler&lt;/h2&gt;
&lt;h3 id="sunucu-metrikleri"&gt;Sunucu Metrikleri&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Metrik&lt;/th&gt;
 &lt;th&gt;Eşik (Uyarı)&lt;/th&gt;
 &lt;th&gt;Eşik (Kritik)&lt;/th&gt;
 &lt;th&gt;Kontrol Sıklığı&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;CPU kullanımı&lt;/td&gt;
 &lt;td&gt;&amp;gt; %80&lt;/td&gt;
 &lt;td&gt;&amp;gt; %95&lt;/td&gt;
 &lt;td&gt;30 saniye&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Memory kullanımı&lt;/td&gt;
 &lt;td&gt;&amp;gt; %80&lt;/td&gt;
 &lt;td&gt;&amp;gt; %95&lt;/td&gt;
 &lt;td&gt;30 saniye&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Disk kullanımı&lt;/td&gt;
 &lt;td&gt;&amp;gt; %80&lt;/td&gt;
 &lt;td&gt;&amp;gt; %90&lt;/td&gt;
 &lt;td&gt;5 dakika&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Disk I/O wait&lt;/td&gt;
 &lt;td&gt;&amp;gt; %20&lt;/td&gt;
 &lt;td&gt;&amp;gt; %40&lt;/td&gt;
 &lt;td&gt;30 saniye&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Network throughput&lt;/td&gt;
 &lt;td&gt;Baseline + %50&lt;/td&gt;
 &lt;td&gt;Baseline + %100&lt;/td&gt;
 &lt;td&gt;30 saniye&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Uptime&lt;/td&gt;
 &lt;td&gt;-&lt;/td&gt;
 &lt;td&gt;Restart tespit&lt;/td&gt;
 &lt;td&gt;30 saniye&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="servis-metrikleri"&gt;Servis Metrikleri&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Metrik&lt;/th&gt;
 &lt;th&gt;Eşik (Uyarı)&lt;/th&gt;
 &lt;th&gt;Eşik (Kritik)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;HTTP 5xx oranı&lt;/td&gt;
 &lt;td&gt;&amp;gt; %1&lt;/td&gt;
 &lt;td&gt;&amp;gt; %5&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Yanıt süresi (p95)&lt;/td&gt;
 &lt;td&gt;&amp;gt; 1s&lt;/td&gt;
 &lt;td&gt;&amp;gt; 5s&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Kuyruk derinliği&lt;/td&gt;
 &lt;td&gt;&amp;gt; 1000&lt;/td&gt;
 &lt;td&gt;&amp;gt; 5000&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Bağlantı havuzu&lt;/td&gt;
 &lt;td&gt;&amp;gt; %80&lt;/td&gt;
 &lt;td&gt;&amp;gt; %95&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="veritabanı-metrikleri"&gt;Veritabanı Metrikleri&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Metrik&lt;/th&gt;
 &lt;th&gt;Eşik (Uyarı)&lt;/th&gt;
 &lt;th&gt;Eşik (Kritik)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Sorgu süresi (p95)&lt;/td&gt;
 &lt;td&gt;&amp;gt; 500ms&lt;/td&gt;
 &lt;td&gt;&amp;gt; 2s&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Bağlantı sayısı&lt;/td&gt;
 &lt;td&gt;&amp;gt; %80 max&lt;/td&gt;
 &lt;td&gt;&amp;gt; %95 max&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Replikasyon gecikmesi&lt;/td&gt;
 &lt;td&gt;&amp;gt; 5s&lt;/td&gt;
 &lt;td&gt;&amp;gt; 30s&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Deadlock sayısı&lt;/td&gt;
 &lt;td&gt;&amp;gt; 0&lt;/td&gt;
 &lt;td&gt;&amp;gt; 5/dakika&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="alarm-politikası"&gt;Alarm Politikası&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Flapping önleme&lt;/strong&gt; — En az 3 ardışık kontrol başarısız olmalı&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Eskalasyon&lt;/strong&gt; — P1 15 dk içinde yanıtlanmazsa yöneticiye eskalasyon&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Susturma&lt;/strong&gt; — Planlanan bakım penceresinde alarmlar susturulur&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Korelasyon&lt;/strong&gt; — İlişkili alarmlar gruplama ile tek bildirim&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="izleme-araçları"&gt;İzleme Araçları&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Katman&lt;/th&gt;
 &lt;th&gt;Araç&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Altyapı&lt;/td&gt;
 &lt;td&gt;Denomas Denetim Otomasyon (Zabbix)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Uygulama&lt;/td&gt;
 &lt;td&gt;Prometheus + Grafana&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Log&lt;/td&gt;
 &lt;td&gt;Loki&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;APM&lt;/td&gt;
 &lt;td&gt;OpenTelemetry + Jaeger&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="td-alert td-alert--md alert alert-agent" role="alert"&gt;&lt;div class="td-alert-heading alert-heading" role="heading"&gt;Ajan Protokolü&lt;/div&gt;
 &lt;div class="td-alert-body"&gt;
 &lt;p&gt;Yapay Zeka Asistanları alarm analizi ve on-triage görevlerinde bulunabilir. Alarm susturma yetkisi Denomas Yetkinlik PROG:4+ gerektirir.&lt;/p&gt;</description></item><item><title>CI/CD Pipeline</title><link>https://handbook.orneksirket.com/engineering/ci-cd-pipeline/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://handbook.orneksirket.com/engineering/ci-cd-pipeline/</guid><description>&lt;h1 id="cicd-pipeline"&gt;CI/CD Pipeline&lt;/h1&gt;
&lt;p&gt;Denomas, tüm projelerinde &lt;strong&gt;GitLab CI/CD&lt;/strong&gt; kullanır. Pipeline, kodun commit edilmesinden üretim ortamına deploy edilmesine kadar tüm aşamaları otomatize eder. CI/CD altyapısı &lt;code&gt;code.denomas.com&lt;/code&gt; ve &lt;code&gt;code.ilimteknoloji.com&lt;/code&gt; adreslerindeki self-hosted GitLab instance'ları üzerinde çalışır.&lt;/p&gt;
&lt;h2 id="pipeline-aşamaları"&gt;Pipeline Aşamaları&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌────────────────┐ ┌──────────────┐
│ lint │ → │ test │ → │ build │ → │ scan │ → │ deploy-staging │ → │ deploy-prod │
└──────────┘ └──────────┘ └──────────┘ └──────────┘ └────────────────┘ └──────────────┘
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="1-lint"&gt;1. lint&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Pre-commit hook doğrulaması (&lt;code&gt;pre-commit run --all-files&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Python: &lt;strong&gt;ruff&lt;/strong&gt; lint + &lt;strong&gt;ruff-format&lt;/strong&gt; kontrolü + &lt;strong&gt;mypy&lt;/strong&gt; tip kontrolü&lt;/li&gt;
&lt;li&gt;JavaScript: &lt;strong&gt;ESLint&lt;/strong&gt; (airbnb-base preset)&lt;/li&gt;
&lt;li&gt;YAML/JSON format kontrolü (&lt;strong&gt;yamllint&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;Ansible: &lt;strong&gt;ansible-lint&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Docker: &lt;strong&gt;hadolint&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Shell: &lt;strong&gt;shellcheck&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Docstring kontrolü (public fonksiyonlarda zorunlu)&lt;/li&gt;
&lt;li&gt;Conventional Commit format kontrolü&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="2-test"&gt;2. test&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Birim testleri&lt;/strong&gt; — &lt;code&gt;pytest --cov=src --cov-fail-under=80&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Entegrasyon testleri&lt;/strong&gt; — API endpoint testleri, veritabanı migration testleri&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Odoo testleri&lt;/strong&gt; — Odoo test framework ile modül testleri (&lt;code&gt;odoo-bin --test-enable&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ansible testleri&lt;/strong&gt; — &lt;code&gt;molecule test&lt;/code&gt; ile rol doğrulaması&lt;/li&gt;
&lt;li&gt;Kapsam raporu oluşturma (Cobertura formatı, GitLab MR'da görselleştirme)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="3-build"&gt;3. build&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Docker image oluşturma (multi-stage build)&lt;/li&gt;
&lt;li&gt;Semantic versiyon etiketi (&lt;code&gt;$CI_COMMIT_TAG&lt;/code&gt; veya &lt;code&gt;$CI_COMMIT_SHORT_SHA&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Docker image'ı GitLab Container Registry'ye push&lt;/li&gt;
&lt;li&gt;Ansible artifact'ları paketleme (roller + playbook'lar)&lt;/li&gt;
&lt;li&gt;Hugo site build (handbook ve website projeleri için)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="4-scan"&gt;4. scan&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SAST:&lt;/strong&gt; Bandit (Python), Semgrep (&lt;code&gt;p/owasp-top-ten&lt;/code&gt; ruleset), GitLab SAST template&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dependency Scan:&lt;/strong&gt; Trivy (container + dependency CVE taraması)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lisans Kontrolü:&lt;/strong&gt; Uyumsuz lisans tespiti (GPL kontrol)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Container Image Scan:&lt;/strong&gt; Trivy ile Docker image güvenlik taraması&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Secret Detection:&lt;/strong&gt; GitLab Secret Detection template&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="5-deploy-staging"&gt;5. deploy-staging&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Ansible playbook ile staging ortamına deploy (&lt;code&gt;ansible-playbook deploy-staging.yml&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Otomatik smoke testleri (&lt;code&gt;ansible-playbook smoke-test.yml&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Performans testi (&lt;strong&gt;k6&lt;/strong&gt; ile yük testi)&lt;/li&gt;
&lt;li&gt;Staging URL'i MR'a yorum olarak eklenir&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="6-deploy-prod"&gt;6. deploy-prod&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://handbook.orneksirket.com/engineering/release-process/"&gt;Dual-track deployment&lt;/a&gt;
 stratejisine göre&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Track 1 (SaaS):&lt;/strong&gt; &lt;code&gt;main&lt;/code&gt; merge sonrası &lt;code&gt;when: manual&lt;/code&gt; onay → canary deploy → kademeli rollout&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Track 2 (Self-Managed):&lt;/strong&gt; Release tag'i sonrası paketleme ve dağıtım&lt;/li&gt;
&lt;li&gt;Production deploy sonrası otomatik health check&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="tam-gitlab-ciyml-örneği"&gt;Tam &lt;code&gt;.gitlab-ci.yml&lt;/code&gt; Örneği&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# .gitlab-ci.yml — Denomas standart pipeline&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;image&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;python:3.10-slim&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;variables&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# Genel&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;PIP_CACHE_DIR&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;$CI_PROJECT_DIR/.cache/pip&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;PRE_COMMIT_HOME&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;$CI_PROJECT_DIR/.cache/pre-commit&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# Docker&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;DOCKER_IMAGE&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;$CI_REGISTRY_IMAGE&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;DOCKER_TAG&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;$CI_COMMIT_SHORT_SHA&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# Deployment&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;ANSIBLE_INVENTORY&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;inventory/$CI_ENVIRONMENT_NAME&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;ANSIBLE_FORCE_COLOR&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;true&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# SAST&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;SAST_EXCLUDED_PATHS&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;tests/,migrations/,docs/&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;SECURE_LOG_LEVEL&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;warn&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;cache&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;key&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;${CI_COMMIT_REF_SLUG}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;paths&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;.cache/pip&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;.cache/pre-commit&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;.venv/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;stages&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;lint&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;test&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;build&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;scan&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;deploy-staging&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;deploy-prod&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# ─── LINT ─────────────────────────────────────────────&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;lint:pre-commit&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;stage&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;lint&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;script&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;pip install pre-commit&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;pre-commit run --all-files&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;rules&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;if&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;$CI_PIPELINE_SOURCE == &amp;#34;merge_request_event&amp;#34;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;if&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;$CI_COMMIT_BRANCH == &amp;#34;develop&amp;#34;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;lint:mypy&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;stage&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;lint&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;script&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;pip install -r requirements-dev.txt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;mypy src/ --ignore-missing-imports&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;rules&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;if&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;$CI_PIPELINE_SOURCE == &amp;#34;merge_request_event&amp;#34;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;allow_failure&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# ─── TEST ─────────────────────────────────────────────&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;test:unit&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;stage&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;test&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;services&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;postgres:15-alpine&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;redis:7-alpine&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;variables&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;POSTGRES_DB&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;test_db&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;POSTGRES_USER&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;test_user&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;POSTGRES_PASSWORD&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;$CI_DB_PASSWORD&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;DATABASE_URL&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;postgresql://test_user:$CI_DB_PASSWORD@postgres:5432/test_db&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;REDIS_URL&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;redis://redis:6379/0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;script&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;pip install -r requirements-dev.txt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;pytest --cov=src --cov-report=xml --cov-report=term --cov-fail-under=80&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;artifacts&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;reports&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;coverage_report&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;coverage_format&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;cobertura&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;path&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;coverage.xml&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;expire_in&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;30&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;days&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;rules&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;if&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;$CI_PIPELINE_SOURCE == &amp;#34;merge_request_event&amp;#34;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;if&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;$CI_COMMIT_BRANCH == &amp;#34;develop&amp;#34;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;test:integration&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;stage&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;test&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;services&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;postgres:15-alpine&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;redis:7-alpine&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;script&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;pip install -r requirements-dev.txt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;pytest tests/integration/ -v --tb=short&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;rules&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;if&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;$CI_PIPELINE_SOURCE == &amp;#34;merge_request_event&amp;#34;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# ─── BUILD ────────────────────────────────────────────&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;build:docker&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;stage&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;build&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;image&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;docker:24.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;services&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;docker:24.0-dind&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;script&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;docker build -t $DOCKER_IMAGE:$DOCKER_TAG -t $DOCKER_IMAGE:latest .&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;docker push $DOCKER_IMAGE:$DOCKER_TAG&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;docker push $DOCKER_IMAGE:latest&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;rules&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;if&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;$CI_COMMIT_BRANCH == &amp;#34;develop&amp;#34;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;if&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;$CI_COMMIT_BRANCH == &amp;#34;main&amp;#34;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;if&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;$CI_COMMIT_TAG&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# ─── SCAN ─────────────────────────────────────────────&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;scan:bandit&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;stage&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;scan&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;script&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;pip install bandit[toml]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;bandit -c pyproject.toml -r src/ -f json -o bandit-report.json&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;artifacts&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;paths&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;bandit-report.json&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;expire_in&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;30&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;days&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;rules&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;if&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;$CI_PIPELINE_SOURCE == &amp;#34;merge_request_event&amp;#34;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;scan:semgrep&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;stage&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;scan&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;image&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;returntocorp/semgrep&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;script&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;semgrep --config=p/owasp-top-ten --config=p/python --json -o semgrep-report.json src/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;artifacts&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;paths&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;semgrep-report.json&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;expire_in&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;30&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;days&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;rules&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;if&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;$CI_PIPELINE_SOURCE == &amp;#34;merge_request_event&amp;#34;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;scan:trivy&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;stage&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;scan&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;image&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;aquasec/trivy:latest&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;entrypoint&lt;/span&gt;: [&lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;script&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;trivy image --exit-code 1 --severity HIGH,CRITICAL $DOCKER_IMAGE:$DOCKER_TAG&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;rules&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;if&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;$CI_COMMIT_BRANCH == &amp;#34;develop&amp;#34;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;if&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;$CI_COMMIT_BRANCH == &amp;#34;main&amp;#34;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;include&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;template&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;Security/SAST.gitlab-ci.yml&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;template&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;Security/Secret-Detection.gitlab-ci.yml&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# ─── DEPLOY STAGING ───────────────────────────────────&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;deploy_staging&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;stage&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;deploy-staging&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;image&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;ansible/ansible-runner:latest&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;script&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;ansible-playbook deploy-staging.yml -e &amp;#34;docker_tag=$DOCKER_TAG&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;ansible-playbook smoke-test.yml -e &amp;#34;environment=staging&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;environment&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;staging&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;url&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;https://staging.denomas.com&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;rules&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;if&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;$CI_COMMIT_BRANCH == &amp;#34;staging&amp;#34;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# ─── DEPLOY PRODUCTION ───────────────────────────────&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;deploy_canary&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;stage&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;deploy-prod&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;image&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;ansible/ansible-runner:latest&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;script&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;ansible-playbook deploy-canary.yml -e &amp;#34;docker_tag=$DOCKER_TAG canary_weight=5&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;environment&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;canary&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;url&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;https://canary.denomas.com&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;rules&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;if&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;$CI_COMMIT_BRANCH == &amp;#34;main&amp;#34;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;when&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;manual&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;deploy_production&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;stage&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;deploy-prod&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;image&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;ansible/ansible-runner:latest&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;script&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;ansible-playbook deploy-production.yml -e &amp;#34;docker_tag=$DOCKER_TAG&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;ansible-playbook smoke-test.yml -e &amp;#34;environment=production&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;environment&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;production&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;url&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;https://denomas.com&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;rules&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;if&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;$CI_COMMIT_BRANCH == &amp;#34;main&amp;#34;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;when&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;manual&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;needs&lt;/span&gt;: [&lt;span style="color:#e6db74"&gt;&amp;#34;deploy_canary&amp;#34;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="ortam-değişkenleri-cicd-variables"&gt;Ortam Değişkenleri (CI/CD Variables)&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Değişken&lt;/th&gt;
 &lt;th&gt;Tür&lt;/th&gt;
 &lt;th&gt;Kapsam&lt;/th&gt;
 &lt;th&gt;Açıklama&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;CI_REGISTRY_USER&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Protected&lt;/td&gt;
 &lt;td&gt;Tüm projeler&lt;/td&gt;
 &lt;td&gt;GitLab Container Registry kullanıcı&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;CI_REGISTRY_PASSWORD&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Protected, Masked&lt;/td&gt;
 &lt;td&gt;Tüm projeler&lt;/td&gt;
 &lt;td&gt;GitLab Container Registry parola&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;CI_DB_PASSWORD&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Protected, Masked&lt;/td&gt;
 &lt;td&gt;Tüm projeler&lt;/td&gt;
 &lt;td&gt;Test veritabanı parolası&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ANSIBLE_SSH_KEY&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Protected, File&lt;/td&gt;
 &lt;td&gt;Deploy projeleri&lt;/td&gt;
 &lt;td&gt;Deployment SSH anahtarı&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;SENTRY_DSN&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Protected&lt;/td&gt;
 &lt;td&gt;Production&lt;/td&gt;
 &lt;td&gt;Hata izleme DSN&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;GRAFANA_API_KEY&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Protected, Masked&lt;/td&gt;
 &lt;td&gt;Monitoring&lt;/td&gt;
 &lt;td&gt;Grafana dashboard API&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;VAULT_TOKEN&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Protected, Masked&lt;/td&gt;
 &lt;td&gt;Production&lt;/td&gt;
 &lt;td&gt;HashiCorp Vault erişim token&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="td-alert td-alert--md alert alert-caution" role="alert"&gt;&lt;div class="td-alert-heading alert-heading" role="heading"&gt;Sır Yönetimi&lt;/div&gt;
 &lt;div class="td-alert-body"&gt;
 &lt;p&gt;Hassas değerler &lt;strong&gt;asla&lt;/strong&gt; &lt;code&gt;.gitlab-ci.yml&lt;/code&gt; içinde açık metin olarak yazılmaz. Tüm sırlar GitLab CI/CD Variables'da &lt;strong&gt;Protected&lt;/strong&gt; ve &lt;strong&gt;Masked&lt;/strong&gt; olarak tanımlanır. Detaylar için &lt;a href="https://handbook.orneksirket.com/engineering/architecture-principles/"&gt;Mimari Prensipler — Zero Trust&lt;/a&gt;
 bölümüne bakınız.&lt;/p&gt;</description></item><item><title>Context Yönetimi</title><link>https://handbook.orneksirket.com/engineering/ai-force/context-management/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://handbook.orneksirket.com/engineering/ai-force/context-management/</guid><description>&lt;h1 id="context-yönetimi"&gt;Context Yönetimi&lt;/h1&gt;
&lt;p&gt;Denomas Yapay Zeka Asistanlarının context penceresi yönetim stratejilerini tanımlayan belgedir. Token ekonomisi prensipleri, progressive disclosure katmanları (llms.txt'den spesifik sayfalara kadar), Informed Walk protokolü, SOP bağımlılık tabanlı context yükleme, hafıza kalıcılığı (PARA yapısı, üç katmanlı hafıza sistemi, QMD Recall) ve bilgi grafı navigasyonu konularını kapsar.&lt;/p&gt;
&lt;div class="td-alert td-alert--md alert alert-info" role="alert"&gt;&lt;div class="td-alert-heading alert-heading" role="heading"&gt;İç Doküman&lt;/div&gt;
 &lt;div class="td-alert-body"&gt;
 &lt;p&gt;Bu konunun detayları iç handbook'ta yer almaktadır. Tam içerik için &lt;a href="https://internal.handbook.denomas.com"&gt;internal.handbook.denomas.com&lt;/a&gt;
 adresine bakınız.&lt;/p&gt;
 &lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="ilgili-sayfalar"&gt;İlgili Sayfalar&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://handbook.orneksirket.com/engineering/ai-force/agent-overview/"&gt;AI-Force Genel Bakış&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://handbook.orneksirket.com/engineering/ai-force/skill-framework/"&gt;Skill Framework&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://handbook.orneksirket.com/engineering/ai-force/yetkinlik-cercevesi/"&gt;Yetkinlik Çerçevesi&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://handbook.orneksirket.com/engineering/ai-force/ieco-overview/"&gt;IECO v6.0&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Data Engineer</title><link>https://handbook.orneksirket.com/hiring/job-families/data-engineer/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://handbook.orneksirket.com/hiring/job-families/data-engineer/</guid><description>&lt;h1 id="data-engineer-veri-mühendisi"&gt;Data Engineer (Veri Mühendisi)&lt;/h1&gt;
&lt;p&gt;Veri mühendisleri, Denomas ürünlerinin veri altyapısını tasarlar ve yönetir. ETL süreçleri, veri pipeline'ları, veri ambarı ve analitik altyapıdan sorumludur.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="kullanılan-araçlar"&gt;Kullanılan Araçlar&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Araç&lt;/th&gt;
 &lt;th&gt;Kullanım Alanı&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;PostgreSQL&lt;/td&gt;
 &lt;td&gt;İlişkisel veri tabanı&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Wazuh&lt;/td&gt;
 &lt;td&gt;Log toplama, arama ve görselleştirme&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Apache Airflow&lt;/td&gt;
 &lt;td&gt;Pipeline orkestrasyon&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Python&lt;/td&gt;
 &lt;td&gt;ETL betikleri ve veri işleme&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Redis&lt;/td&gt;
 &lt;td&gt;Önbellekleme ve kuyruk yönetimi&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Git&lt;/td&gt;
 &lt;td&gt;Versiyon kontrolü&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="kariyer-seviyeleri-ve-denomas-yetkinlik-çerçevesi-gereksinimleri"&gt;Kariyer Seviyeleri ve Denomas Yetkinlik Çerçevesi Gereksinimleri&lt;/h2&gt;
&lt;h3 id="junior-data-engineer--yetkinlik-seviyesi-2"&gt;Junior Data Engineer — Yetkinlik Seviyesi 2&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Denomas Yetkinlik Çerçevesi Gereksinimleri:&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>DevOps Engineer</title><link>https://handbook.orneksirket.com/hiring/job-families/devops-engineer/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://handbook.orneksirket.com/hiring/job-families/devops-engineer/</guid><description>&lt;h1 id="devops-engineer-devops-mühendisi"&gt;DevOps Engineer (DevOps Mühendisi)&lt;/h1&gt;
&lt;p&gt;DevOps mühendisleri, yazılım teslimat süreçlerinin otomasyonunu, altyapı yönetimini, izleme ve dağıtım stratejilerini yönetir. Geliştirme ve operasyon arasındaki köprüyü kurar.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="kariyer-seviyeleri-ve-denomas-yetkinlik-çerçevesi-gereksinimleri"&gt;Kariyer Seviyeleri ve Denomas Yetkinlik Çerçevesi Gereksinimleri&lt;/h2&gt;
&lt;h3 id="junior-devops-engineer--yetkinlik-seviyesi-2"&gt;Junior DevOps Engineer — Yetkinlik Seviyesi 2&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Yetkinlik&lt;/th&gt;
 &lt;th&gt;Seviye&lt;/th&gt;
 &lt;th&gt;Açıklama&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;ITOP&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;Temel IT operasyonları&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;CFMG&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;Konfigürasyon yönetimi temelleri&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;PROG&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;Temel scripting&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Temel Sorumluluklar:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CI/CD pipeline'larının izlenmesi ve temel bakım&lt;/li&gt;
&lt;li&gt;Mevcut otomasyon scriptlerinin çalıştırılması&lt;/li&gt;
&lt;li&gt;Log izleme ve alarm yönetimi&lt;/li&gt;
&lt;li&gt;Dokümantasyon takibi&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Aranan Nitelikler:&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Hibrit Bulut Stratejisi</title><link>https://handbook.orneksirket.com/engineering/infrastructure/hybrid-cloud/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://handbook.orneksirket.com/engineering/infrastructure/hybrid-cloud/</guid><description>&lt;h1 id="hibrit-bulut-stratejisi"&gt;Hibrit Bulut Stratejisi&lt;/h1&gt;
&lt;p&gt;Denomas, müşterilerine hem on-premise hem de cloud ortamlarında hizmet verir. Hibrit bulut stratejimiz, veri egemenliğini korurken bulutun esnekliğinden yararlanmayı amaçlar.&lt;/p&gt;
&lt;h2 id="strateji"&gt;Strateji&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;┌─────────────────────────────────────────┐
│ Denomas Cloud (SaaS) │
│ Track 1 — Sürekli deployment │
│ denomas.com üzerinden │
├─────────────────────────────────────────┤
│ Müşteri On-Premise (Self-Managed) │
│ Track 2 — Aylık release │
│ Ansible ile otomatik kurulum │
├─────────────────────────────────────────┤
│ Hibrit (Karma) │
│ Kontrol düzlemi cloud + veri on-prem │
└─────────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="deployment-modelleri"&gt;Deployment Modelleri&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Model&lt;/th&gt;
 &lt;th&gt;Kullanım Alanı&lt;/th&gt;
 &lt;th&gt;Örnek&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Full SaaS&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;KOBİ'ler, hızlı başlangıç&lt;/td&gt;
 &lt;td&gt;Denomas AIO Community&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Self-Managed&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Kamu, finans, telekom&lt;/td&gt;
 &lt;td&gt;Denomas Denetim Otomasyon Enterprise&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Hibrit&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Hassas veri + cloud esneklik&lt;/td&gt;
 &lt;td&gt;Denomas Cloud&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="veri-egemenlik-prensipleri"&gt;Veri Egemenlik Prensipleri&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Müşteri verileri, müşterinin seçtiği lokasyonda kalır&lt;/li&gt;
&lt;li&gt;KVKK ve GDPR uyumu tüm modellerde sağlanır&lt;/li&gt;
&lt;li&gt;Veri sınıflandırması: Public, Internal, Confidential, Restricted&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="altyapı-otomasyon"&gt;Altyapı Otomasyon&lt;/h2&gt;
&lt;p&gt;Tüm ortamlar Denomas Yönetim Otomasyon ile yönetilir:&lt;/p&gt;</description></item><item><title>IECO v6.0 Genel Bakış</title><link>https://handbook.orneksirket.com/engineering/ai-force/ieco-overview/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://handbook.orneksirket.com/engineering/ai-force/ieco-overview/</guid><description>&lt;h1 id="ieco-v60-genel-bakış"&gt;IECO v6.0 Genel Bakış&lt;/h1&gt;
&lt;p&gt;IECO (Intelligent Enterprise Cognitive Ontology), Denomas'ın tescilli &lt;strong&gt;domain-agnostic kurumsal işletim sistemidir&lt;/strong&gt;. Geleneksel şablon doldurma veya doküman yönetimi yaklaşımlarından farklı olarak, organizasyonel bilgiyi &lt;strong&gt;atomik birimler&lt;/strong&gt; halinde bir bilgi grafında modeller ve bu atomlardan çok eksenli semantik projeksiyon ile sınırsız çıktı türü üretir.&lt;/p&gt;
&lt;h2 id="ieco-nedir"&gt;IECO Nedir?&lt;/h2&gt;
&lt;p&gt;IECO, kurumsal bilgiyi bir &lt;strong&gt;işletim sistemi çekirdeği&lt;/strong&gt; gibi ele alır. Şablon değil, &lt;strong&gt;bilgi grafı&lt;/strong&gt; kullanır. Tek bir bilgi atomu; teklif, sözleşme, web sayfası, katalog, teknik belge, satış el kitabı veya sipariş formuna dönüşebilir.&lt;/p&gt;</description></item><item><title>İzleme ve Gözlemlenebilirlik</title><link>https://handbook.orneksirket.com/engineering/monitoring-observability/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://handbook.orneksirket.com/engineering/monitoring-observability/</guid><description>&lt;h1 id="izleme-ve-gözlemlenebilirlik"&gt;İzleme ve Gözlemlenebilirlik&lt;/h1&gt;
&lt;p&gt;Denomas'ta her sistem gözlemlenebilir olmalıdır. Üç temel sinyal üzerinden izleme yaparız: metrikler, loglar ve tracing.&lt;/p&gt;
&lt;h2 id="izleme-yığını"&gt;İzleme Yığını&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Katman&lt;/th&gt;
 &lt;th&gt;Araç&lt;/th&gt;
 &lt;th&gt;Amaç&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Metrikler&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Prometheus + VictoriaMetrics&lt;/td&gt;
 &lt;td&gt;Zaman serisi metrik toplama&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Görselleştirme&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Grafana&lt;/td&gt;
 &lt;td&gt;Dashboard ve alerting&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Loglama&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Loki&lt;/td&gt;
 &lt;td&gt;Merkezi log toplama&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Tracing&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;OpenTelemetry + Jaeger&lt;/td&gt;
 &lt;td&gt;Dağıtık izleme&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Hata İzleme&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Sentry&lt;/td&gt;
 &lt;td&gt;Uygulama hata yakalama&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Altyapı İzleme&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Denomas Denetim Otomasyon (Zabbix)&lt;/td&gt;
 &lt;td&gt;IT/OT izleme&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="apdex-skoru"&gt;Apdex Skoru&lt;/h2&gt;
&lt;p&gt;Apdex (Application Performance Index), kullanıcı memnuniyetini ölçen standart bir metriktir.&lt;/p&gt;</description></item><item><title>Kalite Mühendisliği</title><link>https://handbook.orneksirket.com/engineering/quality-engineering/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://handbook.orneksirket.com/engineering/quality-engineering/</guid><description>&lt;h1 id="kalite-mühendisliği"&gt;Kalite Mühendisliği&lt;/h1&gt;
&lt;p&gt;Kalite, Denomas'ta ayrı bir aşama değildir. Geliştirme sürecinin içine gömülü bir disiplindir.&lt;/p&gt;
&lt;h2 id="test-piramidi"&gt;Test Piramidi&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt; ╱ ╲
 ╱ E2E ╲ — Az ama kritik
 ╱───────╲
 ╱ Enteg. ╲ — Servisler arası
 ╱─────────────╲
 ╱ Birim Testleri ╲ — Çok ve hızlı
 ╱─────────────────────╲
&lt;/code&gt;&lt;/pre&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Seviye&lt;/th&gt;
 &lt;th&gt;Hedef Kapsam&lt;/th&gt;
 &lt;th&gt;Çalıştırma&lt;/th&gt;
 &lt;th&gt;Araç&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Birim&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;%80+&lt;/td&gt;
 &lt;td&gt;Her commit&lt;/td&gt;
 &lt;td&gt;pytest, jest&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Entegrasyon&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Kritik akışlar&lt;/td&gt;
 &lt;td&gt;Her MR&lt;/td&gt;
 &lt;td&gt;pytest + testcontainers&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;E2E&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Kullanıcı senaryoları&lt;/td&gt;
 &lt;td&gt;Her release&lt;/td&gt;
 &lt;td&gt;Playwright, Cypress&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Performans&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Kritik endpoint'ler&lt;/td&gt;
 &lt;td&gt;Haftalık&lt;/td&gt;
 &lt;td&gt;k6&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="hata-bütçesi-error-budget"&gt;Hata Bütçesi (Error Budget)&lt;/h2&gt;
&lt;p&gt;Her üretim servisi için aylık hata bütçesi tanımlanır:&lt;/p&gt;</description></item><item><title>Kod İnceleme</title><link>https://handbook.orneksirket.com/engineering/code-review/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://handbook.orneksirket.com/engineering/code-review/</guid><description>&lt;h1 id="kod-inceleme"&gt;Kod İnceleme&lt;/h1&gt;
&lt;p&gt;Kod inceleme, Denomas mühendislik kültürünün temel taşlarından biridir. Her değişiklik, merge edilmeden önce en az bir takım arkadaşının incelemesinden geçer.&lt;/p&gt;
&lt;h2 id="ilkeler"&gt;İlkeler&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Her MR Review Alır&lt;/strong&gt; — İstisna yoktur, tek satırlık değişiklikler bile&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Yapıcı Geri Bildirim&lt;/strong&gt; — Eleştiri koda yöneliktir, kişiye değil&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Öğrenme Aracı&lt;/strong&gt; — Review, hem yazar hem reviewer için öğrenme fırsatıdır&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Otomasyon Desteği&lt;/strong&gt; — Linter ve testler review öncesi otomatik çalışır&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="merge-request-standartları"&gt;Merge Request Standartları&lt;/h2&gt;
&lt;p&gt;Her MR şu bilgileri içermelidir:&lt;/p&gt;</description></item><item><title>Kod Kalitesi</title><link>https://handbook.orneksirket.com/engineering/code-quality/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://handbook.orneksirket.com/engineering/code-quality/</guid><description>&lt;h1 id="kod-kalitesi"&gt;Kod Kalitesi&lt;/h1&gt;
&lt;p&gt;Denomas'ta kod kalitesi, geliştirme sürecinin ayrılmaz bir parçasıdır. Her commit, pre-commit hook'larından geçer; her MR, &lt;strong&gt;Otomatik Kalite Kapısı&lt;/strong&gt;ndan geçmek zorundadır. Bu kapı, bilinen güvenlik açıklarının (SQL injection, XSS vb.) koda girmesini en başından engeller.&lt;/p&gt;
&lt;h2 id="temel-kural"&gt;Temel Kural&lt;/h2&gt;
&lt;div class="callout callout-info" role="alert"&gt;&lt;p&gt;&lt;strong&gt;Her commit pre-commit hook'larından geçmelidir. İstisnasız.&lt;/strong&gt;&lt;/p&gt;

 &lt;/div&gt;&lt;h2 id="pre-commit-hooks"&gt;Pre-commit Hooks&lt;/h2&gt;
&lt;p&gt;Tüm projelerde aşağıdaki pre-commit hook'ları aktiftir:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# .pre-commit-config.yaml&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;repos&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# Genel dosya kontrolleri&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;repo&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;https://github.com/pre-commit/pre-commit-hooks&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;rev&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;v4.6.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;hooks&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;id&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;trailing-whitespace&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;id&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;end-of-file-fixer&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;id&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;check-yaml&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;args&lt;/span&gt;: [&lt;span style="color:#e6db74"&gt;&amp;#39;--allow-multiple-documents&amp;#39;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;id&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;check-json&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;id&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;check-merge-conflict&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;id&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;detect-private-key&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;id&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;check-added-large-files&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;args&lt;/span&gt;: [&lt;span style="color:#e6db74"&gt;&amp;#39;--maxkb=1024&amp;#39;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;id&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;no&lt;/span&gt;-&lt;span style="color:#ae81ff"&gt;commit-to-branch&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;args&lt;/span&gt;: [&lt;span style="color:#e6db74"&gt;&amp;#39;--branch&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;main&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;--branch&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;master&amp;#39;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# Python: Ruff (flake8 + isort + pyupgrade birleşimi)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;repo&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;https://github.com/astral-sh/ruff-pre-commit&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;rev&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;v0.4.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;hooks&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;id&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;ruff&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;args&lt;/span&gt;: [&lt;span style="color:#e6db74"&gt;&amp;#39;--fix&amp;#39;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;id&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;ruff-format&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# Python: Black (formatter)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;repo&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;https://github.com/psf/black&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;rev&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;24.4.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;hooks&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;id&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;black&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;args&lt;/span&gt;: [&lt;span style="color:#e6db74"&gt;&amp;#39;--line-length=120&amp;#39;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# Python: MyPy (tip kontrolü)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;repo&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;https://github.com/pre-commit/mirrors-mypy&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;rev&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;v1.10.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;hooks&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;id&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;mypy&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;additional_dependencies&lt;/span&gt;: [&lt;span style="color:#e6db74"&gt;&amp;#39;types-requests&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;types-redis&amp;#39;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;args&lt;/span&gt;: [&lt;span style="color:#e6db74"&gt;&amp;#39;--ignore-missing-imports&amp;#39;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# Python: Bandit (güvenlik taraması)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;repo&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;https://github.com/PyCQA/bandit&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;rev&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;1.7.8&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;hooks&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;id&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;bandit&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;args&lt;/span&gt;: [&lt;span style="color:#e6db74"&gt;&amp;#39;-c&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;pyproject.toml&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;-r&amp;#39;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;additional_dependencies&lt;/span&gt;: [&lt;span style="color:#e6db74"&gt;&amp;#39;bandit[toml]&amp;#39;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# Ansible&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;repo&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;https://github.com/ansible/ansible-lint&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;rev&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;v24.2.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;hooks&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;id&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;ansible-lint&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# Docker&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;repo&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;https://github.com/hadolint/hadolint&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;rev&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;v2.12.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;hooks&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;id&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;hadolint&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# Shell&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;repo&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;https://github.com/shellcheck-py/shellcheck-py&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;rev&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;v0.10.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;hooks&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;id&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;shellcheck&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# Commit message format (Conventional Commits)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;repo&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;https://github.com/compilerla/conventional-pre-commit&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;rev&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;v3.2.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;hooks&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;id&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;conventional-pre-commit&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;stages&lt;/span&gt;: [&lt;span style="color:#ae81ff"&gt;commit-msg]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;args&lt;/span&gt;: [&lt;span style="color:#e6db74"&gt;&amp;#39;feat&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;fix&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;docs&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;style&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;refactor&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;test&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;chore&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;ci&amp;#39;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="td-alert td-alert--md alert alert-warning" role="alert"&gt;&lt;div class="td-alert-heading alert-heading" role="heading"&gt;Doğrudan Ana Dala Commit Yasak&lt;/div&gt;
 &lt;div class="td-alert-body"&gt;
 &lt;p&gt;&lt;code&gt;no-commit-to-branch&lt;/code&gt; hook'u, doğrudan &lt;code&gt;main&lt;/code&gt; veya &lt;code&gt;master&lt;/code&gt; dalına commit yapılmasını engeller. Tüm değişiklikler feature branch üzerinden MR ile gelmelidir.&lt;/p&gt;</description></item><item><title>Mimari Prensipler</title><link>https://handbook.orneksirket.com/engineering/architecture-principles/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://handbook.orneksirket.com/engineering/architecture-principles/</guid><description>&lt;h1 id="mimari-prensipler"&gt;Mimari Prensipler&lt;/h1&gt;
&lt;p&gt;Denomas'ın tüm ürünleri ve altyapısı aşağıdaki mimari prensipler üzerine inşa edilir. Mimari, &lt;strong&gt;&amp;quot;Önce Teknik Temel (Foundation First)&amp;quot;&lt;/strong&gt; felsefesine dayanır. Müşteriye sunulacak özellikler geliştirilmeden önce tüm geliştirme ve otomasyon altyapısı mükemmelleştirilir.&lt;/p&gt;
&lt;h2 id="teknoloji-yığını-technology-stack"&gt;Teknoloji Yığını (Technology Stack)&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Bileşen&lt;/th&gt;
 &lt;th&gt;Teknoloji&lt;/th&gt;
 &lt;th&gt;Versiyon / Detay&lt;/th&gt;
 &lt;th&gt;Gerekçe&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Ana Platform&lt;/td&gt;
 &lt;td&gt;Odoo&lt;/td&gt;
 &lt;td&gt;18.0+ (Python 3.10+)&lt;/td&gt;
 &lt;td&gt;CRM, satış, faturalandırma, muhasebe için zengin özellik seti&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Backend Framework&lt;/td&gt;
 &lt;td&gt;Python / Django&lt;/td&gt;
 &lt;td&gt;4.2+ LTS&lt;/td&gt;
 &lt;td&gt;Mikroservisler ve harici API'ler için&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Mikroservisler&lt;/td&gt;
 &lt;td&gt;Python (FastAPI)&lt;/td&gt;
 &lt;td&gt;0.100+&lt;/td&gt;
 &lt;td&gt;Yüksek performanslı API güdümlü servisler&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Veritabanı&lt;/td&gt;
 &lt;td&gt;PostgreSQL&lt;/td&gt;
 &lt;td&gt;15+&lt;/td&gt;
 &lt;td&gt;Nesne-ilişkisel, ölçeklenebilir, güvenilir&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Önbellek / Kuyruk&lt;/td&gt;
 &lt;td&gt;Redis&lt;/td&gt;
 &lt;td&gt;7+&lt;/td&gt;
 &lt;td&gt;Session, cache, Celery broker&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Web Sunucu&lt;/td&gt;
 &lt;td&gt;Caddy&lt;/td&gt;
 &lt;td&gt;Reverse proxy, SSL termination, load balancing&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Kaynak Kod Yönetimi&lt;/td&gt;
 &lt;td&gt;GitLab (Self-Hosted)&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;code.denomas.com&lt;/code&gt; ve &lt;code&gt;code.ilimteknoloji.com&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;CI/CD&lt;/td&gt;
 &lt;td&gt;GitLab CI/CD&lt;/td&gt;
 &lt;td&gt;Mevcut GitLab Runner'lar ile entegre pipeline&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Ön Yüz (Frontend)&lt;/td&gt;
 &lt;td&gt;Odoo Owl JS Framework&lt;/td&gt;
 &lt;td&gt;Odoo ekosistemi içinde sorunsuz entegrasyon&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Bilişsel Altyapı&lt;/td&gt;
 &lt;td&gt;Node.js tabanlı MCP Sunucuları&lt;/td&gt;
 &lt;td&gt;Model Context Protocol (Yapay Zeka Asistanı erişimi)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Konteynerizasyon&lt;/td&gt;
 &lt;td&gt;Docker, Docker Compose&lt;/td&gt;
 &lt;td&gt;Tutarlı, izole ve tekrarlanabilir ortamlar&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;IaC&lt;/td&gt;
 &lt;td&gt;Ansible / Terraform&lt;/td&gt;
 &lt;td&gt;Konfigürasyon yönetimi ve cloud provizyon&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;İzleme&lt;/td&gt;
 &lt;td&gt;Prometheus + Grafana&lt;/td&gt;
 &lt;td&gt;Metrik toplama ve görselleştirme&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Loglama&lt;/td&gt;
 &lt;td&gt;Wazuh&lt;/td&gt;
 &lt;td&gt;Merkezi log yönetimi&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="1-api-first"&gt;1. API-First&lt;/h2&gt;
&lt;p&gt;Her ürün ve hizmet, önce API olarak tasarlanır. UI, API'nin bir tüketicisidir.&lt;/p&gt;</description></item><item><title>Mühendislik</title><link>https://handbook.orneksirket.com/engineering/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://handbook.orneksirket.com/engineering/</guid><description>&lt;h1 id="mühendislik"&gt;Mühendislik&lt;/h1&gt;
&lt;p&gt;Denomas Mühendislik departmanı, açık kaynak çekirdekleri kurumsal ürünlere dönüştüren çekirdek birimdir. Geniş bir ürün portföyü oluşturur ve tüm mühendislik süreçleri &lt;strong&gt;12 katmanlı (12-Tier) deterministik dizin yapısı&lt;/strong&gt; üzerinde işler. Temel felsefemiz &lt;strong&gt;&amp;quot;Önce Teknik Temel (Foundation First)&amp;quot;&lt;/strong&gt; yaklaşımıdır.&lt;/p&gt;
&lt;h2 id="mühendislik-vizyonu"&gt;Mühendislik Vizyonu&lt;/h2&gt;
&lt;p&gt;Mühendislik departmanının temel misyonu: &lt;strong&gt;%100 deterministik, otomatize bir ekosistem&lt;/strong&gt; oluşturmak. Bu ekosistemde Yapay Zeka Asistanları ve insanlar, belirli dosya sistemi protokolleri üzerinden işbirliği yapar. Bilgi &lt;strong&gt;nerede bulunduğuna göre değil, nerede kullanılacağına göre&lt;/strong&gt; planlanır.&lt;/p&gt;</description></item><item><title>Mühendislik Yaklaşımı</title><link>https://handbook.orneksirket.com/engineering/development-methodology/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://handbook.orneksirket.com/engineering/development-methodology/</guid><description>&lt;h1 id="mühendislik-yaklaşımı"&gt;Mühendislik Yaklaşımı&lt;/h1&gt;
&lt;p&gt;Bu sayfa Denomas'ın halka açık mühendislik yaklaşımını özetler. İç ürünleşme yöntemleri, iç otomasyon akışları ve rekabetçi mühendislik detayları Internal Handbook içinde tutulur.&lt;/p&gt;
&lt;h2 id="public-ilkeler"&gt;Public İlkeler&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Güçlü teknik temeller üzerine ürün inşa etmek&lt;/li&gt;
&lt;li&gt;Kalite kapılarıyla güvenilir teslimat üretmek&lt;/li&gt;
&lt;li&gt;Açık kaynak ekosistemini ciddiyetle değerlendirmek&lt;/li&gt;
&lt;li&gt;Güvenlik, performans ve bakım kolaylığını birlikte düşünmek&lt;/li&gt;
&lt;li&gt;Dokümantasyon ve mühendislik disiplinini birlikte yürütmek&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="public-teknik-sınır"&gt;Public Teknik Sınır&lt;/h2&gt;
&lt;p&gt;İç ürünleşme metodolojileri, otomasyon akışları, klasör yapıları, iç approval modelleri ve asistan protokolleri public yüzde ayrıntılı olarak paylaşılmaz.&lt;/p&gt;</description></item><item><title>Quality Engineer</title><link>https://handbook.orneksirket.com/hiring/job-families/quality-engineer/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://handbook.orneksirket.com/hiring/job-families/quality-engineer/</guid><description>&lt;h1 id="quality-engineer-kalite-mühendisi"&gt;Quality Engineer (Kalite Mühendisi)&lt;/h1&gt;
&lt;p&gt;Kalite mühendisleri, Denomas ürünlerinin kalitesini test otomasyon, CI/CD kalite kapıları ve kalite metrikleri aracılığıyla güvence altına alır.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="kullanılan-araçlar"&gt;Kullanılan Araçlar&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Araç&lt;/th&gt;
 &lt;th&gt;Kullanım Alanı&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Selenium / Playwright&lt;/td&gt;
 &lt;td&gt;Web UI test otomasyonu&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pytest / Jest&lt;/td&gt;
 &lt;td&gt;Birim ve entegrasyon test framework&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;GitLab CI/CD&lt;/td&gt;
 &lt;td&gt;Pipeline ve kalite kapıları&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;SonarQube&lt;/td&gt;
 &lt;td&gt;Kod kalitesi ve statik analiz&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;k6 / Locust&lt;/td&gt;
 &lt;td&gt;Performans ve yük testi&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Postman / Newman&lt;/td&gt;
 &lt;td&gt;API testi&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="kariyer-seviyeleri-ve-denomas-yetkinlik-çerçevesi-gereksinimleri"&gt;Kariyer Seviyeleri ve Denomas Yetkinlik Çerçevesi Gereksinimleri&lt;/h2&gt;
&lt;h3 id="junior-quality-engineer--yetkinlik-seviyesi-2"&gt;Junior Quality Engineer — Yetkinlik Seviyesi 2&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Denomas Yetkinlik Çerçevesi Gereksinimleri:&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Sales Engineer</title><link>https://handbook.orneksirket.com/hiring/job-families/sales-engineer/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://handbook.orneksirket.com/hiring/job-families/sales-engineer/</guid><description>&lt;h1 id="sales-engineer-satış-mühendisi"&gt;Sales Engineer (Satış Mühendisi)&lt;/h1&gt;
&lt;p&gt;Satış mühendisleri, teknik ürün bilgisi ile satış sürecini birleştirerek müşteri ihtiyaçlarını karşılayan çözümler sunar. Pre-sales teknik destek, demo ve teknik teklif hazırlamadan sorumludur.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="kariyer-seviyeleri-ve-denomas-yetkinlik-çerçevesi-gereksinimleri"&gt;Kariyer Seviyeleri ve Denomas Yetkinlik Çerçevesi Gereksinimleri&lt;/h2&gt;
&lt;h3 id="sales-engineer--yetkinlik-seviyesi-3"&gt;Sales Engineer — Yetkinlik Seviyesi 3&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Yetkinlik&lt;/th&gt;
 &lt;th&gt;Seviye&lt;/th&gt;
 &lt;th&gt;Açıklama&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;SALE&lt;/td&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;td&gt;Satış süreçleri&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RLMT&lt;/td&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;td&gt;Müşteri ilişkileri&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;ARCH&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;Temel çözüm tasarımı&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Temel Sorumluluklar:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ürün demosu ve teknik sunum yapma&lt;/li&gt;
&lt;li&gt;Müşteri teknik gereksinimlerini anlama ve dokümantasyonu&lt;/li&gt;
&lt;li&gt;RFP/RFI yanıtları hazırlama&lt;/li&gt;
&lt;li&gt;Teknik teklif ve çözüm mimarisi oluşturma&lt;/li&gt;
&lt;li&gt;Satış takımıyla işbirliği&lt;/li&gt;
&lt;li&gt;POC (Proof of Concept) yürütme&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Aranan Nitelikler:&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Security Engineer</title><link>https://handbook.orneksirket.com/hiring/job-families/security-engineer/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://handbook.orneksirket.com/hiring/job-families/security-engineer/</guid><description>&lt;h1 id="security-engineer-güvenlik-mühendisi"&gt;Security Engineer (Güvenlik Mühendisi)&lt;/h1&gt;
&lt;p&gt;Güvenlik mühendisleri, Denomas ürün ve altyapısının güvenlik duruşunu yönetir. Güvenlik testi, uyumluluk denetimi, olay müdahale ve güvenlik mimarisi tasarımından sorumludur.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="kariyer-seviyeleri-ve-denomas-yetkinlik-çerçevesi-gereksinimleri"&gt;Kariyer Seviyeleri ve Denomas Yetkinlik Çerçevesi Gereksinimleri&lt;/h2&gt;
&lt;h3 id="junior-security-engineer--yetkinlik-seviyesi-2"&gt;Junior Security Engineer — Yetkinlik Seviyesi 2&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Yetkinlik&lt;/th&gt;
 &lt;th&gt;Seviye&lt;/th&gt;
 &lt;th&gt;Açıklama&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;SCTY&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;Temel güvenlik uygulamaları&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;AUDT&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;Denetim temelleri&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Temel Sorumluluklar:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Güvenlik tarama araçlarını çalıştırma ve sonuç raporlama&lt;/li&gt;
&lt;li&gt;Güvenlik politikalarını izleme&lt;/li&gt;
&lt;li&gt;Zafiyet yönetimi süreçlerine katılım&lt;/li&gt;
&lt;li&gt;Güvenlik dokümantasyonu bakımı&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Aranan Nitelikler:&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Site Reliability Engineer</title><link>https://handbook.orneksirket.com/hiring/job-families/site-reliability-engineer/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://handbook.orneksirket.com/hiring/job-families/site-reliability-engineer/</guid><description>&lt;h1 id="site-reliability-engineer-sre"&gt;Site Reliability Engineer (SRE)&lt;/h1&gt;
&lt;p&gt;SRE mühendisleri, Denomas ürün ve hizmetlerinin güvenilirliğini, performansını ve kullanılabilirliğini sağlar. İzleme, olay yönetimi, kapasite planlaması ve otomasyon sorumluluğunu taşır.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="kullanılan-araçlar"&gt;Kullanılan Araçlar&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Araç&lt;/th&gt;
 &lt;th&gt;Kullanım Alanı&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Zabbix&lt;/td&gt;
 &lt;td&gt;Altyapı ve uygulama izleme&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Grafana&lt;/td&gt;
 &lt;td&gt;Metrik görselleştirme ve dashboard&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Ansible&lt;/td&gt;
 &lt;td&gt;Altyapı otomasyon&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Wazuh&lt;/td&gt;
 &lt;td&gt;Log yönetimi ve analiz&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;PagerDuty / benzeri&lt;/td&gt;
 &lt;td&gt;Uyarı yönetimi ve nöbet&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Terraform&lt;/td&gt;
 &lt;td&gt;Altyapı kod olarak (IaC)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Docker / Kubernetes&lt;/td&gt;
 &lt;td&gt;Konteyner orkestrasyon&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="kariyer-seviyeleri-ve-denomas-yetkinlik-çerçevesi-gereksinimleri"&gt;Kariyer Seviyeleri ve Denomas Yetkinlik Çerçevesi Gereksinimleri&lt;/h2&gt;
&lt;h3 id="junior-sre--yetkinlik-seviyesi-2"&gt;Junior SRE — Yetkinlik Seviyesi 2&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Denomas Yetkinlik Çerçevesi Gereksinimleri:&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Skill Framework</title><link>https://handbook.orneksirket.com/engineering/ai-force/skill-framework/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://handbook.orneksirket.com/engineering/ai-force/skill-framework/</guid><description>&lt;h1 id="skill-framework"&gt;Skill Framework&lt;/h1&gt;
&lt;p&gt;Denomas AI-Force ekosistemi, &lt;strong&gt;181 tanımlı yeteneğe (skill)&lt;/strong&gt; sahiptir. Her yetenek, bağımsız bir dizinde &lt;code&gt;SKILL.md&lt;/code&gt; dosyasıyla tanımlanır. Yapay Zeka Asistanları, sahip olduğu skill seti ve yetkinlik seviyesine göre görev alır.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="skill-kataloğu--kategori-özeti"&gt;Skill Kataloğu — Kategori Özeti&lt;/h2&gt;
&lt;p&gt;Aşağıdaki tablo, 181 skill dizininin kategoriye göre dağılımını göstermektedir:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Kategori&lt;/th&gt;
 &lt;th&gt;Skill Sayısı&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Güvenlik (Security)&lt;/td&gt;
 &lt;td&gt;18&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Otomasyon ve Altyapı (Automation &amp;amp; Infrastructure)&lt;/td&gt;
 &lt;td&gt;17&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Geliştirme (Development)&lt;/td&gt;
 &lt;td&gt;22&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Test ve Kalite (Testing &amp;amp; Quality)&lt;/td&gt;
 &lt;td&gt;13&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Veri ve Analiz (Data &amp;amp; Analytics)&lt;/td&gt;
 &lt;td&gt;10&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;AI ve Bağlam Yönetimi (AI &amp;amp; Context)&lt;/td&gt;
 &lt;td&gt;14&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Proje Yönetimi ve Planlama&lt;/td&gt;
 &lt;td&gt;11&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Dokümantasyon ve İçerik&lt;/td&gt;
 &lt;td&gt;14&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Frontend ve UI/UX&lt;/td&gt;
 &lt;td&gt;12&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Veritabanı (Database)&lt;/td&gt;
 &lt;td&gt;8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Mobil Geliştirme&lt;/td&gt;
 &lt;td&gt;4&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Pazarlama ve İş Geliştirme&lt;/td&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Bilimsel ve Araştırma&lt;/td&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Araç ve Yardımcı (Tooling &amp;amp; Utility)&lt;/td&gt;
 &lt;td&gt;21&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Uyumluluk ve Regülasyon (Compliance)&lt;/td&gt;
 &lt;td&gt;5&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Gözlemleme ve İzleme (Observability)&lt;/td&gt;
 &lt;td&gt;6&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Toplam&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;181&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="skillmd-dosya-yapısı"&gt;SKILL.md Dosya Yapısı&lt;/h2&gt;
&lt;p&gt;Her skill, kendi dizininde bir &lt;code&gt;SKILL.md&lt;/code&gt; dosyasıyla tanımlanır. Dosya şu bölümlerden oluşur:&lt;/p&gt;</description></item><item><title>Software Engineer</title><link>https://handbook.orneksirket.com/hiring/job-families/software-engineer/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://handbook.orneksirket.com/hiring/job-families/software-engineer/</guid><description>&lt;h1 id="software-engineer-yazılım-mühendisi"&gt;Software Engineer (Yazılım Mühendisi)&lt;/h1&gt;
&lt;p&gt;Yazılım mühendisleri, Denomas ürün ve platformlarının teknik temelini oluşturur. Kod yazma, test, mimari tasarım ve teknik borç yönetiminden sorumludur.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="kariyer-seviyeleri-ve-denomas-yetkinlik-çerçevesi-gereksinimleri"&gt;Kariyer Seviyeleri ve Denomas Yetkinlik Çerçevesi Gereksinimleri&lt;/h2&gt;
&lt;h3 id="junior-software-engineer--yetkinlik-seviyesi-2"&gt;Junior Software Engineer — Yetkinlik Seviyesi 2&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Denomas Yetkinlik Çerçevesi Gereksinimleri:&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Yetkinlik&lt;/th&gt;
 &lt;th&gt;Seviye&lt;/th&gt;
 &lt;th&gt;Açıklama&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;PROG&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;Rehberlik altında kod yazma&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;TEST&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;Temel birim test yazma&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;DESN&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;Basit tasarım kalıplarını uygulama&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Temel Sorumluluklar:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tanımlanmış görevleri rehberlik altında tamamlama&lt;/li&gt;
&lt;li&gt;Birim test yazma ve mevcut testleri çalıştırma&lt;/li&gt;
&lt;li&gt;Kod inceleme sürecine katılım&lt;/li&gt;
&lt;li&gt;Dokümantasyon okuma ve takip etme&lt;/li&gt;
&lt;li&gt;Günlük standup'lara katılım&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Aranan Nitelikler:&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Solutions Architect</title><link>https://handbook.orneksirket.com/hiring/job-families/solutions-architect/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://handbook.orneksirket.com/hiring/job-families/solutions-architect/</guid><description>&lt;h1 id="solutions-architect-çözüm-mimarı"&gt;Solutions Architect (Çözüm Mimarı)&lt;/h1&gt;
&lt;p&gt;Çözüm mimarları, müşteri gereksinimlerini teknik çözümlere dönüştürür. Sistem mimarisi, teknoloji seçimi, entegrasyon stratejisi ve teknik liderlik sağlar.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="kariyer-seviyeleri-ve-denomas-yetkinlik-çerçevesi-gereksinimleri"&gt;Kariyer Seviyeleri ve Denomas Yetkinlik Çerçevesi Gereksinimleri&lt;/h2&gt;
&lt;h3 id="solutions-architect--yetkinlik-seviyesi-4"&gt;Solutions Architect — Yetkinlik Seviyesi 4&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Yetkinlik&lt;/th&gt;
 &lt;th&gt;Seviye&lt;/th&gt;
 &lt;th&gt;Açıklama&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;ARCH&lt;/td&gt;
 &lt;td&gt;4&lt;/td&gt;
 &lt;td&gt;Çözüm mimarisi tasarımı&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;DESN&lt;/td&gt;
 &lt;td&gt;4&lt;/td&gt;
 &lt;td&gt;Sistem tasarımı&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;STPL&lt;/td&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;td&gt;Stratejik planlama&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RLMT&lt;/td&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;td&gt;Paydaş ilişkileri&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Temel Sorumluluklar:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Müşteri gereksinimlerini teknik çözümlere çevirme&lt;/li&gt;
&lt;li&gt;Sistem mimarisi tasarımı ve dokümantasyonu&lt;/li&gt;
&lt;li&gt;Teknoloji değerlendirme ve seçimi&lt;/li&gt;
&lt;li&gt;Entegrasyon stratejisi belirleme&lt;/li&gt;
&lt;li&gt;Teknik teklif hazırlama&lt;/li&gt;
&lt;li&gt;Prototip geliştirme&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Aranan Nitelikler:&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Sürüm Süreci</title><link>https://handbook.orneksirket.com/engineering/release-process/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://handbook.orneksirket.com/engineering/release-process/</guid><description>&lt;h1 id="sürüm-süreci"&gt;Sürüm Süreci&lt;/h1&gt;
&lt;p&gt;Denomas, &lt;strong&gt;dual-track deployment&lt;/strong&gt; stratejisi uygular. Bu strateji, SaaS ve self-managed ürün hatlarının farklı sürüm döngülerini yönetir. Dağıtım süreci &lt;code&gt;code.denomas.com&lt;/code&gt; ve &lt;code&gt;code.ilimteknoloji.com&lt;/code&gt; GitLab altyapıları üzerinde çalışır. &lt;strong&gt;Otomatik Kalite Kapısı&lt;/strong&gt; tüm süreci otomatize eder ve güvence altına alır.&lt;/p&gt;
&lt;h2 id="git-akışı"&gt;Git Akışı&lt;/h2&gt;
&lt;p&gt;Standart ve kanıtlanmış branch stratejisi:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;feature-branch → develop → staging → main
&lt;/code&gt;&lt;/pre&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Dal&lt;/th&gt;
 &lt;th&gt;Rol&lt;/th&gt;
 &lt;th&gt;Deploy Ortamı&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;feature/*&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Yeni özellik veya bug fix geliştirmesi&lt;/td&gt;
 &lt;td&gt;Development (her push)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;develop&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Ana geliştirme dalı, tüm yeni özellikler buraya merge edilir&lt;/td&gt;
 &lt;td&gt;Development&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;staging&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Canlıya çıkmadan önceki son test ortamı&lt;/td&gt;
 &lt;td&gt;Staging (otomatik)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;main&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Sadece stabil, test edilmiş ve canlıya çıkmaya hazır kod&lt;/td&gt;
 &lt;td&gt;Production (manuel onay)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="td-alert td-alert--md alert alert-warning" role="alert"&gt;&lt;div class="td-alert-heading alert-heading" role="heading"&gt;Ana Dala Doğrudan Push Yasak&lt;/div&gt;
 &lt;div class="td-alert-body"&gt;
 &lt;p&gt;&lt;code&gt;main&lt;/code&gt; ve &lt;code&gt;develop&lt;/code&gt; dallarına doğrudan push yapılması pre-commit hook ile engellenmiştir. Tüm değişiklikler Merge Request üzerinden gelmelidir.&lt;/p&gt;</description></item><item><title>Yetkinlik Çerçevesi</title><link>https://handbook.orneksirket.com/engineering/ai-force/yetkinlik-cercevesi/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://handbook.orneksirket.com/engineering/ai-force/yetkinlik-cercevesi/</guid><description>&lt;h1 id="denomas-yetkinlik-çerçevesi-tabanlı-organizasyon"&gt;Denomas Yetkinlik Çerçevesi Tabanlı Organizasyon&lt;/h1&gt;
&lt;p&gt;Denomas'ın hem insan çalışanlar hem de Yapay Zeka Asistanları için kullandığı yetkinlik ve yetki tanımlama çerçevesini tanımlar. PROG:1'den PROG:7'ye kadar yetkinlik seviyeleri, organizasyon tasarımında kullanılan Denomas Yetkinlik eksenleri (GOVN, POMG, ARCH, PROG vb.), Yapay Zeka Asistanı-yetkinlik yetenek haritalama, insan-yapay zeka skill paritesi modeli, yetki matrisi, agent kartı formatı ve kariyer ilerleme mekanizmalarını kapsar.&lt;/p&gt;
&lt;div class="td-alert td-alert--md alert alert-info" role="alert"&gt;&lt;div class="td-alert-heading alert-heading" role="heading"&gt;İç Doküman&lt;/div&gt;
 &lt;div class="td-alert-body"&gt;
 &lt;p&gt;Bu konunun detayları iç handbook'ta yer almaktadır. Tam içerik için &lt;a href="https://internal.handbook.denomas.com"&gt;internal.handbook.denomas.com&lt;/a&gt;
 adresine bakınız.&lt;/p&gt;</description></item></channel></rss>