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.
@@ -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
- | `.claude/agents/file-content-schema.md` | File format schema |
39
- | `.claude/agents/shared-prompt-sections.md` | Common rules (TASK ID, PLAN.md 7 fields, WORK-LIST) |
40
- | `.claude/agents/xml-schema.md` | XML communication format |
41
- | `.claude/agents/context-policy.md` | Sliding window rules |
42
- | `.claude/agents/work-activity-log.md` | Activity Log rules (log_work function, STAGE table) |
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
- ```bash
108
- PROGRESS_CALLBACK=$(grep "^ProgressCallback:" CLAUDE.md 2>/dev/null | sed 's/^ProgressCallback: //' | tr -d '\r')
109
- CALLBACK_TOKEN=$(grep "^CallbackToken:" CLAUDE.md 2>/dev/null | sed 's/^CallbackToken: //' | tr -d '\r')
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 → git commitbackfill commit hash → send TaskCallback
13
+ - Update PROGRESS.md → WORK-LIST checkgit 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 | `git add -A && git commit` — execute after confirming result file exists |
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
- | `.claude/agents/file-content-schema.md` | File format schema |
39
- | `.claude/agents/shared-prompt-sections.md` | Common rules |
40
- | `.claude/agents/xml-schema.md` | XML communication format |
41
- | `.claude/agents/context-policy.md` | Sliding window rules |
42
- | `.claude/agents/work-activity-log.md` | Activity Log rules (log_work function, STAGE table) |
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. git add -A && git commit
55
- 5. Backfill commit hash
56
- 6. Send TaskCallback
57
- 7. Report result
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 `file-content-schema.md` § 3 (file exists + Status=COMPLETED + Files changed)
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 `.claude/agents/file-content-schema.md` § 4 (format + language-specific section headers)
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-6. Git Commit
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
- git add -A
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
- ```bash
115
- TASK_CALLBACK=$(grep "^TaskCallback:" CLAUDE.md 2>/dev/null | sed 's/^TaskCallback: //' | tr -d '\r')
116
- CALLBACK_TOKEN=$(grep "^CallbackToken:" CLAUDE.md 2>/dev/null | sed 's/^CallbackToken: //' | tr -d '\r')
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
- ### 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
-
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 amend previous task commits (Backfill Hash amend is the exception)
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
- - Automatically change WORK-LIST.md from `IN_PROGRESS` to `COMPLETED` when the last TASK is completed
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: → `.claude/agents/file-content-schema.md` § 4 reference
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
- | 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) |
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.