ملخص

عندما نعمل مع وكيل ذكاء اصطناعي مثل Opencode على مشاريع معقدة عبر عدة جلسات، نواجه مشكلة أساسية :تسرب السياق. الوكيل لا يتذكر الجلسة السابقة. كل ما تم شرحه له — الهندسة، الاتفاقيات، حالة قائمة المهام — قد ضاع. إعادة بناء هذا السياق في كل جلسة مكلفة، بطيئة ومصدر للخطأ.

يستعرض هذا المقال الاستراتيجية الحرفية التي بنيتها لحل هذه المشكلة: نظام حوكمة مستمر مستند إلى ملفات AsciiDoc، مع ثنائيةمتحمس/كسوللتحسين استهلاك رمز السياق، وواحدةإجراء لا غنى عنه لإنهاء الجلسةلضمان الاستمرارية.

المشهد: الاثنين 21 أبريل، 9:00

أعيد فتح Opencode لاستئناف إضافة Gradle الخاصة بي`plantuml-plugin`. أمس المساء، قضيت ثلاث ساعات في مناقشة مع مهندس المعمارية لمجموعة مفاتيح API — دوران round-robin، إدارة الحصص، الاحتياطي التلقائي. هذا الصباح، ينظر إليّ الوكيل بعيون سمكة ذهبية.

_ مرحبًا، أنا مساعدك Opencode. كيف يمكنني مساعدتك اليوم؟ _

لا — آه نعم, مجموعة مفاتيح API, كنا نحن في بنية YAML. لا — انتباه,PlantumlManager`هو كائنシングلتون Kotlin، وليس فئة. لا — لا، قررنا أمس أن`SyntaxValidationResult`بقيت فئة sealed متداخلة في`PlantumlService.

كل شيء يجب إعادة صنعه. أو بالأحرى: كل شيء يجب إعادة شرحه. سأقضي العشرين دقيقة الأولى من جلستي في إعادة بناء السياق الذي كان الوكيل قد حصل عليه بالأمس بين يديه. عشرون دقيقة من الرموز المحترقة. عشرون دقيقة كان بإمكاني فيها أن أبرمج، لكنني أقوم بعمل تربوي إلزامي.

ليس هذا خطأً في Opencode. هذه هي الطبيعة ذاتها لل LLMs الحوارية: بين جلستين، الذاكرة العاملةمحذوفة بالكاملالوكيل لا يتذكر المهمة السابقة، ولا القرارات التي تم اتخاذها، ولا الفخاخ التي تم تحديدها، ولا الشفرة التي كتبناها معاً.

لقد عشته عشرات المرات. في أربعة مشاريع متزامنة. مع جلسات متتالية تستمر لأسابيع. حسبت : في المتوسط,30 إلى 40% من مدة الجلسةكان مخصصًا لإعادة سياق الوكيل. في الجلسة 87 من المشروع`plantuml-plugin`, انهريت. لم أعد أستطيع أن أسمح لنفسي بإعادة الشرح للمرة العاشرة أن`AttemptEntry`هي فئة بيانات من المستوى الأعلى في`DiagramProcessor.kt`.

كنت بحاجة إلى نظام. ليس إلى اختراق. حاكمية حقيقية.

الجينيسيس: من الفوضى إلى المنهج

الجلسات الأولى: عصر الظلام

مشروعي الأول مع Opencode,plantuml-plugin, بدأ دون أي حوكمة. أطرح سؤالاً، يرد الوكيل، نكرر، تنتهي الجلسة، وفي اليوم التالي نبدأ من الصفر. كانت الجلسة 1، ثم الجلسة 2، ثم الجلسة 3…​ حتى الجلسة 62 حيث أدركت أنني فقدت ساعات متراكمة في إعادة شرح نفس المعمارية.

في الجلسة 62، الأرقام موجودة :198 اختبارًا وحدةً نجح, 42 اختبارات وظيفية تم التحقق منها, الإضافة تعمل. لكن التكلفة الإدراكية لا تُطاق. كل جلسة جديدة تبدأ بمونولogue مدته zwanzig دقيقة حول هيكل المشروع.

الحلقة الخاصة بـ site.yml المدمّرة (الجلسة 2، bakery-plugin)

الطريقة تنشأ أيضًا من كارثة. على المشروع`bakery-gradle`, إلى الجلسة 2، أطلب من الوكيل تعديل الملف`site.yml`. الوكيل، دون التحقق مما إذا كان الملف مُصدَّرًا، يصنع`Write`الذي يكتب فوق المحتوى بالكامل. النتيجة: يتم استبدال الرموز الحقيقية (مفاتيح API Firebase، أسرار النشر) بعناصر بديلة وهمية. الملف لم يكن في git — كان في`.gitignore`لحماية الأسرار.

بدون نسخة احتياطية. بدون`git restore`possible. أنا عالق. عليَّ إعادة بناء ملف التكوين يدويًا، العثور على الرموز في مديري كلمات المرور الخاصة بي، وإعادة لصق كل شيء.

من هذا الإحباط يولدالقاعدة المطلقة 1ب:

_ لا تسحق أبداًملف إعدادات مع واحد`Write`كامل عندما`Edit`الجزئي يكفي.لا تستبدل أبدًااستبدال القيم الحساسة بقيم وهمية.تحقق git check-ignore و `git ls-filesقبل أي تعديل. _

هذه القاعدة، اليوم محفورة في الرخام من جميع ملفاتي`AGENT.adoc` et `INDEX.adoc`من بين أربعة مشاريع، نشأت من خطأ حقيقي كلفني ساعة من العمل اليدوي.

الهجرة من Markdown → AsciiDoc (الجلسة 1، cheroliv.com)

في 25 أبريل 2026، على`cheroliv.com`, أنا أتخذ قرارًا جذريًا: تحويل كامل حوكمة Markdown إلى AsciiDoc. هذا ليس جماليًا. إنه وظيفي. يقدم AsciiDoc بنية دلالية يقرأها نماذج اللغة الكبيرة بشكل أفضل: أقسام هرمية، جداول مكتوبة، تنبيهات (NOTE, WARNING, CAUTION), سمات الوثيقة القابلة للقراءة آليًا.

الجلسة 1 من`cheroliv.com`يُصيغُ الهيكل:

  • تحويل`AGENTS.md` en AGENT.adoc

  • إنشاء الوكلاء المتخصصين:`CODER.adoc`, SCRUM_MASTER.adoc, PLANTUML_DESIGNER.adoc

  • إنشاء البنية Eager/Lazy :`INDEX.adoc`, SESSIONS_HISTORY.adoc, AGENT_SESSION_MANAGER.adoc, SESSION_CHECKLIST.adoc, PROCEDURES.adoc

الإلتزام الواحد :`90975e9 refactor: migrate agent governance from Markdown to AsciiDoc`. والموقع لا يزال يعمل.

Failed to generate image: PlantUML preprocessing failed: [From <input> (line 18) ]

@startuml
skinparam backgroundColor #FEFEFE
skinparam handwritten false

title تطور الجلسات — من الجلسة 1 إلى 150+
legend top
    |= Couleur |= Projet |
    | <#4CAF50> | cheroliv.com |
    | <#2196F3> | plantuml-plugin |
    | <#FF9800> | bakery-plugin |
    | <#9C27B0> | magic-stick |
endlegend

concise "الجلسات النشطة" as S

@S
0 is ".md خام"
1 is "الهجرة
^^^^^
 Syntax Error? (Assumed diagram type: timing)

@startuml
skinparam backgroundColor #FEFEFE
skinparam handwritten false

title تطور الجلسات — من الجلسة 1 إلى 150+
legend top
    |= Couleur |= Projet |
    | <#4CAF50> | cheroliv.com |
    | <#2196F3> | plantuml-plugin |
    | <#FF9800> | bakery-plugin |
    | <#9C27B0> | magic-stick |
endlegend

concise "الجلسات النشطة" as S

@S
0 is ".md خام"
1 is "الهجرة
AsciiDoc"
10 is "متحمس/كسول\nرسمي"
62 is "قاعدة أمان
(site.yml)"
87 is "الاختراق
السياق"
109 is "التحسين
-60% الرموز"
133 is "133 جلسات\n240 اختبارًا نجح"

S@0 -> S@1 : Session 1\n(cheroliv.com)
S@1 -> S@10
S@10 -> S@62 : Session 62\n(plantuml-plugin)
S@62 -> S@87 : Session 87\n(Cry 4 help)
S@87 -> S@109 : Session 109\n(API Key Pool)
S@109 -> S@133 : Session 133\n(Aujourd'hui)

@enduml

التسلسل الزمني أعلاه يوضح التقدم الفعلي. نقطة التحول هي الجلسة 87: هذا هو المكان الذي يتجاوز فيه إحباط إعادة السياق المتكرر حد التحمل، وتصبح الطريقة المتحمسة/الكسلية ليست مجرد فكرة بل تصبح ضرورة.

الاستراتيجية: المتحمس / الكسول في العمق

الفلسفة: ذاكرة حاسوبية مطبّقة على الإدراك

نهجي مستلهم مباشرةً من إدارة الذاكرة المؤقتة الحاسوبية. كل ما هونقدي ويستخدم بشكل متكرريجب أن يكون متاحًا فورًا (متحمس). كل ما هوسياقي أو ضخميجب تحميله عند الطلب (كسول)).

متحمس (لوحة التحكم)

كسول (دليل المالك)

الحجم

< 100 أسطر، < 10k رموز

غير محدود, مفصل

جارٍ التحميل

تلقائيًا، في بداية الجلسة

بناءً على طلب الموظف

محتوى

قواعد مطلقة, مهمة جارية, الحالة الحرجة

أرشيف الجلسات، التاريخ الكامل، الإجراءات التفصيلية، المراجع الفنية

دور

وجه الوكيل فورًا

أجب على أسئلة السياق العميق

الملفات Eager : لوحة التحكم

هذه الملفات موجودة في جذر كل مشروع ويتم تحميلها تلقائيًا من قبل الوكيل في بداية كل جلسة. إنها تشكللوحة القيادة-- معلومات حرجة، يمكن الوصول إليها فورًا.

Failed to generate image: PlantUML preprocessing failed: [From <input> (line 6) ]

@startuml
skinparam defaultTextAlignment center
skinparam wrapWidth 200

package "جذر المشروع (متحمّس - تم تحميله تلقائيًا)" {
    component "<b>AGENT.adoc</b>
^^^^^
 Syntax Error? (Assumed diagram type: class)

@startuml
skinparam defaultTextAlignment center
skinparam wrapWidth 200

package "جذر المشروع (متحمّس - تم تحميله تلقائيًا)" {
    component "<b>AGENT.adoc</b>
القواعد المطلقة
الهيكل و الاتفاقيات" as AGENT
    component "<b>PROMPT_REPRISE.adoc</b>\nمهمة الجلسة N\nملخص N-1" as PROMPT
    component "<b>INDEX.adoc</b>
نقطة الدخول
القواعد + الجلسات" as INDEX
    component "<b>*_ESSENTIALS.adoc</b>\nالسياق المهني الحرج" as ESS
}

package ".agents/ (Lazy - تم التحميل عند الطلب)" {
    component "<b>sessions/N-*.adoc</b>\nالأرشيفات المفصلة\nالقرارات & المخرجات" as SESS
    component "<b>SESSIONS_HISTORY.adoc</b>\nجدول ملخص\ntاريخ/النوع/النتيجة" as HIST
    component "<b>PROCEDURES.adoc</b>
قالب إنهاء الجلسة
6 خطوات" as PROC
    component "<b>*_REFERENCE.adoc</b>
الهندسة المعمارية الكاملة
المراجع التقنية" as REF
    component "<b>COMPLETED_TASKS_ARCHIVE</b>\nمهام مكتملة\nشهريًا" as ARCH
    component "<b>AGENT_MODUS_OPERANDI.adoc</b>\nتوثيق الاستراتيجية\nالمنهجية" as MOD
    component "<b>*_REFERENCE.adoc</b>\nاختبارات التشغيل، تقسيم A/B\nالسياقات المحددة" as SPEC
}

AGENT --> PROMPT : "المراجع"
AGENT --> INDEX : "المراجع"
INDEX --> SESS : "يفهرس"
INDEX --> HIST : "يفهرس"
INDEX --> PROC : "مرجع"
INDEX --> ARCH : "مرجع"
INDEX --> REF : "مرجع"
PROMPT --> SESS : "أرشيف N-1"
PROMPT --> ESS : "السياق المهني N"

@enduml

AGENT.adocالملف الرئيسي. على`cheroliv.com`, يتكون من 200 سطرًا ويتضمن :

  • القواعد المطلقة للمشروع (لا يُسمح بـ commit دون إذن، لا`rm`بدون تأكيد)

  • هيكل المشروع ومعايير الترميز

  • الأوامر الأساسية (./gradlew serve, ./gradlew test)

  • القصص الملحمية وقائمة المنتج (قصص المستخدم المرتبة)

  • معايير الجودة العرضية (الوصولية, الاستجابة, التوافق)

على`bakery-plugin`, القاعدة 0 مختلفة :./gradlew -q publishToMavenLocal` إلزامي بعد كل تعديل على الكود المصدر. لأن اختبار البرنامج المساعد دون إعادة نشر JAR المحلي تسبب لي في فقدان ساعة في تصحيح خطأ في كود لم يتم حزمه بعد.

PROMPT_REPRISE.adoc-- مهمة الجلسة الجارية. محدث في نهاية كل جلسة، يحتوي على :

  • رقم الجلسة والمهمة ذات الأولوية

  • ملخص الجلسة السابقة (ما تم إنجازه وما يبقى لإنجازه)

  • معايير القبول للجلسة الحالية

  • التذكيرات التقنية المحددة

