uctm 1.1.1 → 1.2.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.
@@ -155,7 +155,23 @@ Committer-specific additional fields:
155
155
  </next-tasks>
156
156
  ```
157
157
 
158
- Do not change WORK-LIST.md to COMPLETED — changed only at git push time.
158
+ ### 3-9-1. WORK-LIST.md Auto-Completion
159
+
160
+ Check if this is the last TASK. If so, change WORK-LIST.md from `IN_PROGRESS` to `COMPLETED`.
161
+
162
+ ```bash
163
+ # Check if last TASK
164
+ TOTAL=$(ls works/${WORK_ID}/TASK-*.md 2>/dev/null | grep -cv '_result\|_progress')
165
+ DONE=$(ls works/${WORK_ID}/TASK-*_result.md 2>/dev/null | wc -l)
166
+
167
+ if [ "$DONE" -ge "$TOTAL" ]; then
168
+ # Change IN_PROGRESS → COMPLETED in WORK-LIST.md
169
+ sed -i "s/| ${WORK_ID} |\\(.*\\)| IN_PROGRESS |\\(.*\\)|\\(.*\\)|/| ${WORK_ID} |\\1| COMPLETED |\\2| $(date '+%Y-%m-%d') |/" works/WORK-LIST.md
170
+ git add works/WORK-LIST.md
171
+ git commit --amend --no-edit
172
+ fi
173
+ ```
174
+
159
175
  → see `.claude/agents/shared-prompt-sections.md` § 8
160
176
 
161
177
  ---
@@ -173,7 +189,7 @@ Do not change WORK-LIST.md to COMPLETED — changed only at git push time.
173
189
  - If Files changed is empty → immediately return FAIL
174
190
 
175
191
  ### WORK-LIST.md Rules
176
- - Changing to COMPLETED is prohibited changed only at git push time
192
+ - Automatically change WORK-LIST.md from `IN_PROGRESS` to `COMPLETED` when the last TASK is completed
177
193
 
178
194
  ### Output Language Rule
179
195
  → see `shared-prompt-sections.md` § 1
@@ -1,224 +1,224 @@
1
- # File Content Schema
2
-
3
- Single source of truth for pipeline artifact file formats.
4
-
5
- ## COMPLIANCE
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_progress.md` | § 3 | committer gate FAIL |
12
- | `TASK-XX_result.md` | § 4 | context-handoff missing |
13
- | `TASK-XX_result.md` (direct) | § 5 | result.md recognition failure |
14
- | `PROGRESS.md` | § 6 | scheduler progress tracking inoperable |
15
-
16
- ---
17
-
18
- ## § 1. PLAN.md
19
-
20
- Path: `works/{WORK_ID}/PLAN.md`
21
-
22
- ```markdown
23
- # WORK-01: {title}
24
-
25
- > Created: {YYYY-MM-DD}
26
- > Requirement: {REQ-XXX | N/A}
27
- > Execution-Mode: {direct | pipeline | full}
28
- > Project: {project name}
29
- > Tech Stack: {stack}
30
- > Language: {lang_code}
31
- > Status: PLANNED
32
-
33
- ## Goal
34
- {1-2 sentences}
35
-
36
- ## Task Dependency Graph
37
- {ASCII diagram}
38
-
39
- ## Tasks
40
-
41
- ### TASK-00: {title}
42
- - **Depends on**: (none)
43
- - **Scope**: {description}
44
- - **Files**:
45
- - `path/to/file` — {description}
46
-
47
- ### TASK-01: {title}
48
- - **Depends on**: TASK-00
49
- ```
50
-
51
- Title format: `# WORK-NN: title` — `# PLAN WORK-NN:` is prohibited (`parsePlanMd()` error)
52
-
53
- ---
54
-
55
- ## § 2. TASK-XX.md
56
-
57
- Path: `works/{WORK_ID}/TASK-XX.md`
58
-
59
- > `parseTaskFilename()` regex: `/^TASK-(\d+)\.md$/` — WORK prefix prohibited
60
-
61
- ```markdown
62
- # TASK-XX: {title}
63
-
64
- ## WORK
65
- {WORK_ID}: {WORK title}
66
-
67
- ## Dependencies
68
- - TASK-YY (required)
69
-
70
- ## Scope
71
- {description}
72
-
73
- ## Files
74
- | Path | Action | Description |
75
- |------|--------|-------------|
76
- | `src/file.ts` | CREATE | description |
77
-
78
- ## Acceptance Criteria
79
- - [ ] {criterion}
80
-
81
- ## Verify
82
- ```bash
83
- {verification commands}
84
- ```
85
- ```
86
-
87
- ---
88
-
89
- ## § 3. TASK-XX_progress.md
90
-
91
- Path: `works/{WORK_ID}/TASK-XX_progress.md`
92
-
93
- ```markdown
94
- # TASK-XX Progress
95
-
96
- - Status: {PENDING | STARTED | IN_PROGRESS | COMPLETED}
97
- - Started: {ISO 8601}
98
- - Updated: {ISO 8601}
99
- - Files changed:
100
- - `path/to/file` — {CREATE | MODIFY | DELETE}
101
- ```
102
-
103
- | Timing | Status |
104
- |--------|--------|
105
- | planner template | `PENDING` |
106
- | builder starts | `STARTED` |
107
- | file changes in progress | `IN_PROGRESS` |
108
- | completed | `COMPLETED` |
109
-
110
- committer gate: file exists + `Status: COMPLETED` + Files changed is not empty
111
-
112
- ---
113
-
114
- ## § 4. TASK-XX_result.md (full / pipeline)
115
-
116
- Path: `works/{WORK_ID}/TASK-XX_result.md`
117
-
118
- ```markdown
119
- # TASK-XX Result
120
-
121
- > WORK: {WORK_ID} — {title}
122
- > Completed: {YYYY-MM-DD HH:MM}
123
- > Status: **DONE**
124
-
125
- {## Summary | ## 요약 | ## サマリー}
126
- {1-2 lines}
127
-
128
- {## Completed Checklist | ## 완료 체크리스트 | ## 完了チェックリスト}
129
- - [x] {item}
130
-
131
- {## Verification Results | ## 검증 결과 | ## 検証結果}
132
- - Build: ✅
133
- - Lint: ✅
134
- - Tests: ✅ (N passed)
135
-
136
- {## Files Changed | ## 변경 파일 | ## 変更ファイル}
137
- ### Created
138
- - `path` — {description}
139
-
140
- {## Issues Encountered | ## 발생 이슈 | ## 発生した問題}
141
- None
142
-
143
- {## Notes for Subsequent Tasks | ## 후속 TASK 참고사항 | ## 後続タスクへの注記}
144
- None
145
-
146
- {## Context Handoff | ## 컨텍스트 핸드오프 | ## コンテキスト引き継ぎ}
147
-
148
- ### Builder Context (SUMMARY)
149
- {builder what field 1-3 lines}
150
-
151
- ### Verifier Context (FULL)
152
- {verifier context-handoff 4 fields}
153
- ```
154
-
155
- | Section | en | ko | ja |
156
- |---------|----|----|-----|
157
- | Summary | `## Summary` | `## 요약` | `## サマリー` |
158
- | Completed Checklist | `## Completed Checklist` | `## 완료 체크리스트` | `## 完了チェックリスト` |
159
- | Verification Results | `## Verification Results` | `## 검증 결과` | `## 検証結果` |
160
- | Files Changed | `## Files Changed` | `## 변경 파일` | `## 変更ファイル` |
161
- | Issues Encountered | `## Issues Encountered` | `## 발생 이슈` | `## 発生した問題` |
162
- | Notes for Subsequent Tasks | `## Notes for Subsequent Tasks` | `## 후속 TASK 참고사항` | `## 後続タスクへの注記` |
163
- | Context Handoff | `## Context Handoff` | `## 컨텍스트 핸드오프` | `## コンテキスト引き継ぎ` |
164
-
165
- ---
166
-
167
- ## § 5. TASK-XX_result.md (direct mode)
168
-
169
- ```markdown
170
- # TASK-00 Result
171
-
172
- > WORK: WORK-NN — {title}
173
- > Completed: {YYYY-MM-DD HH:MM}
174
- > Execution-Mode: direct
175
- > Status: **DONE**
176
- > Commit: {hash}
177
-
178
- ## Summary
179
- {1 line}
180
-
181
- ## Files Changed
182
- - `{path}` — {description}
183
-
184
- ## Verification
185
- - Build: PASS (self-check)
186
- - Lint: PASS (self-check)
187
- ```
188
-
189
- ---
190
-
191
- ## § 6. PROGRESS.md
192
-
193
- Path: `works/{WORK_ID}/PROGRESS.md`
194
-
195
- ```markdown
196
- # {WORK_ID} Progress
197
-
198
- > WORK: {title}
199
- > Last updated: {timestamp}
200
- > Mode: manual | auto
201
-
202
- | TASK | Title | Status | Commit | Duration |
203
- |------|-------|--------|--------|----------|
204
- | TASK-00 | {title} | ✅ Done | abc1234 | 12min |
205
- | TASK-01 | {title} | 🔄 In Progress | — | — |
206
-
207
- ## Log
208
- - [10:00] TASK-00 started
209
- - [10:12] TASK-00 verified ✅, committed abc1234
210
- ```
211
-
212
- ---
213
-
214
- ## § 7. File Naming Rules
215
-
216
- | Type | Format | Created By |
217
- |------|--------|------------|
218
- | WORK plan | `PLAN.md` | planner / router |
219
- | TASK plan | `TASK-NN.md` | planner / router |
220
- | TASK progress | `TASK-NN_progress.md` | planner (template) / builder (update) |
221
- | TASK result | `TASK-NN_result.md` | committer / router (direct) |
222
- | WORK progress | `PROGRESS.md` | scheduler |
223
-
224
- `WORK-NN-TASK-NN.md` format prohibited → `parseTaskFilename()` cannot recognize it.
1
+ # File Content Schema
2
+
3
+ Single source of truth for pipeline artifact file formats.
4
+
5
+ ## COMPLIANCE
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_progress.md` | § 3 | committer gate FAIL |
12
+ | `TASK-XX_result.md` | § 4 | context-handoff missing |
13
+ | `TASK-XX_result.md` (direct) | § 5 | result.md recognition failure |
14
+ | `PROGRESS.md` | § 6 | scheduler progress tracking inoperable |
15
+
16
+ ---
17
+
18
+ ## § 1. PLAN.md
19
+
20
+ Path: `works/{WORK_ID}/PLAN.md`
21
+
22
+ ```markdown
23
+ # WORK-01: {title}
24
+
25
+ > Created: {YYYY-MM-DD}
26
+ > Requirement: {REQ-XXX | user request text}
27
+ > Execution-Mode: {direct | pipeline | full}
28
+ > Project: {project name}
29
+ > Tech Stack: {stack}
30
+ > Language: {lang_code}
31
+ > Status: PLANNED
32
+
33
+ ## Goal
34
+ {1-2 sentences}
35
+
36
+ ## Task Dependency Graph
37
+ {ASCII diagram}
38
+
39
+ ## Tasks
40
+
41
+ ### TASK-00: {title}
42
+ - **Depends on**: (none)
43
+ - **Scope**: {description}
44
+ - **Files**:
45
+ - `path/to/file` — {description}
46
+
47
+ ### TASK-01: {title}
48
+ - **Depends on**: TASK-00
49
+ ```
50
+
51
+ Title format: `# WORK-NN: title` — `# PLAN WORK-NN:` is prohibited (`parsePlanMd()` error)
52
+
53
+ ---
54
+
55
+ ## § 2. TASK-XX.md
56
+
57
+ Path: `works/{WORK_ID}/TASK-XX.md`
58
+
59
+ > `parseTaskFilename()` regex: `/^TASK-(\d+)\.md$/` — WORK prefix prohibited
60
+
61
+ ```markdown
62
+ # TASK-XX: {title}
63
+
64
+ ## WORK
65
+ {WORK_ID}: {WORK title}
66
+
67
+ ## Dependencies
68
+ - TASK-YY (required)
69
+
70
+ ## Scope
71
+ {description}
72
+
73
+ ## Files
74
+ | Path | Action | Description |
75
+ |------|--------|-------------|
76
+ | `src/file.ts` | CREATE | description |
77
+
78
+ ## Acceptance Criteria
79
+ - [ ] {criterion}
80
+
81
+ ## Verify
82
+ ```bash
83
+ {verification commands}
84
+ ```
85
+ ```
86
+
87
+ ---
88
+
89
+ ## § 3. TASK-XX_progress.md
90
+
91
+ Path: `works/{WORK_ID}/TASK-XX_progress.md`
92
+
93
+ ```markdown
94
+ # TASK-XX Progress
95
+
96
+ - Status: {PENDING | STARTED | IN_PROGRESS | COMPLETED}
97
+ - Started: {ISO 8601}
98
+ - Updated: {ISO 8601}
99
+ - Files changed:
100
+ - `path/to/file` — {CREATE | MODIFY | DELETE}
101
+ ```
102
+
103
+ | Timing | Status |
104
+ |--------|--------|
105
+ | planner template | `PENDING` |
106
+ | builder starts | `STARTED` |
107
+ | file changes in progress | `IN_PROGRESS` |
108
+ | completed | `COMPLETED` |
109
+
110
+ committer gate: file exists + `Status: COMPLETED` + Files changed is not empty
111
+
112
+ ---
113
+
114
+ ## § 4. TASK-XX_result.md (full / pipeline)
115
+
116
+ Path: `works/{WORK_ID}/TASK-XX_result.md`
117
+
118
+ ```markdown
119
+ # TASK-XX Result
120
+
121
+ > WORK: {WORK_ID} — {title}
122
+ > Completed: {YYYY-MM-DD HH:MM}
123
+ > Status: **DONE**
124
+
125
+ {## Summary | ## 요약 | ## サマリー}
126
+ {1-2 lines}
127
+
128
+ {## Completed Checklist | ## 완료 체크리스트 | ## 完了チェックリスト}
129
+ - [x] {item}
130
+
131
+ {## Verification Results | ## 검증 결과 | ## 検証結果}
132
+ - Build: ✅
133
+ - Lint: ✅
134
+ - Tests: ✅ (N passed)
135
+
136
+ {## Files Changed | ## 변경 파일 | ## 変更ファイル}
137
+ ### Created
138
+ - `path` — {description}
139
+
140
+ {## Issues Encountered | ## 발생 이슈 | ## 発生した問題}
141
+ None
142
+
143
+ {## Notes for Subsequent Tasks | ## 후속 TASK 참고사항 | ## 後続タスクへの注記}
144
+ None
145
+
146
+ {## Context Handoff | ## 컨텍스트 핸드오프 | ## コンテキスト引き継ぎ}
147
+
148
+ ### Builder Context (SUMMARY)
149
+ {builder what field 1-3 lines}
150
+
151
+ ### Verifier Context (FULL)
152
+ {verifier context-handoff 4 fields}
153
+ ```
154
+
155
+ | Section | en | ko | ja |
156
+ |---------|----|----|-----|
157
+ | Summary | `## Summary` | `## 요약` | `## サマリー` |
158
+ | Completed Checklist | `## Completed Checklist` | `## 완료 체크리스트` | `## 完了チェックリスト` |
159
+ | Verification Results | `## Verification Results` | `## 검증 결과` | `## 検証結果` |
160
+ | Files Changed | `## Files Changed` | `## 변경 파일` | `## 変更ファイル` |
161
+ | Issues Encountered | `## Issues Encountered` | `## 발생 이슈` | `## 発生した問題` |
162
+ | Notes for Subsequent Tasks | `## Notes for Subsequent Tasks` | `## 후속 TASK 참고사항` | `## 後続タスクへの注記` |
163
+ | Context Handoff | `## Context Handoff` | `## 컨텍스트 핸드오프` | `## コンテキスト引き継ぎ` |
164
+
165
+ ---
166
+
167
+ ## § 5. TASK-XX_result.md (direct mode)
168
+
169
+ ```markdown
170
+ # TASK-00 Result
171
+
172
+ > WORK: WORK-NN — {title}
173
+ > Completed: {YYYY-MM-DD HH:MM}
174
+ > Execution-Mode: direct
175
+ > Status: **DONE**
176
+ > Commit: {hash}
177
+
178
+ ## Summary
179
+ {1 line}
180
+
181
+ ## Files Changed
182
+ - `{path}` — {description}
183
+
184
+ ## Verification
185
+ - Build: PASS (self-check)
186
+ - Lint: PASS (self-check)
187
+ ```
188
+
189
+ ---
190
+
191
+ ## § 6. PROGRESS.md
192
+
193
+ Path: `works/{WORK_ID}/PROGRESS.md`
194
+
195
+ ```markdown
196
+ # {WORK_ID} Progress
197
+
198
+ > WORK: {title}
199
+ > Last updated: {timestamp}
200
+ > Mode: manual | auto
201
+
202
+ | TASK | Title | Status | Commit | Duration |
203
+ |------|-------|--------|--------|----------|
204
+ | TASK-00 | {title} | ✅ Done | abc1234 | 12min |
205
+ | TASK-01 | {title} | 🔄 In Progress | — | — |
206
+
207
+ ## Log
208
+ - [10:00] TASK-00 started
209
+ - [10:12] TASK-00 verified ✅, committed abc1234
210
+ ```
211
+
212
+ ---
213
+
214
+ ## § 7. File Naming Rules
215
+
216
+ | Type | Format | Created By |
217
+ |------|--------|------------|
218
+ | WORK plan | `PLAN.md` | planner / router |
219
+ | TASK plan | `TASK-NN.md` | planner / router |
220
+ | TASK progress | `TASK-NN_progress.md` | planner (template) / builder (update) |
221
+ | TASK result | `TASK-NN_result.md` | committer / router (direct) |
222
+ | WORK progress | `PROGRESS.md` | scheduler |
223
+
224
+ `WORK-NN-TASK-NN.md` format prohibited → `parseTaskFilename()` cannot recognize it.
@@ -143,7 +143,7 @@ Record resolved language in PLAN.md `> Language:` field. Write all outputs in th
143
143
  ### 3-9. Requirement Code (REQ) Recording
