読了時間 : 10 minutes

foundry/— 私のワークスペースのコードをホストする機能領域 — 18のプロジェクトが含まれています。 8つはApache 2.0ライセンスのオープンソースです。 ただ1つだけは closed source — SaaS Edster。数か月間、これらの9つのプロジェクトは共存していた 同じフォルダー内にあり、…​ 以外に何も区切られていない。それらの公開/非公開ステータス それは私の頭の中の情報で、ファイルシステムにはありませんでした。

それから、RAGを接続したくなった。そこで、すべてが崩れた。

起きるべくして起きた事故

2026年4月、slider-gradle用のpgvector RAGの実装を開始しました。 原則:すべてのリポジトリをインデックス化する`foundry/,生産する embeddings, そしてそれらをLLMのコンテキストに注入して、それを持たせるために ファイルの"認識`foundry/。

パイプラインはシンプルでした:

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)

シンプル。効果的。そして危険な。

なぜならこれ`fileTree`区別しない`plantuml-gradle/` (Apache 2.0, public) と`edster/`(closed source, private). 全部飲み込む。 もし私がいつかこれらの埋め込みを公開したら — ダッシュボード上、または回答の中に LLM、トレーニングデータセット — Edsterの独自コードが漏洩しています。

問題は、LLMがクローズドソースのコードを読むことではない。問題は、 それは、このコードが公開ベクトル埋め込みに終わること — 不可逆、削除不能、監査不能

真の質問

それは「LLMがコードを漏らさないようにするにはどうすればいいですか?」ではない。それは「どうやって」だ 逃げを構造的に不可能にする?

答えはプロンプトではありません。答えは、フォルダーを二つに分けることです。

ソリューション : OSS/および CSS/

前:

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

後:

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

Le `fileTree`になります :

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é

公共のRAGは決して見ない`CSS/`. クローズドソースのコードはデータセットを供給する ファインチューニングされていない — 私の家から決して出ない内部モデル。La 分離は機械的で、宣言的ではない。

なぜ "OSS" と "CSS" で、"Public" と "Private" でないのか。

OSS(オープンソースソフトウェア)およびCSS(クローズドソースソフトウェア)の略称の選択 熟慮された:

  • Public"/"Private" 説明します視認性(GitHubが見ているもの)

  • OSS"/"CSS"は…​を説明する自然コード (LLMが知っておくべきこと)

GitHubの可視性はリモートリポジトリのメタデータです。 コードの性質は コンテンツのプロパティです。LLM は GitHub API へのアクセスがありませんが、アクセスがあります。 ファイルシステムに。CSS/「注意、このコードはライセンスで保護されていません。」 libre" 読む必要なく`LICENSE`またはパースする`package.json`.

フォルダーの名前は、あなたが与えることができる最も堅牢なメタデータに LLM. 彼女は誤ってパースされたり、無視されたり、誤って解釈されたりすることはできません。このLLM 見る`CSS/edster/`ファイルのパスの中 — 彼は知っている。

完全な木 — 四つのゾーン、三つではない

OSS/CSSの細分化は3領域オントロジーを完成させます。領域 `foundry/`機能的サブゾーンが1から2に変更されます :

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

title ファウンドリー/ — OSS/CSSの細粒化
package "鋳造所/" {

  package "円0 — 根" #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 "サークル 1 — 設定/" #FFD9CC {
    rectangle "秘密, トークン" as SECRETS
    rectangle "Spring Cloud Config" as SCC
    note right of SECRETS
      Privé-CVS, solo access
      [LLM : INTERDIT]
    end note
  }

  package "サークル 2 — オフィス/" #FFFFCC {
    rectangle "記事, フレーミング" as DATA
    rectangle "研修, SPG/SPD" as FORM
    note right of DATA
      Privé-CVS
      [LLM : filtré Vision/Opinion]
    end note
  }

  package "円 3 — foundry/" #CCE5FF {
    package "OSS/ — Apache 2.0" #CCFFCC {
      rectangle "Gradle プラグイン" as PLUGINS
      rectangle "エンジン" as ENGINE
    }
    package "CSS/ — クローズドソース" #CCDDFF {
      rectangle "edster/" as EDSTER
    }
  }
}

@enduml