.agents/INDEX.adoc-- نقطة الدخول. يلخّص القواعد المطلقة، والجلسات الحديثة، والأهم من ذلكملف مشاريعيتم إدارتها بنفس المنهجية. حتى الآن، خمسة مشاريع مدرجة فيها :

----
----
| magic-stick    | Session 23 | SCRIPT_VERIFICATION.adoc | 2026-04-27 |
| bakery-gradle  | Session 11 | TEST_COVERAGE_ANALYSIS   | 2026-04-27 |
| cheroliv.com   | Session 9  | TEST_COVERAGE_ANALYSIS   | 2026-04-27 |
| plantuml-gradle| Session 133| TEST_COVERAGE_ANALYSIS   | 2026-04-23 |
| jhipster-gradle-plugins | Session 1 | TEST_COVERAGE_ANALYSIS | 2026-04-28 |
----

**`*_ESSENTIALS.adoc`** -- إضافة حديثة (جلسة 109، البرنامج المساعد plantuml-plugin) لتحسين السياق المتحمس بشكل أكبر. بدلاً من تحميل 200 سطر من سياق الأعمال على مجموعة مفاتيح واجهة برمجة التطبيقات، أتحمل 50 سطرًا من الأساسيات، وتظل 150 سطرًا أخرى في وضع التحميل المتكاسل في`*_REFERENCE.adoc`.

النتيجة المقاسة: مرور من**~25k tokens EAGER إلى ~10k tokens**(مكسب 60٪). الوكيل لم يعد بحاجة إلى تذكيرات تستهلك الطاقة.

==== الحلقة المفقودة : `opencode.json

عليّ أن أعترف لك بشيء كدت أن أنسى توثيقه. فوق جميع هذه الملفات .adoc، هناك ملف JSON صغير جدًا لا يعمل شيء بدونه. اسمه`opencode.json`وهو يكوّن ستة أسطر. حرفياً ستة أسطر.

[source,json]
----
{
  "$schema": "https://opencode.ai/config.json",
  "instructions": [
    "AGENT.adoc"
  ]
}
----

هذا هو الملف الذي يقول لـ Opencode: « عند التشغيل، تحميل `AGENT.adoc`بشكل تلقائي. بدونه، الوكيل هو صفحة فارغة تمامًا كما وصفته في بداية المقال. معه، الوكيل يمتلك بالفعل في يده القواعد المطلقة، بنية المشروع، والأوامر الأساسية — حتى قبل أن أقول مرحبًا.

اكتشفت أهمية هذا الملف بالصدفة. على`bakery-plugin`، لم يكن موجوداً. كنت أتساءل لماذا كان الوكيل بشكل منهجي أكثر « ضائع » على هذا المشروع مقارنة بالآخرين. كانت القواعد المطلقة جيدًا في`AGENT.adoc`— لكن`AGENT.adoc`لم يُحمل أبدًا. لم يكن الوكيل يقرأ سوى ما كنت أخبره بقراءته، يدويًا، في كل جلسة. كانت الجلسة 11 من`bakery-plugin`عندما أدركت غياب`opencode.json`. أنا أنشأته — و بدأت الجلسة 12 مثل باقي الجلسات.

هذا الملف واضح للغاية بالنسبة لي الآن إلى درجة أنني لم أكن أفكر فيه حتى. إنه خطأ كلاسيكي من مطور يعرف أداته جيدًا. اليوم، أقوم بإنشائه بشكل منهجي *avant*`AGENT.adoc`. هذا هو الحجر الأول.

==== الثنائية لـ `INDEX.adoc

تفصيل دقيق آخر يستحق أن يُوضَّح :`INDEX.adoc`يعيش في`.agents/`— ملف قدمته كـ LAZY. ومع ذلك، أدرجته كـ EAGER في جميع جدولي. يوجد توتر ظاهر هنا.

الواقع الميداني: الملفات`.agents/INDEX.adoc`يتم تحميلها تلقائيًا في بداية الجلسة، تمامًا كما`AGENT.adoc` et `PROMPT_REPRISE.adoc`. هم في`.agents/`لأسباب تنظيمية — لا تغزو الجذر — لكن سلوكهم متحمس.

على`plantuml-plugin`, `INDEX.adoc`يبلغ 200 سطرًا ويحتوي على القواعد المطلقة *الكاملة* مع تاريخها (دروس الجلسات السابقة)، وEPICs مع الدرجات، ومحفظه المشاريع. هذا المستند هو الذي يرجعه الوكيل لمعرفة « حيث نحن ». على`bakery-plugin`, وهو يحتوي على 150 سطرًا مع خريطة الطريق والجلسات الحديثة.

التكرار الطوعي بين`AGENT.adoc` et `INDEX.adoc`قد يفاجئ. القواعد المطلقة موجودة في كلا الأمرين. لماذا؟ لأنهم يملأون دورين مختلفين : في`AGENT.adoc`, هنَّ *تفسيرية*(الحكاية الخاصة بالقاعدة، الدرس المستفاد) ; في`INDEX.adoc`, هن *تنفيذيات* (القاعدة العارية، بدون مبرر، لاستشارة سريعة). الوكيل يقرأ`AGENT.adoc`مرّة واحدة للفهم؛ فإنه يعيد القراءة`INDEX.adoc`في كل جلسة لـ *تطبيق*. استخدامان، تنسيقان

[plantuml, format=svg, id=diag-dualite-agent-index, alt="Comparaison entre AGENT.adoc (narratif) et INDEX.adoc (exécutif)"]
----
@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center

title ثنائية AGENT.adoc ←→ INDEX.adoc
left to right direction

rectangle "AGENT.adoc\n(الجذر — EAGER)" as AGENT #E3F2FD {
  rectangle "📖 **الصيغة السردية**
القصّة الخاصة بالقاعدة
الدّرس المستفاد، السياق" as NARR
  rectangle "�🏗️ **العمارة الكاملة**
هيكل المشروع، المكونات
Backlog التفصيلي US" as ARCHI
  rectangle "📋 **القواعد التوضيحية**
لماذا توجد القاعدة
تاريخ الحادث" as EXPL
}

rectangle "INDEX.adoc\n(.agents/ — EAGER)" as INDEX #E8F5E9 {
  rectangle "�⚡ **التنسيق التنفيذي**
القاعدة العارية، بدون مبرر
استشارة سريعة" as EXEC
  rectangle "�📊 **Roadmap & EPICs**
ملخص الجدول
التقدم، النتيجة، الأولوية" as ROAD
  rectangle "🌐 **ملف المشاريع**
عرض عام
5 مشاريع متزامنة" as PORT
}

AGENT --> INDEX : "الوكيل يقرأ AGENT.adoc\nمرة واحدة **لفهم**"
INDEX --> AGENT : "Agent relit INDEX.adoc
كل جلسة لـ **تطبيق**"