144
144
 
145
145
  - `REQ-XXX` pattern exists: `> Requirement: REQ-XXX`
146
- - If absent: `> Requirement: N/A`
146
+ - If absent: `> Requirement: {user request text}` — record the user's request text as-is
147
147
 
148
148
  ---
149
149
 
@@ -103,9 +103,21 @@ Router handles everything on its own. Use Serena MCP first for code exploration:
103
103
  16. Add WORK-LIST.md IN_PROGRESS
104
104
  ```
105
105
 
106
- ### 3-5. pipeline Mode Execution
106
+ ### 3-5. Pipeline Mode Execution
107
107
 
108
- **builder dispatch** Execute subagent then dispatch message
108
+ > ⚠️ In pipeline mode, Router only creates PLAN.md + TASK-NN.md.
109
+ > Code modification, builder invocation, and commits are strictly prohibited. Only return dispatch XML.
110
+
111
+ ```
112
+ 1. Determine WORK ID
113
+ 2. mkdir works/WORK-NN/
114
+ 3. log_work INIT "WORK-NN created — Execution-Mode: pipeline"
115
+ 4. Create PLAN.md (Execution-Mode: pipeline) → file-content-schema.md § 1
116
+ 5. Create TASK-NN.md (multiple if needed) → file-content-schema.md § 2
117
+ 6. Add IN_PROGRESS to WORK-LIST.md
118
+ 7. Generate and return dispatch XML below. **Invocation is performed by Main Claude.**
119
+ 8. log_work DISPATCH "Builder dispatch XML returned"
120
+ ```
109
121
 
110
122
  → dispatch XML format: see `xml-schema.md` § 1 (to="builder", task="TASK-00", execution-mode="pipeline")
111
123
 
@@ -141,7 +153,7 @@ Router handles everything on its own. Use Serena MCP first for code exploration:
141
153
  → see `.claude/agents/shared-prompt-sections.md` § 8
142
154
 
143
155
  - On WORK creation: add `IN_PROGRESS`
144
- - COMPLETED change: **only at git push time** Router must not change directly
156
+ - COMPLETED change: automatically changed by committer when last TASK is completed
145
157
 
146
158
  ### File Naming Rules
147
159
  - TASK filenames: `TASK-XX.md` format
@@ -111,7 +111,7 @@ echo "$DONE / $TOTAL"
111
111
  | Field | Required | Description |
112
112
  |-------|----------|-------------|
113
113
  | `> Created:` | ✅ | YYYY-MM-DD |
114
- | `> Requirement:` | ✅ | `REQ-XXX` or `N/A` |
114
+ | `> Requirement:` | ✅ | `REQ-XXX` or user request text |
115
115
  | `> Execution-Mode:` | ✅ | `direct` / `pipeline` / `full` |
116
116
  | `> Project:` | ✅ | Project name |
117
117
  | `> Tech Stack:` | ✅ | Detected tech stack |
@@ -127,11 +127,10 @@ File: `works/WORK-LIST.md`
127
127
  | Status | Timing |
128
128
  |--------|--------|
129
129
  | `IN_PROGRESS` | Added when WORK directory is created |
130
- | `COMPLETED` | Changed only at git push time |
130
+ | `COMPLETED` | Automatically changed by committer when last TASK is completed |
131
131
 
132
- - committer / scheduler → changing to COMPLETED is prohibited
133
132
  - Must add IN_PROGRESS when WORK directory is created
134
- - Do not leave as IN_PROGRESS after push
133
+ - committer: after committing the last TASK, change WORK-LIST.md from `IN_PROGRESS` to `COMPLETED`
135
134
 
136
135
  ---
137
136
 
@@ -155,7 +155,23 @@ committer 고유 추가 필드:
155
155
  </next-tasks>
156
156
  ```
