| name | jira-task-discover |
| description | Discover requirements from a free-form topic โ searches codebase, asks clarifying questions, writes a structured requirements doc with issue-breakdown proposal. Triggers: discover, jira-task discover, requirements analysis; ์๊ตฌ์ฌํญ ๋ถ์, ๋์ค์ปค๋ฒ๋ฆฌ, ์๊ตฌ์ฌํญ ๋ฌธ์. |
| user-invocable | false |
| argument-hint | <์์ฐ์ด ์ฃผ์ > [--lite] [--from <ํ์ผ๊ฒฝ๋ก>] |
| allowed-tools | ["Read","Write","Bash","Glob","Grep","AskUserQuestion"] |
jira-task-discover: Requirements Discovery from a Topic
Language Rule: ํ๋ก์ ํธ CLAUDE.md์ Conventions ์น์
์ฐธ๊ณ (ํ๊ตญ์ด ์ถ๋ ฅ, Jira ์ฝ๋ฉํธ ์ ๋ชฉ์ ์์ด).
Overview
jira-task-discover๋ ๋ชจํธํ ์์ฐ์ด ์ฃผ์ ๋ฅผ ์
๋ ฅ๋ฐ์, ์ฝ๋๋ฒ ์ด์ค ํ์๊ณผ ์ฌ์ฉ์ ์ง๋ฌธ์ ๊ฑฐ์ณ ๋ช
์์ ์ธ ์๊ตฌ์ฌํญ ๋ถ์ ๋ฌธ์๋ฅผ ๋ง๋ ๋ค. ์ด ์คํฌ์ ์ฐ์ถ๋ฌผ์ ๋ค์ ๋จ๊ณ์ธ jira-task-create(--from-requirements)์ ์
๋ ฅ์ด ๋๋ค.
์
๋ ฅ (3์ข
):
- ์์น ์ธ์: ์์ฐ์ด ์ฃผ์ (ํ์). ์:
"์ฌ์ฉ์ ์๋ฆผ ์์คํ
"
--lite: ์ง๋ฌธ์ 3๊ฑด์ผ๋ก ์ค์ด๊ณ , ์ถ๋ ฅ ๋ฌธ์๋ฅผ ํ ํ์ด์ง ๋ถ๋์ผ๋ก ์ถ์ฝ
--from <ํ์ผ๊ฒฝ๋ก>: ๊ธฐ์กด ์๊ตฌ์ฌํญ ๋ฌธ์๋ฅผ importํด์ ๋ฒ ์ด์ค๋ก ์ฌ์ฉ
์ถ๋ ฅ (1์ข
):
docs/requirements/<TOPIC-SLUG>.requirements.md โ ์๊ตฌ์ฌํญ ๋ถ์ ๋ฌธ์ (๋ง๋ฏธ์ ์ด์ ๋ถํด ์ ์ ์น์
ํฌํจ)
๋น๋ชฉํ (Non-goals):
- Jira ์ด์/์ฝ๋ฉํธ/์ฒจ๋ถ ์์ฑ ์ ํจ (๋ก์ปฌ ๋ฌธ์ ๋จ๊ณ๋ก ํ์ )
.jira-context.json ์ฝ๊ธฐ/์ฐ๊ธฐ ์ ํจ
- ์ธ๋ฑ์ค ํ์ผ(
docs/requirements/INDEX.md ๋ฑ) ์๋ ๊ด๋ฆฌ ์ ํจ
templates/requirements.template.md ์์ฑ ์ ํจ (๋ถ์ฌ ์ ์๋ฌ๋ก ์ข
๋ฃ)
Input Model
$ARGUMENTS = <์์ฐ์ด ์ฃผ์ > [--lite] [--from <ํ์ผ๊ฒฝ๋ก>]
ํ์ฑ ๊ท์น:
- ์ฒซ ๋ฒ์งธ ์์น ์ธ์(๋ฐ์ดํ๋ก ๋ฌถ์ธ ๋ฌธ์์ด ๋๋ ํ๋๊ทธ๊ฐ ์๋ ํ ํฐ์ ์ฐ๊ฒฐ)๋ฅผ ์์ฐ์ด ์ฃผ์ ๋ก ๊ฐ์ฃผ
--lite: ์ธ์ ์ด๋์ ์๋ ๋จ. ๊ฐ ์์ (boolean ํ๋๊ทธ)
--from <ํ์ผ๊ฒฝ๋ก>: --from ๋ค์ ํ ํฐ์ ํ์ผ๊ฒฝ๋ก๋ก ์ฌ์ฉ. ์ ๋/์๋ ๊ฒฝ๋ก ๋ชจ๋ ํ์ฉ
- ์์ฐ์ด ์ฃผ์ ๊ฐ ๋น์ด ์์ผ๋ฉด Step 0์์ ์ฌ์ฉ์์๊ฒ ์
๋ ฅ ์์ฒญ
--lite์ --from์ ๋์ ์ฌ์ฉ ๊ฐ๋ฅ (ํจ๊ณผ ํฉ์ณ์ง: ์ง๋ฌธ ์ถ์ + ๊ธฐ์กด ๋ฌธ์ import)
Workflow
Step 0: Parse Arguments
$ARGUMENTS๋ฅผ ํ ํฐํํ๋ค.
--lite ํ ํฐ ์กด์ฌ ์ฌ๋ถ๋ฅผ boolean lite์ ์ ์ฅ.
--from <path> ํจํด์ ์ถ์ถํด fromPath์ ์ ์ฅ. --from ๋ค์ ํ ํฐ์ด ๋น์๊ฑฐ๋ ๋ค๋ฅธ ํ๋๊ทธ๋ฉด ์๋ฌ.
- ๋จ์ ํ ํฐ์ ๊ณต๋ฐฑ์ผ๋ก ํฉ์ณ
topic(์์ฐ์ด ์ฃผ์ )์ผ๋ก ์ฌ์ฉ.
topic์ด ๋น์ด ์์ผ๋ฉด:
AskUserQuestion์ผ๋ก ๋จ๋ตํ ์ง๋ฌธ 1ํ: "์ด๋ค ์ฃผ์ ๋ก ์๊ตฌ์ฌํญ์ ๋ง๋ค๊น์? (ํ ๋ฌธ์ฅ์ผ๋ก ์
๋ ฅ)"
- ๋ต๋ณ๋ ๋น์ด ์์ผ๋ฉด ์ข
๋ฃ (์๋ฌ ๋ฉ์์ง ์ถ๋ ฅ)
fromPath๊ฐ ์ง์ ๋์์ผ๋ฉด ํ์ผ ์กด์ฌ ๊ฒ์ฆ:
- ํ์ผ ๋ถ์ฌ: ์๋ฌ ๋ฉ์์ง + ์ข
๋ฃ (1ํ ์๋ด, ์๋ ์ฌ์๋ ์์)
- ํ์ผ์ด 1MB ์ด๊ณผ:
AskUserQuestion์ผ๋ก ์งํ ์ฌ๋ถ confirm
- ๋น ํ์ผ: ๊ฒฝ๊ณ ์ถ๋ ฅ ํ default ๋ชจ๋๋ก fallback (์์ฐ์ด ์ฃผ์ ๋ง ์ฌ์ฉ)
Step 1: Slug Generation & Confirm
topic์ ์๋ฌธ kebab-case ์ฌ๋ฌ๊ทธ 1๊ฐ๋ก ๋ณํํ๋ค.
- ํ๊ธ/๋นASCII ์ฃผ์ : ์๋ฏธ๋ฅผ ์๋ฌธ์ผ๋ก ์์ฝยท๋ฒ์ญ ํ kebab-caseํ
- ํ์ฉ ๋ฌธ์:
[a-z0-9-]๋ง. ๊ณต๋ฐฑยทํน์๋ฌธ์ยท๋๋ฌธ์๋ ์ ๊ฑฐ ๋๋ ๋ณํ
- ๊ธธ์ด ์ ํ: 60์ ์ด๋ด๋ก ์ ๋จ
docs/requirements/<slug>.requirements.md ์กด์ฌ ์ฌ๋ถ ํ์ธ:
- ์กด์ฌํ๋ฉด
<slug>-2, <slug>-3 ... ์์ผ๋ก suffix ๋ถ์ฌ (๋๋ ์ฌ์ฉ์์๊ฒ overwrite ์ฌ๋ถ confirm)
AskUserQuestion์ผ๋ก ์ฌ๋ฌ๊ทธ confirm 1ํ:
- ์ต์
A: "์ฌ์ฉ" (์ ์๋ ์ฌ๋ฌ๊ทธ ๊ทธ๋๋ก ์งํ)
- ์ต์
B: "์์ " โ ์ฌ์ฉ์๊ฐ ์ง์ ์ฌ๋ฌ๊ทธ ์
๋ ฅ (๋จ๋ตํ). ์
๋ ฅ๊ฐ๋
[a-z0-9-]๋ง ํ์ฉ. ๋น์ด ์์ผ๋ฉด ์ต์
A์ default๋ฅผ ๊ฐ์ ์ฌ์ฉ
- ํ์ ๋ ์ฌ๋ฌ๊ทธ๋ฅผ ์ดํ Step์์ ์ฌ์ฉํ๋ค.
Step 2: Codebase Context Collection
topic์์ ํค์๋ 3-5๊ฐ๋ฅผ ์ถ์ถํ๋ค.
- ๋ช
์ฌยท๊ธฐ๋ฅ ๋จ์ด ์ฐ์ . ํ๊ธ ์ฃผ์ ๋ฉด ์๋ฌธ ๋์์ด ํฌํจ
- ์: "์ฌ์ฉ์ ์๋ฆผ ์์คํ
" โ
["notification", "alert", "user", "push", "email"]
- ํค์๋๋ณ๋ก
Glob/Grep์ ์ฌ์ฉํด ๊ด๋ จ ํ์ผ์ ์ฐพ๋๋ค.
Glob: ํ์ผ๋ช
๋งค์นญ (์: **/*notification*)
Grep: ๋ณธ๋ฌธ ๋งค์นญ (๋์๋ฌธ์ ๋ฌด์)
- ๊ฒฐ๊ณผ๋ฅผ ํฉ์ณ ์์ 10๊ฐ ํ์ผ๋ก ์ถ๋ฆฌ๊ณ , ํ์ผ๋น ์ต๋ 30์ค๊น์ง๋ง ๋ฐ์ทํ๋ค.
- ๊ฒฐ๊ณผ ๋ฉํ ๋ณด์กด ํ์: ๊ฐ ๋ฐ์ท๋
(file_path, line_range) ํํ ํํ๋ก ๋ณด์กดํ๋ค. ์ด ๋ฉํ๋ Step 4 marker์ code: ๋ถ๋ถ์ ๊ทธ๋๋ก ์ธ์ฉ๋๋ค.
- line_range ํ๊ธฐ:
<path>:<start>-<end> (์: src/notify.ts:45-60). ๋จ์ผ ๋ผ์ธ์ด๋ฉด <path>:<line> (์: src/notify.ts:45)
Glob ๊ฒฐ๊ณผ๋ ํ์ผ ๋จ์์ด๋ฏ๋ก line_range๋ ํ์ Grep ๋งค์นญ ์ค ๋๋ ๋ฐ์ท ๋ฒ์๋ฅผ ์ฌ์ฉ
- ๋ฏผ๊ฐ ํ์ผ ์ ์ธ:
.env*, .claude/settings.local.json, node_modules/, ์๊ฒฉ์ฆ๋ช
ยทํ ํฐ์ ํฌํจํ ํ์ผ์ ๋ฐ์ทยท๋ฉํ์์ ์ ์ธํ๋ค (์ฐ์ถ ๋ฌธ์๊ฐ Jira ์ฒจ๋ถ๋ก ์ ์ก๋ ์ ์์)
- ๊ฒฐ๊ณผ๊ฐ 0๊ฑด์ด๋ฉด ํด๋ฐฑ: ๋ ํฌ ๋ฃจํธ์ ๋๋ ํฐ๋ฆฌ ํธ๋ฆฌ(depth 2)๋ฅผ ์ปจํ
์คํธ๋ก ์ฌ์ฉํ๊ณ , ๋ฌธ์์ "๊ด๋ จ ์์ญ ์๋ ํ์ ์คํจ"๋ก ๊ธฐ๋ก.
--from <path>๊ฐ ์ง์ ๋์์ผ๋ฉด ํด๋น ํ์ผ ๋ด์ฉ์ ํจ๊ป ์ปจํ
์คํธ์ ํฌํจ (Step 4์ ๋ฒ ์ด์ค ๋ณธ๋ฌธ์ด ๋จ).
Step 3: Iterative Interview
ํ์: skills/jira-task-discover/refs/iterative-interview.md๋ฅผ Readํ์ฌ ๋ณธ๋ฌธ(R0 ์ฌ์ ๊ณต์ง + ๋ผ์ด๋ ๋ฃจํ + ์ข
๋ฃ ์กฐ๊ฑด + ์ปค๋ฒ๋ฆฌ์ง ๊ฐ์ ๋ผ์ด๋)์ ๊ทธ๋๋ก ์ํํ๋ค.
์์ฝ:
- R0 (์ฌ์ ๊ณต์ง): ๋ค๋ฃฐ ์นดํ
๊ณ ๋ฆฌ 1๋จ๋ฝ ์ถ๋ ฅ ํ ๋ฃจํ ์ง์
.
--lite๋ NFR ์นดํ
๊ณ ๋ฆฌ๋ฅผ ์๋ด์์ ์ ์ธ.
- ๋ผ์ด๋ ๋ฃจํ: ๋งค ๋ผ์ด๋
AskUserQuestion์ผ๋ก ์นดํ
๊ณ ๋ฆฌ 1๊ฑด์ ๋ํ ์ง๋ฌธ 1๊ฑด. ๋ต๋ณ์ bucket[Q1..Q4]์ ๋์ . ์ธ๋ฑ์ค ์ฒด๊ณ(Q1=์ดํด๊ด๊ณ์, Q2=์ฑ๊ณต ๊ธฐ์ค, Q3=์ ์ฝ, Q4=NFR)๋ ๊ธฐ์กด๊ณผ ๋์ผ โ Step 4 trace marker ๊ท์น ๊ทธ๋๋ก ํธํ.
- ์ข
๋ฃ ์กฐ๊ฑด:
MIN_ROUNDS=4, MAX_ROUNDS=10, CONFIRM_AT=6 (6๋ผ์ด๋ ์ข
๋ฃ ์ ๊ณ์ ์ฌ๋ถ confirm 1ํ). ์ปค๋ฒ๋ฆฌ์ง ๋ฏธ์ถฉ์กฑ ์นดํ
๊ณ ๋ฆฌ๊ฐ ์์ผ๋ฉด ๊ฐ์ 1๋ผ์ด๋ ์ถ๊ฐ.
--from ๋ชจ๋: import ๋ณธ๋ฌธ์์ ์นดํ
๊ณ ๋ฆฌ๋ณ ์ฌ์ ์ฑ์ ํ ๋๋ฝ๋ถ๋ง ์ถ๊ฐ ๋ผ์ด๋. Step 3.5(refs/conflict-detection.md)์ ํ๋ ฅ์ ๊ธฐ์กด ๊ทธ๋๋ก.
bucket ๊ฐ์ฒด๊ฐ Step 4๋ก ์ ๋ฌ๋๋ค. ์ฌ์ฉ์๊ฐ "Other โ (๋น)"์ผ๋ก ๋ตํ ํญ๋ชฉ์ TBD๋ก ์ ์ฅ๋์ด Step 4 Open Questions๋ก ๊ฒฉ์๋๋ค.
Step 3.5: Conflict Detection (--from mode only)
ํ์: --from ๋ชจ๋์์๋ง ์ง์
. skills/jira-task-discover/refs/conflict-detection.md๋ฅผ Readํ์ฌ ๋ณธ๋ฌธ์ ๊ทธ๋๋ก ์ํํ๋ค.
์ง์
์กฐ๊ฑด: --from ํ๋๊ทธ๊ฐ ์๊ณ import ํ์ผ์ด ๋น์ด์์ง ์์ผ๋ฉด ์ง์
. ๊ทธ ์ธ ๋ชจ๋ ๋ชจ๋๋ ํต๊ณผ(no-op).
๊ฒฉ์ ํ์: [CONFLICT] <์นดํ
๊ณ ๋ฆฌ>: import="<์๋ณธ>" vs answer="<๋ต๋ณ>" โ ์ด๋ ์ชฝ์ด ์ ํํ์ง ๊ฒฐ์ ํ์
Step 4์์ ํ๋ ฅ: ๊ฒฉ์๋ [CONFLICT] ํญ๋ชฉ์ Step 4์ Open Questions์ ์๋ ํฌํจ (TBD ํญ๋ชฉ ๋ค์ ๋์ด).
Step 4: Generate Requirements Document
docs/requirements/<slug>.requirements.md๋ฅผ ์์ฑํ๋ค.
ํ
ํ๋ฆฟ ์ ํ:
templates/requirements.template.md์ Readํ์ฌ ๋ฒ ์ด์ค๋ก ์ฌ์ฉํ๋ค. ํ์ผ์ด ์์ผ๋ฉด ์ฆ์ ์๋ฌ๋ก ์ข
๋ฃํ๊ณ "ํ๋ฌ๊ทธ์ธ ์์ฐ ์์ โ git restore templates/requirements.template.md"์ ์๋ดํ๋ค.
๋ฌธ์์ ์ฑ์์ผ ํ ๋ด์ฉ:
- Topic, Slug, Mode (default/lite/from), Generated At
- Stakeholders (Step 3 ๋ต๋ณ 1๋ฒ)
- Goals & Success Criteria (Step 3 ๋ต๋ณ 2๋ฒ)
- Constraints (Step 3 ๋ต๋ณ 3๋ฒ์ Technical / Schedule / Cost / Regulatory 4 sub-section์ผ๋ก ๋ถ๋ฅ. ๋ต๋ณ์ ๋ช
์๋์ง ์์ ์นดํ
๊ณ ๋ฆฌ๋
N/A โ ํด๋น ์์ ํ ์ค๋ก ๋ช
์ โ ๋๋ฝ ๊ธ์ง.)
- Non-functional Requirements (Step 3 ๋ต๋ณ 4๋ฒ์ 6 ์นดํ
๊ณ ๋ฆฌ ํ๋ก ์ ๋ฆฌ: ์ฑ๋ฅ / ๊ฐ์ฉ์ฑ / ๋ณด์ / ํ์ฅ์ฑ / ๊ด์ธก์ฑ / ํธํ์ฑ. ๊ฐ ํญ๋ชฉ์ ๊ฐ ๋๋
N/A โ <์ฌ์ >. TBD๋ ์ฌ์ฉ ๊ธ์ง โ ๋ชจ๋ฅด๋ฉด Open Questions๋ก ๊ฒฉ์. --lite ์ ๋ณธ ์น์
์ ์ฒด๋ฅผ N/A โ lite mode ํ ์ค๋ก ๋์ฒด.)
- Codebase Context (Step 2 ๊ฒฐ๊ณผ: ํ์ผ ๊ฒฝ๋ก + ๋ฐ์ท ์์ฝ)
- Functional Requirements (Step 3 ๋ต๋ณ๊ณผ codebase ์ปจํ
์คํธ๋ก๋ถํฐ LLM์ด ํฉ์ฑ)
- Goals โ FR ๋งคํ (Functional Requirements ํฉ์ฑ ์งํ ๋์ถ. ํ ํ์
| Goal | ๋ง์กฑํ๋ FR | ๋น๊ณ |. ๋ชจ๋ Goal์ ์ต์ 1๊ฐ FR ๋งคํ์ด ์์น. ๋งคํ๋์ง ์๋ Goal์ [P1]๋ก Open Questions์ ๊ฒฉ์. ๋งคํ๋์ง ์๋ FR์ Out of Scope ํ๋ณด ๋๋ Goal ๋๋ฝ ์ ํธ.)
- Edge Cases (
--lite ์ ์๋ต)
- Out of Scope (
--lite ์ ์๋ต)
- Open Questions (TBD๋ก ํ์๋ ํญ๋ชฉ ๋ชจ์ + Step 3.5์์ ๊ฒฉ์๋
[CONFLICT] ํญ๋ชฉ + GoalsโFR ๋งคํ ๋๋ฝ ํญ๋ชฉ ์๋ ํฌํจ. ์์: TBD ํญ๋ชฉ ๋จผ์ โ ๋งคํ ๋๋ฝ โ conflict ํญ๋ชฉ)
- Technical Approach Hint (์๊ตฌ์ฌํญ ๋ฌธ์ ๋ง๋ฏธ ์น์
. plan/design ๋จ๊ณ๊ฐ ์ฌ๋ผ์ง๊ณ approach๋ก ํตํฉ๋จ์ ๋ฐ๋ผ ๊ตฌํ ๋ฐฉํฅ์ 1์ฐจ ํํธ๋ฅผ ์ฌ๊ธฐ์ ๋๋ค. Codebase Context ยท Functional Requirements ยท Constraints๋ฅผ ์
๋ ฅ์ผ๋ก LLM์ด ํฉ์ฑํ๋ฉฐ, ์ฝ๋ ์ค๋ํซ ๊ธ์ง โ ์์ฌ๊ฒฐ์ /์ ๊ทผ ์ต์
/์ฃผ์์ฌํญ ์์ฃผ.
--lite ์ 3-5์ค ์์ฝ. ์์ธํ ์์ฑ ๊ฐ์ด๋๋ ํ
ํ๋ฆฟ ์๋ด ์ฃผ์ ์ฐธ์กฐ.)
--from <path>๊ฐ ์ง์ ๋ ๊ฒฝ์ฐ: <path> ๋ณธ๋ฌธ์ ๋ฒ ์ด์ค๋ก ์ ์น์
์ ๋ณด๊ฐยท์ฌ๊ตฌ์ฑํ๋ค (๋ฎ์ด์ฐ๊ธฐ X, ๋ณด๊ฐ O).
--lite ๋ชจ๋ ๋ถ๋ ๊ท์น: ๊ฐ ์น์
์ต๋ 5์ค. "Edge Cases"ยท"Out of Scope" ์น์
์ ์๋ต. ํ ํ์ด์ง ๋ถ๋ ์ ์ง.
Trace Marker ์๋ ๋ถ์ฌ ๊ท์น
ํ์: skills/jira-task-discover/refs/trace-markers.md๋ฅผ Readํ์ฌ marker ํ์ยท๋ถ์ฌ ๋์ยทsynthesized ๊ฐ์ด๋๋ฅผ ํ์ธํ๋ค.
์์ฝ: ํฉ์ฑ 4์ข
(FR / Edge Cases / Out of Scope / Open Questions) ๊ฐ ํญ๋ชฉ ๋์ ์ถ์ฒ marker๋ฅผ ๋ถ์ฌ. ๋น๋์(Stakeholders, Goals, Constraints, NFR, Codebase Context)์๋ marker ๋ถ์.
ํ์ผ ์ฐ๊ธฐ ์์ โ ์ค์: Step 4์ ํฉ์ฑ ์ฐ์ถ๋ฌผ์ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ฒด๋ก๋ง ๋ณด๊ดํ๋ค. ์ค์ docs/requirements/<slug>.requirements.md ํ์ผ ์ฐ๊ธฐ๋ Step 4.5 confirm ํต๊ณผ ํ๋ก ์ง์ฐํ๋ค. ์ฌํฉ์ฑ ์ Step 2ยทStep 3 ์บ์๋ ์ฌ์ฌ์ฉํ๊ณ Step 4 ํฉ์ฑ๋ง ์ฌ์คํํ๋ค.
Step 4.5: Synthesis Confirm
ํ์: skills/jira-task-discover/refs/synthesis-confirm.md๋ฅผ Readํ์ฌ ๋ณธ๋ฌธ์ ๊ทธ๋๋ก ์ํํ๋ค.
Step 4 ํฉ์ฑ ์ฐ์ถ๋ฌผ(FR / Edge Cases / Out of Scope / Open Questions)์ ์ฌ์ฉ์์๊ฒ ๊ฒ์ฆ๋ฐ๋ ๋จ์ผ confirm gate์ด๋ค.
๋ถ๊ธฐ: proceed โ Step 5 ์ง์
+ ํ์ผ ์ฐ๊ธฐ. revise โ ์ฌํฉ์ฑ(์ต๋ 3ํ). cancel โ ๋ฉ๋ชจ๋ฆฌ ํ๊ธฐ ํ ์ ์ ์ข
๋ฃ.
Step 5: Issue Breakdown + Technical Approach Hint Section
์ง์
์กฐ๊ฑด: Step 4.5 confirm์ ํต๊ณผ(proceed)ํ ํฉ์ฑ ๊ฒฐ๊ณผ + ํ์ ๋ถํด ๋ ๋ฒจ์ ์
๋ ฅ์ผ๋ก ๋ฐ์ ๋ณธ ๋จ๊ณ๋ฅผ ์คํํ๋ค. Step 4์์ ์์ฑํ ๋ฌธ์์ ๋ง๋ฏธ ๋ ์น์
(Proposed Issue Breakdown, Technical Approach Hint)์ ์ฑ์ด๋ค. Jira ์ด์๋ฅผ ๋ง๋ค์ง ์๋๋ค โ ๋ฌธ์์๋ง ๊ธฐ๋กํ๋ค.
ํ์: skills/jira-task-discover/refs/breakdown-level.md๋ฅผ Readํ์ฌ 3 ๋ ๋ฒจ ์ ์ยท์ ํธํยท์ถ๋ ฅ ํ
ํ๋ฆฟ์ ํ์ธํ๋ค. ๋ณธ SKILL.md์๋ ์ ์๋ฅผ ์ธ๋ผ์ธํ์ง ์๋๋ค.
๋ถํด ๋ ๋ฒจ์ 3์ข
(L1 Single / L2 Story+Subtasks / L3 Epic+Stories+Subtasks). LLM์ด ํฉ์ฑ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ 1๊ฐ๋ฅผ ์ถ์ฒํ๊ณ , ๊ทธ ์ถ์ฒ์ Step 4.5 synthesis-confirm gate์ ํจ๊ป ๋
ธ์ถ๋์ด ์ฌ์ฉ์ ๊ฒ์ฆ์ ๋ฐ๋๋ค (๋ณ๋ confirm gate๋ฅผ ๋์ง ์์ โ ์๋ ด gate ํตํฉ).
Step 5 ์ ์ฐจ
breakdown-level.md์ ์ถ๋ ฅ ํ
ํ๋ฆฟ ์ค Step 4.5์์ ํ์ ๋ ๋ ๋ฒจ 1๊ฐ๋ฅผ ๊ณจ๋ผ Proposed Issue Breakdown ์น์
์ ์ฑ์ด๋ค.
Technical Approach Hint ์น์
์ ์ฑ์ด๋ค โ Codebase Context ยท Functional Requirements ยท Constraints๋ฅผ ์
๋ ฅ์ผ๋ก LLM์ด ํฉ์ฑ. ์ฝ๋ ์ค๋ํซ ๊ธ์ง. ํญ๋ชฉ: ํต์ฌ ๊ตฌํ ํฌ์ธํธ / ๊ฒํ ํ ์ ๊ทผ ์ต์
/ ์ฃผ์ ์ง์ . --lite๋ฉด 3-5์ค ์์ฝ.
- Step 6 Next ์๋ด๋ ํ์ ๋ ๋ฒจ์ ๋ฐ๋ผ ๊ถ์ฅ ๋ช
๋ น์ ๋ถ๊ธฐ ์ถ๋ ฅํ๋ค (L1:
/jira-task create <ํํธ>, L2/L3: /jira-task create --from-requirements ...).
Step 6: Completion Summary
์๋ ํ์์ผ๋ก ์๋ฃ ์์ฝ์ ์ถ๋ ฅํ๋ค (๋ค๋ฅธ jira-task-* ์คํฌ๊ณผ ๋์ผ ํจํด):
---
โ
**Discovery Complete** โ <TOPIC>
- ์๊ตฌ์ฌํญ ๋ฌธ์ ์์ฑ: `docs/requirements/<slug>.requirements.md`
- ๋ชจ๋: default | lite | from | lite+from
- ์ฝ๋๋ฒ ์ด์ค ์ปจํ
์คํธ: <๋ฐ์ท ํ์ผ N๊ฐ> (๋๋ "๊ด๋ จ ์์ญ ๋ฏธ๋ฐ๊ฒฌ")
- ์ด์ ๋ถํด ์ ์: <L1: "๋จ์ผ ์์
1๊ฑด" / L2: "์คํ ๋ฆฌ 1 + ์๋ธํ์คํฌ N" / L3: "์ํฝ 1 + ์คํ ๋ฆฌ N + ์๋ธํ์คํฌ M">
**Progress**: **discover โ** โ create โ init โ start โ approach โ impl โ test โ review โ merge โ pr โ done
**Next** (Step 5์์ ํ์ ๋ ๋ถํด ๋ ๋ฒจ์ ๋ฐ๋ผ 1์ค ์ถ๋ ฅ):
- L1 Single: `/jira-task create <ํ ์ค ํํธ>` โ ๋ถ์์๋ฅผ ์ฐธ๊ณ ๋ก Jira ์์
1๊ฑด์ ๋ฑ๋กํฉ๋๋ค (import ํ์๊ฐ Single์ ์์ง ๋ชป ๋ฐ์)
- L2 Story+Subtasks / L3 Epic+Stories+Subtasks: `/jira-task create --from-requirements docs/requirements/<slug>.requirements.md` โ ์ด ๋ถ์์๋ก Jira ์ด์๋ฅผ ์ผ๊ด ๋ฑ๋กํฉ๋๋ค
---
.jira-context.json์ ๊ฑด๋๋ฆฌ์ง ์๋๋ค.
Error Handling
| ์๋๋ฆฌ์ค | ์ฒ๋ฆฌ ์ ๋ต |
|---|
| ์์ฐ์ด ์ฃผ์ ๋๋ฝ | Step 0์์ AskUserQuestion์ผ๋ก ์
๋ ฅ ์์ฒญ. ๋ต๋ณ๋ ๋น๋ฉด ์ข
๋ฃ |
--from ํ์ผ ๋ถ์ฌ | ๊ฒฝ๋ก์ ํจ๊ป ์๋ฌ ๋ฉ์์ง ์ถ๋ ฅ ํ ์ข
๋ฃ (์๋ ์ฌ์๋ ์์) |
--from ํ์ผ์ด ๋น์ด ์์ | ๊ฒฝ๊ณ ์ถ๋ ฅ ํ default ๋ชจ๋๋ก ์งํ (์์ฐ์ด ์ฃผ์ ๊ธฐ๋ฐ) |
--from ํ์ผ์ด 1MB ์ด๊ณผ | AskUserQuestion์ผ๋ก ์งํ ์ฌ๋ถ confirm |
| ์ฌ๋ฌ๊ทธ confirm ๊ฑฐ๋ถ | ์ฌ์ฉ์๊ฐ ์ง์ ์
๋ ฅ 1ํ ํ์ฉ. ๊ทธ๊ฒ๋ ๋น๋ฉด default ์ฌ๋ฌ๊ทธ ๊ฐ์ ์ฌ์ฉ |
| ์ฌ๋ฌ๊ทธ ์ค๋ณต (๊ฐ์ ํ์ผ ์กด์ฌ) | <slug>-2, <slug>-3 ์๋ ๋ถ์ฌ ๋๋ overwrite ์ฌ๋ถ confirm |
| ํค์๋ ์ถ์ถ ๊ฒฐ๊ณผ 0๊ฐ | repo root์ ๋๋ ํฐ๋ฆฌ ํธ๋ฆฌ(depth 2)๋ก ํด๋ฐฑ, ์ปจํ
์คํธ ์น์
์ "๊ด๋ จ ์์ญ ์๋ ํ์ ์คํจ" ๋ช
์ |
| Glob/Grep ๊ฒฐ๊ณผ 0๊ฑด | ์ปจํ
์คํธ ์น์
์ "๊ด๋ จ ์์ญ ๋ฏธ๋ฐ๊ฒฌ" ๊ธฐ๋ก ํ ์งํ (๋ธ๋กํนํ์ง ์์) |
| ์ฌ์ฉ์๊ฐ ๋ชจ๋ ๋ต๋ณ์ "Other โ (๋น)" ์๋ต | ํด๋น ํญ๋ชฉ์ ๋ฌธ์์ TBD๋ก ๊ธฐ๋กํ๊ณ ์งํ |
| ํ์ ๊ฒฐ๊ณผ๊ฐ ์ปจํ
์คํธ ํญ์ฃผ | ํ์ผ 10๊ฐยทํ์ผ๋น 30์ค ์ํ ๊ฐ์ . ์ด๊ณผ ์ ์ ๋จ |
ํ
ํ๋ฆฟ ํ์ผ ๋ถ์ฌ (templates/requirements.template.md) | ์ฆ์ ์๋ฌ๋ก ์ข
๋ฃ. "ํ๋ฌ๊ทธ์ธ ์์ฐ ์์ โ git restore templates/requirements.template.md" ์๋ด |
--lite์ --from ๋์ ์ฌ์ฉ | ๋ ํจ๊ณผ ๋ชจ๋ ์ ์ฉ (์ง๋ฌธ 3๊ฑด ๋๋ ๊ทธ ์ดํ + import ๋ฒ ์ด์ค) |
์ฌ๋ฌ๊ทธ์ ์ํ ๋ฌธ์ (/, .., ๊ณต๋ฐฑ, ํ๊ธ) | kebab-case ๊ฐ์ . ์๋ฌธ/์ซ์/ํ์ดํ๋ง ํ์ฉ. ๋ณํ ์คํจ ์ ์ฌ์ฉ์ ์ง์ ์
๋ ฅ ์์ฒญ |
Step 4.5์์ ์ฌํฉ์ฑ ํ๋(RESYNTHESIS_LIMIT=3) ์ด๊ณผ | revise ์ต์
์ ๊ฑฐ ํ proceed/cancel 2๋ถ๊ธฐ๋ก ๊ฐ์ confirm. ์ฌ์ฉ์์๊ฒ "์ฌํฉ์ฑ ํ๋(3ํ)์ ๋๋ฌํ์ต๋๋ค. ๊ทธ๋๋ก ์งํํ๊ฑฐ๋ ์ทจ์๋ฅผ ๊ถ์ฅํฉ๋๋ค." ์๋ด |
Step 4.5 cancel ์ ํ | ๋ฉ๋ชจ๋ฆฌ์ ํฉ์ฑ ์ฐ์ถ๋ฌผ ํ๊ธฐ. ํ์ผ ์์คํ
์๋ ์์ง ์ฐ์ง ์์ ์ํ์ด๋ฏ๋ก cleanup ๋ถํ์. ํ๊ตญ์ด ์ข
๋ฃ ๋ฉ์์ง 1์ค("์๊ตฌ์ฌํญ ๋ฌธ์ ์์ฑ์ ์ทจ์ํ์ต๋๋ค.") ์ถ๋ ฅ ํ ์ ์ ์ข
๋ฃ |
Non-goals
- Jira ์ด์ ์์ฑ/์ฝ๋ฉํธ/์ฒจ๋ถ โ
discover๋ ๋ก์ปฌ ๋ฌธ์ ๋จ๊ณ๋ก ํ์ . ์ด์ ๋ฑ๋ก์ jira-task-create์ ์ฑ
์
.jira-context.json ์ฝ๊ธฐ/์ฐ๊ธฐ โ ๋ณธ ์คํฌ์ Jira ์ปจํ
์คํธ์ ์์กดํ์ง ์์ผ๋ฉฐ ๊ฐฑ์ ๋ ํ์ง ์์
templates/requirements.template.md ํ์ผ ์์ฑ โ ๋ณธ ์คํฌ์ ํ
ํ๋ฆฟ์ ์๋น๋ง ํจ
- ์ธ๋ฑ์ค ํ์ผ ์๋ ๊ด๋ฆฌ (
docs/requirements/INDEX.md ๋ฑ)
- ์ธ๋ถ API/๋คํธ์ํฌ ํธ์ถ (LLM ์ถ๋ก ์ธ)