χρόνος ανάγνωσης : 10 minutes

foundry/— η λειτουργική ζώνη που φιλοξενεί τον κώδικα του χώρου εργασίας μου — περιέχει 18 έργα. Οκτώ είναι ανοιχτού κώδικα υπό την άδεια Apache 2.0. Μόνος είναι closed source — το SaaS Edster. Για μήνες, αυτά τα εννέα έργα συνέζησαν στο ίδιο φάκελο, διαχωρισμένοι μόνο με…​ τίποτα. Η δημόσια/ιδιωτική κατάστασή τους Ήταν μια πληροφορία στο κεφάλι μου, όχι στο σύστημα αρχείων.

Και έπειτα ήθελα να συνδέσω ένα RAG. Και τότε, όλα έπεσαν.

Το ατύχημα που περίμενε να συμβεί

Στον Απρίλιο 2026, άρχισα να υλοποιώ το RAG pgvector για το slider-gradle. Η αρχή: να ευρετηριάζει όλα τα αποθετήρια του`foundry/, να παράγει embeddings, και να τα εγχέσουν στο πλαίσιο του LLM ώστε να έχει μια αντίληψη" του φακέλου`foundry/.

Το pipeline ήταν απλό :

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, δημόσια) και`edster/`(κλειστός κώδικας, ιδιωτικό). Καταπίνει ό,τι. Και αν έναν μέρα δημοσιεύσω αυτά τα embeddings — σε ένα dashboard, σε μια απάντηση LLM, σε ένα dataset εκπαίδευσης — ο ιδιοκτησιακός κώδικας του Edster διαρρέει.

Το πρόβλημα δεν είναι ότι ένα LLM διαβάζει κλειστού κώδικα. Το πρόβλημα, Το είναι ότι αυτός ο κώδικας τελειώνει σε ένα δημόσιο vector embedding — ανύστροφος, μη διαγραφέτος, μη ελεγχόμενος.

Η Αληθινή Ερώτηση

Δεν είναι "πώς να αποτρέψουμε το LLM να διαρρεύει κώδικα ?". Είναι "πώς Κάνετε τη φυγή δομικά αδύνατο;

Η απάντηση δεν είναι ένα prompt. Η απάντηση είναι να κοπεί το φάκελο σε δύο.

Η Λύση : 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/`. Ο κώδικας closed source τροφοδοτεί ένα dataset χωρίς fine‑tuning — εσωτερικό μοντέλο που δεν βγαίνει ποτέ από το σπίτι μου. Η ο χωρισμός είναι μηχανικός, όχι δηλωτικός.

Γιατί "OSS" και "CSS" και όχι "Public" και "Private

Η επιλογή των ακροστιχισμών OSS (Open Source Software) και CSS (Closed Source Software) αποφασίζεται :

  • Public"/"Private" περιγράφει τηορατότητα(τι βλέπει το GitHub)

  • OSS"/"CSS" περιγράφει τοφύσητου κώδικα (ότι το LLM πρέπει να γνωρίζει)

Η ορατότητα του GitHub είναι ένα μετα-δεδομένο του απομακρυσμένου αποθετηρίου. Η φύση του κώδικα είναι Μια ιδιότητα του περιεχομένου. Το LLM δεν έχει πρόσβαση στην API του GitHub — αλλά έχει πρόσβαση στο σύστημα αρχείων.CSS/`Αυτό του είπε "Προσοχή, αυτός ο κώδικας δεν είναι άδεια ελεύθερος" χωρίς να χρειάζεται να διαβάσεις ένα`LICENSE`ή να αναλύσει ένα`package.json.

Το όνομα του φακέλου είναι η πιο ισχυρή μεταδεδομένη που μπορείτε να δώσετε σε Ένα LLM. Δεν μπορεί να είναι λανθασμένα διατεταγμένη, αγνοημένη ή λανθασμένα ερμηνευμένη. Το LLM. βλέπει`CSS/edster/`στο μονοπάτι του αρχείου — ξέρει.

Το Ολοκληρωμένο Δέντρο — Τέσσερις Ζώνες, Όχι Τρεις

Η γρανυλοποίηση OSS/CSS συμπληρώνει την οντολογία τριών ζών. Η ζώνη `foundry/`Προχωρά από 1 έως 2 λειτουργικές υποζώνες :

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

title Οργάνωση foundry/ — Γρανυλοποίηση 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 — χυτοπείο/" #CCE5FF {
    package "OSS/ — Apache 2.0" #CCFFCC {
      rectangle "Προσάρματα Gradle" as PLUGINS
      rectangle "μηχανή" as ENGINE
    }
    package "CSS/ — Κλειστός κώδικας" #CCDDFF {
      rectangle "edster/" as EDSTER
    }
  }
}

@enduml

| Περιοχή | GDPR | Δημόσια ευετήρια RAG | Dataset fine-tuning | | Ρίζα | Επίπεδο 0 — Ιντίμη | ✗ | ✗ | | configuration/| Επίπεδο 1 — Περιορισμένο | ✗ | ✗ | |office/| Επίπεδο 2 — συνεργατικό | ✓ φιλτραρισμένο | ✓ φιλτραρισμένο | | foundry/private/| Επίπεδο 3 — Ανοιχτό υπό όρους | ✗ | ✓ Ιδιωτικό | |foundry/public/| Επίπεδο 4 — Εγγενές κοινό | ✓ Ελεύθερο | ✓ Δημόσιο

Η Ειδιικη Περίπτωση : cheroliv.com

Όσο ήμουν εκεί, διόρθωσα άλλη μια ανισοροπία. Ο ιστοτόπος μου cheroliv.com`ζούσε στο`foundry/`ως ένα λογισμικό έργο όπως ανεξάρτητο — με το δικό του Gradle build, το δικό του CI, το δικό του κυβέρνηση.agents/`.

Όμως τα άρθρα του blog δεν είναι κώδικας. Είναι δεδομένα επιμελητικές του Κύκλου 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/`→ απορρήτου του Κύκλου 2

  • Η εργασία`publishSite`γίνεται μια capability του`engine`

