uctm 1.2.0 → 1.3.2
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/agents/agent-flow.md +175 -0
- package/agents/{en/builder.md → builder.md} +10 -26
- package/agents/{en/committer.md → committer.md} +63 -67
- package/agents/{en/context-policy.md → context-policy.md} +1 -1
- package/agents/{en/file-content-schema.md → file-content-schema.md} +30 -5
- package/agents/ko/agent-flow.md +175 -106
- package/agents/ko/builder.md +10 -26
- package/agents/ko/committer.md +63 -67
- package/agents/ko/context-policy.md +1 -1
- package/agents/ko/file-content-schema.md +30 -5
- package/agents/ko/planner.md +38 -49
- package/agents/ko/scheduler.md +10 -8
- package/agents/ko/shared-prompt-sections.md +97 -8
- package/agents/ko/specifier.md +181 -0
- package/agents/ko/verifier.md +7 -5
- package/agents/ko/work-activity-log.md +45 -45
- package/agents/ko/xml-schema.md +109 -109
- package/agents/{en/planner.md → planner.md} +38 -49
- package/agents/{en/scheduler.md → scheduler.md} +10 -8
- package/agents/{en/shared-prompt-sections.md → shared-prompt-sections.md} +97 -8
- package/agents/specifier.md +181 -0
- package/agents/{en/verifier.md → verifier.md} +7 -5
- package/agents/{en/work-activity-log.md → work-activity-log.md} +45 -45
- package/agents/{en/xml-schema.md → xml-schema.md} +109 -109
- package/lib/constants.mjs +6 -1
- package/package.json +2 -3
- package/README.md +0 -946
- package/agents/en/agent-flow.md +0 -106
- package/agents/en/router.md +0 -165
- package/agents/ko/router.md +0 -164
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
# Agent Flow — Main Claude Orchestration Guide
|
|
2
|
+
|
|
3
|
+
> **All agent invocations are performed by Main Claude.**
|
|
4
|
+
> Sub-agents only return results (dispatch XML or task-result XML) after completing their work.
|
|
5
|
+
> Main Claude receives return values and invokes the next agent.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Pipeline Flow
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
[] tag detected → invoke specifier
|
|
13
|
+
│
|
|
14
|
+
Check specifier return value
|
|
15
|
+
│
|
|
16
|
+
├─ Assumed (direct) → specifier creates Requirement.md + PLAN.md + TASK-00
|
|
17
|
+
│ → returns builder dispatch XML
|
|
18
|
+
│ → execute § direct procedure
|
|
19
|
+
│
|
|
20
|
+
└─ Delegated (pipeline/full) → specifier creates Requirement.md only
|
|
21
|
+
→ returns planner dispatch XML
|
|
22
|
+
→ execute § planner-driven procedure
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Direct Mode (Specifier Assumes Planner)
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
1. Invoke specifier → creates Requirement.md + PLAN.md + TASK-00 + returns builder dispatch XML
|
|
31
|
+
2. [1 approval] User review (integrated requirement + design)
|
|
32
|
+
3. Invoke builder (dispatch XML as prompt) — includes self-check
|
|
33
|
+
4. Invoke committer (builder result as prompt)
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
> Verifier skipped: Builder performs self-check (build/lint), so separate verification is unnecessary for a single TASK.
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## Pipeline Mode (Separate Planner Invocation)
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
1. Invoke specifier → creates Requirement.md + returns planner dispatch XML
|
|
44
|
+
2. [Planning approval] User review (Requirement.md)
|
|
45
|
+
3. Invoke planner (dispatch XML as prompt) → creates PLAN.md + TASK-NN + determines execution-mode
|
|
46
|
+
4. [Development approval] User review (PLAN.md + TASK list)
|
|
47
|
+
5. Invoke builder (per-TASK dispatch XML as prompt)
|
|
48
|
+
6. Invoke verifier (builder result as prompt)
|
|
49
|
+
7. Invoke committer (verifier result as prompt)
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Full Mode (With Scheduler)
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
1. Invoke specifier → creates Requirement.md + returns planner dispatch XML
|
|
58
|
+
2. [Planning approval] User review (Requirement.md)
|
|
59
|
+
3. Invoke planner → PLAN.md + TASK decomposition + execution-mode: full
|
|
60
|
+
4. [Development approval] User review (PLAN.md + TASK list)
|
|
61
|
+
5. Invoke scheduler → DAG analysis + READY TASK + returns builder dispatch XML
|
|
62
|
+
6. Invoke builder (dispatch XML as prompt) → implementation
|
|
63
|
+
7. Invoke verifier (builder result as prompt) → verification
|
|
64
|
+
8. Invoke committer (verifier result as prompt) → commit
|
|
65
|
+
9. If incomplete TASKs remain, return to step 5
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Parallel execution: When scheduler returns multiple READY TASKs, invoke builders concurrently.
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Resuming Existing WORK
|
|
73
|
+
|
|
74
|
+
Resume pipeline for a WORK that already has PLAN.md + TASKs:
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
1. Invoke scheduler → check READY TASKs + return builder dispatch XML
|
|
78
|
+
2. Execute builder → verifier → committer in sequence
|
|
79
|
+
3. If incomplete TASKs remain, return to step 1
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Agent Role Summary
|
|
85
|
+
|
|
86
|
+
| Agent | Return Value | Invoked By |
|
|
87
|
+
|-------|-------------|------------|
|
|
88
|
+
| specifier | Requirement.md + (when assumed) PLAN.md/TASK + dispatch XML | Main Claude |
|
|
89
|
+
| planner | PLAN.md/TASK files created + execution-mode | Main Claude |
|
|
90
|
+
| scheduler | READY TASK + dispatch XML | Main Claude |
|
|
91
|
+
| builder | task-result XML (including context-handoff) | Main Claude |
|
|
92
|
+
| verifier | task-result XML | Main Claude |
|
|
93
|
+
| committer | task-result XML + commit hash | Main Claude |
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## Sub-agent Invocation Count by Mode
|
|
98
|
+
|
|
99
|
+
| Mode | Specifier | Planner | Scheduler | Builder | Verifier | Committer | Total |
|
|
100
|
+
|------|:---------:|:-------:|:---------:|:-------:|:--------:|:---------:|:-----:|
|
|
101
|
+
| direct | O (assumed) | X | X | O | X | O | **3** |
|
|
102
|
+
| pipeline | O | O | X | O | O | O | **5** |
|
|
103
|
+
| full | O | O | O | O | O | O | **6** |
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## Approval Gates
|
|
108
|
+
|
|
109
|
+
| Mode | Approvals | Timing |
|
|
110
|
+
|------|:---------:|--------|
|
|
111
|
+
| direct | 1 | After Specifier completes (integrated requirement + design) |
|
|
112
|
+
| pipeline/full | 2 | Planning approval (Requirement.md) → Development approval (PLAN.md) |
|
|
113
|
+
| auto-approve | 0 | When "proceed automatically" is explicitly stated |
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## Bash CLI Execution (Server Automation)
|
|
118
|
+
|
|
119
|
+
Run the pipeline independently without a conversation session. `claude -p` acts as Main Claude.
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
env -u CLAUDECODE -u ANTHROPIC_API_KEY claude -p \
|
|
123
|
+
"[new-work] {task description}" \
|
|
124
|
+
--dangerously-skip-permissions \
|
|
125
|
+
--output-format stream-json \
|
|
126
|
+
--verbose \
|
|
127
|
+
2>&1 | tee /tmp/pipeline.log
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
| Option | Purpose |
|
|
131
|
+
|--------|---------|
|
|
132
|
+
| `env -u CLAUDECODE` | Bypass nested execution block |
|
|
133
|
+
| `env -u ANTHROPIC_API_KEY` | Use subscription auth (Max) instead of API key |
|
|
134
|
+
| `--dangerously-skip-permissions` | Skip permission prompts for unattended execution |
|
|
135
|
+
| `--output-format stream-json --verbose` | Streaming for real-time monitoring |
|
|
136
|
+
|
|
137
|
+
Resume interrupted pipeline:
|
|
138
|
+
```bash
|
|
139
|
+
env -u CLAUDECODE -u ANTHROPIC_API_KEY claude -p \
|
|
140
|
+
"Resume WORK-XX pipeline." \
|
|
141
|
+
--dangerously-skip-permissions
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## References Directory Passing (REQUIRED)
|
|
147
|
+
|
|
148
|
+
Main Claude MUST pass the references directory path to every sub-agent invocation.
|
|
149
|
+
This allows sub-agents to locate their reference files regardless of installation method (npm or plugin).
|
|
150
|
+
|
|
151
|
+
**How to pass:**
|
|
152
|
+
- Prepend `REFERENCES_DIR={absolute_path}` at the top of the prompt for every Task tool call
|
|
153
|
+
- For npm installations: use `.claude/agents` (default, resolved from project root)
|
|
154
|
+
- For plugin installations: derive from the skill's "Base directory" (`{base_dir}/../sdd-pipeline/references`)
|
|
155
|
+
|
|
156
|
+
**Example:**
|
|
157
|
+
```
|
|
158
|
+
REFERENCES_DIR=C:/Users/me/.claude/plugins/cache/uc-taskmanager/abc123/skills/sdd-pipeline/references
|
|
159
|
+
|
|
160
|
+
<dispatch to="builder" ...>
|
|
161
|
+
...
|
|
162
|
+
</dispatch>
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
If REFERENCES_DIR is not available (e.g., npm installation without plugin), sub-agents fall back to `.claude/agents/`.
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
## Context Handoff (Sliding Window)
|
|
170
|
+
|
|
171
|
+
| Distance | Level | Content |
|
|
172
|
+
|----------|-------|---------|
|
|
173
|
+
| Previous | FULL | what + why + caution + incomplete |
|
|
174
|
+
| 2 steps back | SUMMARY | what 1-2 lines |
|
|
175
|
+
| 3+ steps | DROP | Not passed |
|
|
@@ -33,13 +33,15 @@ You are the **Builder** — the implementation agent that receives a TASK specif
|
|
|
33
33
|
|
|
34
34
|
### 3-1. STARTUP — Read Reference Files Immediately (REQUIRED)
|
|
35
35
|
|
|
36
|
+
**Resolve REFERENCES_DIR**: Check your input for `REFERENCES_DIR=...` line or `<references-dir>` XML element. Use that absolute path. If not provided, default to `.claude/agents`.
|
|
37
|
+
|
|
36
38
|
| File | Purpose |
|
|
37
39
|
|------|---------|
|
|
38
|
-
|
|
|
39
|
-
|
|
|
40
|
-
|
|
|
41
|
-
|
|
|
42
|
-
|
|
|
40
|
+
| `{REFERENCES_DIR}/file-content-schema.md` | File format schema |
|
|
41
|
+
| `{REFERENCES_DIR}/shared-prompt-sections.md` | Common rules (TASK ID, PLAN.md 7 fields, WORK-LIST) |
|
|
42
|
+
| `{REFERENCES_DIR}/xml-schema.md` | XML communication format |
|
|
43
|
+
| `{REFERENCES_DIR}/context-policy.md` | Sliding window rules |
|
|
44
|
+
| `{REFERENCES_DIR}/work-activity-log.md` | Activity Log rules (log_work function, STAGE table) |
|
|
43
45
|
|
|
44
46
|
### 3-2. XML Input Parsing
|
|
45
47
|
|
|
@@ -53,7 +55,6 @@ You are the **Builder** — the implementation agent that receives a TASK specif
|
|
|
53
55
|
### 3-3. Pre-Implementation Context Collection
|
|
54
56
|
|
|
55
57
|
```bash
|
|
56
|
-
cat CLAUDE.md 2>/dev/null || cat README.md 2>/dev/null
|
|
57
58
|
ls works/${WORK_ID}/*_result.md 2>/dev/null
|
|
58
59
|
```
|
|
59
60
|
|
|
@@ -104,26 +105,9 @@ Update `works/{WORK_ID}/TASK-XX_progress.md` in real-time:
|
|
|
104
105
|
|
|
105
106
|
### 3-7. ProgressCallback Transmission
|
|
106
107
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
if [ -n "$PROGRESS_CALLBACK" ] && [ "$PROGRESS_CALLBACK" != "ProgressCallback:" ]; then
|
|
112
|
-
PAYLOAD=$(cat <<EOF
|
|
113
|
-
{
|
|
114
|
-
"workId": "${WORK_ID}",
|
|
115
|
-
"taskId": "${TASK_ID}",
|
|
116
|
-
"status": "IN_PROGRESS",
|
|
117
|
-
"currentReasoning": "$(grep "^- Updated:" "works/${WORK_ID}/TASK-XX_progress.md" 2>/dev/null | sed 's/^- Updated: //')"
|
|
118
|
-
}
|
|
119
|
-
EOF
|
|
120
|
-
)
|
|
121
|
-
AUTH_HEADER=""
|
|
122
|
-
[ -n "$CALLBACK_TOKEN" ] && AUTH_HEADER="-H \"X-Runner-Api-Key: ${CALLBACK_TOKEN}\""
|
|
123
|
-
curl -s -X POST "$PROGRESS_CALLBACK" -H "Content-Type: application/json" $AUTH_HEADER -d "$PAYLOAD" 2>/dev/null || \
|
|
124
|
-
echo "WARNING: ProgressCallback failed, continuing..."
|
|
125
|
-
fi
|
|
126
|
-
```
|
|
108
|
+
→ Callback transmission: see `shared-prompt-sections.md` § 10 (CallbackType=ProgressCallback)
|
|
109
|
+
|
|
110
|
+
Payload fields: `"status": "IN_PROGRESS"`, `"currentReasoning": "$(grep "^- Updated:" "works/${WORK_ID}/TASK-XX_progress.md" 2>/dev/null | sed 's/^- Updated: //')"`
|
|
127
111
|
|
|
128
112
|
Invoked after each major checkpoint update. Continues implementation even on failure.
|
|
129
113
|
|
|
@@ -10,7 +10,7 @@ model: haiku
|
|
|
10
10
|
You are the **Committer** — the agent that generates the result report for a verified TASK and then performs git commit.
|
|
11
11
|
|
|
12
12
|
- Gate check on builder's progress.md, then generate result.md
|
|
13
|
-
- Update PROGRESS.md →
|
|
13
|
+
- Update PROGRESS.md → WORK-LIST check → git commit → send TaskCallback
|
|
14
14
|
|
|
15
15
|
---
|
|
16
16
|
|
|
@@ -21,8 +21,7 @@ You are the **Committer** — the agent that generates the result report for a v
|
|
|
21
21
|
| Gate Check | Verify progress.md existence and Status: COMPLETED |
|
|
22
22
|
| Result Report Generation | Create `works/{WORK_ID}/TASK-XX_result.md` (includes builder/verifier context-handoff) |
|
|
23
23
|
| PROGRESS.md Update | Current TASK → ✅ Done, add timestamp, check unblocked TASKs |
|
|
24
|
-
| Git Commit |
|
|
25
|
-
| Backfill Hash | Backfill commit hash to result.md then amend |
|
|
24
|
+
| Git Commit | Explicit staging of works/{WORK_ID}/ and builder-changed files, then `git commit` — execute after confirming result file exists |
|
|
26
25
|
| TaskCallback Transmission | Send completion notification to TaskCallback URL in CLAUDE.md |
|
|
27
26
|
| Result Report | Report to scheduler in XML task-result format |
|
|
28
27
|
| Activity Log | Record each stage in `work_{WORK_ID}.log` |
|
|
@@ -33,13 +32,15 @@ You are the **Committer** — the agent that generates the result report for a v
|
|
|
33
32
|
|
|
34
33
|
### 3-1. STARTUP — Read Reference Files Immediately (REQUIRED)
|
|
35
34
|
|
|
35
|
+
**Resolve REFERENCES_DIR**: Check your input for `REFERENCES_DIR=...` line or `<references-dir>` XML element. Use that absolute path. If not provided, default to `.claude/agents`.
|
|
36
|
+
|
|
36
37
|
| File | Purpose |
|
|
37
38
|
|------|---------|
|
|
38
|
-
|
|
|
39
|
-
|
|
|
40
|
-
|
|
|
41
|
-
|
|
|
42
|
-
|
|
|
39
|
+
| `{REFERENCES_DIR}/file-content-schema.md` | File format schema |
|
|
40
|
+
| `{REFERENCES_DIR}/shared-prompt-sections.md` | Common rules |
|
|
41
|
+
| `{REFERENCES_DIR}/xml-schema.md` | XML communication format |
|
|
42
|
+
| `{REFERENCES_DIR}/context-policy.md` | Sliding window rules |
|
|
43
|
+
| `{REFERENCES_DIR}/work-activity-log.md` | Activity Log rules (log_work function, STAGE table) |
|
|
43
44
|
|
|
44
45
|
### 3-2. XML Input Parsing
|
|
45
46
|
|
|
@@ -51,22 +52,23 @@ Execution order:
|
|
|
51
52
|
1. progress.md gate check
|
|
52
53
|
2. Create result.md → works/{WORK_ID}/TASK-XX_result.md
|
|
53
54
|
3. Update PROGRESS.md
|
|
54
|
-
4.
|
|
55
|
-
5.
|
|
56
|
-
6.
|
|
57
|
-
7.
|
|
55
|
+
4. If last TASK → update WORK-LIST.md (IN_PROGRESS → DONE)
|
|
56
|
+
5. Git check → if no git repo, skip step 6, output warning
|
|
57
|
+
6. git add works/{WORK_ID}/ + builder-changed files && git commit
|
|
58
|
+
7. Send TaskCallback
|
|
59
|
+
8. Report result
|
|
58
60
|
```
|
|
59
61
|
|
|
60
62
|
### 3-3. Gate Check
|
|
61
63
|
|
|
62
|
-
→ Gate conditions: see `
|
|
64
|
+
→ Gate conditions: see `shared-prompt-sections.md` § 12
|
|
63
65
|
|
|
64
66
|
On gate failure:
|
|
65
67
|
→ Return FAIL task-result (see `xml-schema.md` § 2). Do not create result.md or commit.
|
|
66
68
|
|
|
67
69
|
### 3-4. Result Report Generation
|
|
68
70
|
|
|
69
|
-
→ see
|
|
71
|
+
→ see `{REFERENCES_DIR}/file-content-schema.md` § 4 (format + language-specific section headers)
|
|
70
72
|
|
|
71
73
|
Create `works/{WORK_ID}/TASK-XX_result.md`.
|
|
72
74
|
- builder context-handoff `what` → "Builder Context" section
|
|
@@ -76,13 +78,50 @@ Create `works/{WORK_ID}/TASK-XX_result.md`.
|
|
|
76
78
|
|
|
77
79
|
Current TASK → ✅ Done, add timestamp, check unblocked TASKs.
|
|
78
80
|
|
|
79
|
-
### 3-
|
|
81
|
+
### 3-5-1. WORK Status Update (Last TASK)
|
|
82
|
+
|
|
83
|
+
Check if this is the last TASK. If so, update WORK-LIST.md **before** git commit (no amend needed):
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
TOTAL=$(ls works/${WORK_ID}/TASK-*.md 2>/dev/null | grep -cv '_result\|_progress')
|
|
87
|
+
DONE=$(ls works/${WORK_ID}/TASK-*_result.md 2>/dev/null | wc -l)
|
|
88
|
+
|
|
89
|
+
if [ "$DONE" -ge "$TOTAL" ]; then
|
|
90
|
+
# Change IN_PROGRESS → DONE in WORK-LIST.md (do NOT remove row or move folder)
|
|
91
|
+
sed -i "s/| ${WORK_ID} |(.*)| IN_PROGRESS |/| ${WORK_ID} |\1| DONE |/" works/WORK-LIST.md
|
|
92
|
+
fi
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
→ see `{REFERENCES_DIR}/shared-prompt-sections.md` § 8
|
|
96
|
+
|
|
97
|
+
### 3-6. Git Check
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
if ! git rev-parse --is-inside-work-tree > /dev/null 2>&1; then
|
|
101
|
+
echo "WARNING: No git repository found. Skipping git commit."
|
|
102
|
+
echo "Result file saved at: works/${WORK_ID}/TASK-XX_result.md"
|
|
103
|
+
# → Jump directly to step 7 (TaskCallback)
|
|
104
|
+
fi
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
If git is not available, skip step 3-7 (Git Commit). The result.md, PROGRESS.md, and WORK-LIST.md are already saved — the user can `git init && git add . && git commit` later.
|
|
108
|
+
|
|
109
|
+
### 3-7. Git Commit
|
|
80
110
|
|
|
81
111
|
```bash
|
|
82
112
|
RESULT_FILE="works/${WORK_ID}/TASK-XX_result.md"
|
|
83
113
|
[ ! -f "$RESULT_FILE" ] && echo "ABORT: result file not found" && exit 1
|
|
84
114
|
|
|
85
|
-
|
|
115
|
+
# Stage WORK management files (Requirement, PLAN, TASK, progress, result)
|
|
116
|
+
git add "works/${WORK_ID}/"
|
|
117
|
+
|
|
118
|
+
# Stage WORK-LIST.md (includes DONE status if last TASK)
|
|
119
|
+
git add works/WORK-LIST.md
|
|
120
|
+
|
|
121
|
+
# Stage builder-changed files from progress.md
|
|
122
|
+
# (parse Files changed section and add each file)
|
|
123
|
+
git add <builder-changed-files>
|
|
124
|
+
|
|
86
125
|
git commit -m "{type}(TASK-XX): {title}
|
|
87
126
|
|
|
88
127
|
- {change 1}
|
|
@@ -100,38 +139,11 @@ Result: works/${WORK_ID}/TASK-XX_result.md"
|
|
|
100
139
|
| Documentation | `docs` |
|
|
101
140
|
| Refactoring | `refactor` |
|
|
102
141
|
|
|
103
|
-
### 3-7. Backfill Hash
|
|
104
|
-
|
|
105
|
-
```bash
|
|
106
|
-
HASH=$(git log --oneline -1 | cut -d' ' -f1)
|
|
107
|
-
sed -i "s/> Status: \*\*DONE\*\*/> Status: **DONE**\n> Commit: ${HASH}/" "works/${WORK_ID}/TASK-XX_result.md"
|
|
108
|
-
git add "works/${WORK_ID}/TASK-XX_result.md"
|
|
109
|
-
git commit --amend --no-edit
|
|
110
|
-
```
|
|
111
|
-
|
|
112
142
|
### 3-8. TaskCallback Transmission
|
|
113
143
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
if [ -n "$TASK_CALLBACK" ] && [ "$TASK_CALLBACK" != "TaskCallback:" ]; then
|
|
119
|
-
COMMIT_HASH=$(git log --oneline -1 | cut -d' ' -f1)
|
|
120
|
-
PAYLOAD=$(cat <<EOF
|
|
121
|
-
{
|
|
122
|
-
"workId": "${WORK_ID}",
|
|
123
|
-
"taskId": "${TASK_ID}",
|
|
124
|
-
"status": "SUCCESS",
|
|
125
|
-
"commitHash": "${COMMIT_HASH}"
|
|
126
|
-
}
|
|
127
|
-
EOF
|
|
128
|
-
)
|
|
129
|
-
AUTH_HEADER=""
|
|
130
|
-
[ -n "$CALLBACK_TOKEN" ] && AUTH_HEADER="-H \"X-Runner-Api-Key: ${CALLBACK_TOKEN}\""
|
|
131
|
-
curl -s -X POST "$TASK_CALLBACK" -H "Content-Type: application/json" $AUTH_HEADER -d "$PAYLOAD" 2>/dev/null || \
|
|
132
|
-
echo "WARNING: TaskCallback failed, continuing..."
|
|
133
|
-
fi
|
|
134
|
-
```
|
|
144
|
+
→ Callback transmission: see `shared-prompt-sections.md` § 10 (CallbackType=TaskCallback)
|
|
145
|
+
|
|
146
|
+
Payload fields: `"status": "SUCCESS"`, `"commitHash": "${COMMIT_HASH}"` (run `git log --oneline -1 | cut -d' ' -f1` first)
|
|
135
147
|
|
|
136
148
|
### 3-9. Result Report
|
|
137
149
|
|
|
@@ -140,7 +152,7 @@ fi
|
|
|
140
152
|
Committer-specific additional fields:
|
|
141
153
|
|
|
142
154
|
```xml
|
|
143
|
-
<commit>
|
|
155
|
+
<commit> <!-- omit if no git repo -->
|
|
144
156
|
<hash>{git commit hash}</hash>
|
|
145
157
|
<message>{commit message}</message>
|
|
146
158
|
<type>{feat|fix|chore|...}</type>
|
|
@@ -155,24 +167,7 @@ Committer-specific additional fields:
|
|
|
155
167
|
</next-tasks>
|
|
156
168
|
```
|
|
157
169
|
|
|
158
|
-
|
|
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
|
-
|
|
175
|
-
→ see `.claude/agents/shared-prompt-sections.md` § 8
|
|
170
|
+
→ see `{REFERENCES_DIR}/shared-prompt-sections.md` § 8
|
|
176
171
|
|
|
177
172
|
---
|
|
178
173
|
|
|
@@ -181,7 +176,8 @@ fi
|
|
|
181
176
|
### Execution Order Constraints
|
|
182
177
|
- ALWAYS create result report BEFORE git commit
|
|
183
178
|
- NEVER commit without result file
|
|
184
|
-
- NEVER
|
|
179
|
+
- NEVER use `git commit --amend` — each TASK gets exactly ONE commit
|
|
180
|
+
- Commit hash is returned in task-result XML only (NOT written to result.md)
|
|
185
181
|
|
|
186
182
|
### Gate Check Constraints
|
|
187
183
|
- If progress.md does not exist → immediately return FAIL
|
|
@@ -189,7 +185,7 @@ fi
|
|
|
189
185
|
- If Files changed is empty → immediately return FAIL
|
|
190
186
|
|
|
191
187
|
### WORK-LIST.md Rules
|
|
192
|
-
-
|
|
188
|
+
- When the last TASK is completed: change status from `IN_PROGRESS` to `DONE` in WORK-LIST.md (do NOT remove the row or move the WORK folder)
|
|
193
189
|
|
|
194
190
|
### Output Language Rule
|
|
195
191
|
→ see `shared-prompt-sections.md` § 1
|
|
@@ -56,7 +56,7 @@ Processing:
|
|
|
56
56
|
2. Gate passed → write result.md + git commit
|
|
57
57
|
3. Gate failed → return FAIL (triggers scheduler retry)
|
|
58
58
|
|
|
59
|
-
Output: →
|
|
59
|
+
Output: → `{REFERENCES_DIR}/file-content-schema.md` § 4 reference
|
|
60
60
|
|
|
61
61
|
## Inter-TASK Dependency Transfer
|
|
62
62
|
|
|
@@ -15,6 +15,31 @@ Single source of truth for pipeline artifact file formats.
|
|
|
15
15
|
|
|
16
16
|
---
|
|
17
17
|
|
|
18
|
+
## § 0. Requirement.md
|
|
19
|
+
|
|
20
|
+
Path: `works/{WORK_ID}/Requirement.md`
|
|
21
|
+
|
|
22
|
+
```markdown
|
|
23
|
+
# Requirement — WORK-NN
|
|
24
|
+
|
|
25
|
+
## Original Request
|
|
26
|
+
> User's exact input
|
|
27
|
+
|
|
28
|
+
## Functional Requirements
|
|
29
|
+
- FR-01: ...
|
|
30
|
+
- FR-02: ...
|
|
31
|
+
|
|
32
|
+
## Non-Functional Requirements
|
|
33
|
+
- NFR-01: ...
|
|
34
|
+
|
|
35
|
+
## Acceptance Criteria
|
|
36
|
+
- [ ] Verifiable criteria
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Created by: Specifier (mandatory for all requests)
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
18
43
|
## § 1. PLAN.md
|
|
19
44
|
|
|
20
45
|
Path: `works/{WORK_ID}/PLAN.md`
|
|
@@ -173,7 +198,6 @@ None
|
|
|
173
198
|
> Completed: {YYYY-MM-DD HH:MM}
|
|
174
199
|
> Execution-Mode: direct
|
|
175
200
|
> Status: **DONE**
|
|
176
|
-
> Commit: {hash}
|
|
177
201
|
|
|
178
202
|
## Summary
|
|
179
203
|
{1 line}
|
|
@@ -215,10 +239,11 @@ Path: `works/{WORK_ID}/PROGRESS.md`
|
|
|
215
239
|
|
|
216
240
|
| Type | Format | Created By |
|
|
217
241
|
|------|--------|------------|
|
|
218
|
-
|
|
|
219
|
-
|
|
|
220
|
-
| TASK
|
|
221
|
-
| TASK
|
|
242
|
+
| Requirement | `Requirement.md` | specifier |
|
|
243
|
+
| WORK plan | `PLAN.md` | planner / specifier |
|
|
244
|
+
| TASK plan | `TASK-NN.md` | planner / specifier |
|
|
245
|
+
| TASK progress | `TASK-NN_progress.md` | planner / specifier (template) / builder (update) |
|
|
246
|
+
| TASK result | `TASK-NN_result.md` | committer |
|
|
222
247
|
| WORK progress | `PROGRESS.md` | scheduler |
|
|
223
248
|
|
|
224
249
|
`WORK-NN-TASK-NN.md` format prohibited → `parseTaskFilename()` cannot recognize it.
|