157
157
 
158
- WORK-LIST.md COMPLETED로 변경하지 않는다 — git push 시에만 변경.
158
+ ### 3-9-1. WORK-LIST.md 자동 완료 처리
159
+
160
+ 마지막 TASK인지 확인 후, 마지막 TASK이면 WORK-LIST.md를 `IN_PROGRESS` → `COMPLETED`로 변경한다.
161
+
162
+ ```bash
163
+ # 마지막 TASK 확인
164
+ TOTAL=$(ls works/${WORK_ID}/TASK-*.md 2>/dev/null | grep -cv '_result\|_progress')
165
+ DONE=$(ls works/${WORK_ID}/TASK-*_result.md 2>/dev/null | wc -l)
166
+
167
+ if [ "$DONE" -ge "$TOTAL" ]; then
168
+ # WORK-LIST.md에서 해당 WORK의 IN_PROGRESS → COMPLETED 변경
169
+ sed -i "s/| ${WORK_ID} |\\(.*\\)| IN_PROGRESS |\\(.*\\)|\\(.*\\)|/| ${WORK_ID} |\\1| COMPLETED |\\2| $(date '+%Y-%m-%d') |/" works/WORK-LIST.md
170
+ git add works/WORK-LIST.md
171
+ git commit --amend --no-edit
172
+ fi
173
+ ```
174
+
159
175
  → `.claude/agents/shared-prompt-sections.md` § 8 참조
