okuma süresi: 10 minutes

foundry/— workspace’imin kodunu barındıran fonksiyonel alan — 18 proje içeriyor. Sekizi Apache 2.0 altında açık kaynaktır. Sadece biri kapalı kaynak — Edster SaaS. Aylarca bu dokuz proje bir arada var oldu aynı klasörde, yalnızca …​ ile ayrılmış; hiçbir şey yok. Genel/özel durumları kafamdaki bir bilgiydi, dosya sistemindeki değil.

Ve sonra bir RAG bağlamak istedim. Ve işte o an, her şey çöktü.

Gerçekleşmesi Beklenen Kaza

Nisan 2026’da, slider-gradle için pgvector RAG’ı uygulamaya başladım. Prensip: tüm …​ depolarını indekslemek`foundry/`, üretmek embedding’ler ve bunları LLM’in bağlamına enjekte etmek, böylece onun bir dosyanın "algılanışı`foundry/`Lütfen çevrilecek metni sağlayın.

Pipeline basitti:

val repos = fileTree(rootDir) {
    include("**/*.adoc", "**/*.kts", "**/*.kt", "**/*.json", "**/*.yml")
}
val chunks = repos.map { chunk(it) }
val embeddings = chunks.map { embed(it) }
pgvector.insert(embeddings)

Basit. Etkili. VetehlikeliLütfen çevrilecek metni sağlayın.

Çünkü bu`fileTree`arasındaki farkı ayırt etmez`plantuml-gradle/` (Apache 2.0, genel) ve`edster/`(kapalı kaynak, özel). Her şeyi yutar. Ya bir gün bu embedding’leri yayınlarsam — bir panelde, bir yanıtta LLM, bir eğitim veri setinde — Edster’ın tescilli kodu sızıyor.

Sorun, bir LLM’nin kapalı kaynaklı kod okuması değil. Sorun, bu kodun genel bir vektör gömmesine (embedding) girmesi — geri döndürülemez, silinemez, denetlenemez.

Asıl Soru

LLM’nin kod sızdırması nasıl önlenir?" değil. "nasıl kaçışı yapısal olarak imkansız hale getirmek mi?

Yanıt bir prompt değil. Yanıt, dosyayı ikiye bölmektir.

Çözüm: OSS/ ve CSS/

Önce:

foundry/
├── plantuml-gradle/       ← public
├── bakery-gradle/         ← public
├── magic-stick/           ← public
├── edster/                ← PRIVÉ
├── slider-gradle/         ← public
└── ...                    ← mélange invisible

Sonra:

foundry/
├── OSS/                   ← tout est Apache 2.0
│   ├── plantuml-gradle/
│   ├── bakery-gradle/
│   ├── magic-stick/
│   ├── slider-gradle/
│   └── ...
└── CSS/                   ← tout est closed source / private
    └── edster/

Le `fileTree`haline gelir:

val ossRepos = fileTree(File(rootDir, "OSS")) {
    include("**/*.adoc", "**/*.kts", "**/*.kt", "**/*.json", "**/*.yml")
}
val cssRepos = fileTree(File(rootDir, "CSS")) {
    include("**/*.adoc", "**/*.kts", "**/*.kt", "**/*.json", "**/*.yml")
}

// Embeddings publics — OSS seulement
pgvectorPublic.insert(ossRepos.map { chunk(it) }.map { embed(it) })

// Dataset fine-tuning privé — CSS seulement
fineTuningDataset.insert(cssRepos.map { chunk(it) })  // jamais publié

Genel RAG asla görmez`CSS/`. Kapalı kaynak kod bir veri setini besliyor ince-tuning’den yoksun — evimden asla dışarı çıkmayan dahili bir model. La ayrım mekaniktir, deklaratif değildir.

Neden "Public" ve "Private" değil de "OSS" ve "CSS

OSS (Open Source Software - Açık Kaynaklı Yazılım) ve CSS (Closed Source Software - Kapalı Kaynaklı Yazılım) akronimlerinin seçimi kasıtlıdır:

  • Public"/"Private" şunu tanımlar:görünürlük(GitHub’ın gördüğü)

  • OSS"/"CSS" şunu tanımlar:doğakod (LLM’nin bilmesi gerekenler)

