زمان مطالعه : 14 minutes

به مدت ماه‌ها، من قوانین gouvernance agent را تجميع کردم. فایل‌ها EAGER، چک‌لیست‌های LAZY، پروتکل‌های پایان جلسه در شش مرحله. و مع این حال، یک سؤال به‌مانده بود : چگونه LLM می‌داند چه او حق دارد کاری با یک فایل کند ?*

جواب در یک پرامپت نیست. او در سیستم فایل‌ها است.

این مشخصات معماری است که پاسخ را قابل استفاده می‌سازد — la ماتریس حکمرداری LLM.

مشکل: مهندسی prompt یک قلعه‌ی شنی است

وقتی که یک فایل را به یک LLM می‌دهیم، به او همه چیز می‌دهیم. محتوا، بله — همچنین عدم وجود garde-fous. LLM نمی‌داند این فایل چه چیزی راContains؟ یک راز، یک نظر استقرایی، یا کد بسته‑منبع. او آن را فهرست خواهد کرد, خلاصه کردنش، نقل قول کردنش، آن را با داده‌های دیگر مخلوط کردن — و احتمالی منتشر کردن آن در یک embedding عمومی یا یک پاسخ کاربر.

پاراد کلاسیک، همان پرامپت است :

"Tu es un assistant sécurisé. Ne divulgue jamais d'informations confidentielles.
Si tu détectes un secret, ignore-le. Si tu détectes une opinion, ne la répète pas."

این پرامپتسه مسئله دارد:

  1. این به نیت خوب LLM وابسته است. یک مدل کافی بزرگ برای

حل کردن بگ‌های پیچیده به اندازه کافی بزرگ است تا بتواند یک دستور را دور بزند. امنیت غرق‌شده در 200k توکن از متن.

  1. این contextual است، نه ساختاری. پرمپت را تغییر دهید، LLM را تغییر دهید,

جلسه خود را تغییر دهید — قاعده محو می‌شود.

  1. این مقیاس‌پذیر نیست. هر نوع فایل جدید، هر سطح جدید

حریم خصوصی یک بند جدید را می‌طلبد. Prompt شما به یک متن قانونی که هیچ‌کس آن را کامل نمی‌خواند.

امنیت یک سیستم هرگز نباید به دستوری که می‌تواند فراموش کند، دور بزند، یا بارگذاری نکند. باید به یک باریری که نمی‌توان آن را بدون اراده صریح عبور کرد.

پاسخ من: ماتریس ۴×۴

حل که من در فضای کاری خود پیاده‌سازی کردم یک ماتریس zone × حق دسترسی LLM. او از LLM نمی‌خواهد که مراقب باشد. او برمیگردد بی‌احتیاطی به‌صورت ساختاری غیرممکن.

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

title ماتریس حکمرانی LLM — منطقه × حق دسترسی
package "فضای کار" {

  rectangle "ریشه
(دایره 0)
━━━━━━
خالی‌سازی مغز
فکر آزاد
[ممنوع LLM]" as Z0 #FFB3B3
  rectangle "configuration/
(دایره 1)
━━━━━━
رمزها، توکن‌ها
زیرساخت خصوصی
[LLM ممنوع]" as Z1 #FFB3B3
  rectangle "office/
(دایره 2)
━━━━━━
داده‌های ویرایشی
مقالات، چارچوب‌ها
[فیلتر شده Vision]" as Z2 #FFF3B3
  rectangle "foundry/private/
(دایره 3)
━━━━━━
کد منبع بسته
[دیتاست خصوصی]" as Z3 #B3D9FF
  rectangle "foundry/public/
(دایره 3)
━━━━━━
کد منبع باز
Apache 2.0
[دسترسی آزاد]" as Z4 #B3FFB3

}

Z0 -[hidden]-> Z1
Z1 -[hidden]-> Z2
Z2 -[hidden]-> Z3
Z3 -[hidden]-> Z4

@enduml

پنج ناحیه (ابعاد مکانی — RGPD)

هر بخش از فضای کاری یک سطح GDPR دارد که تعیین می‌کند کجا فایل می‌تواند به مسیر هدایت شود :

منطقه

سطح RGPD

محتوا

حق دسترسی عمومی RAG

ریشه

0 — حميم

ذخیره مغزی, گفتگوهای LLM

ممنوع— هرگز ایندکس نشده

configuration/

1 — مالك محدود