| ゾーン | GDPR | パブリック RAG インデックス | データセット ファインチューニング | | ルート | レベル0 — 親密 | ✗ | ✗ | | configuration/| レベル 1 — 制限 | ✗ | ✗ | | office/| レベル 2 — コラボラティブ | ✓ フィルタ済み | ✓ フィルタ済み | | foundry/private/| レベル 3 — 条件付きオープン | ✗ | ✓ プライベート | | foundry/public/| レベル 4 — ネイティブ公開 | ✓ 無料 | ✓ 公開 |

特別なケース:cheroliv.com

私がそこにいた間に、別の矛盾も修正しました。私のサイト cheroliv.com`に住んでいた`foundry/`ソフトウェアプロジェクトのように スタンドアロン — 独自のGradleビルド、独自のCI、独自の ガバナンス.agents/`。

しかし、ブログ記事はコードではありません。これらはデータ 社説 Cercle 2 — フレーミングと同様に`office/pilotage/` または形成の`office/formations/`.

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

変更点:

  • 記事は`office/`→ Cercle 2のプライバシー

  • タスク`publishSite`になる能力の`engine`

経由`bakery-gradle`— プラグインは一つ受け取ります`FileTree`, 彼は知らない 記事がどこから来るか`office/`

  • 単一のCI、単一のガバナンス — 重複ゼロ

  • ビジョン/オピニオン・クラスファイア(規則2ビス)自動的に適用されます:

記事の中の`office/`公開前にフィルタリングされます

構わない

それが美しい。プラグイン`bakery-gradle`変更されていません。 AsciiDocコンテンツのディレクトリを受け取り、HTMLを生成し、プッシュする GitHub Pagesで。このディレクトリは`site/jbake/content/` ou office/sites/cheroliv/— プラグインは気にしない。

// 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
    }
}

インターフェイス契約は Gradle のタスクです。REST API ではありません。ウェブフックではありません。 タスク — タイプ指定され、テスト可能、ローカルおよび CI で実行可能。

ガバナンスエージェントへの影響

OSS/CSSの細粒度化は、エージェントガバナンスを3つのポイントで変更します:

  1. RAG public : インデックス範囲は`foundry/**`

à foundry/public/+office/Vision/. クローズドソースのコード タスクの設定によってインデックスから除外されます。プロンプトによってではありません。

  1. 知識グラフ : graphify-gradle は2つのグラフを生成します :

*office/graph.json(公開) — OSSアーティファクトとoffice/Visionの関係 *configuration/graph_private.json(gitignored, privé) — の間の関係 CSSのアーティファクト、未公開

  1. データセットファインチューニング :`codebase-gradle`現在は2つのソースがあります:

*OSS/→ パブリックデータセット (コミュニティモデル、ベンチマーク) *CSS/→ プライベートデータセット (内部モデル, 独自のファインチューニング)

私たちが得るもの (そして失うもの)

前 (フラットフォルダー)

(OSS/CSS + office/sites) 後

ls foundry/→ 公私混合

ls foundry/public/→ すべて公開可能

RAGは差別なくすべてをインデックスする

RAGはインデックスを作成します`OSS/`+`office/Vision`専ら

プロジェクトがオープンソースかどうか分からない

道`OSS/` ou `CSS/`いわゆる

cheroliv.com は独自の CI と独自のガバナンスを持っています

CI とガバナンスは engine で共有されています

ブログの記事は「code」リポジトリにあります。

ブログ記事は`office/sites/`— データ、コードではない

クローズドソースコードがパブリックな埋め込みに漏洩するリスク

構造的に不可能 —`CSS/`RAG のスコープ外

唯一のコスト:一つ`git mv`17のOSSリポジトリに対するグローバル + のリファクター build.gradle.kts de engine. これはコールドマイグレーションです — データは飛行中に存在せず、影響を受けたユーザーもいません。

結論 : 物理信号はソフトウェア信号に勝る

私がこの午後にしたことは、見えない慣習を置き換えること そのエリア内の目に見える分離によって`foundry/. 以前、あなたは~なければならなかった 知っているが`edster/`クローズドソースでした。 今、あなたはそれを*見る* — フォルダーは呼ばれる`CSS/。

これはUnixのパーミッション、ネットワークのVLAN、またはの同じ原理です データベース内の防火区画。セキュリティは 覚えておくべき情報でなければならず、それはプロパティでなければなりません。 物理システムの。

OSS/CSSの細分化は、この原理をその分野に適用したものです。 LLMのガバナンスについて。 LLMはEdsterが何であるかを知る必要はありません 機密です。 彼はそれをインデックス付けできない状態である必要があります。

それがまさにそれ`CSS/`保証する。

関連記事