요약

Opencode와 같은 IA 에이전트와 함께 여러 세션에 걸쳐 복잡한 프로젝트를 진행할 때 근본적인 문제에 직면하게 됩니다:컨텍스트 유출. 에이전트는 이전 세션을 기억하지 못합니다. 그에게 설명된 모든 것 — 아키텍처, 규약, 백로그 상태 — 가 손실되었습니다. 매 세션마다 이 컨텍스트를 재구성하는 것은 비용이 많이 들고 느리며 오류의 원인이 됩니다.

이 글은 이 문제를 해결하기 위해 내가 구축한 수공예 전략을 설명한다: AsciiDoc 파일을 기반으로 한 지속 가능한 거버넌스 시스템, 그리고 이분법즉시/지연컨텍스트 토큰 소비를 최적화하고, 그리고필수적인 세션 종료 절차연속성을 보장하기 위해

장소 : 월요일 4월 21일, 오전 9시

Opencode를 다시 열어 Gradle 플러그인 작업을 이어갑니다.plantuml-plugin. 어제 저녁, 저는 API 키 풀의 아키텍트 담당자와 세 시간을 토론했습니다 — 라운드 로빈 로테이션, 할당량 관리, 자동 페일오버. 오늘 아침, 에이전트는 금붕어 눈으로 나를 바라본다.

_ — 안녕하세요, 저는 Opencode 어시스턴트입니다. 오늘 어떻게 도와드릴까요? _

아니요 — 아 맞다, API 키 풀, 우리는 YAML 구조에 있었죠. 아니요 — 주의,PlantumlManager`은 Kotlin 싱글톤 객체이지 클래스가 아닙니다. 아니요 — 아니, 어제 우리가 결정한 것이`SyntaxValidationResult`중첩된 sealed class 상태로 남아 있었다`PlantumlService.

모든 것을 다시 해야 한다. 혹은 더 정확히 말하면, 모든 것을 다시 설명해야 한다. 나는 내 세션의 처음 20분을 들여 어제 에이전트가 이미 손에 넣었던 맥락을 재구성하는 데 쓸 것이다. 소모된 토큰으로 20분. 나는 코딩을 할 수도 있는 20분이지만, 대신 의무적인 교육을 하고 있다.

이것은 Opencode의 버그가 아닙니다. 이것은 대화형 LLM의 근본적인 성질입니다: 두 세션 사이에서는 작업 기억이완전히 삭제됨. 에이전트는 이전 미션, 내린 결정, 식별된 함정, 함께 작성한 코드를 기억하지 못한다

저는 그것을 수십 번 경험했습니다. 네 개의 동시에 진행되는 프로젝트에서요. 몇 주 동안 이어지는 세션과 함께요. 저는 계산해 보았습니다: 평균적으로,세션 시간의 30~40%에이전트를 재맥락화하는 데 전념되었다. 프로젝트 세션 87에서`plantuml-plugin`, 나는 무너졌다. 나는 더 이상 그 문제를 열 번째로 설명하는 것을 감당할 수 없어서`AttemptEntry`는 최상위 레벨의 data class인`DiagramProcessor.kt`.

내가 필요로 했던 건 시스템이었다. 해킹이 아니라. 진정한 거버넌스였다.

창세기 : 혼돈에서 방법으로

첫 번째 세션 : 어둠의 시대

Opencode와 함께한 첫 번째 프로젝트,plantuml-plugin, 아무런 지배 구조 없이 시작되었습니다. 저는 질문을 하고, 에이전트가 답변하고, 우리는 반복하고, 세션이 끝납니다. 그리고 다음 날 우리는 다시 제로에서 시작합니다. 세션 1이었고, 그다음 세션 2, 그다음 세션 3…​ 결국 세션 62에 이르러서 저는 같은 아키텍처를 재설명하는 데 누적된 시간을 잃었다는 것을 깨달았습니다.

세션 62에서, 숫자들이 여기 있습니다:198개의 단위 테스트가 통과합니다, 42개의 기능 테스트가 검증되었습니다, 플러그인이 작동합니다. 하지만 인지 비용은 감당할 수 없습니다. 각 새로운 세션은 프로젝트 구조에 대한 20분 독백으로 시작됩니다.

site.yml의 파괴된 에피소드 (세션 2, bakery-plugin)

