uctm 1.5.3 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,69 +1,71 @@
1
- # Context Handoff Policy
1
+ # Context Handoff 정책
2
2
 
3
- Sliding window context transfer rules between agents.
3
+ 에이전트 슬라이딩 윈도우 컨텍스트 전달 규칙.
4
4
 
5
- ## Sliding Window
5
+ ## 슬라이딩 윈도우
6
6
 
7
- | Step Distance | Detail Level | Rule |
8
- |---------------|-------------|------|
9
- | Immediate (1 step) | `FULL` | All 4 fields transmitted |
10
- | 2 steps back | `SUMMARY` | `what` field only, 1-3 lines |
11
- | 3+ steps back | `DROP` | Omitted |
7
+ | 단계 거리 | 상세 레벨 | 규칙 |
8
+ |-----------|----------|------|
9
+ | 직전 (1단계) | `FULL` | 4 필드 모두 전달 |
10
+ | 2단계 | `SUMMARY` | `what` 필드만, 1-3 |
11
+ | 3단계+ | `DROP` | 생략 |
12
12
 
13
- ## Context-Handoff 4 Fields
13
+ ## Context-Handoff 4 필드
14
14
 
15
- | Field | FULL | SUMMARY | Content |
16
- |-------|:----:|:-------:|---------|
17
- | `what` | ✅ | ✅ | Summary of changes/verification (2-5 lines) |
18
- | `why` | ✅ | ❌ | Decision rationale (2-4 lines) |
19
- | `caution` | ✅ | ❌ | Caveats, conditional completion (1-3 lines) |
20
- | `incomplete` | ✅ | ❌ | Incomplete items (1-2 lines, "None" if empty) |
15
+ | 필드 | FULL | SUMMARY | 내용 |
16
+ |------|:----:|:-------:|------|
17
+ | `what` | ✅ | ✅ | 변경/검증 요약 (2-5) |
18
+ | `why` | ✅ | ❌ | 결정 근거 (2-4) |
19
+ | `caution` | ✅ | ❌ | 주의사항, 조건부 완료 (1-3) |
20
+ | `incomplete` | ✅ | ❌ | 미완료 항목 (1-2줄, 없으면 "None") |
21
21
 
22
- ## Pipeline Stage Input/Output
22
+ ## 파이프라인 단계별 입출력
23
23
 
24
24
  ### Builder
25
25
 
26
- Input: TASK spec + dependent TASK result.md context-handoff (sliding window)
26
+ 입력: TASK 스펙 + 의존 TASK result.md context-handoff (슬라이딩 윈도우)
27
27
 
28
- Output:
28
+ 출력:
29
29
  ```xml
30
30
  <task-result status="PASS|FAIL">
31
31
  <context-handoff from="builder" detail-level="FULL">
32
- <what>Changes made</what><why>Rationale</why><caution>Caveats</caution><incomplete>Incomplete items</incomplete>
32
+ <what>변경 내용</what><why>근거</why><caution>주의사항</caution><incomplete>미완료 항목</incomplete>
33
33
  </context-handoff>
34
34
  </task-result>
35
35
  ```
36
36
 
37
37
  ### Verifier
38
38
 
39
- Input: TASK spec + Builder context-handoff (FULL)
39
+ 입력: TASK 스펙 + Builder context-handoff (FULL)
40
40
 
41
- Output:
41
+ 출력:
42
42
  ```xml
43
43
  <task-result status="PASS|FAIL">
44
44
  <context-handoff from="verifier" detail-level="FULL">
45
- <what>Verification results</what><why>Judgment rationale</why><caution>Manual checks needed</caution><incomplete>Items that could not be verified</incomplete>
45
+ <what>검증 결과</what><why>판단 근거</why><caution>수동 확인 필요 항목</caution><incomplete>검증할 없었던 항목</incomplete>
46
46
  </context-handoff>
47
47
  </task-result>
48
48
  ```
49
49
 
50
50
  ### Committer
51
51
 
52
- Input: Verifier context-handoff (FULL) + Builder context-handoff (SUMMARY)
52
+ 입력: Verifier context-handoff (FULL) + Builder context-handoff (SUMMARY)
53
53
 
54
- Processing:
55
- 1. Verify builder completed successfully (check context-handoff status)
56
- 2. Write result.md + git commit
54
+ 처리:
55
+ 1. builder 성공 여부 확인 (context-handoff 상태 확인)
56
+ 2. result.md 작성 + git commit
57
57
 