GitHub görünürlüğü, uzak deponun bir meta verisidir. Kodun doğası içeriğin bir özelliği. LLM, GitHub API’sine erişime sahip değil — ancak erişimi var dosya sistemine.CSS/`ona şöyle dedi "dikkat, bu kod lisanslı değil bir `libre okumaya gerek kalmadan`LICENSE`veya bir …​ parse etmek`package.json`Lütfen çevrilecek metni sağlayın.

Klasör adı, verebileceğiniz en sağlam üst veridir bir LLM. Yanlış ayrıştırılamaz, görmezden gelinemez veya yanlış yorumlanamaz. LLM görür`CSS/edster/`dosya yolunda — o bilir.

Tam Ağaç — Üç Değil, Dört Bölge

OSS/CSS granülizasyonu, üç bölgeli ontolojiyi tamamlar. Bölge `foundry/`1’den 2 fonksiyonel alt bölgeye geçer:

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center
skinparam wrapWidth 260

title Organisation de foundry/ — Granularisation OSS/CSS

package "foundry/" {

  package "Cercle 0 — La Racine" #FFCCCC {
    rectangle "PICTURE_ME_ROLLIN_*.adoc" as STIM
    rectangle "WORKSPACE_*.adoc" as VISION_DOC
    note right of STIM
      Brain dump libre
      Jamais versionné
      [LLM : interdit d'indexer]
    end note
  }

  package "Cercle 1 — configuration/" #FFD9CC {
    rectangle "Secrets, tokens" as SECRETS
    rectangle "Spring Cloud Config" as SCC
    note right of SECRETS
      Privé-CVS, solo access
      [LLM : INTERDIT]
    end note
  }

  package "Cercle 2 — office/" #FFFFCC {
    rectangle "Articles, cadrages" as DATA
    rectangle "Formations, SPG/SPD" as FORM
    note right of DATA
      Privé-CVS
      [LLM : filtré Vision/Opinion]
    end note
  }

  package "Cercle 3 — foundry/" #CCE5FF {
    package "OSS/ — Apache 2.0" #CCFFCC {
      rectangle "Plugins Gradle" as PLUGINS
      rectangle "engine" as ENGINE
    }
    package "CSS/ — Closed Source" #CCDDFF {
      rectangle "edster/" as EDSTER
    }
  }
}

@enduml

| Bölge | GDPR | Genel RAG İndeksleme | Fine-tuning Veri Kümesi | | Kök | Seviye 0 — Mahrem | ✗ | ✗ | |configuration/| Seviye 1 — Kısıtlı | ✗ | ✗ | |office/| Seviye 2 — İş Birlikçi | ✓ Filtrelendi | ✓ Filtrelendi | |foundry/private/| Seviye 3 — Koşullu Açık | ✗ | ✓ Özel | |foundry/public/| Seviye 4 — Ana dil | ✓ Serbest | ✓ Genel |

Özel Durum: cheroliv.com

Hazır gelmişken, başka bir tutarsızlığı da düzelttim. Sitem cheroliv.com`yaşıyordu`foundry/`bir yazılım projesi gibi tam teşekküllü — kendi Gradle build’i, kendi CI’ı, kendi yönetişim.agents/`Lütfen çevrilecek metni sağlayın.

Ancak blog yazıları kod değildir. Bunlar verilerdir Cercle 2’nin editöryal içerikleri — tıpkı …​'nın çerçevelendirmeleri gibi`office/pilotage/` veya …​ eğitimleri`office/formations/`Lütfen çevrilmesini istediğiniz metni sağlayın.

AVANT                            APRÈS
foundry/                office/
  cheroliv.com/                    sites/
    site/jbake/content/blog/         cheroliv.com/
      2026/0117_....adoc               2026/0117_....adoc

Değişenler:

  • Ürünler şurada:`office/`→ Cercle 2 gizliliği

  • Görev`publishSite`bir capability haline gelir`engine`

aracılığıyla`bakery-gradle`— eklenti bir`FileTree`, bilmiyor makalelerin …​-den geldiği`office/`

  • Tek bir CI, tek bir yönetişim — sıfır tekrarlama

  • Vision/Opinion sınıflandırıcı (Kural 2bis) otomatik olarak uygulanır:

içindeki makaleler`office/`yayınlanmadan önce filtrelenir