رازها، توکن‌ها، کلیدهای API

ممنوع— هرگز ایندکس نشده

office/

2 — همکاری محدود

داده‌های ویرایشی، چارچوب، آموزش‌ها

فیلتر شده— فقط نمایش

foundry/private/

3 — باز مشروط

کد منبع بسته، SaaS غیر عمومی

ممنوع— دیتاست صرفاً خصوصی

foundry/public/

4 — عمومی بومی

کد Apache 2.0، پلاگین‌های منتشر شده

آزاد— Indexeing کامل

قانون ساده است: مسیر فایل تعیین می‌کند که LLM می‌تواند با آن چه کاری انجام دهد. هیچ متاداده برای نگهداری لازم نیست، هیچ تگ برای افزودن در پیش‌متن لازم نیست, هیچ دسته‌بندی دستی در هر commit انجام نمی‌شود. فایل در`OSS/? این عمومی است. این در`configuration/? او قابل دسترس نیست.

طبقه‌بندی ابستمیک (بعد دوم)

ابعاد فضایی می‌گوید کجا مسیر یابد. اما یک محور دوم، عمودی وجود دارد: چه روتر. برخی فایل‌ها در یک ناحیه مجاز حاوی اطلاعات هستند. که نباید به همان شکل مخفف شوند :

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

title دوبل کاسکد — فیلتر فضایی + فیلتر معرفت‌شناسانه
start

:Le LLM rencontre un fichier;

if (Zone physique ?) then (Cercle 0-1)
  :ACCÈS BLOQUÉ\n(secret, brain dump);
  stop
elseif (Zone CSS/)
  :DROIT D'ACCÈS PRIVÉ\n→ dataset fine-tuning;
  :Filtre épistémique\nVision/Opinion;
  if (Classification ?) then (VISION)
    :Dataset privé\n→ entraînement autorisé;
  else (OPINION)
    :CONFINÉ\n→ pas d'entraînement;
  endif
elseif (Zone office/)
  :DROIT D'ACCÈS FILTRÉ\n→ accès conditionnel;
  :Filtre épistémique\nVision/Opinion/Stratégie;
  if (Classification ?) then (VISION)
    :DILUTION COMPLÈTE\n→ docs racine + blog;
  elseif (STRATÉGIE)
    :DILUTION RESTREINTE\n→ docs racine seulement;
  else (OPINION)
    :CONFINEMENT\n→ office/ uniquement;
  endif
else (Zone OSS/)
  :ACCÈS LIBRE\n→ indexation complète;
endif

stop

@enduml

جدول طبقه‌بندی معرفت‌شناختی، نقش‌آورده در قانون 2bis از حکمرانی من نماینده :

| وضعیت | تعریف | سیگنال LLM | مقصد | | دیدگاه | معماری تثبیت‌یافته، الگو تست‌شده | زبان تعریفی، ارجاعات جلسه/آزمایش |heitsiz کامل + وبلاگ | | استراتژی | موقعیت‌گذاری کسب‌وکار, قیمت‌گذاری | واژگان بازار, رقابت | اسناد ریشه فقط | | OPINION | تخمینی، فرضیه‌ای که تأیید نشده | زبان فرضیه‌ای، حدس | حبس دایره 0 |

ترکیب دو بعد — ناحیه فیزیکی × طبقه‌بندی اپستیمیک — می‌سازدماتریس کامل :

@startuml
skinparam backgroundColor #FEFEFE

title ماتریس کامل — منطقه × طبقه‌بندی
salt
{
{T
+ Zone | VISION | STRATÉGIE | OPINION
+ Racine (0) | ✗ Interdit | ✗ Interdit | ✗ Interdit
+ configuration/ (1) | ✗ Interdit | ✗ Interdit | ✗ Interdit
+ office/ (2) | ✓ Docs + Blog | ✓ Docs seulement | ✗ Confiné
+ CSS/ (3) | ✓ Dataset privé | ✓ Dataset privé | ✗ Confiné
+ OSS/ (4) | ✓ Public libre | ✓ Public libre | ✓ Public libre
}
}

@enduml

چگونه LLM این ماتریس را مصرف می‌کند

ماتریس اسنادی نیست که LLM آن را بخواند. این یک محدودیت ضمنی کدگذاری شده در بردار ترکیبی بافت (EPIC 9 — در حال انجام پیاده‌سازی).

این دقیقاً چیزی است که LLM در هر جلسه دریافت می‌کند :