58
- Output: → `{REFERENCES_DIR}/file-content-schema.md` § 4 reference
58
+ 출력: → `{REFERENCES_DIR}/file-content-schema.md` § 3 참조
59
59
 
60
- ## Inter-TASK Dependency Transfer
60
+ ## TASK 의존성 전달
61
61
 
62
- - Immediate dependent TASK: context-handoff **FULL** (all 4 fields)
63
- - 2 steps back: **SUMMARY** (what only)
64
- - 3+ steps back: **DROP**
62
+ - 직전 의존 TASK: context-handoff **FULL** (4 필드 모두)
63
+ - 2단계 전: **SUMMARY** (what)
64
+ - 3단계+: **DROP**
65
65
 
66
- ## Scheduler Dispatch
66
+ ## Orchestrator 디스패치
67
+
68
+ TASK DAG 실행 중 다음 자식(중첩 spawn)의 프롬프트를 구성하는 주체는 **orchestrator**다 — dispatch XML을 만들어 자식 spawn 프롬프트에 포함한다.
67
69
 
68
70
  ```xml
69
71
  <!-- Verifier: Builder FULL -->
@@ -77,7 +79,7 @@ Output: → `{REFERENCES_DIR}/file-content-schema.md` § 4 reference
77
79
  <context-handoff from="builder" detail-level="SUMMARY"><what>...</what></context-handoff>
78
80
  </dispatch>
79
81
 
80
- <!-- Next TASK Builder: dependency distance applied -->
82
+ <!-- 다음 TASK Builder: 의존성 거리 적용 -->
81
83
  <dispatch to="builder" task="TASK-YY">
82
84
  <previous-results>
83
85
  <context-handoff from="prev-task" task="TASK-XX" detail-level="FULL">...</context-handoff>
@@ -86,8 +88,8 @@ Output: → `{REFERENCES_DIR}/file-content-schema.md` § 4 reference
86
88
  </dispatch>
87
89
  ```
88
90
 
89
- ## Committer Retry
91
+ ## Committer 재시도
90
92
 
91
- 1. Failure cause: verification FAIL / No files changed
92
- 2. Re-dispatch to builder
93
- 3. Maximum 2 retries (3 attempts total). 3 failures → TASK FAILED, pipeline halted
93
+ 1. 실패 원인: 검증 FAIL / 변경 파일 없음
94
+ 2. builder에 재디스패치
95
+ 3. 최대 2 재시도 (3 시도). 3 실패 → TASK FAILED, 파이프라인 중단
@@ -1,27 +1,28 @@
1
- # File Content Schema
1
+ # 파일 내용 스키마
2
2
 
3
- Single source of truth for pipeline artifact file formats.
3
+ 파이프라인 산출물 파일 형식의 단일 정의 소스.
4
4
 
5
- ## COMPLIANCE
5
+ ## 준수사항
6
6
 
7
- | Generated File | Reference Section | Violation Consequence |
8
- |----------------|-------------------|----------------------|
9
- | `PLAN.md` | § 1 | `parsePlanMd()` parsing failure, scheduler inoperable |
10
- | `TASK-XX.md` | § 2 | `parseTaskFilename()` DB registration missed |
11
- | `TASK-XX_result.md` | § 3 | context-handoff missing |
12
- | `TASK-XX_result.md` (direct) | § 4 | result.md recognition failure |
7
+ | 생성 파일 | 참조 섹션 | 위반 결과 |
8
+ |-----------|----------|-------------|
9
+ | `Requirement.md` | § 0 | |
10
+ | `PLAN.md` | § 1 | `parsePlanMd()` 파싱 실패, orchestrator 파이프라인 작동 불가 |
11
+ | `TASK-XX.md` | § 2 | `parseTaskFilename()` DB 등록 누락 |
12
+ | `TASK-XX_result.md` | § 3 | context-handoff 누락 |
13
+ | `DECISIONS.md` | § 4 | 재개(resume) 시 PENDING 결정 재제시 불가 |
13
14
 
14
15
  ---
15
16
 
16
17
  ## § 0. Requirement.md
17
18
 
18
- Path: `works/{WORK_ID}/Requirement.md`
19
+ 경로: `works/{WORK_ID}/Requirement.md`
19
20
 