bakery-gradle S’En Fiche

Ve güzel olan da bu. Eklenti`bakery-gradle`değiştirilmedi. Bir AsciiDoc içerik dizini alır, HTML oluşturur, push eder GitHub Pages üzerinde. Bu dizinin adının`site/jbake/content/` ou office/sites/cheroliv/— eklentinin umurunda değil.

// engine/build.gradle.kts
task("publishBlog") {
    doLast {
        val articles = fileTree("../../office/sites/cheroliv/2026/")
        bakery.generate(articles)  // ← bakery ne sait pas d'où ça vient
    }
}

Arayüz sözleşmesi bir Gradle görevidir. Bir REST API değildir. Bir webhook değildir. Bir görev — tipli, test edilebilir, yerel olarak ve CI’da yürütülebilir.

Ajan Yönetişimi Üzerindeki Etki

OSS/CSS granülizasyonu, ajan yönetişimini üç noktada değiştirir:

  1. Herkese açık RAG : indeksleme kapsamı şuradan şuraya geçiyor`foundry/**`

à foundry/public/+office/Vision/. Kapalı kaynak kodlu (closed source) kod görev yapılandırması nedeniyle dizinden hariç tutulmuştur, istem nedeniyle değil.

  1. Knowledge Graph : graphify-gradle iki graf üretir:

Lütfen çevrilecek metni sağlayın.office/graph.json(public) — OSS artifaktları + office/Vision arasındaki ilişkiler Lütfen çevrilmesini istediğiniz metni sağlayın.configuration/graph_private.json(gitignored, özel) — arasındaki ilişkiler CSS artifaktları, hiç yayınlanmadı

  1. Veri kümesi ince ayarı :`codebase-gradle`artık iki kaynağa sahip:

Lütfen çevrilecek metni sağlayın.OSS/→ genel veri kümeleri (topluluk modelleri, benchmarklar) Lütfen çevrilecek metni sağlayın.CSS/→ özel veri kümeleri (dahili model, sahipli ince ayar)

Neler Kazandığımız (Ve Neler Kaybettiğimiz)

Öncesi (düz dosya) Sonra (OSS/CSS + office/sites)

ls foundry/→ kamu/özel karışımı

ls foundry/public/→ her şey yayınlanabilir

RAG her şeyi ayrım gözetmeksizin indeksler

RAG indeksleme`OSS/`+`office/Vision`yalnızca

Bir projenin açık kaynaklı olup olmadığını bilmek imkansız

Yol`OSS/` ou `CSS/`söylenen

cheroliv.com’un kendi CI’sı, kendi yönetişimi var

CI ve yönetişim engine içerisinde ortaklaştırılmıştır

Blog yazıları bir "code" deposundadır

Blog yazıları şurada yer alıyor`office/sites/`— veri, kod değil

Kamu açık embedding’lerde kapalı kaynak kod sızıntısı riski

Yapısal olarak imkansız —`CSS/`RAG kapsamı dışı

Tek maliyet: bir`git mv`17 OSS deposu üzerinde genel + bir refactor du build.gradle.kts de engine. Bu soğuk bir migrasyondur — yolculukta veri yok, etkilenen kullanıcı yok.

Sonuç: Fiziksel Sinyal Yazılımsal Sinyali Yener

Bu öğleden sonra yaptığım şey, görünmez bir kuralı değiştirmekti bölgede görünür bir ayrılma ile`foundry/`. Önceden, şunları yapmanız gerekiyordu bilmek ki`edster/`kapalı kaynaklıydı. Şimdi, görüyorsunuz — klasörün adı`CSS/`Lütfen çevrilecek metni sağlayın.

Bu, Unix izinleri, ağ VLAN’ları veya bir veri tabanındaki yangın kompartımanları. Güvenlik şunları yapmamalıdır hatırlamanız gereken bir bilgi olmalıdır. Bir özellik olmalıdır fizikselsistemin.

OSS/CSS granülizasyonu, bu prensibin alanındaki karşılığıdır LLM yönetişiminin. LLM’in Edster’ın olduğunu bilmesine gerek yok gizli. Onu indeksleyemez durumda olması gerekiyor.

Ve bu tam olarak`CSS/`garanti eder.

İlgili Makaleler