note bottom of AGENT
  Taille max : 200 lignes
end note

note bottom of INDEX
  Taille max : 200 lignes
  Source de vérité en cas de divergence
end note

@enduml
----

هذه التكرار المتقصد هو خيار تصميم. إنه يستهلك حوالي 50 سطرًا إضافيًا من رموز EAGER — لكنه يضمن أن الوكيل دائمًا لديه القواعد أمام عينيه، حتى في الشكل المختصر الذي يسهل الامتثال الفوري.

=== ملفات LAZY: دليل المالك

هذه الملفات تعيش في`.agents/`ولا تُقرأ إلا عندما يحتاج الوكيل إليها. إنها تشكل الثروة الحقيقية للطريقة، لأنها تراكم معرفة المشروع دون تلويث السياق الحالي.

[plantuml, format=svg, id=diag-agents-tree, alt="Arborescence complète du dossier .agents/"]
----
@startuml
skinparam folderBackgroundColor #E3F2FD
skinparam folderBorderColor #1565C0
skinparam fileBackgroundColor #FFF3E0
skinparam fileBorderColor #EF6C00

folder ".وكلاء/" as ROOT {
  file "INDEX.adoc
(EAGER -- 200 أسطر)" as IDX #E8F5E9
  file "AGENT_SESSION_MANAGER.adoc
(جلسة قالب)" as ASM
  file "SESSION_CHECKLIST.adoc\n(متى التغيير)" as CHK
  file "PROCEDURES.adoc
(6 مراحل + LAZY/EAGER)" as PRO
  file "SESSIONS_HISTORY.adoc
(كل الجلسات)" as HIS

  folder "جلسات/" as SESS {
    file "1-chore-migration.adoc" as S1
    file "109-التشكل-كسول.adoc" as S109 #FFECB3
    file "133-epic11-article.adoc" as S133
    file "... +130 آخرين" as SMORE
  }

  folder "الأرشيف/" as ARCH {
    file "المهام_المكتملة_2026-04.adoc" as CTA
    file "SESSIONS_HISTORY_83-95.adoc" as SHIST
    folder "جلسات_ملخصات/" as SUM {
      file "SESSION_64_SUMMARY.adoc" as SU64
      file "SESSION_73_SUMMARY.adoc" as SU73
      file "..." as SUMORE
    }
    folder "prompts_أرشيف/" as PARCH {
      file "PROMPT_REPRISE_S65.adoc" as PR65
      file "PROMPT_REPRISE_S75.adoc" as PR75
      file "..." as PMORE
    }
  }
}

IDX --> SESS : "فهرس"
IDX --> HIS : "فهرس"
IDX --> ARCH : "مرجع"

note right of S109
  Session 109 =
  Formalisation stratégie
  LAZY/EAGER
  Token : ~25k → ~10k
end note

@enduml
----

الهيكل الشجري أعلاه يُظهر الهيكل الحقيقي للمجلد.`.agents/`على`plantuml-plugin`, المشروع الأكثر نضجًا. لاحظ العمق في ثلاث طبقات: ملفات الجذر (البيانات التعريفية)، المجلد`sessions/`(الأرشيفات الزمنية), ملف`archives/`(التجميعات والملخصات). هذا العمق هو الذي يحول الحوكمة من ملف TODO بسيط إلى**ذاكرة تنظيمية كاملة**.

**.agents/sessions/{N}-{العنوان}.adoc**-- الأرشيفات التفصيلية لكل جلسة. حاليًا :

* `plantuml-plugin` : **133 جلسة مؤرشفة**(من الجلسة 1 إلى الجلسة 133)
* `bakery-plugin` : **11 جلسات**
* `magic-stick`:**23 جلسات**
* `cheroliv.com` : **9 جلسات رسمية**+ 7 جلسات ما قبل النظام أعيد بناؤها بأثر رجعي

يحتوي كل أرشيف على السياق الكامل للجلسة، والقرارات المتخذة، والمشكلات التي واجهت وحلها، والأوامر التي نفذت وناتجها.

**.agents/SESSIONS_HISTORY.adoc**-- جدول ملخص لجميع الجلسات مع درجة. مثال على`cheroliv.com`:

----

| -6 | 2025-05 | chore | Initialisation projet Gradle/JBake | 7/10 |  1 | 2026-04-25 | chore | Migration gouvernance agent | 8/10 |  7 | 2026-04-27 | debug/fix | Correction publishSite | 9/10 |  8 | 2026-04-27 | analyse | Analyse article 0108 | 7/10

**.agents/COMPLETED_TASKS_ARCHIVE_{شهر}.adoc**المهام المكتملة المؤرشفة شهريًا، لتجنب إرهاق الباك-لوج النشط. عندما تُنهي قصة المستخدم، يتم نقلها إلى هنا. يبقى الباك-لوج قابلاً للقراءة: الحد الأقصى 10 عناصر نشطة.

**.agents/PROCEDURES.adoc**-- قوالب مفصلة لإجراءات نهاية الجلسة. طويلة، لكنها تُقرأ مرة واحدة فقط من قبل الوكيل عندما يتعلم الطريقة. بعد ذلك، يصبح الإجراء ميكانيكياً.

**.agents/AGENT_MODUS_OPERANDI.adoc**-- الوثيقة الاستراتيجية الكاملة. على`plantuml-plugin`, هذا الملف يفعل**900+ أسطر**و هو في الواقع يُدعى`AGENT_METHODOLOGIES.adoc`— غيّرتُ الاسم بين كتابة هذه المقالة وتفعيلها الفعلي. هذا النوع من الاختلاف في التسمية لا مفر منه في نظام يدوي يتطور. الأهم هو اتفاقية التسمية: إذا كان الملف يوثّق *الطريقة*، فيبدأ بـ`AGENT_`أو بادئة صريحة. يُوثق منهجية Eager/Lazy، والأنماط التي يجب اتباعها والأنماط المضادة التي يجب تجنبها. إنه LAZY لأن الوكيل لا يحتاج إلى إعادة قراءة الاستراتيجية بأكملها في كل جلسة، فقط عندما يكون هناك غموض.

**`*_REFERENCE.adoc`** -- المراجع التقنية الخاصة بالمشروع. على`magic-stick`, ملفين LAZY كثيفين:

* `AB_PARTITION_REFERENCE.adoc`(147 سطر) -- تقسيم المعمارية A/B GPT, النصوص`update-system.sh`, الأحجام المقدرة, آلية التراجع
* `BOOT_TEST_REFERENCE.adoc`(144 سطر) -- إجراء QEMU + VNC لاختبار تمهيد ISO بدون جهاز مادي، قائمة تحقق BIOS/UEFI، قيود CI/CD

على`plantuml-plugin`(Empty)

* `ARCHITECTURE.adoc`(134 سطرًا) -- الهيكل 11 فئة بيانات، نقاط انتباه (مخاطر يجب تجنبها)، أوامر اختبار محسّنة
* `API_KEY_POOL_REFERENCE.adoc`-- تفاصيل كاملة لمجمع المفاتيح (LAZY أثناء`ESSENTIALS`هو EAGER)