20
21
  ```markdown
21
22
  # Requirement — WORK-NN
22
23
 
23
24
  ## Original Request
24
- > User's exact input
25
+ > 사용자의 정확한 입력
25
26
 
26
27
  ## Functional Requirements
27
28
  - FR-01: ...
@@ -31,100 +32,167 @@ Path: `works/{WORK_ID}/Requirement.md`
31
32
  - NFR-01: ...
32
33
 
33
34
  ## Acceptance Criteria
34
- - [ ] Verifiable criteria
35
+ - [ ] 검증 가능한 기준
35
36
  ```
36
37
 
37
- Created by: Specifier (mandatory for all requests)
38
+ 생성 주체: Specifier (모든 요청에 필수)
38
39
 
39
40
  ---
40
41
 
41
42
  ## § 1. PLAN.md
42
43
 
43
- Path: `works/{WORK_ID}/PLAN.md`
44
+ 경로: `works/{WORK_ID}/PLAN.md`
45
+
46
+ > 요구사항 수준에 따라 ## 설계 이하 간략화 가능
44
47
 
45
48
  ```markdown
46
- # WORK-01: {title}
49
+ # WORK-01: {제목}
47
50
 
48
51
  > Created: {YYYY-MM-DD}
49
- > Requirement: {REQ-XXX | user request text}
50
- > Execution-Mode: {direct | pipeline | full}
51
- > Project: {project name}
52
- > Tech Stack: {stack}
52
+ > Requirement: {REQ-XXX | 사용자 요청 텍스트}
53
+ > Project: {프로젝트 이름}
54
+ > Tech Stack: {스택}
53
55
  > Language: {lang_code}
54
56
  > Status: PLANNED
55
57
 
56
- ## Goal
57
- {1-2 sentences}
58
+ ## 목표
59
+ {1-2문장}
60
+
61
+ ## 설계
62
+
63
+ ### 1. 아키텍처 방향
64
+
65
+ - **접근 방식**: 신규 구축 / 기존 수정 / 확장
66
+ - **구조**: (계층형, 이벤트 기반, 마이크로서비스 등)
67
+ - **데이터 흐름**: (입력 → 처리 → 출력 경로 요약)
68
+
69
+ ### 2. 데이터 설계
70
+
71
+ | 항목 | 내용 |
72
+ |------|------|
73
+ | 스키마 변경 | 있음 / 없음 |
74
+ | 마이그레이션 필요 | 있음 / 없음 |
75
+ | 변경 내용 | |
76
+
77
+ ### 3. 인터페이스 설계
78
+
79
+ | 인터페이스 | 방식 | 엔드포인트/형식 | 관련 FR |
80
+ |-----------|------|---------------|--------|
81
+ | | REST / GraphQL / gRPC / 파일 | | |
82
+
83
+ ### 4. NFR 대응 설계
58
84
 
59
- ## Task Dependency Graph
60
- {ASCII diagram}
85
+ | NFR ID | 요구사항 | 대응 방안 |
86
+ |--------|---------|----------|
87
+ | NFR-01 | | |
88
+ | NFR-02 | | |
89
+
90
+ ## 작업 목록
91
+
92
+ | Task ID | 제목 | 의존관계 | Phase | 우선순위 | 매핑 FR/NFR | 예상 규모 |
93
+ |---------|------|---------|-------|---------|------------|----------|
94
+ | TASK-01 | | 없음 | 1 | Must | FR-01 | S/M/L |
95
+ | TASK-02 | | TASK-01 | 2 | Must | FR-02, NFR-01 | S/M/L |
96
+ | TASK-03 | | 없음 | 1 | Should | FR-03 | S/M/L |
97
+ | | | | | | | |
98
+
99
+
100
+ ## Task 의존성 그래프
101
+ {ASCII 다이어그램}
102
+
103
+ ## 리스크 및 대응
104
+
105
+ | # | 리스크 | 발생 가능성 | 영향도 | 대응 전략 | 비고 |
106
+ |---|--------|-----------|-------|----------|------|
107
+ | R-01 | | 높/중/낮 | 높/중/낮 | 회피 / 완화 / 수용 | |
108
+ | R-02 | | | | | |
109
+
110
+ ---
61
111
 
62
- ## Tasks
112
+ ## 추적성 매트릭스
63
113
 
64
- ### TASK-00: {title}
65
- - **Depends on**: (none)
66
- - **Scope**: {description}
67
- - **Files**:
68
- - `path/to/file` {description}
114
+ | 원본 요청 | FR/NFR | Task | 인수 기준 | 검증 방법 |
115
+ |----------|--------|------|----------|----------|
116
+ | | FR-01 | TASK-01 | AC-01 | 단위테스트 / 수동확인 / 자동화 |
117
+ | | FR-02 | TASK-02 | AC-02 | |
118
+ | | NFR-01 | TASK-02 | AC-03 | |
69
119
 
70
- ### TASK-01: {title}
71
- - **Depends on**: TASK-00
120
+ ---
121
+
122
+ ## 자체 검증 체크리스트
123
+
124
+ - [ ] 모든 FR이 최소 1개 Task에 매핑됨
125
+ - [ ] 모든 NFR이 설계 또는 Task에 반영됨
126
+ - [ ] Task 간 순환 의존 없음
127
+ - [ ] 제약조건 내 실현 가능
128
+ - [ ] 각 Task에 완료 조건이 있음
129
+ - [ ] 리스크가 식별되고 대응 전략이 있음
130
+ - [ ] 실행 순서가 의존관계와 일치함
131
+
132
+ ---
72
133
  ```