이 방법도 재난에서 비롯됩니다. 프로젝트에서`bakery-gradle`, 세션 2에서, 저는 에이전트에게 파일을 수정하도록 요청합니다`site.yml`. 에이전트는 파일이 버전 관리됐는지 확인하지 않고 하나를 만든다`Write`내용이 완전히 덮어쓰는. 결과 : 실제 토큰(Firebase API 키, 배포 비밀)은 가짜 플레이스홀더로 대체됩니다. 파일은 git에 있지 않았습니다 — 그것은`.gitignore`비밀을 보호하기 위해.

백업 없이. 없이`git restore`가능. 저는 막혔습니다. 수동으로 구성 파일을 다시 만들어야 하고, 비밀번호 관리자에서 토큰을 찾아서 모두 다시 붙여야 합니다.

이 좌절에서 비롯되는 것이다절대 규칙 1b(Note: The output is a single space character, as the input text to translate was a space after the colon, and spaces are language-neutral in translation.)

_ 절대 짓밟지 마라하나의 구성 파일과 하나의`Write`완료될 때 하나의`Edit`부분만으로 충분합니다.절대 교체하지 마세요민감한 값을 가짜 값으로 대체합니다.확인 git check-ignore 그리고 `git ls-files어떤 수정도 하기 전에. _

이 규칙은 오늘날 모든 내 파일의 대리석에 새겨져`AGENT.adoc` et `INDEX.adoc`네 개 프로젝트에서 실제 오류가 발생하여 수작업에 한 시간을 소요했습니다.

마크다운 → 애스키도크 마이그레이션 (세션 1, cheroliv.com)

2026년 4월 25일, 위에`cheroliv.com`, 나는 근본적인 결정을 내린다: 마크다운의 전체 거버넌스를 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 "크래킹\n맥락"
109 is "최적화
-60% 토큰"
133 is "133 세션
240 테스트 통과"

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이며, 이때 반복적인 재컨텍스트화의 좌절감이 허용 한계를 초과하고, Eager/Lazy 방법은 더 이상 아이디어가 아니라 필수 조건이 됩니다.

전략: Eager/Lazy 심층

철학 :인지에 적용된 컴퓨터 캐시

내 접근 방식은 컴퓨터 캐시 관리로부터 직접 영감을 받았습니다. 모든 것이비판적이며 자주 사용되는즉시 접근 가능해야 (열정적인). 모든 것이문맥적 혹은 대용량요청 시 로드해야 함게으른).

열정적인 (대시보드)

느긋한 (소유자 매뉴얼)

크기

< 100 줄, < 10k 토큰

무제한, 상세한

로딩

자동, 세션 시작 시

에이전트의 요청에 따라

내용

절대적인 규칙, 현재 진행 중인 임무, 위급한 상태

세션 아카이브, 전체 기록, 상세 절차, 기술 참조

역할

즉시 에이전트의 방향을 잡아라

깊은 맥락의 질문에 답하기

Eager 파일 : 대시보드

이 파일들은 각 프로젝트의 루트에 위치하고 에이전트에 의해 각 세션 시작 시 자동으로 로드됩니다. 이들은 을 형성대시보드-- 중요 정보, 즉시 접근 가능.

@startuml
skinparam defaultTextAlignment center
skinparam wrapWidth 200

package "프로젝트 루트 (Eager - 자동 로드)" {
    component "<b>AGENT.adoc</b>
절대 규칙
구조 및 관례" as AGENT
    component "<b>PROMPT_REPRISE.adoc</b>
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>
요약 테이블
날짜/유형/점수" as HIST
    component "<b>PROCEDURES.adoc</b>
세션 종료 템플릿
6단계" as PROC
    component "<b>*_REFERENCE.adoc</b>
완전한 아키텍처
기술 참조" as REF
    component "<b>COMPLETED_TASKS_ARCHIVE</b>
완료된 작업
월별" as ARCH
    component "<b>AGENT_MODUS_OPERANDI.adoc</b>
전략 문서
방법론" as MOD
    component "<b>*_REFERENCE.adoc</b>
Boot tests, A/B partition
특정 컨텍스트" 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줄이며 포함합니다:

  • 프로젝트의 절대적인 규칙 (허가 없이 커밋 금지,`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 컨텍스트를 더욱 최적화하기 위해, API 키 풀에 비즈니스 컨텍스트 200줄을 로드하는 대신, 필수 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`절대 충전되지 않았습니다. 에이전트는 내가 읽으라고 지시한 내용만 읽었고, 매 세션마다 수동으로 수행했습니다. 이것은 세션 11의`bakery-plugin`quand 나는 ...의 부재를 깨달았을 때`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`200줄에 *완전한* 절대 규칙과 그 기록(지난 세션의 교훈)과 함께, EPIC과 점수, 그리고 프로젝트 포트폴리오가 포함되어 있습니다. 이것은 에이전트가 '현재 진행 상황'을 알기 위해 참조하는 문서입니다. 위`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