== الوكلاء المتخصصون : فريق افتراضي

لا تقتصر الحوكمة على ملفات سلبية. لقد قمت بصياغة بعض**أدوار الوكلاء المتخصصين**في ملفات LAZY المخصصة، التي تحدد سير العمل المتوقع وفقًا لنوع المهمة.

|===
|وكيل |ملف |الدور |مشروع |**مبرمج** |`CODER.adoc` |التنفيذ FTL/CSS/JS، الوسوم الدلالية، معايير إمكانية الوصول |cheroliv.com |**سكروم ماستر** |`SCRUM_MASTER.adoc` |التخطيط US, التقسيم إلى مهام فرعية, اكتشاف الاعتماديات |cheroliv.com |**PlantUML مصمم** |`PLANTUML_DESIGNER.adoc` |إنشاء الرسوم البيانية, صياغة PUML, تكامل JBake |cheroliv.com
|===

الملف`CODER.adoc`على`cheroliv.com`يحتوي على قواعد ملموسة : _واحد فقط`<h1>`لكل صفحة_, _إضافة البادئة ال الطرق مع`${content.rootpath}`_, _إعلان اللغة`<html lang="${content.lang!"fr"}">`_. هذه الاتفاقيات، التي تم كتابتها مرة واحدة، تُحترم تلقائيًا من قبل الوكيل منذ الجلسة 1.

الملف`SCRUM_MASTER.adoc`يفرض هيكلًا للمخرج:**الهدف**, **مهام**(مرتبة مع تعيين),**معايير القبول**, **المخاطر**. عندما أطلب خطة عمل، ينتج الوكيل هذه الهيكلية دون أن أطلبها. الحوكمة**برنامج**الوكيل.

==== عندما يصبح الوكلاء المتخصصون لا غنى عنهم

في بداية المشروع، لا تحتاج إليهم —`AGENT.adoc`يكفي كثيرًا. لكن عندما ينمو المشروع (لنفترض، ما بعد 20 جلسة)، يجب أن يحذّرك إشارتان :

1. يخلط الوكيل الاتفاقيات بين مجالين متميزين (مثل: صياغة PlantUML وقواعد CSS)
2. أنت تقضي وقتًا أطول في تصحيح الوكيل حول الاتفاقيات التي شرحت له خمس مرات بالفعل

على`cheroliv.com`, وصل إلى الجلسة... 1. نعم، من البداية. لأن هذا المشروع هو موقع ويب يحتوي على ثلاث لغات (FTL, CSS, JS)، محتوى `AsciiDoc`، ومخططات `PlantUML` — ثلاثة مجالات لا علاقة لها ببعض. الوكيل `CODER` يحتاج إلى معرفة أحجام الخطوط والاستعلامات الوسائطية ; الوكيل `PLANTUML_DESIGNER` يحتاج إلى معرفة الصياغة`@startuml`. بدون فصل، الوكيل CODER كان يقترح لي مخططات، وبالعكس. الفوضى.

على`jhipster-gradle-plugins`, قمت بإنشاء وكيين متخصصين ملائمين لتطوير ملحقات Gradle :`PLUGIN_DEVELOPER.adoc` et `BACKLOG_MANAGER.adoc`. الأول يشفّر جميع اتفاقيات Kotlin/Gradle (لا`!!`, فئات البيانات للنماذج,`@TaskAction`للمهام). الثاني يعرف أن`persistence`يجب أن يكون مستقرًا قبل أن`assistant`لا يبدأ تطويره — اعتمادية حاسمة في مستودع أحادي

الخطأ الذي لا ينبغي ارتكابه: إنشاء عدد كبير جدًا من الوكلاء في وقت مبكر.`plantuml-plugin`انتظر الجلسة 108 قبل تحديد وكيل متخصص لمجموعة مفاتيح API. قبل ذلك، كان السياق التجاري محتوى في`AGENT.adoc`. القاعدة التجريبية: يُبرر وكيل متخصص عندما يتجاوز مجال عمله 100 سطر من التوثيق.

==== اتفاقية تسمية الجلسات

تفصيل يبدو تافهاً لكنه يصبح حرجًا عندما نصل إلى 100 جلسة. كيف يتم تسمية ملفات الأرشيف؟

تعلمت بصعوبة أن اتفاقية ضرورية — أربعة مشاريع، أربعة تنسيقات مختلفة في البداية، ولم أعد أستطيع متابعتها. اليوم، الاتفاقية التي استقرت عليها هي :

{N}-{type}-{sujet-kebab-case}.adoc

أمثلة ملموسة:

* `1-chore-migration-gouvernance-agent.adoc`— الجلسة 1، نوع المهمة
* `10-solidification-tests.adoc`— الجلسة 10، من دون نوع صريح (الموضوع كافٍ)
* `036-debug-graphify-symlink-epic9.adoc`— جلسة 36 مع رقم مكون من 3 أرقام للترتيب

رقم الجلسة هو معيار الفرز الرئيسي. المشاريع التي تستخدم أرقامًا مكونة من ثلاثة أرقام (001, 036, 133) تتجنب مشاكل الفرز اللفظي عندما يتجاوز الرقم 99. هذا ما أستخدمه الآن على`magic-stick`:`001-init-projet.adoc`, `036-debug-graphify-symlink-epic9.adoc`.

النوع اختياري ومشتق من كلمات مفتاحية للجلسة (debug, feature, refactor, docs, chore, test). الموضوع بتنسيق kebab-case هو الجزء الأهم: يجب أن يسمح بالعثور على الجلسة دون فتح الملف. إذا كنت تتساءل « ما كانت الجلسة التي عدّلنا فيها مهلة انتهاء اختبارات التكامل ؟ »، الجواب هو`124-fix-timeout-integration-test.adoc`.

للجلسات التاريخية المعاد بناؤها (المشاريع التي ولدت قبل الحوكمة)، أستخدم أرقامًا سالبة. على`cheroliv.com`, تغطي الجلسات من -6 إلى 0 كامل تاريخ ما قبل الحوكمة للمشروع. وأما بالنسبة للجلسات « غير الموثقة » أو المفقودة، فأنا أقوم بإنشاء إدخال في`SESSIONS_HISTORY.adoc`بدون أرشيف مطابق، مع نتيجة`?`إنه أكثر صدقًا من التظاهر.

[plantuml, format=svg, id=diag-naming-convention, alt="Arbre de décision pour le nommage des fichiers de session"]

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

title اتفاقية تسمية الجلسات start

:Une session se termine; note right: Trigger "نهاية الجلسة"

if (Session antérieure\nà la gouvernance ?) then (oui) :Numéro NÉGATIF\n-6, -5 …​ 0; note right: Historique\nreconstitué :Suffixe : reconstitution; else (non) :Numéro POSITIF\nsur 3 chiffres si > 99; note right: 001, 036, 133\npour le tri lexicographique