73
134
 
74
- Title format: `# WORK-NN: title` — `# PLAN WORK-NN:` is prohibited (`parsePlanMd()` error)
135
+ 제목 형식: `# WORK-NN: title` — `# PLAN WORK-NN:` 금지 (`parsePlanMd()` 오류)
75
136
 
76
137
  ---
77
138
 
78
139
  ## § 2. TASK-XX.md
79
140
 
80
- Path: `works/{WORK_ID}/TASK-XX.md`
141
+ 경로: `works/{WORK_ID}/TASK-XX.md`
81
142
 
82
- > `parseTaskFilename()` regex: `/^TASK-(\d+)\.md$/` — WORK prefix prohibited
143
+ > `parseTaskFilename()` regex: `/^TASK-(\d+)\.md$/` — WORK 접두사 금지
83
144
 
84
145
  ```markdown
85
- # TASK-XX: {title}
146
+ # TASK-XX: {제목}
86
147
 
87
148
  ## WORK
88
- {WORK_ID}: {WORK title}
149
+ {WORK_ID}: {WORK 제목}
150
+
151
+ ## Task 개요
89
152
 
90
- ## Dependencies
91
- - TASK-YY (required)
153
+ | 항목 | 내용 |
154
+ |------|------|
155
+ | 목적 | (이 Task가 완료되면 무엇이 달라지는가) |
156
+ | 매핑 요구사항 | FR-{NN}, NFR-{NN} |
157
+ | 우선순위 | Must / Should / Could |
158
+ | 예상 규모 | S / M / L |
159
+ | 의존관계 | 없음 / TASK-{NN} 완료 후 |
160
+ | Phase | Phase {N} |
92
161
 
93
162
  ## Scope
94
- {description}
163
+ {설명}
95
164
 
96
165
  ## Files
97
166
  | Path | Action | Description |
98
167
  |------|--------|-------------|
99
- | `src/file.ts` | CREATE | description |
168
+ | `src/file.ts` | CREATE | 설명 |
100
169
 
101
170
  ## Acceptance Criteria
102
- - [ ] {criterion}
171
+ - [ ] {기준}
103
172
 
104
173
  ## Verify
105
174
  ```bash
106
- {verification commands}
107
- ```
175
+ {검증 명령}
108
176
  ```
109
177
 
110
178
  ---
111
179
 
112
- ## § 3. TASK-XX_result.md (full / pipeline)
180
+ ## § 3. TASK-XX_result.md
113
181
 
114
- Path: `works/{WORK_ID}/TASK-XX_result.md`
182
+ 경로: `works/{WORK_ID}/TASK-XX_result.md`
115
183
 
116
184
  ```markdown
117
185
  # TASK-XX Result
118
186
 
119
- > WORK: {WORK_ID} — {title}
187
+ > WORK: {WORK_ID} — {제목}
120
188
  > Completed: {YYYY-MM-DD HH:MM}
121
189
  > Status: **DONE**
122
190
 
123
191
  {## Summary | ## 요약 | ## サマリー}
124
- {1-2 lines}
192
+ {1-2}
125
193
 
126
194
  {## Completed Checklist | ## 완료 체크리스트 | ## 完了チェックリスト}
127
- - [x] {item}
195
+ - [x] {항목}
128
196
 
129
197
  {## Verification Results | ## 검증 결과 | ## 検証結果}
130
198
  - Build: ✅
@@ -133,7 +201,7 @@ Path: `works/{WORK_ID}/TASK-XX_result.md`
133
201
 
134
202
  {## Files Changed | ## 변경 파일 | ## 変更ファイル}
135
203
  ### Created
136
- - `path` — {description}
204
+ - `path` — {설명}
137
205
 
138
206
  {## Issues Encountered | ## 발생 이슈 | ## 発生した問題}
139
207
  None
@@ -144,14 +212,14 @@ None
144
212
  {## Context Handoff | ## 컨텍스트 핸드오프 | ## コンテキスト引き継ぎ}
145
213
 
146
214
  ### Builder Context (SUMMARY)
147
- {builder what field 1-3 lines}
215
+ {builder what 필드 1-3}
148
216
 
149
217
  ### Verifier Context (FULL)
150
- {verifier context-handoff 4 fields}
218
+ {verifier context-handoff 4 필드}
151
219
  ```