160
176
 
161
177
  ---
@@ -173,7 +189,7 @@ WORK-LIST.md를 COMPLETED로 변경하지 않는다 — git push 시에만 변
173
189
  - Files changed 없으면 즉시 FAIL 반환
174
190
 
175
191
  ### WORK-LIST.md 규칙
176
- - COMPLETED 변경 금지 git push 시에만 변경
192
+ - 마지막 TASK 완료 WORK-LIST.md를 `IN_PROGRESS` `COMPLETED`로 자동 변경
177
193
 
178
194
  ### Output Language Rule
179
195
  → `shared-prompt-sections.md` § 1 참조
@@ -1,224 +1,224 @@
1
- # File Content Schema
2
-
3
- 파이프라인 산출물 파일 포맷 단일 정의.
4
-
5
- ## COMPLIANCE
6
-
7
- | 생성 파일 | 준수 섹션 | 위반 시 결과 |
8
- |-----------|-----------|-------------|
9
- | `PLAN.md` | § 1 | `parsePlanMd()` 파싱 실패, scheduler 동작 불가 |
10
- | `TASK-XX.md` | § 2 | `parseTaskFilename()` DB 등록 누락 |
11
- | `TASK-XX_progress.md` | § 3 | committer gate FAIL |
12
- | `TASK-XX_result.md` | § 4 | context-handoff 누락 |
13
- | `TASK-XX_result.md` (direct) | § 5 | result.md 인식 실패 |
14
- | `PROGRESS.md` | § 6 | scheduler 진행률 추적 불가 |
15
-
16
- ---
17
-
18
- ## § 1. PLAN.md
19
-
20
- 경로: `works/{WORK_ID}/PLAN.md`
21
-
22
- ```markdown
23
- # WORK-01: {제목}
24
-
25
- > Created: {YYYY-MM-DD}
26
- > 요구사항: {REQ-XXX | N/A}
27
- > Execution-Mode: {direct | pipeline | full}
28
- > Project: {project name}
29
- > Tech Stack: {stack}
30
- > Language: {lang_code}
31
- > Status: PLANNED
32
-
33
- ## Goal
34
- {1-2문장}
35
-
36
- ## Task Dependency Graph
37
- {ASCII diagram}
38
-
39
- ## Tasks
40
-
41
- ### TASK-00: {title}
42
- - **Depends on**: (none)
43
- - **Scope**: {description}
44
- - **Files**:
45
- - `path/to/file` — {description}
46
-
47
- ### TASK-01: {title}
48
- - **Depends on**: TASK-00
49
- ```
50
-
51
- 제목 형식: `# WORK-NN: 제목` — `# PLAN WORK-NN:` 금지 (`parsePlanMd()` 오류)
52
-
53
- ---
54
-
55
- ## § 2. TASK-XX.md
56
-
57
- 경로: `works/{WORK_ID}/TASK-XX.md`
58
-
59
- > `parseTaskFilename()` 정규식: `/^TASK-(\d+)\.md$/` — WORK prefix 금지
60
-
61
- ```markdown
62
- # TASK-XX: {title}
63
-
64
- ## WORK
65
- {WORK_ID}: {WORK title}
66
-
67
- ## Dependencies
68
- - TASK-YY (required)
69
-
70
- ## Scope
71
- {description}
72
-
73
- ## Files
74
- | Path | Action | Description |
75
- |------|--------|-------------|
76
- | `src/file.ts` | CREATE | 설명 |
77
-
78
- ## Acceptance Criteria
79
- - [ ] {criterion}
80
-
81
- ## Verify
82
- ```bash
83
- {verification commands}
84
- ```
85
- ```
86
-
87
- ---
88
-
89
- ## § 3. TASK-XX_progress.md
90
-
91
- 경로: `works/{WORK_ID}/TASK-XX_progress.md`
92
-
93
- ```markdown
94
- # TASK-XX Progress
95
-
96
- - Status: {PENDING | STARTED | IN_PROGRESS | COMPLETED}
97
- - Started: {ISO 8601}
98
- - Updated: {ISO 8601}
99
- - Files changed:
100
- - `path/to/file` — {CREATE | MODIFY | DELETE}
101
- ```
102
-
103
- | 시점 | Status |
104
- |------|--------|
105
- | planner 템플릿 | `PENDING` |
106
- | builder 착수 | `STARTED` |
107
- | 파일 변경 중 | `IN_PROGRESS` |
108
- | 완료 | `COMPLETED` |
109
-
110
- committer gate: 파일 존재 + `Status: COMPLETED` + Files changed 비어있지 않음
111
-
112
- ---
113
-
114
- ## § 4. TASK-XX_result.md (full / pipeline)
115
-
116
- 경로: `works/{WORK_ID}/TASK-XX_result.md`
117
-
118
- ```markdown
119
- # TASK-XX Result
120
-
121
- > WORK: {WORK_ID} — {title}
122
- > Completed: {YYYY-MM-DD HH:MM}
123
- > Status: **DONE**
124
-
125
- {## Summary | ## 요약 | ## サマリー}
126
- {1-2줄}
127
-
128
- {## Completed Checklist | ## 완료 체크리스트 | ## 完了チェックリスト}
129
- - [x] {item}
130
-
131
- {## Verification Results | ## 검증 결과 | ## 検証結果}
132
- - Build: ✅
133
- - Lint: ✅
134
- - Tests: ✅ (N passed)
135
-
136
- {## Files Changed | ## 변경 파일 | ## 変更ファイル}
137
- ### Created
138
- - `path` — {description}
139
-
140
- {## Issues Encountered | ## 발생 이슈 | ## 発生した問題}
141
- None
142
-
143
- {## Notes for Subsequent Tasks | ## 후속 TASK 참고사항 | ## 後続タスクへの注記}
144
- None
145
-
146
- {## Context Handoff | ## 컨텍스트 핸드오프 | ## コンテキスト引き継ぎ}
147
-
148
- ### Builder Context (SUMMARY)
149
- {builder what 필드 1-3줄}
150
-
151
- ### Verifier Context (FULL)
152
- {verifier context-handoff 4개 필드}
153
- ```
154
-
155
- | 섹션 | en | ko | ja |
156
- |------|----|----|-----|
157
- | Summary | `## Summary` | `## 요약` | `## サマリー` |
158
- | Completed Checklist | `## Completed Checklist` | `## 완료 체크리스트` | `## 完了チェックリスト` |
159
- | Verification Results | `## Verification Results` | `## 검증 결과` | `## 検証結果` |
160
- | Files Changed | `## Files Changed` | `## 변경 파일` | `## 変更ファイル` |
161
- | Issues Encountered | `## Issues Encountered` | `## 발생 이슈` | `## 発生した問題` |
162
- | Notes for Subsequent Tasks | `## Notes for Subsequent Tasks` | `## 후속 TASK 참고사항` | `## 後続タスクへの注記` |
163
- | Context Handoff | `## Context Handoff` | `## 컨텍스트 핸드오프` | `## コンテキスト引き継ぎ` |
164
-
165
- ---
166
-
167
- ## § 5. TASK-XX_result.md (direct 모드)
168
-
169
- ```markdown
170
- # TASK-00 Result
171
-
172
- > WORK: WORK-NN — {제목}
173
- > Completed: {YYYY-MM-DD HH:MM}
174
- > Execution-Mode: direct
175
- > Status: **DONE**
176
- > Commit: {hash}
177
-
178
- ## 요약
179
- {1줄}
180
-
181
- ## 변경 파일
182
- - `{path}` — {내용}
183
-
184
- ## 검증
185
- - Build: PASS (self-check)
186
- - Lint: PASS (self-check)
187
- ```
188
-
189
- ---
190
-
191
- ## § 6. PROGRESS.md
192
-
193
- 경로: `works/{WORK_ID}/PROGRESS.md`
194
-
195
- ```markdown
196
- # {WORK_ID} Progress
197
-
198
- > WORK: {title}
199
- > Last updated: {timestamp}
200
- > Mode: manual | auto
201
-
202
- | TASK | Title | Status | Commit | Duration |
203
- |------|-------|--------|--------|----------|
204
- | TASK-00 | {title} | ✅ Done | abc1234 | 12min |
205
- | TASK-01 | {title} | 🔄 In Progress | — | — |
206
-
207
- ## Log
208
- - [10:00] TASK-00 started
209
- - [10:12] TASK-00 verified ✅, committed abc1234
210
- ```
211
-
212
- ---
213
-
214
- ## § 7. 파일명 규칙
215
-
216
- | 종류 | 형식 | 생성 주체 |
217
- |------|------|----------|
218
- | WORK 계획 | `PLAN.md` | planner / router |
219
- | TASK 계획 | `TASK-NN.md` | planner / router |
220
- | TASK 진행 | `TASK-NN_progress.md` | planner(템플릿) / builder(갱신) |
221
- | TASK 결과 | `TASK-NN_result.md` | committer / router(direct) |
222
- | WORK 진행 | `PROGRESS.md` | scheduler |
223
-
224
- `WORK-NN-TASK-NN.md` 형식 금지 → `parseTaskFilename()` 인식 불가.
1
+ # File Content Schema
2
+
3
+ 파이프라인 산출물 파일 포맷 단일 정의.
4
+
5
+ ## COMPLIANCE
6
+
7
+ | 생성 파일 | 준수 섹션 | 위반 시 결과 |
8
+ |-----------|-----------|-------------|
9
+ | `PLAN.md` | § 1 | `parsePlanMd()` 파싱 실패, scheduler 동작 불가 |
10
+ | `TASK-XX.md` | § 2 | `parseTaskFilename()` DB 등록 누락 |
11
+ | `TASK-XX_progress.md` | § 3 | committer gate FAIL |
12
+ | `TASK-XX_result.md` | § 4 | context-handoff 누락 |
13
+ | `TASK-XX_result.md` (direct) | § 5 | result.md 인식 실패 |
14
+ | `PROGRESS.md` | § 6 | scheduler 진행률 추적 불가 |
15
+
16
+ ---
17
+
18
+ ## § 1. PLAN.md
19
+
20
+ 경로: `works/{WORK_ID}/PLAN.md`
21
+
22
+ ```markdown
23
+ # WORK-01: {제목}
24
+
25
+ > Created: {YYYY-MM-DD}
26
+ > 요구사항: {REQ-XXX | 사용자 요청 텍스트}
27
+ > Execution-Mode: {direct | pipeline | full}
28
+ > Project: {project name}
29
+ > Tech Stack: {stack}
30
+ > Language: {lang_code}
31
+ > Status: PLANNED
32
+
33
+ ## Goal
34
+ {1-2문장}
35
+
36
+ ## Task Dependency Graph
37
+ {ASCII diagram}
38
+
39
+ ## Tasks
40
+
41
+ ### TASK-00: {title}
42
+ - **Depends on**: (none)
43
+ - **Scope**: {description}
44
+ - **Files**:
45
+ - `path/to/file` — {description}
46
+
47
+ ### TASK-01: {title}
48
+ - **Depends on**: TASK-00
49
+ ```
50
+
51
+ 제목 형식: `# WORK-NN: 제목` — `# PLAN WORK-NN:` 금지 (`parsePlanMd()` 오류)
52
+
53
+ ---
54
+
55
+ ## § 2. TASK-XX.md
56
+
57
+ 경로: `works/{WORK_ID}/TASK-XX.md`
58
+
59
+ > `parseTaskFilename()` 정규식: `/^TASK-(\d+)\.md$/` — WORK prefix 금지
60
+
61
+ ```markdown
62
+ # TASK-XX: {title}
63
+
64
+ ## WORK
65
+ {WORK_ID}: {WORK title}
66
+
67
+ ## Dependencies
68
+ - TASK-YY (required)
69
+
70
+ ## Scope
71
+ {description}
72
+
73
+ ## Files
74
+ | Path | Action | Description |
75
+ |------|--------|-------------|
76
+ | `src/file.ts` | CREATE | 설명 |
77
+
78
+ ## Acceptance Criteria
79
+ - [ ] {criterion}
80
+
81
+ ## Verify
82
+ ```bash
83
+ {verification commands}
84
+ ```
85
+ ```
86
+
87
+ ---
88
+
89
+ ## § 3. TASK-XX_progress.md
90
+
91
+ 경로: `works/{WORK_ID}/TASK-XX_progress.md`
92
+
93
+ ```markdown
94
+ # TASK-XX Progress
95
+
96
+ - Status: {PENDING | STARTED | IN_PROGRESS | COMPLETED}
97
+ - Started: {ISO 8601}
98
+ - Updated: {ISO 8601}
99
+ - Files changed:
100
+ - `path/to/file` — {CREATE | MODIFY | DELETE}
101
+ ```
102
+
103
+ | 시점 | Status |
104
+ |------|--------|
105
+ | planner 템플릿 | `PENDING` |
106
+ | builder 착수 | `STARTED` |
107
+ | 파일 변경 중 | `IN_PROGRESS` |
108
+ | 완료 | `COMPLETED` |
109
+
110
+ committer gate: 파일 존재 + `Status: COMPLETED` + Files changed 비어있지 않음
111
+
112
+ ---
113
+
114
+ ## § 4. TASK-XX_result.md (full / pipeline)
115
+
116
+ 경로: `works/{WORK_ID}/TASK-XX_result.md`
117
+
118
+ ```markdown
119
+ # TASK-XX Result
120
+
121
+ > WORK: {WORK_ID} — {title}
122
+ > Completed: {YYYY-MM-DD HH:MM}
123
+ > Status: **DONE**
124
+
125
+ {## Summary | ## 요약 | ## サマリー}
126
+ {1-2줄}
127
+
128
+ {## Completed Checklist | ## 완료 체크리스트 | ## 完了チェックリスト}
129
+ - [x] {item}
130
+
131
+ {## Verification Results | ## 검증 결과 | ## 検証結果}
132
+ - Build: ✅
133
+ - Lint: ✅
134
+ - Tests: ✅ (N passed)
135
+
136
+ {## Files Changed | ## 변경 파일 | ## 変更ファイル}
137
+ ### Created
138
+ - `path` — {description}
139
+
140
+ {## Issues Encountered | ## 발생 이슈 | ## 発生した問題}
141
+ None
142
+
143
+ {## Notes for Subsequent Tasks | ## 후속 TASK 참고사항 | ## 後続タスクへの注記}
144
+ None
145
+
146
+ {## Context Handoff | ## 컨텍스트 핸드오프 | ## コンテキスト引き継ぎ}
147
+
148
+ ### Builder Context (SUMMARY)
149
+ {builder what 필드 1-3줄}
150
+
151
+ ### Verifier Context (FULL)
152
+ {verifier context-handoff 4개 필드}
153
+ ```
154
+
155
+ | 섹션 | en | ko | ja |
156
+ |------|----|----|-----|
157
+ | Summary | `## Summary` | `## 요약` | `## サマリー` |
158
+ | Completed Checklist | `## Completed Checklist` | `## 완료 체크리스트` | `## 完了チェックリスト` |
159
+ | Verification Results | `## Verification Results` | `## 검증 결과` | `## 検証結果` |
160
+ | Files Changed | `## Files Changed` | `## 변경 파일` | `## 変更ファイル` |
161
+ | Issues Encountered | `## Issues Encountered` | `## 발생 이슈` | `## 発生した問題` |
162
+ | Notes for Subsequent Tasks | `## Notes for Subsequent Tasks` | `## 후속 TASK 참고사항` | `## 後続タスクへの注記` |
163
+ | Context Handoff | `## Context Handoff` | `## 컨텍스트 핸드오프` | `## コンテキスト引き継ぎ` |
164
+
165
+ ---
166
+
167
+ ## § 5. TASK-XX_result.md (direct 모드)
168
+
169
+ ```markdown
170
+ # TASK-00 Result
171
+
172
+ > WORK: WORK-NN — {제목}
173
+ > Completed: {YYYY-MM-DD HH:MM}
174
+ > Execution-Mode: direct
175
+ > Status: **DONE**
176
+ > Commit: {hash}
177
+
178
+ ## 요약
179
+ {1줄}
180
+
181
+ ## 변경 파일
182
+ - `{path}` — {내용}
183
+
184
+ ## 검증
185
+ - Build: PASS (self-check)
186
+ - Lint: PASS (self-check)
187
+ ```
188
+
189
+ ---
190
+
191
+ ## § 6. PROGRESS.md
192
+
193
+ 경로: `works/{WORK_ID}/PROGRESS.md`
194
+
195
+ ```markdown
196
+ # {WORK_ID} Progress
197
+
198
+ > WORK: {title}
199
+ > Last updated: {timestamp}
200
+ > Mode: manual | auto
201
+
202
+ | TASK | Title | Status | Commit | Duration |
203
+ |------|-------|--------|--------|----------|
204
+ | TASK-00 | {title} | ✅ Done | abc1234 | 12min |
205
+ | TASK-01 | {title} | 🔄 In Progress | — | — |
206
+
207
+ ## Log
208
+ - [10:00] TASK-00 started
209
+ - [10:12] TASK-00 verified ✅, committed abc1234
210
+ ```
211
+
212
+ ---
213
+
214
+ ## § 7. 파일명 규칙
215
+
216
+ | 종류 | 형식 | 생성 주체 |
217
+ |------|------|----------|
218
+ | WORK 계획 | `PLAN.md` | planner / router |
219
+ | TASK 계획 | `TASK-NN.md` | planner / router |
220
+ | TASK 진행 | `TASK-NN_progress.md` | planner(템플릿) / builder(갱신) |
221
+ | TASK 결과 | `TASK-NN_result.md` | committer / router(direct) |
222
+ | WORK 진행 | `PROGRESS.md` | scheduler |
223
+
224
+ `WORK-NN-TASK-NN.md` 형식 금지 → `parseTaskFilename()` 인식 불가.
@@ -143,7 +143,7 @@ PLAN.md `> Language:` 필드에 resolved language 기록. 모든 산출물을
143
143
  ### 3-9. 요구사항 코드(REQ) 기록
