حکم کردن یک عامل هوش مصنوعی با استفاده از AsciiDoc: استراتژی من Eager/Lazy برای جلسات Opencode بدون نشت زمینه
منتشر شده در 24 April 2026
خلاصه
وقتی که با یک عامل هوش مصنوعی مثل Opencode در پروژههای پیچیده در چندین جلسه کار میکنیم، با یک مشکل اساسی روبرو میشویم:پخش زمینه. عامل جلسه قبلی را به یاد ندارد. همه چیز که به او توضیح داده شد — معماری، کنوانسیونها، وضعیت backlog — از دست رفته است. بازسازی این context در هر جلسه هزینهبر، کند و منبع خطاست.
این مقاله استراتژی دستساز که برای حل این مشکل ساختهام را نشان میدهد: یک sistemi حاکمیت پایدار مبتنی بر فایلهای AsciiDoc، همراه با یک دوگانهعازم/کسلبرای بهینهسازی مصرف توکن زمینه، و یکروش اجباری پایان جلسهبرای اطمینان از ادامه.
صحنه: دوشنبه ۲۱ آوریل، ۹:۰۰
من Opencode را دوباره باز میکنم تا پلاگین Gradle خودم را ادامه دهم.plantuml-plugin. دیروز شب، من سه ساعت را برای گفتگو با عامل معماری پول کلید API — چرخش راند رابن، مدیریت سهمیه، جایگزینی خودکار صرف کردم. امروز صبح، عامل به من نگاه میکند چشمهای مثل ماهی طلایی.
_ سلام، من کمککن Opencode هستم. امروز چطور میتوانم به شما کمک کنم؟ _
نه — بله, مجموعه کلیدهای API, ما در ساختار YAML بودیم. نه — مراقب,PlantumlManager est un objet Kotlin singleton, pas une classe. Pas de — Non, on a décidé hier que SyntaxValidationResult`یک کلاس sealed تودرتو در`PlantumlService.
همه چیز باید دوباره انجام شود. یا بهتر بگویم: همه چیز باید دوباره توضیح داده شود. بیست دقیقه اول جلسهام را صرف بازسازی زمینهای میکنم کهfactor دیروز آن را در دست داشته. بیست دقیقه توکنهای سوخته. بیست دقیقهای که میتوانستم کد بنویسم اما مجبور به تدریس الزامی میشوم.
این یک باگ Opencode نیست. این طبیعت ذاتی LLMهای محاورهای است: بین دو جلسه، حافظه کاری استکاملاً محو شده. عامل به یاد ندارد که مأموریت قبلی چه بود، چه تصمیماتی گرفته شده بود، چه pieg‑هایی شناسایی شده بود، چه کدی که با هم نوشتیم.
من این را دهها بار تجربه کردم. در چهار پروژه همزمان. با جلساتی که بهصورت متمرکز به دنبال یکدیگر میآیند به طول هفتهها. من محاسبه کردم: به طور متوسط,30 تا 40 % زمان جلسهمخصص به بازبینی/بازیابی/Contextualize العامل بود. در جلسه ۸۷ پروژه`plantuml-plugin`, من سر کشیدم. من دیگر نمیتوانستم هزینه توضیح دادن دوباره را برای دفعه دهم بپردازم که`AttemptEntry`است یک donnée کلاس سطح-بالا در
Oops, I accidentally wrote "donnée" (French). Need Persian. Let’s correct: " است یک داده کلاس سطح-بالا در". Yes. Ensure no extra characters. Output exactly.
</think>
است یک داده کلاس سطح-بالا در`DiagramProcessor.kt`.
من به یک سیستم نیاز داشتم. نه یک هک. یک حکومت واقعی.
پیدایش: از آشفتگی به روش
جلسات اولیه: عصر تاریکی
پروژهی اول من با Opencode,plantuml-plugin, آغاز شد بدون هیچگونه مدیریت. من یک سؤال میپرسم، عامل پاسخ میدهد، آن را تکرار میکنیم، جلسه تمام میشود و فردا از صفر شروع میکنیم. این جلسه 1 بود، سپس 2، سپس 3… تا جلسه 62 که متوجه شدم ساعتهای زیادی را به توضیح دوباره همان معماری هدر دادهام.
در جلسه ۶۲، اعداد موجود هستند :198 تست واحدی عبور میکنند, 42 تستهای عملکردی تأیید شده, پلاگین کار میکند. اما هزینه شناختی غیرقابل تحمل است. هر جلسه جدید با یک مونولوگ بیست دقیقهای در مورد ساختار پروژه آغاز میشود.
بخش site.yml حذف شد (Session 2, bakery-plugin)
روش نیز از یک آسفت به وجود میآید. در مورد پروژه`bakery-gradle`, در جلسه ۲، من از کارمند میخواهم فایل را تغییر دهم`site.yml`. العامل، بدون بررسی اینکه آیا فایل نسخهبندی شده است، یک`Write`که محتوا را بازنویسی میکند. نتیجه: توکنهای واقعی (کلیدهای API Firebase، رازهای استقرار) با مکانهای marcador fictitious جایگزین میشوند. فایل در گیت نبود — آن در`.gitignore`برای محافظت از اسرار.
بدون بکآپ. بدون`git restore`ممکن. من گیر کردم. من باید به صورت دستی فایل پیکربندی را بازسازی کنم، توکنها را در مدیران کلمه عبور من یابم، همه را بچسبانم.
این است که la از این تناوری به وجود میآیدقانون مطلق 1b:
_ هرگز कुचل نکنیدیک فایل config با یک`Write`کامل وقتی یک`Edit`یک بخش کافی است.هرگز جایگزین نکنمقادیر حساسی را با مقادیر جعلی.بررسی git check-ignore و `git ls-filesقبل از هرگونه تغییر. _
این قانون امروز در سنگ تمام فایلهای من حک شده است.AGENT.adoc et `INDEX.adoc`از بین چهار پروژه، ناشی از یک خطای واقعی بود که یک ساعت کار دستی به من هزینه داد.
مهاجرت Markdown → AsciiDoc (Session 1, cheroliv.com)
۲۵ آوریل ۲۰۲۶، روی`cheroliv.com`, من یک تصمیم اساسي میگیرم: تمام حاکمیت Markdown را به AsciiDoc تبدیل میکنم. این زیبا نیست. این کارآمد است. AsciiDoc یک ساختار معنایی ارائه میدهد که LLMها آن را بهتر میخوانند: بخشهای هیرارکشی، جداول نوعدار، هشدارها (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`. و سایت همچنان کار میکند
@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 "Eager/Lazy
فرمالیزه"
62 is "قانون ایمنی\n(site.yml)"
87 is "شکستگی
بافت"
109 is "بهینهسازی
-60% توکنها"
133 is "133 sessions\n240 tests PASS"
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
بالای timeline پیشرفت واقعی را نشان میدهد. نقطه تحول session 87 : جایی که ناراحتی از باز-contextualization تکراری آستانه تحمل را فراتر میرود و روش Eager/Lazy دیگر صرفاً یک ایده نیست و تبدیل به یک الزام شده.
استراتژی: Eager/Lazy به عمق
فلسفه : کش اطلاعاتی بهدستآمده به شناخت
رویکرد من بهطور مستقیم از مدیریت حافظه نهال کامپیوتری الهام میگیرد. هر چیزی کهضروری و بهصورت مکرر استفاده میشودباید بلافاصله قابل دسترس باشدعلاقهمند). همه چیز که استزمینهای یا حجمیباید در صورت نیاز بارگذاری شود (سست).
Eager (داشبورد) |
کسل (کتابچه مالک) |
اندازه |
< 100 خط، < 10k توکن |
بیپایان, دقیق |
بارگذاری |
خودکار، در ابتدای جلسه |
به درخواست عامل |
محتوا |
قوانین مطلق، وظیفه جاری، وضعیت بحرانی |
آرشیوهای جلسات، تاریخ کامل، روشهای دقیق، مراجع فنی |
نقش |
عامل را فوراً هدایت دهید |
پاسخ دادن به سوالات ب زمینهی عمیق |
فایلهای ایگر : داشبورد
این فایلها در ریشه هر پروژه زندگی میکنند و خودکاراً توسط عامل در ابتدای هر جلسه بارگذاری میشوند. آنها تشکیل میدهندداشبورد-- اطلاعات بحرانی، بلافاصله قابل دسترسی.
@startuml
skinparam defaultTextAlignment center
skinparam wrapWidth 200
package "ریشهٔ پروژه (حماسی - بارگذاری خودکار)" {
component "<b>AGENT.adoc</b>
قوانین مطلق
ساختار و کنوانسیونها" as AGENT
component "<b>PROMPT_REPRISE.adoc</b>
مهمت جلسه N
خلاصه N-1" as PROMPT
component "<b>INDEX.adoc</b>\nنقطه ورودی\nقوانین + جلسات" as INDEX
component "<b>*_ESSENTIALS.adoc</b>\nمحیط کاری\nبحرانی" as ESS
}
package ".agents/ (Lazy - بارگذاری عند الطلب)" {
component "<b>sessions/N-*.adoc</b>
آرشیوهای دقیق
تصمیمات & خروجی" as SESS
component "<b>SESSIONS_HISTORY.adoc</b>\nجدول خلاصه\nتاریخ/نوع/امتیاز" 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>\nBoot tests, A/B partition\nبخشهای خاص" as SPEC
}
AGENT --> PROMPT : "منابع"
AGENT --> INDEX : "منابع"
INDEX --> SESS : "فهرست"
INDEX --> HIST : "فهرست"
INDEX --> PROC : "مرجع"
INDEX --> ARCH : "مرجع"
INDEX --> REF : "مرجع"
PROMPT --> SESS : "آرشیو N-1"
PROMPT --> ESS : "کontekst کاری 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) برای بهینهسازی بیشتر زمینه Eager. به جای بارگذاری 200 خط از زمینه کاری بر روی havuz کلید API، من 50 خط از جوهر را بارگذاری میکنم، و 150 خط دیگر در حالت LAZY داخل`*_REFERENCE.adoc`.
نتیجهٔ اندازهگیری شده : عبور از**~25k توکن EAGER به ~10k توکن**(سود 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`به هرگز بارگذاری نشده بود. عامل تنها همان چیزی را که من به او میگفتم بخواند، بهصورت دستی، در هر جلسه میخواند. این جلسه ۱۱ بود از`bakery-plugin`وقتی متوجه شدم عدم وجود`opencode.json`. من آن را ایجاد کردم — و جلسه 12 همانند سایر جلسات آغاز شد.
این فایل برایم الآن اینقدر واضح شده که دیگر اصلاً به آن فکر نمیکردم. یک اشتباه کلاسیک برای توسعهدهندهای که ابزارش را خیلی خوب میشناسد. امروز من آن را بهطور منظم *قبل* میسازم`AGENT.adoc`. این اولین سنگ است.
==== دوالیت `INDEX.adoc
یک ظریف دیگر که باید صریح شود:`INDEX.adoc`زندگی میکند در`.agents/`— یک فایل که من آن را بهعنوان LAZY ارائه دادم. اما من آن را در تمام جدولهایم بهعنوان EAGER فهرست میکنم. اینجا یک تنش واضح وجود دارد.
واقعیت الميدان: پروندهها`.agents/INDEX.adoc`بهصورت خودکار در ابتدای جلسه به خوبی بارگذاری میشوند، به همان ترتیب که`AGENT.adoc` et `PROMPT_REPRISE.adoc`. آنها در`.agents/`به دلایل سازماندهی — نه ریشه را اشغال نکنیم — اما رفتار آنها EAGER است.
روی`plantuml-plugin`, `INDEX.adoc`شامل ۲۰۰ خط است و حاوی قوانین مطلق *کامل* با تاریخچهٔ آن (دروس جلسات گذشته) است، EPICs با امتیازات و portfolio پروژهها. این اسناد است که عامل آن را برای درک «کجا هستیم» معاینه میکند. بر`bakery-plugin`, او 150 خط با نقشه مسیر و جلسات اخیر مینویسد.
تکرار عمدی بین`AGENT.adoc` et `INDEX.adoc`ممکن است شگفتانگیز باشد. قوانین مطلق در هر دو حضور دارند. چرا؟ چون آنها دو نقش مختلف را بر عهده دارند: در`AGENT.adoc`, آنها *توضیحی* هستند (داستانگویی از قانون، درس آموخته) ; در`INDEX.adoc`, آنها *اجراپذیر* (قانون صریح، بدون توجیه، برای مشورت سریع). نماینده میخواند`AGENT.adoc`یک بار برای *comprendre* ; او دوباره میخواند`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 "🏗️ **معماری کامل**
ساختار پروژه، اجزاء
بکلاگ مفصل US" as ARCHI
rectangle "📋 **قوانین توضیحی**
چرا این قانون وجود دارد
تاریخچه حادثه" as EXPL
}
rectangle "INDEX.adoc
(.agents/ — EAGER)" as INDEX #E8F5E9 {
rectangle "⚡ **فرمت اجرایی**
قاعده بیپوشش، بدون توجیه
مشاوره سریع" as EXEC
rectangle "📊 **نقشه راه & EPICs**
جدول خلاصه
پیشرفت، امتیاز، اولویت" as ROAD
rectangle "**پورتفوی پروژهها**
دید افقی
5 پروژه همگامسازیشده" as PORT
}
AGENT --> INDEX : "عامل AGENT.adoc را میخواند\nیک بار تا **comprendre**"
INDEX --> AGENT : "عامل فایل 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
----
این redundantitu که بهعنوان یک گزینش طراحی است، حدود ۵۰ خط توکن EAGER اضافی مصرف میکند — اما تضمین میکند که عامل همیشه قواعد را در پیش روی خود داشته باشد، حتی در فرم خلاصهای که اطاعت فوری را تسهیل میکند.
=== فایلهای LAZY: راهنمای مالک
این فایلها در`.agents/`و فقط وقتی که عامل به آنها نیاز دارد، خوانده میشوند. آنها واقعیترین ثروت روش را تشکیل میدهند، زیرا دانش پروژه را جمعآوری میکنند بدون/context فعلی را آلوده نکنند.
[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 ".agents/" as ROOT {
file "INDEX.adoc
(EAGER -- 200 خط)" as IDX #E8F5E9
file "AGENT_SESSION_MANAGER.adoc
(جلسه الگو)" as ASM
file "SESSION_CHECKLIST.adoc
(زمان تغییر)" 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-مقاله.adoc" as S133
file "... +130 دیگر" as SMORE
}
folder "بایگانیها/" as ARCH {
file "COMPLETED_TASKS_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_archive/" 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/`sur? Wait, we need Persian: "روی". So output: " روی". Let's output that.
</think>
روی`plantuml-plugin`، پروژه بالغترین. توجه کنید به عمق در سه لایه: فایلهای ریشه (متراداده), پوشه`sessions/`(آرشیوهای زمانی), و پرونده`archives/`( تجمیعها و خلاصهها ). این عمق است که حاکمیت یک فایل TODO ساده را به**حافظه سازمانی کامل**.
**.agents/sessions/{N}-{titre}.adoc**-- بایگانیهای جزئی هر جلسه. در حال حاضر :
* `plantuml-plugin`:**133 جلسات بایگانی شده**(از جلسه 1 تا 133)
* `bakery-plugin`:**11 جلسات**
* `magic-stick`:**23 جلسات**
* `cheroliv.com`:**9 جلسه رسمی**+ 7 جلسات پیش‑سیستم بازسازی شده بهصورت رجوعی
هر بایگانی شاملcontext کامل جلسه، تصمیمات گرفته شده، مشکلات مواجه شده و راهحل آنها، دستورات اجرا شده و خروجی آنها است.
**.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_{mois}.adoc**-- وظائف تکمیلشده ماهانه بایگانی میشوند تا از بارگذاری بیش از حد البکلگ فعال جلوگیری شود. وقتی یک داستان کاربر تکمیل شود، اینجا منتقل میشود. البکلگ قابل خواندن میشود: حداکثر 10 مورد فعال.
**.agents/PROCEDURES.adoc**-- قالبهای دقیق از رویه پایان جلسه. طولانی، اما یکبار توسط عامل خوانده میشود وقتی روش را یاد میگیرد. سپس، رویه بهصورت مکانیکی میشود.
**.agents/AGENT_MODUS_OPERANDI.adoc**-- مستندات استراتژیک کامل. روی`plantuml-plugin`, این فایل میکند**900+ خط**و در واقع به نام`AGENT_METHODOLOGIES.adoc`— من نام را بین نوشتن این مقاله و پیادهسازی واقعی تغییر دادم. چنین اختلاف نامگذاری در یک سیستم حرفهای که در حال تحول است، اجتنابناپذیر است. مهم این است که کنوانسیون نامگذاری باشد: اگر فایل *روش* را مستند میکند، با`AGENT_`یا یک پیشوند صریح. روش Eager/Lazy را مستند میکند، الگوهایی که باید دنبال کرد و anti‑pattern‑هایی که باید اجتناب کرد. چون یک agent نیازی ندارد که در هر جلسه، استراتژی کامل را دوباره بخواند، بلکه تنها زمانی که ambiguït (ابهام) وجود دارد.
**`*_REFERENCE.adoc`** -- المراجع الفنية الخاصة بالمشروع. Sur`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`:
* `ARCHITECTURE.adoc`(134 خط) -- ساختار 11 کلاس داده، نکات توجه (اخطارهایی که باید اجتناب شوند)، دستورات تست بهینهشده
* `API_KEY_POOL_REFERENCE.adoc`-- جزئیات کامل مجموعه کلید (LAZY در حالی که`ESSENTIALS`است EAGER)
== عملئان تخصصی : یک تیم مجازی
حاکمیت فقط به فایلهای پسیو محدود نیست. من آنها را رسمی کردم**نقشهای عوامل تخصصی**در فایلهای LAZY مخصص، که workflow مورد انتظار را بر اساس نوع وظیفه تعریف میکنند.
|===
|نماینده |فایل |نقش |پروژه |**کد کردن** |`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`شامل قوانین concretes است: _یک`<h1>`بر حسب صفحه_ _پیشوندگذاری مسیرها با`${content.rootpath}`_, _اعلان کردن زبان`<html lang="${content.lang!"fr"}">`_. این کنوانسیونها، که یک بار نوشته شدهاند، بهطور خودکار از جلسه ۱ توسط عامل احترام گذاشته میشوند.
فایل`SCRUM_MASTER.adoc`یک ساختار تحویلپذیر اعمال میشود :**هدف**, **کارها**(به ترتیب با تخصیص),**معیارهای پذیرش**, **خطرات**. وقتی که من یک برنامه عمل میطلبم، عامل این ساختار را بدون اینکه من آن را درخواست کنم، تولید میکند. الحکومت**برنامه**facteur.
==== وقتی که نمایندگان تخصصی ضروری میشوند
ایجاد عوامل مخصوص یک منحنی طبیعی را دنبال میکند. در ابتدای یک پروژه، به آن نیاز ندارید —`AGENT.adoc`بسیار کافی است. اما وقتی پروژه رشد میکند (بیایید بگوییم، بیش از ۲۰ جلسه)، دو سیگنال باید شما را اخطار دهند:
1. نماینده کنوانسیونهای دو حوزه متمایز را ترکیب میکند (مثلاً: سینتکس PlantUML و قوانین CSS)
2. شما زمان بیشتری را برای اصلاح عامل دربارهٔ قوانین صرف میکنید که قبلا 5 بار به او توضیح دادهاید.
بر`cheroliv.com`این اتفاق در جلسه رخ داد... 1. بله، از ابتدا. زیرا این پروژه یک وبسایت با سه زبان (FTL, CSS, JS)، محتوای AsciiDoc و نمودارهای PlantUML است — سه حوزهای که هیچ ارتباطی ندارند. عامل CODER باید بداند سایزهای فونت و media queries چگونه باشند؛ عامل PLANTUML_DESIGNER باید بداند سینتکس را.`@startuml`. بدون جدایی، عامل CODER به من نمودارهای پیشنهاد میداد و بهطور معکوس. بیترتیبی.
روی`jhipster-gradle-plugins`, من دو عامل تخصصی سازگار با توسعه پلاگینهای Gradle ایجاد کردهام :`PLUGIN_DEVELOPER.adoc` et `BACKLOG_MANAGER.adoc`. اولین کدگذاری میکند تمام اتفاقيات Kotlin/Gradle (بدون`!!`, کلاسهای داده برای مدلها,`@TaskAction`برای کارها). دوم میداند که`persistence`باید پیش از آن پایدار باشد`assistant`نه توسعه آن را شروع نمیکند — یک وابستگی حرج در یک مخزن تکماگولار.
خطایی که نباید مرتکب شود: ایجاد بیش از حد نمایندگان زود.`plantuml-plugin`او تا قبل از جلسه ۱۰۸ صبر کرد تا یک عامل مخصص برای مجموعه کلید API را تثبیت کند. پیش از آن، زمینه کسبوکار در ... قرار داشت`AGENT.adoc`. قاعدهٔ تجربی : یک عامل تخصصی موجه است وقتی که حوزهٔ کاری او بیش از ۱۰۰ خط مستند باشد.
==== کنوانسیون نامگذاری جلسات
یک جزئی که بهنظر بیاهمیت میآید اما وقتی به 100 جلسه میرسیم، بهاهمیت میرسد. نام فایلهای بایگانی را چگونه انتخاب کنیم؟
من به سختطریق یاد گرفتم که یک کنوانسیون لازم است — چهار پروژه، چهار قالب مختلف در ابتدا، و من نتوانستم پی ببرم. امروز، کنوانسیون که من تثبیت کردهام، این است:
{N}-{type}-{sujet-kebab-case}.adoc
نمونههای ملموس : * `1-chore-migration-gouvernance-agent.adoc`— جلسه 1، نوع کار * `10-solidification-tests.adoc`— جلسه ۱۰، بدون نوع صریح (موضوع کافی است) * `036-debug-graphify-symlink-epic9.adoc`— جلسه 36 با شماره 3 رقم برای مرتبسازی شماره جلسه معیار اصلی مرتبسازی است. پروژههایی که از شمارههای سه رقمی (001، 036، 133) استفاده میکنند، مشکلات مرتبسازی لیექსیکافیک را وقتی عدد ۹۹ را فراتر میرود، جلوگیری میکنند. این همان چیزی است که من اکنون از آن استفاده میکنم بر`magic-stick`:`001-init-projet.adoc`, `036-debug-graphify-symlink-epic9.adoc`. نوع اختیاری است و از کلیدواژههای جلسه (debug, feature, refactor, docs, chore, test) استخراج میشود. موضوع در قالب kebab-case، بخش مهمترین است: باید امکان بازگرداندن یک جلسه را بدون باز کردن فایل فراهم کند. اگر میپرسید « کدام جلسه بود که timeout تستهای یکپارچه را رفع کردیم؟ »، پاسخ این است`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 جلسه، دیگر نمیدانید کدام تستها چه چیزی را پوشش میدهند. عامل نیز نه. فایل به منبع یکتای حقیقت در مورد پوشش تستهای پروژه تبدیل میشود. برای پروژههای بدون تستهای سنتی (مثل`magic-stick`که اسکریپتهای bash را تست میکند)، مرحله 5 جایگزین میشود`SCRIPT_VERIFICATION.adoc`.مکانیزم یکسان است: فایلی که وضعیت اعتبارسنجی اسکریپتها را دنبال میکند. گام ۵ را بر اساس پروژه خود تنظیم کنید، اما هرگز آن را نادیده نگیرید. این شبکه ایمنی است که بازگشت بیصدا را جلوگیری میکند. اگر پروژه شما هیچ تستی ندارد — نه تست unit، نه تست عملکردی، نه اسکریپت — حتی فایل خالی را با بخش « کار pending : تعریف یک استراتژی تست. » ایجاد کنید. این یک bookmark است که به شما آینده یادآور خواهد کرد که این موضوع پردازش نشده است. [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 است: یا مأموریت به اندازه کافی واضح است تا بهطور مستقیم اجرا شود (۸۰٪ موارد)، یا آجنت بارگذاری LAZY را برای رفع ابهام انجام میدهد (۲۰٪ موارد). این تمایز است که توکنها را صرفهجویی میکند. == روش پایان جلسه : قاعده طلایی === چرا او ضروری است؟ بدون این رویه، استراتژی Eager/Lazy بیفایده است. این است که کار session را به اطلاعات پایدار تبدیل میکند. این رویه اجرا میشود.به درخواست صریح کاربر(کلمات کلیدی : "پایان جلسه", "من می روم", و غیره), و آن استاجباری-- هیچ استثنا، هیچ سهو. فایل`SESSION_CHECKLIST.adoc`میانگرهای جلسه ایدهآل را تعریف میکند: * مدت: ۱۵-۳۰ دقیقه * فایلهای تغییر یافته : حداکثر 1-3 * تبادل LLM : 5-10 پیام * توکنهای زمینه : < 50k و نشانههایی که باید جلسه را تغییر دهیم : _LLM خطاهای قبلاً رفع شده را تکرار میکند، بیش از ۳ فایل بهطور موازی تغییر یافته، محادثه بیش از ۵۰ پیام. قانون طلایی :بهتر است ۵ جلسهٔ ۲۰ دقیقهای داشته باشیم تا یک جلسهٔ دو ساعته با اشکالزدایی نامرتب باشد. === جریان ۶ مرحله (به سکوت) [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-plugin: * 133 جلسهاز ابتدای پروژه * 240/240 تستها PASS(100% پوشش) — EPICs 1-7 تکمیل شدند * 57 سناریو Cucumber BDDتأیید شده * قوانین ایمنی روی فایلهای پیکربندی ناشی شده از یک خطای واقعی (جلسه 2 افزونه مخابز) نانوایی‑افزونه: * 11 جلساتدر دو هفته * مهاجرت Supabase → Firebase تکمیل شد (9 تست رفع شده) * EPIC 6 (publishProfile) در تولید کارآمد است * قاعده 0 ایجاد شد :`publishToMavenLocal`الزامی پس از هر اصلاح چوب جادو: * ۲۳ جلسهبرای ساخت یک سیستم زنده Xubuntu با پارتیشن A/B * ISO اول تولید شده در جلسه ۱۰ * تستهای بوت QEMU + VNC رسمی (مستندات LAZY به طول 144 خط) * CI/CD SourceForge-operative cheroliv.com : * ۹ جلسه رسمی+ بازسازی ۷ جلسه پیش‑سیستم * مقاله 0101 (OpenCode PATH) منتشر شد * ماده 0108 (این) بازنویسی شده بعد از تحلیل نقاط ضعف خود * حکمایت کامل منتقل شده از Markdown به AsciiDoc === چک لیست نهایی پس از اجرای ساکت از ۶ مرحله، عامل باید یک لیست تأیید را نمایش دهد : ---- ✅ Procédure de fin de session exécutée 📋 Checklist : قاعده مطلق: هیچ قدمی نمیتواند علامتگذاری شود`[✅] == راهنمای Bootstrap: روز 1، جلسه 0 شما از این روش مطمئنید. میخواهید آن را به پروژهای جدید اعمال کنید. از کجا باید شروع کنیم؟ من این لحظه را در ۲۸ آوریل ۲۰۲۶ تجربه کردم. من Opencode را باز میکنم روی`jhipster-gradle-plugins, من مونورِپو دو پلاگین Gradle JHipster. یک پروژه است که از قبل وجود دارد — کد در آنجا است، وظایف Gradle کار میکنند. اما مدیریت agente؟ صفر. صفحه سفید. مثل`plantuml-plugin`به جلسه 1 آن، ماهها پیش این دقیقاً رویهای است که من دنبال کردم و برای هر پروژه جدید نیز این را دنبال خواهم کرد. لطفاً به ترتیب دقت کنید — این مهم است. [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 ---- === گام ۰: ایجاد این اولین فایل است. نه`AGENT.adoc، نیست`INDEX.adoc`. === مرحله 1: پوشهها را ایجاد کنید [source,bash] ---- mkdir -p .agents/sessions .agents/archives ---- دو پوشه خالی. === مرحله 2: ایجاد `AGENT.adoc — فایل اصلی ساختار حداقل برای نسخهی اول (بزرگتر خواهد شد) : [source] ---- = {NOM_PROJET} — Directives Agent [CAUTION] ---- متوقف شدن اجباریقبل از rm, Write, حذف : 1. فایل را بهصورت کامل بخوانید
2. بررسی == پروژه نام… پیل : … مستندات: AsciiDoc == قوانین مطلق === 0. محیط توسعه دستورات ضروری… === 1. کامیتها/گیت ممنوعیتی رسمی… === 1b. فایلهای پیکربندی — قوانین مطلق ایمنی هرگز… بکوبند === 2. آزمونهای پایان جلسه ممنوعیت رسمی… === 3. روش پایان جلسه 6 مرحلهٔ اجباری … == مدیریت بافت — LAZY/EAGER فایلهای EAGER / فایلهای LAZY… این قالب minimale به agente اجازه میدهد تا کار را آغاز کند. نسخه کامل — شامل ساختار پروژه، اجزاء کلی، EPICها و backlog — در جلسه ۱ ارائه خواهد شد، هنگامی که agente قوانین پایه را در دست دارد و میتواند به شما کمک کند تا سند را غنیسازی نمایید. === مرحله ۳ : ایجاد `PROMPT_REPRISE.adoc — مهمة جلسه ۱ فایلی که بهطور صریح میگوید: « این جلسه ۱، وظیفی که باید تعریف شود. » حداکثر ۷۰ خط، شامل یک بخش Session 0 (چکیدهٔ Bootstrap) و یک بخش Session 1 (اولویتهایی که باید با کاربر تعریف شود). === مرحله ۴ : ایجاد فایلی که حاوی قوانین مطلق (نسخه اجرایی) و جدول جلسات خواهد بود. برای bootstrap، آن قوانین ۰ تا ۳ را در قالب خلاصهشان لیست میکند، portfolio پروژهها (شامل پروژه جدید با ایموجی 🆕) و نقشهروادری خالی آماده پر شدن. === مرحله ۵ : ایجاد فایلهای LAZY ساختاری در ترتیب : 1. اگر پروژه شما یک حوزه کاری پیچیده (مانند`jhipster-gradle-plugins`با mono-repo persistence/assistant), اکنون عاملان تخصصی را ایجاد کنید : 1. Agentهایی که از آنها استفاده نخواهید کرد، ایجاد نکنید. یک عامل بدون معیارهای ملموس برای کدنویسی، یک فایل مرده است که آلودگی میسازد..agents/ === مرحله ۶: افزودن پروژه به portefoyلیه همهٔ پروژهها این مرحلهای است که بهطور سیستماتیک فراموش میشود. هر`INDEX.adoc`هر پروژه شامل یک جدول « Portefeuille de Projets » است که تمام پروژهها را با یک روش یکسان فهرست میکند. وقتی یک پروژه جدید میسازید، باید : 1. افزودن یک سطر در پورتفولیو پروژه جدید (منطق) 2. یک خط را در پورتوفولیو تمام پروژههای موجود — بله، تمام بر روی چهار (حالا پنج) پروژه من، این به معنای باز کردن`INDEX.adoc de |
Session 1 |
… |
2026-04-28 🆕 خستهکننده است. دستی است. این 또한 تنها راه است که اطمینان حاصل شود که، صرفنظر از پروژهای که روی آن کار میکنید،Factor میداند پروژههای دیگر چه هستند و وضعیتشان چطور است. در جلسه 012`magic-stick, عامل دو ناسازگاری را در پورتفوی شناسایی کرد — [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 Session 10 TEST_COVERAGE" as CH #C8E6C9 node "plantuml-gradle Session 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> |