152
220
 
153
- | Section | en | ko | ja |
154
- |---------|----|----|-----|
221
+ | 섹션 | en | ko | ja |
222
+ |------|----|----|-----|
155
223
  | Summary | `## Summary` | `## 요약` | `## サマリー` |
156
224
  | Completed Checklist | `## Completed Checklist` | `## 완료 체크리스트` | `## 完了チェックリスト` |
157
225
  | Verification Results | `## Verification Results` | `## 검증 결과` | `## 検証結果` |
@@ -162,37 +230,58 @@ None
162
230
 
163
231
  ---
164
232
 
165
- ## § 4. TASK-XX_result.md (direct mode)
233
+ ## § 4. DECISIONS.md
234
+
235
+ 경로: `works/{WORK_ID}/DECISIONS.md`
236
+
237
+ orchestrator가 `<gate type="decision">` 또는 자식 에이전트의 `<needs-decision>`(→ `xml-schema.md` § 5, § 6)을 수신할 때마다 항목을 추가하는 결정 로그. 게이트가 yield된 시점에는 항목을 **PENDING**으로 먼저 기록하고, 승인/자동결정으로 해소되면 같은 항목을 **RESOLVED**로 갱신한다.
166
238
 
167
239
  ```markdown
168
- # TASK-00 Result
240
+ # DECISIONS — WORK-NN
169
241
 
170
- > WORK: WORK-NN — {title}
171
- > Completed: {YYYY-MM-DD HH:MM}
172
- > Execution-Mode: direct
173
- > Status: **DONE**
242
+ ## D-01
243
+ > 시각: {YYYY-MM-DDTHH:MM:SSZ}
244
+ > 단계: {specifier|planner|builder|verifier|committer}
245
+ > 상태: {PENDING|RESOLVED}
246
+
247
+ ### 배경
248
+ {결정이 필요한 이유}
174
249
 
175
- ## Summary
176
- {1 line}
250
+ ### 선택지
251
+ 1. {선택지 1}
252
+ 2. {선택지 2}
177
253
 
178
- ## Files Changed
179
- - `{path}` {description}
254
+ ### 권고안
255
+ {orchestrator/자식 에이전트가 제시한 권고}
180
256
 
181
- ## Verification
182
- - Build: PASS (self-check)
183
- - Lint: PASS (self-check)
257
+ ### 확정값
258
+ {확정된 선택 PENDING 상태에서는 공란 또는 "(대기 중)"}
259
+
260
+ ### 결정주체
261
+ {user 승인 | auto}
184
262
  ```
185
263
 
264
+ | 필드 | PENDING (게이트 yield 시) | RESOLVED (해소 후) |
265
+ |------|---------------------------|---------------------|
266
+ | 확정값 | 공란 / `(대기 중)` | 채움 |
267
+ | 결정주체 | 공란 | `user 승인` 또는 `auto` |
268
+
269
+ - **재개(resume) 근거**: orchestrator가 중단 후 재개할 때 DECISIONS.md에서 `상태: PENDING` 항목을 찾아 동일한 배경·선택지·권고안으로 게이트를 다시 제시한다. 이 상태 필드가 없으면 재개 시 이미 물었던 결정인지 판단할 수 없어, 미승인 결정을 건너뛰거나 사용자에게 같은 질문을 중복 제시하는 오류가 발생한다.
270
+ - 활동 로그의 `DECISION_WAIT`/`DECISION` 이벤트와 1:1로 대응한다 → `work-activity-log.md` 참조.
271
+
272
+ 생성 주체: orchestrator
273
+
186
274
  ---
187
275
 
188
- ## § 5. File Naming Rules
276
+ ## § 5. 파일 이름 규칙
189
277
 