:Détecter le **TYPE**;
if (Mots-clés trouvés ?) then (oui)
  :debug / feature / refactor\ndocs / chore / test;
else (non)
  :Omettre le type\n(le sujet suffit);
endif
  :Formuler le **SUJET** en kebab-case;
  note right
    Ex: fix-timeout-integration-test
    Doit permettre de retrouver
    sans ouvrir le fichier
  end note
endif

note right • 1-chore-migration-gouvernance.adoc • 036-debug-graphify-symlink.adoc • 124-fix-timeout-integration-test.adoc • 133-epic11-article-blog-kg.adoc end note

if (Session documentée ?) then (oui) :Créer archive dans sessions/; :Ajouter ligne SESSIONS_HISTORY\navec score X/10; else (non) :Ajouter ligne SESSIONS_HISTORY\navec score ?\nsans archive; note right: L’honnêteté\nplutôt que le vide endif

stop @enduml

==== TEST_COVERAGE_ANALYSIS.adoc` — تفصيل الخطوة 5

الخطوة 5 من إجراء نهاية الجلسة هي الأكثر غموضًا. تقول « تحديث`TEST_COVERAGE_ANALYSIS.adoc`إذا تم إضافة أو تعديل الاختبارات. » كيف يبدو هذا الملف؟

على`plantuml-plugin`, لقد تطور من عدد قليل من الأسطر إلى بنية كاملة. وهنا شكله المستقر:

[source]

Analyse de Couverture de Tests

Suivi des Tests

Classe de test

Type

Tests

Statut

Dernière MAJ

PlantumlServiceTest

unit

45/45

✅ PASS

2026-04-23

ApiKeyPoolTest

integration

15/15

✅ PASS

2026-04-20

Historique par Session

| Session | Tests ajoutés | Tests modifiés | Couverture | 133 | 0 | 2 | 100% | 132 | 5 | 0 | 100%

----

الاهتمام ليس الملف نفسه — بل هو الالتزام بـ توثيق ما تغير. بدون هذه الخطوة، بعد 50 جلسة، لن تعرف أي الاختبارات تغطي quoi. والوكيل أيضًا لا يعرف. يصبح الملف المصدر الوحيد للحقيقة لتغطية اختبارات المشروع.

للمشاريع التي لا تحتوي على اختبارات تقليدية (مثل`magic-stick`الذي يختبر نصوص bash), الخطوة 5 يتم استبداله بـ`SCRIPT_VERIFICATION.adoc`الآلية هي نفسها: ملف يتتبع حالة التحقق من النصوص. قم بتكييف الخطوة 5 مع مشروعك، ولكن لا تتخطاها أبدًا. إنها شبكة الأمان التي تمنع التراجع الصامت.

إذا لم يكن مشروعك يحتوي على لا يوجد اختبار — سواءً وحدة أو وظيفي أو نص — فأنشئ الملف الفارغ مع قسم «المهام: تحديد استراتيجية اختبار». هذا إشارة مرجعية ستذكّرك مستقبلك أن هذا الموضوع لم يُعالج بعد.

[plantuml, format=svg, id=diag-session-flow, alt="Flux d’une session type avec Eager/Lazy et agents"] ---- @startuml skinparam backgroundColor #FEFEFE

start

:Début session; note right: L’agent est une page blanche

:Chargement EAGER auto; note right * AGENT.adoc (règles absolues) * PROMPT_REPRISE.adoc (mission N) * INDEX.adoc (état projet) end note

if (Mission claire ?) then (oui) :Exécution directe; else (non) :Charge LAZY sur demande; note right * SESSIONS_HISTORY.adoc (contexte passé) * sessions/{N-1}-.adoc (décisions) * *REFERENCE.adoc (architechture) end note endif

:Délégation agent spécialisé ?;

if (CODER ?) then (oui) :Lit CODER.adoc; :Suit conventions FTL/CSS; elseif (SCRUM Master ?) then (oui) :Lit SCRUM_MASTER.adoc; :Structure livrable imposée; elseif (PlantUML ?) then (oui) :Lit PLANTUML_DESIGNER.adoc; :Syntaxe PUML + intégration; else (non) endif

:Travail de la session;

:Fin de session (trigger utilisateur);

:Procédure 6 étapes; note right 1. Archive sessions/N-.adoc 2. Maj PROMPT_REPRISE.adoc (N+1) 3. Maj SESSIONS_HISTORY.adoc 4. Maj INDEX.adoc 5. Maj TEST_COVERAGE (si applicable) 6. Maj COMPLETED_TASKS_ARCHIVE.adoc end note

:Checklist [✅] x 6;

stop @enduml ----

الرسم البياني أعلاه يُظهر دورة الحياة الكاملة لجلسة. النقطة الأساسية هي الانقسام بعد التحميل EAGER: إما أن تكون المهمة واضحة بما يكفي للتنفيذ المباشر (80٪ من الحالات)، أو يقوم الوكيل بتحميل LAZY لحل غموض (20٪ من الحالات). هذا التمييز هو ما يوفّر الرموز.

== إجراء نهاية الجلسة : القاعدة الذهبية

=== لماذا لا غنى عنها

بدون هذا الإجراء، لا تُفيد استراتيجية Eager/Lazy شيئًا. هي التي تحوّل عمل الجلسة إلى معلومات مستمرة. يتم تنفيذها.بناءً على الطلب الصريح للمستخدم(الكلمات المفتاحية: "نهاية الجلسة", "أنا أغادر", وما إلى ذلك), وهيإلزامي-- لا استثناء، لا إهمال.

الملف`SESSION_CHECKLIST.adoc`يحدد مقاييس الجلسة المثالية :

* المدة: 15-30 دقيقة * الملفات المعدلة: من 1 إلى 3 كحد أقصى * تبادلات LLM : 5-10 رسائل * السياق التوكنز : < 50k

وأشارات يجب تغيير الجلسة: _النموذج اللغوي يكرر أخطاءً تم تصحيحها بالفعل، أكثر من 3 ملفات تم تعديلها بشكل متوازٍ، المحادثة > 50 رسالة. القاعدة الذهبية :من الأفضل 5 جلسات مدة 20 دقيقة بدلا من جلسة واحدة مدة ساعتين مع تصحيح أخطاء فوضوي.

=== تدفق الخطوات الست (صمتًا)

[plantuml, format=svg, id=diag-end-session-flow, alt="Flux de la procédure de fin de session"] ---- @startuml skinparam defaultTextAlignment center skinparam wrapWidth 200 skinparam activityBackgroundColor #E3F2FD

start :L’utilisateur dit "نهاية الجلسة"; note right: Mots-clés déclencheurs

:Agent détecte le trigger;

:Étape 1\nCréer archive\n`.agents/sessions/N-.adoc`; note right: Tout le contexte de la session

:Étape 2\nMettre à jour\n`PROMPT_REPRISE.adoc`; note right: Mission N + critères d’acceptation N+1

:Étape 3\nMettre à jour\n`SESSIONS_HISTORY.adoc`; note right: Ligne récap : # / Date / Type / Sujet / Score

:Étape 4\nMettre à jour\n`INDEX.adoc`; note right: État courant, roadmap, fichiers modifiés

:Étape 5\nMettre à jour\n`TEST_COVERAGE_ANALYSIS.adoc`; note right: Si tests ajoutés ou modifiés

:Étape 6\nMettre à jour\n`COMPLETED_TASKS_ARCHIVE.adoc`; note right: Archiver tâches terminées

:Afficher la checklist de confirmation; note right: Vérifier que chaque [✅] est mérité

stop @enduml ----

=== نتائج 150+ جلسات

هذه هي النتيجة التي تنتج عن تطبيق هذه الطريقة بشكل منهجي على مشاريعي الأربعة:

إضافة PlantUML:

* 133 جلساتمن بداية المشروع * 240/240 اختبارًا نجح(100% التغطية) — EPICs 1-7 مكتملة * 57 سيناريوهات Cucumber BDDتم التحقق منها * قاعدة أمان على ملفات الإعدادات ناتجة عن خطأ حقيقي (جلسة 2 bakery-plugin)

إضافة المخبز:

* 11 جلساتفي أسبوعين * تم إكمال نقل Supabase → Firebase (تم إصلاح 9 اختبارات) * EPIC 6 (publishProfile) يعمل في الإنتاج * قاعدة 0 تم إنشاؤها :`publishToMavenLocal`إلزامي بعد كل تعديل

عصا سحرية :

* 23 جلساتلبناء نظام مباشر Xubuntu مع تقسيم A/B * أول ISO تم إنشاؤه في الجلسة 10 * اختبارات الإقلاع الرسمية لـ QEMU + VNC (وثيقة LAZY من 144 سطر) * CI/CD SourceForge يعمل

cheroliv.com :

* 9 جلسات رسمية+ إعادة تشكيل 7 جلسات ما قبل النظام * المادة 0101 (OpenCode PATH) نُشر * المادة 0108 (هذا) أعيد كتابتها بعد تحليل ثغراتها * الإدارة الكاملة تم ترحيلها من Markdown إلى AsciiDoc

=== قائمة المراجعة النهائية

بعد التنفيذ الصامت للخطوات الست، يجب على الوكيل عرض قائمة تحقق التأكيد:

----

✅ Procédure de fin de session exécutée 📋 Checklist :

القاعدة المطلقة: لا يمكن وضع علامة على أي خطوة`[✅]إذا لم يتم تعديل الملف فعليًا والتحقق منه.