(근원 — EAGER)" as AGENT #E3F2FD {
  rectangle "📖 **서사 형식**
규칙의 스토리텔링
배운 교훈, 맥락" as NARR
  rectangle "🏗️ **완전한 아키텍처**
프로젝트 구조, 구성 요소
상세한 US 백로그" as ARCHI
  rectangle "📋 **설명 규칙**
왜 규칙이 존재하는가
사건 기록" as EXPL
}

rectangle "INDEX.adoc\n(.agents/ — 열망하는)" as INDEX #E8F5E9 {
  rectangle "⚡ **실행 형식**
규칙 자체만, 정당화 없이
빠른 상담" as EXEC
  rectangle "📊 **Roadmap & EPICs**\n요약 표\n진행 상황, 점수, 우선순위" as ROAD
  rectangle "🌐 **프로젝트 포트폴리오**
횡단 뷰
5개의 동기화된 프로젝트" as PORT
}

AGENT --> INDEX : "에이전트가 AGENT.adoc를 읽음\n이해하기 위해 한 번"
INDEX --> AGENT : "Agent relit INDEX.adoc\n각 세션에 **적용하기 위해**"

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

이 명시적인 중복은 설계 선택입니다. 이는 EAGER 토큰에서 약 50줄을 추가로 소비하지만 — 에이전트가 항상 규칙을 눈앞에 두도록 보장합니다. 여기에는 즉각적인 순종을 촉진하는 간결한 형식도 포함됩니다.

