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.
- package/.claude-plugin/plugin.json +3 -3
- package/README.md +162 -284
- package/agents/builder.md +87 -89
- package/agents/committer.md +90 -96
- package/agents/orchestrator.md +228 -0
- package/agents/planner.md +60 -112
- package/agents/specifier.md +277 -116
- package/agents/verifier.md +61 -66
- package/lib/constants.mjs +1 -5
- package/lib/init.mjs +0 -18
- package/lib/update.mjs +1 -1
- package/package.json +2 -6
- package/references/agent-flow.md +120 -141
- package/references/context-policy.md +39 -37
- package/references/file-content-schema.md +164 -75
- package/references/ref-cache-protocol.md +31 -31
- package/references/shared-prompt-sections.md +104 -202
- package/references/work-activity-log.md +33 -26
- package/references/xml-schema.md +151 -54
- package/skills/sdd-pipeline/SKILL.md +1 -1
- package/skills/uctm-init/SKILL.md +94 -0
- package/skills/work-pipeline/SKILL.md +33 -41
- package/skills/work-status/SKILL.md +17 -17
- package/.agent/router_rule_config.json +0 -47
- package/agents/scheduler.md +0 -171
- package/skills/init/SKILL.md +0 -95
|
@@ -1,69 +1,71 @@
|
|
|
1
|
-
# Context Handoff
|
|
1
|
+
# Context Handoff 정책
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
에이전트 간 슬라이딩 윈도우 컨텍스트 전달 규칙.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## 슬라이딩 윈도우
|
|
6
6
|
|
|
7
|
-
|
|
|
8
|
-
|
|
9
|
-
|
|
|
10
|
-
| 2
|
|
11
|
-
| 3
|
|
7
|
+
| 단계 거리 | 상세 레벨 | 규칙 |
|
|
8
|
+
|-----------|----------|------|
|
|
9
|
+
| 직전 (1단계) | `FULL` | 4개 필드 모두 전달 |
|
|
10
|
+
| 2단계 전 | `SUMMARY` | `what` 필드만, 1-3줄 |
|
|
11
|
+
| 3단계+ | `DROP` | 생략 |
|
|
12
12
|
|
|
13
|
-
## Context-Handoff 4
|
|
13
|
+
## Context-Handoff 4개 필드
|
|
14
14
|
|
|
15
|
-
|
|
|
16
|
-
|
|
17
|
-
| `what` | ✅ | ✅ |
|
|
18
|
-
| `why` | ✅ | ❌ |
|
|
19
|
-
| `caution` | ✅ | ❌ |
|
|
20
|
-
| `incomplete` | ✅ | ❌ |
|
|
15
|
+
| 필드 | FULL | SUMMARY | 내용 |
|
|
16
|
+
|------|:----:|:-------:|------|
|
|
17
|
+
| `what` | ✅ | ✅ | 변경/검증 요약 (2-5줄) |
|
|
18
|
+
| `why` | ✅ | ❌ | 결정 근거 (2-4줄) |
|
|
19
|
+
| `caution` | ✅ | ❌ | 주의사항, 조건부 완료 (1-3줄) |
|
|
20
|
+
| `incomplete` | ✅ | ❌ | 미완료 항목 (1-2줄, 없으면 "None") |
|
|
21
21
|
|
|
22
|
-
##
|
|
22
|
+
## 파이프라인 단계별 입출력
|
|
23
23
|
|
|
24
24
|
### Builder
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
입력: TASK 스펙 + 의존 TASK result.md context-handoff (슬라이딩 윈도우)
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
출력:
|
|
29
29
|
```xml
|
|
30
30
|
<task-result status="PASS|FAIL">
|
|
31
31
|
<context-handoff from="builder" detail-level="FULL">
|
|
32
|
-
<what
|
|
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
|
-
|
|
39
|
+
입력: TASK 스펙 + Builder context-handoff (FULL)
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
출력:
|
|
42
42
|
```xml
|
|
43
43
|
<task-result status="PASS|FAIL">
|
|
44
44
|
<context-handoff from="verifier" detail-level="FULL">
|
|
45
|
-
<what
|
|
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
|
-
|
|
52
|
+
입력: Verifier context-handoff (FULL) + Builder context-handoff (SUMMARY)
|
|
53
53
|
|
|
54
|
-
|
|
55
|
-
1.
|
|
56
|
-
2.
|
|
54
|
+
처리:
|
|
55
|
+
1. builder 성공 여부 확인 (context-handoff 상태 확인)
|
|
56
|
+
2. result.md 작성 + git commit
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
출력: → `{REFERENCES_DIR}/file-content-schema.md` § 3 참조
|
|
59
59
|
|
|
60
|
-
##
|
|
60
|
+
## TASK 간 의존성 전달
|
|
61
61
|
|
|
62
|
-
-
|
|
63
|
-
- 2
|
|
64
|
-
- 3
|
|
62
|
+
- 직전 의존 TASK: context-handoff **FULL** (4개 필드 모두)
|
|
63
|
+
- 2단계 전: **SUMMARY** (what만)
|
|
64
|
+
- 3단계+: **DROP**
|
|
65
65
|
|
|
66
|
-
##
|
|
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
|
-
<!--
|
|
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
|
|
91
|
+
## Committer 재시도
|
|
90
92
|
|
|
91
|
-
1.
|
|
92
|
-
2.
|
|
93
|
-
3.
|
|
93
|
+
1. 실패 원인: 검증 FAIL / 변경 파일 없음
|
|
94
|
+
2. builder에 재디스패치
|
|
95
|
+
3. 최대 2회 재시도 (총 3회 시도). 3회 실패 → TASK FAILED, 파이프라인 중단
|
|
@@ -1,27 +1,28 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 파일 내용 스키마
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
파이프라인 산출물 파일 형식의 단일 정의 소스.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## 준수사항
|
|
6
6
|
|
|
7
|
-
|
|
|
8
|
-
|
|
9
|
-
| `
|
|
10
|
-
| `
|
|
11
|
-
| `TASK-
|
|
12
|
-
| `TASK-XX_result.md`
|
|
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
|
-
|
|
19
|
+
경로: `works/{WORK_ID}/Requirement.md`
|
|
19
20
|
|
|
20
21
|
```markdown
|
|
21
22
|
# Requirement — WORK-NN
|
|
22
23
|
|
|
23
24
|
## Original Request
|
|
24
|
-
>
|
|
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
|
-
- [ ]
|
|
35
|
+
- [ ] 검증 가능한 기준
|
|
35
36
|
```
|
|
36
37
|
|
|
37
|
-
|
|
38
|
+
생성 주체: Specifier (모든 요청에 필수)
|
|
38
39
|
|
|
39
40
|
---
|
|
40
41
|
|
|
41
42
|
## § 1. PLAN.md
|
|
42
43
|
|
|
43
|
-
|
|
44
|
+
경로: `works/{WORK_ID}/PLAN.md`
|
|
45
|
+
|
|
46
|
+
> 요구사항 수준에 따라 ## 설계 이하 간략화 가능
|
|
44
47
|
|
|
45
48
|
```markdown
|
|
46
|
-
# WORK-01: {
|
|
49
|
+
# WORK-01: {제목}
|
|
47
50
|
|
|
48
51
|
> Created: {YYYY-MM-DD}
|
|
49
|
-
> Requirement: {REQ-XXX |
|
|
50
|
-
>
|
|
51
|
-
>
|
|
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
|
-
##
|
|
57
|
-
{1-2
|
|
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
|
-
|
|
60
|
-
|
|
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
|
-
##
|
|
112
|
+
## 추적성 매트릭스
|
|
63
113
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
-
|
|
67
|
-
-
|
|
68
|
-
|
|
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
|
-
|
|
71
|
-
|
|
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
|
-
|
|
135
|
+
제목 형식: `# WORK-NN: title` — `# PLAN WORK-NN:` 금지 (`parsePlanMd()` 오류)
|
|
75
136
|
|
|
76
137
|
---
|
|
77
138
|
|
|
78
139
|
## § 2. TASK-XX.md
|
|
79
140
|
|
|
80
|
-
|
|
141
|
+
경로: `works/{WORK_ID}/TASK-XX.md`
|
|
81
142
|
|
|
82
|
-
> `parseTaskFilename()` regex: `/^TASK-(\d+)\.md$/` — WORK
|
|
143
|
+
> `parseTaskFilename()` regex: `/^TASK-(\d+)\.md$/` — WORK 접두사 금지
|
|
83
144
|
|
|
84
145
|
```markdown
|
|
85
|
-
# TASK-XX: {
|
|
146
|
+
# TASK-XX: {제목}
|
|
86
147
|
|
|
87
148
|
## WORK
|
|
88
|
-
{WORK_ID}: {WORK
|
|
149
|
+
{WORK_ID}: {WORK 제목}
|
|
150
|
+
|
|
151
|
+
## Task 개요
|
|
89
152
|
|
|
90
|
-
|
|
91
|
-
|
|
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
|
-
{
|
|
163
|
+
{설명}
|
|
95
164
|
|
|
96
165
|
## Files
|
|
97
166
|
| Path | Action | Description |
|
|
98
167
|
|------|--------|-------------|
|
|
99
|
-
| `src/file.ts` | CREATE |
|
|
168
|
+
| `src/file.ts` | CREATE | 설명 |
|
|
100
169
|
|
|
101
170
|
## Acceptance Criteria
|
|
102
|
-
- [ ] {
|
|
171
|
+
- [ ] {기준}
|
|
103
172
|
|
|
104
173
|
## Verify
|
|
105
174
|
```bash
|
|
106
|
-
{
|
|
107
|
-
```
|
|
175
|
+
{검증 명령}
|
|
108
176
|
```
|
|
109
177
|
|
|
110
178
|
---
|
|
111
179
|
|
|
112
|
-
## § 3. TASK-XX_result.md
|
|
180
|
+
## § 3. TASK-XX_result.md
|
|
113
181
|
|
|
114
|
-
|
|
182
|
+
경로: `works/{WORK_ID}/TASK-XX_result.md`
|
|
115
183
|
|
|
116
184
|
```markdown
|
|
117
185
|
# TASK-XX Result
|
|
118
186
|
|
|
119
|
-
> WORK: {WORK_ID} — {
|
|
187
|
+
> WORK: {WORK_ID} — {제목}
|
|
120
188
|
> Completed: {YYYY-MM-DD HH:MM}
|
|
121
189
|
> Status: **DONE**
|
|
122
190
|
|
|
123
191
|
{## Summary | ## 요약 | ## サマリー}
|
|
124
|
-
{1-2
|
|
192
|
+
{1-2줄}
|
|
125
193
|
|
|
126
194
|
{## Completed Checklist | ## 완료 체크리스트 | ## 完了チェックリスト}
|
|
127
|
-
- [x] {
|
|
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` — {
|
|
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
|
|
215
|
+
{builder what 필드 1-3줄}
|
|
148
216
|
|
|
149
217
|
### Verifier Context (FULL)
|
|
150
|
-
{verifier context-handoff 4
|
|
218
|
+
{verifier context-handoff 4개 필드}
|
|
151
219
|
```
|
|
152
220
|
|
|
153
|
-
|
|
|
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.
|
|
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
|
-
#
|
|
240
|
+
# DECISIONS — WORK-NN
|
|
169
241
|
|
|
170
|
-
|
|
171
|
-
>
|
|
172
|
-
>
|
|
173
|
-
>
|
|
242
|
+
## D-01
|
|
243
|
+
> 시각: {YYYY-MM-DDTHH:MM:SSZ}
|
|
244
|
+
> 단계: {specifier|planner|builder|verifier|committer}
|
|
245
|
+
> 상태: {PENDING|RESOLVED}
|
|
246
|
+
|
|
247
|
+
### 배경
|
|
248
|
+
{결정이 필요한 이유}
|
|
174
249
|
|
|
175
|
-
|
|
176
|
-
{1
|
|
250
|
+
### 선택지
|
|
251
|
+
1. {선택지 1}
|
|
252
|
+
2. {선택지 2}
|
|
177
253
|
|
|
178
|
-
|
|
179
|
-
|
|
254
|
+
### 권고안
|
|
255
|
+
{orchestrator/자식 에이전트가 제시한 권고}
|
|
180
256
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
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.
|
|
276
|
+
## § 5. 파일 이름 규칙
|
|
189
277
|
|
|
190
|
-
|
|
|
191
|
-
|
|
192
|
-
|
|
|
193
|
-
| WORK
|
|
194
|
-
| TASK
|
|
195
|
-
| TASK
|
|
196
|
-
|
|
|
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`
|
|
287
|
+
`WORK-NN-TASK-NN.md` 형식 금지 → `parseTaskFilename()`이 인식할 수 없음.
|
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
# ref-cache
|
|
2
|
-
|
|
3
|
-
##
|
|
4
|
-
|
|
5
|
-
ref-cache
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
##
|
|
9
|
-
|
|
10
|
-
1.
|
|
11
|
-
2.
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
3.
|
|
15
|
-
4.
|
|
16
|
-
|
|
17
|
-
## ref-cache XML
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
```xml
|
|
22
|
-
<ref-cache>
|
|
23
|
-
<ref key="file-content-schema"
|
|
24
|
-
<ref key="shared-prompt-sections"
|
|
25
|
-
<!--
|
|
26
|
-
</ref-cache>
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
##
|
|
30
|
-
|
|
31
|
-
|
|
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 참조.
|