== دليل Bootstrap: اليوم 1، الجلسة 0

أنت مقتنع بالطريقة. تريد تطبيقها على مشروع جديد. من أين تبدأ؟

عشتُ تلك اللحظة في 28 أبريل 2026. أفتح Opencode على`jhipster-gradle-plugins, مستودعي الأحادي المكون من مكونين Gradle JHipستر. هذا مشروع موجود بالفعل — الكود موجود، ومهام Gradle تعمل. لكن حوكمة الوكيل؟ صفر. صفحة فارغة. كما`plantuml-plugin`في دورته الأولى، منذ أشهر

هذه هي الإجراءات الدقيقة التي اتبعتها، وسأتبعها لكل مشروع جديد. لاحظ الترتيب جيدًا — إنه مهم.

[plantuml, format=svg, id=diag-bootstrap, alt="Flux de bootstrap en 6 étapes pour initialiser la gouvernance agent sur un nouveau projet"] ---- @startuml skinparam backgroundColor #FEFEFE skinparam defaultTextAlignment center skinparam wrapWidth 250 skinparam activityBackgroundColor #E8F5E9

title Bootstrap حوكمة — اليوم 1، الجلسة 0 start :Étape 0\nCréer opencode.json\n(6 lignes, instructions: AGENT.adoc); note right: Le pont qui charge\nAGENT.adoc automatiquement

:Étape 1\nCréer les dossiers\nmkdir -p .agents/sessions/ .agents/archives/; note right: Les conteneurs vides\navant que l’agent écrive dedans

:Étape 2\nCréer AGENT.adoc\n(200 lignes, règles absolues); note right: Le fichier maître\nStructure minimale v1

:Étape 3\nCréer PROMPT_REPRISE.adoc\nMission session 1 (max 70 lignes); note right: Ce que l’agent doit\nfaire à la prochaine session

:Étape 4\nCréer .agents/INDEX.adoc\nRègles exécutives + roadmap; note right: Point d’entrée EAGER\ndans le dossier LAZY

:Étape 5\nCréer les fichiers LAZY structurants\n6 fichiers : SESSIONS_HISTORY, CHECKLIST, etc.; note right • SESSIONS_HISTORY.adoc • SESSION_CHECKLIST.adoc • PROCEDURES.adoc • AGENT_SESSION_MANAGER.adoc • TEST_COVERAGE_ANALYSIS.adoc • Agents spécialisés (si besoin) end note

:Étape 6\nAjouter le projet au Portefeuille\nMettre à jour TOUS les INDEX.adoc existants; note right: Maintenance transverse\nObligatoire mais fastidieuse

:✅ Bootstrap terminé\nSession 1 prête; note right: 20 minutes investies\nDes centaines économisées

stop @enduml ----

=== الخطوة 0 : إنشاء opencode.json

هذا هو الملف الأول. لا`AGENT.adoc, لا`INDEX.adoc`.opencode.json`أولاً، لسبب بسيط: إذا تقوم بإنشاء`AGENT.adoc`أولاً، ستنسى إنشاء الجسر الذي يشحنه تلقائيًا. لقد فعلته على`bakery-plugin, أعرف ما أتحدث عنه.

=== الخطوة 1: إنشاء المجلدات

[source,bash] ---- mkdir -p .agents/sessions .agents/archives ----

مجلدان فارغان`sessions/سيتلقى الأرشيفات لكل جلسة.`archives/`سيستقبل COMPLETED_TASKS_ARCHIVE الشهري. يجب أن تكون هذه المجلدات موجودة *قبل أن يحتاج الوكيل إلى الكتابة فيها. الوكيل الذي يجب أن ينشئ المجلد والملف في نفس الوقت، هو وكيل يمكن أن يفشل بصمت.

=== الخطوة 2 : إنشاء `AGENT.adoc — الملف الرئيسي

الحد الأدنى للهيكل للنسخة الأولى (ستنمو) :

[source] ---- = {NOM_PROJET} — Directives Agent

[CAUTION] ----

وقف إلزاميقبل rm, Write, الحذف :

1. اقرأ الملف بالكامل 2. تحقق git ls-files 3. اطلب تأكيد 4. انتظار "نعم

== مشروع

اسم…​ ستاك: …​ توثيق: AsciiDoc

== القواعد المطلقة