=== 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 ".agents/" as ROOT {
  file "INDEX.adoc\n(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-일-마이그레이션.adoc" as S1
    file "109-정식화-게으른.adoc" as S109 #FFECB3
    file "133-epic11-article.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 "프롬프트_아카이브/" 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}-{titre}.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` :

* `ARCHITECTURE.adoc`(134줄) -- 11개의 데이터 클래스 구조, 주의 사항 (피해야 할 함정), 최적화된 테스트 명령어
* `API_KEY_POOL_REFERENCE.adoc`-- 키 풀의 전체 세부 정보 (LAZY 동안`ESSENTIALS`이다 EAGER)

== 전문 에이전트 : 가상 팀

거버넌스는 정적인 파일에만 한정되지 않습니다. 저는 일부를 형식화했습니다**전문 에이전트들의 역할**전용 LAZY 파일에서, 작업 유형에 따라 예상되는 워크플로우를 정의합니다.

|===
|에이전트 |파일 |역할 |프로젝트 |**코더** |`CODER.adoc` |FTL/CSS/JS 구현, 시맨틱 태그, 접근성 기준 |cheroliv.com |**스크럼 마스터** |`SCRUM_MASTER.adoc` |미국 계획, 하위 작업으로 분할, 의존성 감지 |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. 당신은 이미 5번 설명한 관습에 대해 에이전트를 수정하는 데 더 많은 시간을 보냅니다.

위`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자리 숫자로 정렬

세션 번호가 주요 정렬 기준입니다. 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번의 세션 후에 어떤 테스트가 무엇을 커버하는지 더 이상 알 수 없게 된다. 에이전트도 마찬가지다. 파일은 프로젝트 테스트 커버리지에 대한 단일 진실 원천이 된다.

전통적인 테스트가 없는 프로젝트 (예:`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

세션을 변경해야 하는 징후는 다음과 같습니다 : _LLM이 이미 수정된 오류를 반복한다, 3개 이상의 파일이 동시에 수정됨, 대화가 50개 메시지 초과. 황금 규칙 :2시간 동안 디버깅이 혼란스러운 한 번의 세션보다 20분짜리 5번의 세션이 더 좋다.

=== 6단계 흐름 (침묵으로)

[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 시나리오검증된 * 실제 오류에서 발생한 구성 파일 안전 규칙 (Session 2 bakery-plugin)

베이커리-플러그인 :

* 11 세션두 주 안에 * Supabase → Firebase 마이그레이션 완료 (9개 테스트 수정됨) * EPIC 6 (publishProfile)는 프로덕션에서 기능적으로 작동합니다 * 규칙 0이 생성되었습니다:`publishToMavenLocal`각 수정 후 필수

마법 스틱:

* 23 세션Xubuntu 라이브 시스템을 A/B 파티션으로 구성하려면 * 세션 10에서 생성된 첫 번째 ISO * 공식화된 QEMU + VNC 부팅 테스트 (144줄의 LAZY 문서) * CI/CD SourceForge 기능적인

cheroliv.com:

* 9개의 공식 세션+ 프리-시스템 세션 7개의 재구성 * Article 0101 (OpenCode PATH) 게시됨 * 제0108조 (이것)는 분석 후 재작성되었습니다 * 마크다운에서 애스시도크로 이전된 완전한 거버넌스

=== 최종 체크리스트

6단계를 침묵적으로 실행한 후, 에이전트는 확인 체크리스트를 표시해야 합니다 :

----

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

절대적인 규칙: 어떤 단계도 표시할 수 없습니다`[✅]파일이 실제로 수정되고 검증되지 않은 경우

== Bootstrap 가이드: 1일 차, 세션 0

당신은 그 방법에 확신을 가지고 있습니다. 그것을 새로운 프로젝트에 적용하고 싶습니다. 어디서부터 시작해야 할까요?

나는 그 순간을 2026년 4월 28일에 경험했다. 나는 Opencode를 연다 위에`jhipster-gradle-plugins, 저의 JHipster Gradle 플러그인 두 개의 모노레포. 이미 존재하는 프로젝트입니다 — 코드가 거기에 있고, Gradle 작업들이 정상 동작합니다. 하지만 에이전트 거버넌스 ? 제로. 빈 페이지.처럼`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 ----

=== 단계 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 파일…​

이 최소 템플릿은 에이전트가 시작할 수 있게 해줍니다. 풍부한 버전 — 프로젝트 구조, 핵심 구성 요소, EPIC, 백로그 포함 — 은 에이전트가 이미 기본 규칙을 손에 쥐고 있을 때 세션 1에 제공될 것이며, 문서를 풍부하게 하는 데 도움을 줄 것입니다.

=== 3단계: 만들기 PROMPT_REPRISE.adoc — 세션 1 미션

다음과 같이 명시된 파일: « 이것이 세션 1, 정의해야 할 미션입니다. » 최대 70줄, 세션 0(부트스트랩 요약) 섹션과 세션 1(사용자와 정의할 우선순위) 섹션이 포함됩니다.

=== 4단계: 생성 .agents/INDEX.adoc — 진입점

절대 규칙(실행 버전)과 세션 테이블을 포함할 파일입니다. 부트스트래핑을 위해, 규칙 0부터 3까지를 간결한 형식으로 나열하고, 프로젝트 포트폴리오(새로운 프로젝트와 함께 이모지 🆕 포함)와 빈 로드맵(채워질 준비가 된)을 나열합니다.

=== 5단계 : LAZY 구조화 파일 생성

순서대로:

1. .agents/SESSIONS_HISTORY.adoc— 세션 0만 있는 테이블 2. .agents/SESSION_CHECKLIST.adoc— 템플릿 « 세션 변경 시기 3. .agents/PROCEDURES.adoc— 6단계 전체 절차 + EAGER/LAZY 4. .agents/AGENT_SESSION_MANAGER.adoc— 아카이브 템플릿 5. .agents/TEST_COVERAGE_ANALYSIS.adoc— 테스트 추적 테이블, 처음에 비어 있음

만약 당신의 프로젝트가 복잡한 비즈니스 도메인을 가지고 있다면 (예를 들어`jhipster-gradle-plugins`persistence/assistant 단일 레포와 함께, 지금 바로 전문 에이전트를 생성하세요 :

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단계)와 그 INDEX(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 Session 037 SCRIPT_VERIFICATION" as MS #E1BEE7 node "bakery-gradle 세션 11 테스트 커버리지" as BG #FFE0B2 node "cheroliv.com 세션 10 TEST_COVERAGE" as CH #C8E6C9 node "plantuml-gradle 세션 133 테스트 커버리지" as PG #BBDEFB node "jhipster-gradle 세션 1 🆕 테스트_커버리지" 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>

관련 기사