VECTEUR COMPOSITE DE CONTEXTE
├── RAG pgvector → OSS/ + office/Vision
│   (similarité sémantique sur contenu publiable)
├── Knowledge Graph graphify → OSS/
│   (relations exactes entre artéfacts publics)
├── Knowledge Graph privé → CSS/
│   (relations entre code closed source — jamais exporté)
├── Métadonnées de zone → chaque fichier taggé par zone physique
│   (le LLM sait s'il est dans office/ ou OSS/)
└── Historique des décisions → WORKSPACE_VISION.adoc
    (contexte temporel des arbitrages)

به طور دقیق، وقتی LLM به من می‌گوید:

Je vais indexer le contenu de edster/ pour enrichir le knowledge graph...

میتادیتای ناحیه حتی قبل از اینکه LLM جملش را تمام کند، پاسخ می‌دهد : edster/`در`CSS/, سطح 3 →دسترسی به گراف دانش عمومی ممنوع است. RAG آن را نمی‌بیند. گراف آن را لمس نمی‌کند. پاسخ کاربر او آن را نقل نمی‌کند.

’ontولوژی فضایی مثل یکاجازه Unixبرای LLM. شما از یک فرآیند نمی‌خواهید که مراقب باشد با`/etc/shadow`— شما دسترسی خواندن را برای او رد می‌کنید. همان اصل.

پیاده‌سازی : وظایف Gradle تایپ‌خورده

ماتریس یک فلسفه نیست. این کد است. این قرارداد وظیفه است. Gradle که آن را پیاده‌سازی می‌کند :

abstract class ZoneAwareIndexer @Inject constructor(
    private val rootDir: DirectoryProperty,
    private val configServer: ConfigServerProperty  // → configuration/
) : DefaultTask() {

    @Input
    val zoneFilter: SetProperty<Zone> = project.objects.setProperty(Zone::class.java)

    @OutputFile
    val ragIndex: RegularFileProperty = project.objects.fileProperty()

    @TaskAction
    fun index() {
        val allowedPaths = zoneFilter.get().flatMap { it.resolve(rootDir.get()) }
        val forbiddenPaths = Zone.RESTRICTED.resolve(rootDir.get())
                            + Zone.INTIMATE.resolve(rootDir.get())
        // Le RAG ne voit jamais configuration/ ni la racine
        // CSS/ alimente un index privé, pas celui-ci
        // office/ est filtré par le classifieur Vision/Opinion
    }
}

enum class Zone {
    INTIMATE,      // Cercle 0 — racine
    RESTRICTED,    // Cercle 1 — configuration/
    EDITORIAL,     // Cercle 2 — office/
    CLOSED_SOURCE, // Cercle 3 — foundry/private/
    OPEN_SOURCE    // Cercle 3 — foundry/public/
}

کار قابل تست است. شما می‌توانید یک تست بنویسید که بررسی :

@Test
fun `le RAG n'indexe jamais configuration`() {
    val index = ZoneAwareIndexer(rootDir, configServer)
    index.zoneFilter.set(setOf(Zone.OPEN_SOURCE, Zone.EDITORIAL))
    index.index()

    assertThat(index.ragIndex).doesNotContain("configuration/")
}

@Test
fun `le code closed source est exclu du RAG public`() {
    val index = ZoneAwareIndexer(rootDir, configServer)
    index.zoneFilter.set(setOf(Zone.OPEN_SOURCE))  // OSS only

    assertThat(index.ragIndex).doesNotContain("edster")
}

380 تست، 380 PASS. همانند plantuml-gradle — امنیت تست شده است، نامنتظر.

چرا این یک مانیفست است، نه صرفاً یک Spec

این سند یک مشخصهٔ معماری است زیرا تعریف می‌کند :

  • چندابعاد(فضایی, معرفت‌شناختی)

  • چندقوانین تعیین‌کننده(منطقه →حق دسترسی)

  • Un قرارداد وظیفه‌ای(Gradle تایپ‌شده، قابل تست)

  • یکپیاده‌سازی مرجع(فضای کاری من)

اما این هم یکبیانیهچرا که او در یک بحث موضع‌گیری می‌کند بزرگ‌تر : چگونه می‌توانیم دسترسی یک LLM به داده‌ها را اداره کنیم؟

پاسخ صنعت، مهندسی پرامپت + گاردریل‌هاست
طبقه‌بندی‌های پس‌ازواقع. پاسخ من این است: فایل‌های خود را قرار دهید در فایل‌های خوب. بقیه خودکار است.

این منویسه نمی‌گوید "LLM‌ها باید هم‌راستا باشند". می‌گوید: "هم‌راستایی یک LLM بر قوانین امنیتی شما، یک نتیجه از سیستم شما فایل‌ها، نه پرامپت شما.

شلال کامل — از Brain Dump تا مقاله وبلاگ

برای نشان دادن چرخه کامل، این چگونه ایده ماتریس به وجود آمد و مخفف شده است :

Session 4 mai 2026 — Feedback global du workspace
  │
  ├→ Le LLM identifie : "la dualité public/privé est invisible"
  │   → Classifié VISION (constat architectural vérifiable)
  │
  ├→ PICTURE_ME_ROLLIN_MATRICE_4X4.adoc — STIMULUS (Cercle 0)
  │   → Brain dump structuré, classification VISION confirmée
  │
  ├→ DILUTION → WORKSPACE_AS_PRODUCT.adoc (section Matrice 4×4)
  │   → La spec vit dans les documents racine
  │
  ├→ DILUTION → WORKSPACE_ORGANIZATION.adoc (OSS/CSS)
  │   → La granularisation est documentée
  │
  └→ ARTICLE 0117 (ce document) → cheroliv.com
      → La VISION est publiée

چیزی که به‌عنوان یک مشاهده در جلسه شروع شد ("эй، RAG نمی-doped که edster است closed source") شد یک مشخصه معماری منتشر شده در کمتر از یک جلسه. این الگوی STIMULUS در عمل است.

مورد حمایت/مورد مخالفت

این رویکرد (آنتلوجی فضایی + ماتریس) رویکرد کلاسیک (Prompt + Guardrails)

مکانیک — سیستم فایل‌ها دسترسی را مسدود می‌کند، نه LLM

بیانیه‌ای — پrmpt از LLM می‌خواهد مراقب باشد

Testable — قرارداد وظیفه Gradle توسط 380+ تست بررسی می‌شود

قابل تست نیست — "آیا LLM قانون را رعایت کرده؟" یک سؤال باز است

به‌صورت مستقل از LLM — مدل را تغییر دهید، پوشه‌ها باقی می‌مانند.

وابسته به LLM — هر مدل درخواست را به‌طور متفاوتی تفسیر می‌کند

Scalable — نوع جدید داده = پوشه جدید، بدون تغییر در کد

Non scalable — نوع داده جدید = بند prompt جدید، خطر بازگشت جدید

قابل بررسی — سیستم فایل مسیر پیگیری است

غیرقابل‌حساب‌رسی — پرامپت هیچ تاریخچه‌ای ندارد، هیچ تفاوتی ندارد، هیچ خطایی ندارد.

محدودیت : نیاز به انضباط سازماندهی اولیه دارد

محدودیت : نیازمند انضباطی در نوشتن پرامپت در هر جلسه است

نتیجه : فایل‌های خود را مرتب کنید، نه پرامپت‌های خود

ماتریس حاكمية LLM که ت توصیف کردم یک محصول نیست این یکمواصفات معماری— و این است که او قابل انتشار.

آنچه آن را قوی می‌سازد این است که از LLM هیچ‌چیزی نمی‌خواهد. او به او او اعتماد ندارد. او بر پایهٔ هم‌خوانی‌اش، درکش قرار نمی‌گیرد. از francais، یا حسن نیتش. بر پایهٔ سیستم فایل قرار دارد — طبقه‌ی پایین‌ترین، پایدارترین و بیشترین تست‌شده‌ی کل-stack

وقتی به LLM خودم می‌گویم «می‌توانی همهٔ چیز را اینجا index کنی`OSS/, هیچ در `configuration/, et `office/`فقط اگر آن به‌عنوان Vision طبقه‌بندی شود این یک دستور نیست. این یک فیلتر — پیاده‌سازی شده در Kotlin, تأیید شده توسط 380 تست، اجرا شده پیش از اینکه LLM داده‌ها را ببیند.

این تفاوت بین گفتن به کسی "نگر نکن به این دراز" است و کشویی کلیددار را ببند. نمایندهٔ حکمرانی که من آن را از آن زمان می‌سازم ماه‌ها کلید است. ماتریس طرح furniture است.

مقالات مرتبط