=== 0. بيئة التطوير

الأوامر الأساسية…​

=== 1. COMMITS/GIT

حظر رسمي…​

=== 1b. ملفات التكوين — قاعدة السلامة المطلقة

لا تسحق أبداً …​

=== 2. الاختبارات في نهاية الجلسة

حظر رسمي…​

=== 3. إجراء نهاية الجلسة

الـ6 خطوات إجبارية…​

== إدارة السياق — LAZY/EAGER

ملفات EAGER / ملفات LAZY…​

هذا النموذج الأدنى يسمح للوكيل بالبدء. النسخة الغنية — مع هيكل المشروع، والمكونات الأساسية، والملاحم (EPICs)، وقائمة المهام — ستأتي في الجلسة 1، عندما يكون الوكيل قد حصل بالفعل على القواعد الأساسية في يديه ويستطيع مساعدتك في إثراء المستند.

=== الخطوة 3 : إنشاء PROMPT_REPRISE.adoc — مهمة الجلسة 1

ملف يصرح بشكل صريح: « هذه هي الجلسة 1، المهمة التي يجب تحديدها. » الحد الأقصى 70 سطرًا، مع قسم جلسة 0 (ملخص التمهيد) وقسم جلسة 1 (الأولويات التي يجب تحديدها مع المستخدم).

=== الخطوة 4 : إنشاء .agents/INDEX.adoc — نقطة الدخول

الملف الذي سيحتوي على القواعد المطلقة (النسخة التنفيذية) وجدول الجلسات. للتثبيت (bootstrap)، فإنه يسرد القواعد من 0 إلى 3 بصيغتها المختصرة، محفظة المشاريع (بما في ذلك المشروع الجديد مع إيموجي 🆕)، وخارطة الطريق الفارغة الجاهزة ليتم ملؤها.

=== الخطوة 5: إنشاء ملفات LAZY المنظمة

بالترتيب :

1. .agents/SESSIONS_HISTORY.adoc— جدول يحتوي فقط على الجلسة 0 2. .agents/SESSION_CHECKLIST.adoc— القالب « متى تغيير الجلسة 3. .agents/PROCEDURES.adoc— الإجراء الكامل للخطوات الست + EAGER/LAZY 4. .agents/AGENT_SESSION_MANAGER.adoc— قالب الأرشيف 5. .agents/TEST_COVERAGE_ANALYSIS.adoc— جدول تتبع الاختبارات، فارغ في البداية

إذا كان مشروعك يحتوي على مجال عمل معقد (مثل`jhipster-gradle-plugins`مع persistence/assistant) mono-repo الخاص به، قم بإنشاء الوكلاء المتخصصين الآن :

1. .agents/PLUGIN_DEVELOPER.adoc— اتفاقيات التعليمات البرمجية وحدود الاعتماديات (إذا كان مكونًا إضافيًا) 2. .agents/BACKLOG_MANAGER.adoc— بنية التخطيط والمخاطر المحددة

لا تنشئ وكلاء لن تستخدمهم. الوكيل الذي لا يحتوي على اتفاقيات ملموسة للترميز هو ملف ميت يلوث..agents/.

=== الخطوة 6 : إضافة المشروع إلى محفظة جميع المشاريع

هذه هي الخطوة التي ننساها دائمًا. كل`INDEX.adoc`يحتوي كل مشروع على جدول « محفظة المشاريع » الذي يسرد جميع المشاريع باستخدام نفس المنهجية. عند إنشاء مشروع جديد، يجب عليك :

1. إضافة سطر في محفظة المشروع الجديد (المنطق) 2. إضافة سطر في محفظة جميع المشاريع الحالية — نعم، جميعها

على أربعة (الآن خمسة) من مشاريعي، هذا يعني فتح ال`INDEX.adoc` de magic-stick, bakery-gradle, cheroliv.com, `plantuml-gradle`وأضف السطر هناك`jhipster-gradle-plugins

Session 1

…​

2026-04-28 🆕.

إنه ممل. إنه يدوي. كما أنها أيضًا الطريقة الوحيدة لضمان أنه بغض النظر عن المشروع الذي تعمل عليه، فإن الوكيل يعرف ما هي المشاريع الأخرى الموجودة وما هو حالتها. في الجلسة 012 من`magic-stick، اكتشف الوكيل تناقضان في المحفظة —`bakery-gradle`كان لديه COMPLETED_TASKS_ARCHIVE متأخرًا، و`plantuml-gradle`كان هناك فرق بين وثيقة الإجراء الخاصة به (5 خطوات) ومؤشره (6 خطوات). بدون هذا الجدول العرضي، كانت هذه التناقضات ستبقى غير مرئية.

[plantuml, format=svg, id=diag-portfolio-graph, alt="Graphe du portefeuille de projets — références croisées entre INDEX.adoc"] ---- @startuml skinparam backgroundColor #FEFEFE skinparam defaultTextAlignment center skinparam nodeBackgroundColor #E3F2FD

title محفظة المشاريع — مراجع متقاطعة INDEX.adoc node "magic-stick جلسة 037 التحقق من النص البرمجي" as MS #E1BEE7 node "bakery-gradle الجلسة 11 TEST_COVERAGE" as BG #FFE0B2 node "cheroliv.com جلسة 10 TEST_COVERAGE" as CH #C8E6C9 node "plantuml-gradle جلسة 133 TEST_COVERAGE" as PG #BBDEFB node "jhipster-gradle جلسة 1 🆕 TEST_COVERAGE" as JG #FFCDD2

MS -→ BG : INDEX.adoc référence MS -→ CH : INDEX.adoc référence MS -→ PG : INDEX.adoc référence MS -→ JG : INDEX.adoc référence 🆕

BG -→ MS : INDEX.adoc référence BG -→ CH : INDEX.adoc référence BG -→ PG : INDEX.adoc référence BG -→ JG : INDEX.adoc référence 🆕

CH -→ MS : INDEX.adoc référence CH -→ BG : INDEX.adoc référence CH -→ PG : INDEX.adoc référence CH -→ JG : INDEX.adoc référence 🆕

PG -→ MS : INDEX.adoc référence PG -→ BG : INDEX.adoc référence PG -→ CH : INDEX.adoc référence PG -→ JG : INDEX.adoc référence 🆕

JG -→ MS : INDEX.adoc référence JG -→ BG : INDEX.adoc référence JG -→ CH : INDEX.adoc référence JG -→ PG : INDEX.adoc référence

note bottom of JG Quand on ajoute un projet : • 4 INDEX.adoc à mettre à jour • 1 ligne par portefeuille • Coût : 5 minutes end note

legend bottom

= Couleur

= Projet

<#E1BEE7>

magic-stick — ISO Linux live

<#FFE0B2>

bakery-gradle — Plugin JBake

<#C8E6C9>

cheroliv.com — Site personnel

<#BBDEFB>

plantuml-gradle — Plugin IA

<#FFCDD2>

Articles connexes