190
- | Type | Format | Created By |
191
- |------|--------|------------|
192
- | Requirement | `Requirement.md` | specifier |
193
- | WORK plan | `PLAN.md` | planner / specifier |
194
- | TASK plan | `TASK-NN.md` | planner / specifier |
195
- | TASK result | `TASK-NN_result.md` | committer |
196
- | Activity log | `work_WORK-NN.log` | all agents (append) |
278
+ | 유형 | 형식 | 생성 주체 |
279
+ |------|------|-----------|
280
+ | 요구사항 | `Requirement.md` | specifier |
281
+ | WORK 계획 | `PLAN.md` | planner / specifier |
282
+ | TASK 계획 | `TASK-NN.md` | planner / specifier |
283
+ | TASK 결과 | `TASK-NN_result.md` | committer |
284
+ | 결정 로그 | `DECISIONS.md` | orchestrator |
285
+ | 활동 로그 | `work_WORK-NN.log` | orchestrator (추가) |
197
286
 
198
- `WORK-NN-TASK-NN.md` format prohibited → `parseTaskFilename()` cannot recognize it.
287
+ `WORK-NN-TASK-NN.md` 형식 금지 → `parseTaskFilename()`이 인식할 없음.
@@ -1,31 +1,31 @@
1
- # ref-cache Protocol
2
-
3
- ## Overview
4
-
5
- ref-cache is a mechanism to avoid redundant file reads across sub-agent invocations within a pipeline.
6
- Reference files are passed between agents via `<ref-cache>` XML elements instead of being re-read from disk each time.
7
-
8
- ## Protocol (4 Steps)
9
-
10
- 1. **Check** if `<ref-cache>` exists in the received dispatch XML
11
- 2. For each required reference file:
12
- - If present in ref-cache → **SKIP file read**, use cached content
13
- - If absent from ref-cache → Read from `{REFERENCES_DIR}/{filename}.md` and add to ref-cache
14
- 3. On task completion, include the merged `<ref-cache>` in the returned task-result XML
15
- 4. **Backward compatibility**: If dispatch contains no `<ref-cache>`, read all reference files normally (existing behavior)
16
-
17
- ## ref-cache XML Format
18
-
19
- See `xml-schema.md` § 4 for the full schema.
20
-
21
- ```xml
22
- <ref-cache>
23
- <ref key="file-content-schema">...content...</ref>
24
- <ref key="shared-prompt-sections">...content...</ref>
25
- <!-- one <ref> per loaded reference file -->
26
- </ref-cache>
27
- ```
28
-
29
- ## Chain Propagation
30
-
31
- See `agent-flow.md` § ref-cache Chain Propagation for how ref-cache flows between agents in the pipeline.
1
+ # ref-cache 프로토콜
2
+
3
+ ## 개요
4
+
5
+ ref-cache 파이프라인 서브에이전트 호출 중복 파일 읽기를 방지하는 메커니즘입니다.
6
+ 레퍼런스 파일이 매번 디스크에서 다시 읽히는 대신 `<ref-cache>` XML 요소를 통해 에이전트 간에 전달됩니다.
7
+
8
+ ## 프로토콜 (4단계)
9
+
10
+ 1. 수신한 dispatch XML에 `<ref-cache>`가 있는지 **확인**
11
+ 2. 필수 레퍼런스 파일에 대해:
12
+ - ref-cache 있으면 **파일 읽기 건너뛰기**, 캐시된 내용 사용
13
+ - ref-cache 없으면 → `{REFERENCES_DIR}/{filename}.md`에서 읽고 ref-cache에 추가
14
+ 3. 작업 완료 시, 반환하는 task-result XML에 병합된 `<ref-cache>` 포함
15
+ 4. **하위 호환성**: dispatch `<ref-cache>`가 없으면 모든 레퍼런스 파일을 정상적으로 읽기 (기존 동작)
16
+
17
+ ## ref-cache XML 형식
18
+
19
+ 전체 스키마는 `xml-schema.md` § 4 참조.
20
+
21
+ ```xml
22
+ <ref-cache>
23
+ <ref key="file-content-schema">...내용...</ref>
24
+ <ref key="shared-prompt-sections">...내용...</ref>
25
+ <!-- 로딩된 레퍼런스 파일당 하나의 <ref> -->
26
+ </ref-cache>
27
+ ```
28
+
29
+ ## 체인 전파
30
+
31
+ 파이프라인에서 ref-cache가 에이전트 간에 어떻게 흐르는지는 `agent-flow.md` § ref-cache Chain Propagation 참조.