144
144
 
145
145
  - `REQ-XXX` 패턴 존재: `> 요구사항: REQ-XXX`
146
- - 없는 경우: `> 요구사항: N/A`
146
+ - 없는 경우: `> 요구사항: {사용자 요청 텍스트}` — 사용자가 입력한 요청 내용을 그대로 기록
147
147
 
148
148
  ---
149
149
 
@@ -104,7 +104,19 @@ Router가 단독 수행. 코드 탐색 시 Serena MCP 우선 사용:
104
104
  ```
105
105
  ### 3-5. pipeline 모드 일때 실행
106
106
 
107
- **builder 디스패치** subagent 실행 메시지 디스패치
107
+ > ⚠️ pipeline 모드에서 Router는 PLAN.md + TASK-NN.md 생성까지만 수행한다.
108
+ > 코드 수정, builder 호출, commit 등은 절대 금지. dispatch XML만 반환하라.
109
+
110
+ ```
111
+ 1. WORK ID 결정
112
+ 2. mkdir works/WORK-NN/
113
+ 3. log_work INIT "WORK-NN 생성 — Execution-Mode: pipeline"
114
+ 4. PLAN.md 생성 (Execution-Mode: pipeline) → file-content-schema.md § 1
115
+ 5. TASK-NN.md 생성 (필요 시 복수) → file-content-schema.md § 2
116
+ 6. WORK-LIST.md IN_PROGRESS 추가
117
+ 7. 아래 dispatch XML을 생성하여 반환한다. **호출은 Main Claude가 수행한다.**
118
+ 8. log_work DISPATCH "Builder dispatch XML 반환"
119
+ ```
108
120
 
109
121
  → dispatch XML 포맷: `xml-schema.md` § 1 참조 (to="builder", task="TASK-00", execution-mode="pipeline")
110
122
 
@@ -140,7 +152,7 @@ Router가 단독 수행. 코드 탐색 시 Serena MCP 우선 사용:
140
152
  → `.claude/agents/shared-prompt-sections.md` § 8 참조
141
153
 
142
154
  - WORK 생성 시: `IN_PROGRESS` 추가
143
- - COMPLETED 변경: **git push 시에만** Router직접 변경 금지
155
+ - COMPLETED 변경: 마지막 TASK 완료 committer자동 변경
144
156
 
145
157
  ### 파일명 규칙
146
158
  - TASK 파일명: `TASK-XX.md` 형식
@@ -111,7 +111,7 @@ echo "$DONE / $TOTAL"
111
111
  | 필드 | 필수 | 설명 |
112
112
  |------|------|------|
113
113
  | `> Created:` | ✅ | YYYY-MM-DD |
114
- | `> 요구사항:` | ✅ | `REQ-XXX` 또는 `N/A` |
114
+ | `> 요구사항:` | ✅ | `REQ-XXX` 또는 사용자 요청 텍스트 |
115
115
  | `> Execution-Mode:` | ✅ | `direct` / `pipeline` / `full` |
116
116
  | `> Project:` | ✅ | 프로젝트명 |
117
117
  | `> Tech Stack:` | ✅ | 감지된 기술 스택 |
@@ -127,11 +127,10 @@ echo "$DONE / $TOTAL"
127
127
  | 상태 | 시점 |
128
128
  |------|------|
129
129
  | `IN_PROGRESS` | WORK 디렉토리 생성 시 추가 |
130
- | `COMPLETED` | git push 시에만 변경 |
130
+ | `COMPLETED` | 마지막 TASK 완료 시 committer가 자동 변경 |
131
131
 
132
- - committer / scheduler → COMPLETED 변경 금지
133
132
  - WORK 디렉토리 생성 시 반드시 IN_PROGRESS 추가
134
- - push 후 IN_PROGRESS 방치 금지
133
+ - committer: 마지막 TASK commit WORK-LIST.md를 `IN_PROGRESS` `COMPLETED`로 변경
135
134
 
136
135
  ---
137
136
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "uctm",
3
- "version": "1.1.1",
3
+ "version": "1.2.0",
4
4
  "description": "Universal Claude Task Manager — SDD-based task pipeline subagent system for Claude Code CLI",
5
5
  "type": "module",
6
6
  "bin": {