μέσω`bakery-gradle`— το πρόσθετο λαμβάνει ένα`FileTree`, δεν ξέρει ότι τα άρθρα προέρχονται από`office/`

  • Μια μόνο CI, μια μόνο διακυβέρνηση — μηδενική διπλοτύπωση

  • Ο καταφυλιστής Vision/Opinion (Κανόνας 2bis) εφαρμόζεται αυτόματα :

τα άρθρα σε`office/`φιλτράρονται πριν τη δημοσίευση

bakery-gradle δεν του κάνει τίποτα

Και αυτό είναι όμορφο. Το plugin`bakery-gradle`δεν έχει τροποποιηθεί. Λαμβάνει ένα κατάλογο περιεχομένου AsciiDoc, παράγει HTML, το push σε GitHub Pages. Τι ονομάζεται αυτός ο φάκελος`site/jbake/content/` ou office/sites/cheroliv/— το plugin δεν του ενδιαφέρει.

// 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. Δεν είναι μια API REST. Δεν είναι ένα webhook. Μια εργασία — τυπημένη, δοκιμάσιμη, εκτελέσιμη τοπικά και στο CI.

Επίδραση στον πρόκτορα διακυβέρνησης

Η λεπτότητα OSS/CSS αλλάζει τη διακυβέρνηση του πρακόρα σε τρία σημεία :

  1. RAG erdemos : ο περίμετρος της ευρετηρίας μεταβαίνει από`foundry/**`

à foundry/public/+office/Vision/. Ο κώδικας closed source Εξαιρείται από το ευρετήριο μέσω ρύθμισης εργασίας, όχι μέσω εντολής.

  1. Knowledge Graph : το graphify-gradle παράγει δύο γραφήματα :

*office/graph.json(δημόσιος) — σχέσεις μεταξύ αντικειμένων OSS + office/Vision *configuration/graph_private.json(gitignored, ιδιωτικό) — σχέσεις μεταξύ αρτεφάκτα CSS, που δεν δημοσιεύτηκε ποτέ

  1. Προσαρμογή δεδομένων :`codebase-gradle`Has now two sources:

python import sys

def main(): data = sys.stdin.read() sys.stdout.write(data)

if name == 'main': main()OSS/→ δημόσια datasets (μοντέλα της κοινότητας, benchmarks) * CSS/→ δεδομένα ιδιωτικά (μοντέλο εσωτερικό, fine-tuning ιδιοκτησικό)

Τι Κερδίζουμε (Και Τι Χάσουμε)

μπροστinado (φακεlos πλατός) Μετά (OSS/CSS + office/sites)

ls foundry/→ δημόσιος/ιδιωτικός μέίγμα

ls foundry/public/→ Όλα είναι δημοσιεύσιμα

RAG ευρετηροδοτεί όλα χωρίς διάκριση

RAG ευρετηριοποιεί`OSS/`+`office/Vision`αποκλειστικώς

Αδύνατο είναι να ξέρουμε αν ένα έργο είναι ανοιχτού κώδικα.

Ο δρόμος`OSS/` ou `CSS/`λέει

Το cheroliv.com έχει το δικό του CI και η δική του κυβέρνηση

Η CI και η διακυβέρνηση είναι κοινόχρηστα στο engine

Τα άρθρα του blog είναι σε ένα αποθετήριο "code

Τα άρθρα του blog είναι`office/sites/`— δεδομένα, όχι κώδικα

Κίνδυνος διαρροής κλειστού πηγαίου κώδικα σε δημόσια ενσωματώσεις

Δομικά αδύνατο —`CSS/`έκτους πεδίου RAG

Το μόνο κόστος : ένα`git mv`γενικό στα 17 αποθετήρια OSS + μια αναδιάρθρωση του build.gradle.kts de engine. Αυτό είναι μια κρύα μετακόμιση — Δεν υπάρχουν δεδομένα σε μεταφορά, δεν υπάρχουν επηρεασμένοι χρήστες.

Συμπερασμα : το φυσικό señal νικά το λογικό señal

Το που έκανα αυτό το απόγευμα ήταν να αντικαταστήσω έναν αόρατο κανόνα. μέσα από έναν ορατό διαχωρισμό στην περιοχή`foundry/Προηγουμένως, θα έπρεπες ξέρω ότι`edster/`ήταν κλειστός κώδικας. Τώρα, το βλέπετε — ο φάκελος ονομάζεται`CSS/.

Είναι η ίδια αρχή όπως τα δικαιώματα Unix, τα VLAN δικτύου ή τα πυροπροστατευτικά τμήματα σε μια βάση δεδομένων. Η ασφάλεια δεν πρέπει Πρέπει να είναι μια πληροφορία που πρέπει να θυμάστε. Πρέπει να είναι μια ιδιότητα. φυσικήτου συστήματος.

Η γρανυλοποίηση OSS/CSS είναι η μετάφραση αυτού του αρχικού στο πεδίο. της διακυβέρνησης LLM. Ο LLM δεν χρειάζεται να ξέρει ότι το Edster είναι συκρετικό. Χρειάζεται να μην είναι ικανός να το ευρετογραφήσει.

Και αυτό είναι ακριβώς αυτό που`CSS/`εγγυάται

Σχετικά άρθρα