kata-check-issues
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
Chinese<objective>
List all open issues, allow selection, load full context for the selected issue, and route to appropriate action.
Enables reviewing captured ideas and deciding what to work on next.
</objective>
<context>
@.planning/STATE.md
@.planning/ROADMAP.md
</context>
<process>
<step name="deprecation_notice">
**If the user invoked with "todo" vocabulary** (e.g., "check todos", "list todos", "pending todos"):
Display:
Note: "todos" is now "issues". Using./kata-check-issues
Then proceed with the action (non-blocking).
</step>
<step name="check_and_migrate">
Check if legacy `.planning/todos/` exists and needs migration:
bash
if [ -d ".planning/todos/pending" ] && [ ! -d ".planning/todos/_archived" ]; then
# Create new structure
mkdir -p .planning/issues/open .planning/issues/in-progress .planning/issues/closed
# Copy pending todos to open issues
cp .planning/todos/pending/*.md .planning/issues/open/ 2>/dev/null || true
# Copy done todos to closed issues
cp .planning/todos/done/*.md .planning/issues/closed/ 2>/dev/null || true
# Archive originals
mkdir -p .planning/todos/_archived
mv .planning/todos/pending .planning/todos/_archived/ 2>/dev/null || true
mv .planning/todos/done .planning/todos/_archived/ 2>/dev/null || true
echo "Migrated todos to issues format"
fi<目标>
列出所有未处理的issues,支持选择操作,加载选中issue的完整上下文,并路由到对应的操作。
支持查看已记录的任务想法,决定接下来要处理的内容。
</目标>
<上下文>
@.planning/STATE.md
@.planning/ROADMAP.md
</上下文>
<流程>
<step name="弃用提示">
**如果用户使用了"todo"相关词汇**(例如:"check todos"、"list todos"、"pending todos"):
显示:
注意: "todos"已更名为"issues"。将使用指令。/kata-check-issues
然后继续执行操作(无阻塞)。
</step>
<step name="检查与迁移">
检查是否存在旧版`.planning/todos/`目录并需要迁移:
bash
if [ -d ".planning/todos/pending" ] && [ ! -d ".planning/todos/_archived" ]; then
# 创建新结构
mkdir -p .planning/issues/open .planning/issues/in-progress .planning/issues/closed
# 将待处理todos复制到未处理issues
cp .planning/todos/pending/*.md .planning/issues/open/ 2>/dev/null || true
# 将已完成todos复制到已关闭issues
cp .planning/todos/done/*.md .planning/issues/closed/ 2>/dev/null || true
# 归档原始文件
mkdir -p .planning/todos/_archived
mv .planning/todos/pending .planning/todos/_archived/ 2>/dev/null || true
mv .planning/todos/done .planning/todos/_archived/ 2>/dev/null || true
echo "Migrated todos to issues format"
fiEnsure in-progress directory exists
确保进行中目录存在
mkdir -p .planning/issues/in-progress
Migration is idempotent: presence of `_archived/` indicates already migrated.
</step>
<step name="check_exist">
```bash
OPEN_COUNT=$(find .planning/issues/open -maxdepth 1 -name "*.md" 2>/dev/null | wc -l | tr -d ' ')
IN_PROGRESS_COUNT=$(find .planning/issues/in-progress -maxdepth 1 -name "*.md" 2>/dev/null | wc -l | tr -d ' ')
echo "Open issues: $OPEN_COUNT"
echo "In progress: $IN_PROGRESS_COUNT"If both counts are 0:
No open or in-progress issues.
Issues are captured during work sessions with /kata-add-issue.
---
Would you like to:
1. Continue with current phase (/kata-track-progress)
2. Add an issue now (/kata-add-issue)Exit.
</step>
<step name="parse_filter">
Check for area filter in arguments:
- `/kata-check-issues` → show all
- `/kata-check-issues api` → filter to area:api only
</step>
<step name="list_issues">
**1. Check GitHub config:**
```bash
GITHUB_ENABLED=$(cat .planning/config.json 2>/dev/null | grep -o '"enabled"[[:space:]]*:[[:space:]]*[^,}]*' | head -1 | grep -o 'true\|false' || echo "false")
```
2. Build dedupe list from local files' provenance fields:
bash
undefinedmkdir -p .planning/issues/in-progress
迁移操作是幂等的:若存在`_archived/`目录则表示已完成迁移。
</step>
<step name="检查存在性">
```bash
OPEN_COUNT=$(find .planning/issues/open -maxdepth 1 -name "*.md" 2>/dev/null | wc -l | tr -d ' ')
IN_PROGRESS_COUNT=$(find .planning/issues/in-progress -maxdepth 1 -name "*.md" 2>/dev/null | wc -l | tr -d ' ')
echo "Open issues: $OPEN_COUNT"
echo "In progress: $IN_PROGRESS_COUNT"如果两个计数均为0:
当前没有未处理或进行中的issues。
可通过`/kata-add-issue`指令在工作会话中记录issues。
---
您是否想要:
1. 继续当前阶段(/kata-track-progress)
2. 立即添加一个issue(/kata-add-issue)退出流程。
</step>
<step name="解析筛选条件">
检查参数中的领域筛选条件:
- `/kata-check-issues` → 显示所有issues
- `/kata-check-issues api` → 仅筛选api领域的issues
</step>
<step name="列出issues">
**1. 检查GitHub配置:**
```bash
GITHUB_ENABLED=$(cat .planning/config.json 2>/dev/null | grep -o '"enabled"[[:space:]]*:[[:space:]]*[^,}]*' | head -1 | grep -o 'true\|false' || echo "false")
```
2. 从本地文件的来源字段构建去重列表:
bash
undefinedGet all GitHub issue numbers already tracked locally (from open and in-progress)
获取本地已跟踪的所有GitHub issue编号(来自未处理和进行中目录)
LOCAL_PROVENANCE=$(grep -h "^provenance: github:" .planning/issues/open/.md .planning/issues/in-progress/.md 2>/dev/null | grep -oE '#[0-9]+' | tr -d '#' | sort -u)
**3. Query GitHub Issues (if enabled):**
```bash
if [ "$GITHUB_ENABLED" = "true" ]; then
# Get GitHub Issues with backlog label, excluding those already tracked locally
# Note: --label flag has issues in some gh CLI versions, use jq filter instead
GITHUB_ISSUES=$(gh issue list --state open --json number,title,createdAt,labels --jq '.[] | select(.labels[].name == "backlog") | "\(.createdAt)|\(.title)|github|\(.number)"' 2>/dev/null)
fi4. Query in-progress issues first:
bash
for file in .planning/issues/in-progress/*.md; do
[ -f "$file" ] || continue
created=$(grep "^created:" "$file" | cut -d' ' -f2)
title=$(grep "^title:" "$file" | cut -d':' -f2- | xargs)
area=$(grep "^area:" "$file" | cut -d' ' -f2)
echo "$created|$title|$area|$file|in-progress"
done | sort5. Query open issues:
bash
for file in .planning/issues/open/*.md; do
[ -f "$file" ] || continue
created=$(grep "^created:" "$file" | cut -d' ' -f2)
title=$(grep "^title:" "$file" | cut -d':' -f2- | xargs)
area=$(grep "^area:" "$file" | cut -d' ' -f2)
echo "$created|$title|$area|$file|open"
done | sort6. Merge and display:
Display in-progress issues first (if any), then open issues:
- In-progress issues marked with indicator
[IN PROGRESS] - Local issues display as-is with their area
- GitHub-only issues (number NOT in LOCAL_PROVENANCE) display with indicator
[GH] - Format: or
1. [IN PROGRESS] Fix auth bug (api, 2d ago)2. Add feature [GH] (bug, 3d ago)
Apply area filter if specified. Display as numbered list:
Issues:
--- In Progress ---
1. [IN PROGRESS] Fix auth token refresh (api, 2d ago)
--- Open (Backlog) ---
2. Add modal z-index fix (ui, 1d ago)
3. Fix login bug [GH] (bug, 3d ago)
4. Refactor database connection pool (database, 5h ago)
---
Reply with a number to view details, or:
- `/kata-check-issues [area]` to filter by area
- `q` to exitFormat age as relative time. The indicator marks GitHub-only issues (not yet pulled to local).
</step>
<step name="handle_selection">
Wait for user to reply with a number.
[GH]If valid: load selected issue, proceed.
If invalid: "Invalid selection. Reply with a number (1-[N]) or to exit."
</step>
<step name="load_context">
**If local issue (has file path):**
Read the issue file completely. Display:
qundefinedLOCAL_PROVENANCE=$(grep -h "^provenance: github:" .planning/issues/open/.md .planning/issues/in-progress/.md 2>/dev/null | grep -oE '#[0-9]+' | tr -d '#' | sort -u)
**3. 查询GitHub Issues(若已启用):**
```bash
if [ "$GITHUB_ENABLED" = "true" ]; then
# 获取带有backlog标签的GitHub Issues,排除已在本地跟踪的内容
# 注意:部分gh CLI版本中--label参数存在问题,改用jq筛选
GITHUB_ISSUES=$(gh issue list --state open --json number,title,createdAt,labels --jq '.[] | select(.labels[].name == "backlog") | "\(.createdAt)|\(.title)|github|\(.number)"' 2>/dev/null)
fi4. 优先查询进行中的issues:
bash
for file in .planning/issues/in-progress/*.md; do
[ -f "$file" ] || continue
created=$(grep "^created:" "$file" | cut -d' ' -f2)
title=$(grep "^title:" "$file" | cut -d':' -f2- | xargs)
area=$(grep "^area:" "$file" | cut -d' ' -f2)
echo "$created|$title|$area|$file|in-progress"
done | sort5. 查询未处理的issues:
bash
for file in .planning/issues/open/*.md; do
[ -f "$file" ] || continue
created=$(grep "^created:" "$file" | cut -d' ' -f2)
title=$(grep "^title:" "$file" | cut -d':' -f2- | xargs)
area=$(grep "^area:" "$file" | cut -d' ' -f2)
echo "$created|$title|$area|$file|open"
done | sort6. 合并并显示:
优先显示进行中的issues(若存在),然后显示未处理的issues:
- 进行中的issues标记标识
[IN PROGRESS] - 本地issues按原样显示其所属领域
- 仅存在于GitHub的issues(编号不在LOCAL_PROVENANCE中)标记标识
[GH] - 格式示例:或
1. [IN PROGRESS] Fix auth bug (api, 2d ago)2. Add feature [GH] (bug, 3d ago)
若指定了领域筛选条件则应用筛选。以编号列表形式显示:
Issues:
--- 进行中 ---
1. [IN PROGRESS] 修复认证令牌刷新问题 (api, 2天前)
--- 未处理(待办) ---
2. 修复模态框z-index问题 (ui, 1天前)
3. 修复登录bug [GH] (bug, 3天前)
4. 重构数据库连接池 (database, 5小时前)
---
回复编号查看详情,或:
- `/kata-check-issues [领域]` 按领域筛选
- `q` 退出将时间格式化为相对时间。标识表示该issue仅存在于GitHub,尚未拉取到本地。
</step>
<step name="处理选择操作">
等待用户回复编号。
[GH]若回复有效:加载选中的issue,继续流程。
若回复无效:显示“无效选择。请回复编号(1-[N])或退出。”
</step>
<step name="加载上下文">
**如果是本地issue(包含文件路径):**
完整读取issue文件内容。显示:
qundefined[title]
[标题]
Area: [area]
Created: [date] ([relative time] ago)
Files: [list or "None"]
领域: [领域]
创建时间: [日期] ([相对时间]前)
关联文件: [列表或“无”]
Problem
问题描述
[problem section content]
[问题部分内容]
Solution
解决方案
[solution section content]
If `files` field has entries, read and briefly summarize each.
**If GitHub-only issue (has [GH] indicator):**
Fetch full issue details from GitHub:
```bash
gh issue view $ISSUE_NUMBER --json title,body,createdAt,labelsDisplay:
undefined[解决方案部分内容]
若`files`字段有内容,读取并简要总结每个文件。
**如果是仅存在于GitHub的issue(带有[GH]标识):**
从GitHub获取完整的issue详情:
```bash
gh issue view $ISSUE_NUMBER --json title,body,createdAt,labels显示:
undefined[title] [GH]
[标题] [GH]
Source: GitHub Issue #[number]
Created: [date] ([relative time] ago)
Labels: [list of GitHub labels]
来源: GitHub Issue #[编号]
创建时间: [日期] ([相对时间]前)
标签: [GitHub标签列表]
Description
描述
[issue body content]
Note: This issue exists only in GitHub, not yet pulled to local.
</step>
<step name="check_roadmap">
```bash
ls .planning/ROADMAP.md 2>/dev/null && echo "Roadmap exists"If roadmap exists:
- Check if issue's area matches an upcoming phase
- Check if issue's files overlap with a phase's scope
- Note any match for action options </step>
Use AskUserQuestion:
- header: "Action"
- question: "This issue is in progress. What would you like to do?"
- options:
- "Mark complete" — move to closed, close GitHub Issue if linked
- "Continue working" — show context and begin work
- "Put back to open" — move back to backlog
- "View details" — show full issue context
If GitHub-only issue (has [GH] indicator):
Use AskUserQuestion:
- header: "Action"
- question: "This is a GitHub Issue. What would you like to do?"
- options:
- "Pull to local" — create local file for offline work
- "Work on it now" — pull to local AND move to in-progress (shows mode selection)
- "View on GitHub" — open in browser (gh issue view --web)
- "Put it back" — return to list
If user selects "Work on it now" (for GitHub-only issues):
First pull to local, then show mode selection (see below).
If open local issue maps to a roadmap phase:
Use AskUserQuestion:
- header: "Action"
- question: "This issue relates to Phase [N]: [name]. What would you like to do?"
- options:
- "Work on it now" — move to in-progress, start working (shows mode selection)
- "Add to phase plan" — include when planning Phase [N]
- "Brainstorm approach" — think through before deciding
- "Put it back" — return to list
If open local issue with no roadmap match:
Use AskUserQuestion:
- header: "Action"
- question: "What would you like to do with this issue?"
- options:
- "Work on it now" — move to in-progress, start working (shows mode selection)
- "Create a phase" — /kata-add-phase with this scope
- "Brainstorm approach" — think through before deciding
- "Put it back" — return to list
Mode selection (when "Work on it now" selected for open local or GitHub-only issues):
After selecting "Work on it now", present execution mode selection:
Use AskUserQuestion:
- header: "Execution Mode"
- question: "How would you like to work on this issue?"
- options:
- "Quick task" — Small fix, execute now with commits + PR
- "Planned" — Create phase or link to existing phase
- "Put it back" — Return to issue list
Store the selected mode for use in execute_action step.
</step>
<step name="execute_action">
**Pull to local (GitHub-only issues):**
Create local file from GitHub Issue:
```bash[issue正文内容]
注意:该issue仅存在于GitHub,尚未拉取到本地。
</step>
<step name="检查Roadmap">
```bash
ls .planning/ROADMAP.md 2>/dev/null && echo "Roadmap exists"若Roadmap存在:
- 检查issue的领域是否与即将到来的阶段匹配
- 检查issue的关联文件是否与某个阶段的范围重叠
- 记录匹配情况,用于后续操作选项 </step>
使用AskUserQuestion组件:
- 标题:"操作"
- 问题:"该issue正在处理中。您想要执行什么操作?"
- 选项:
- "标记为完成" — 移动到已关闭目录,若关联GitHub Issue则关闭该issue
- "继续处理" — 显示上下文并开始工作
- "放回未处理" — 移回待办列表
- "查看详情" — 显示完整的issue上下文
如果是仅存在于GitHub的issue(带有[GH]标识):
使用AskUserQuestion组件:
- 标题:"操作"
- 问题:"这是一个GitHub Issue。您想要执行什么操作?"
- 选项:
- "拉取到本地" — 创建本地文件用于离线处理
- "立即处理" — 拉取到本地并移至进行中目录(显示模式选择)
- "在GitHub查看" — 在浏览器中打开(gh issue view --web)
- "放回列表" — 返回issue列表
如果用户选择了“立即处理”(针对仅存在于GitHub的issue):
先执行拉取到本地的操作,然后进入模式选择(见下文)。
如果是与Roadmap阶段匹配的本地未处理issue:
使用AskUserQuestion组件:
- 标题:"操作"
- 问题:"该issue与第[N]阶段:[阶段名称]相关。您想要执行什么操作?"
- 选项:
- "立即处理" — 移至进行中目录,开始工作(显示模式选择)
- "添加到阶段计划" — 在规划第[N]阶段时包含该issue
- "讨论解决方案" — 先讨论处理方案
- "放回列表" — 返回issue列表
如果是与Roadmap阶段不匹配的本地未处理issue:
使用AskUserQuestion组件:
- 标题:"操作"
- 问题:"您想要对该issue执行什么操作?"
- 选项:
- "立即处理" — 移至进行中目录,开始工作(显示模式选择)
- "创建阶段" — 使用该范围创建
/kata-add-phase - "讨论解决方案" — 先讨论处理方案
- "放回列表" — 返回issue列表
模式选择(当本地未处理或仅GitHub的issue选择“立即处理”时):
选择“立即处理”后,显示执行模式选择:
使用AskUserQuestion组件:
- 标题:"执行模式"
- 问题:"您想要以何种方式处理该issue?"
- 选项:
- "快速任务" — 小型修复,立即执行并提交+创建PR
- "计划任务" — 创建阶段或关联到现有阶段
- "放回列表" — 返回issue列表
存储选中的模式,用于后续execute_action步骤。
</step>
<step name="执行操作">
**拉取到本地(仅GitHub的issue):**
从GitHub Issue创建本地文件:
```bashGet issue details
获取issue详情
ISSUE_DATA=$(gh issue view $ISSUE_NUMBER --json title,body,createdAt,labels)
TITLE=$(echo "$ISSUE_DATA" | jq -r '.title')
BODY=$(echo "$ISSUE_DATA" | jq -r '.body')
CREATED=$(echo "$ISSUE_DATA" | jq -r '.createdAt')
ISSUE_DATA=$(gh issue view $ISSUE_NUMBER --json title,body,createdAt,labels)
TITLE=$(echo "$ISSUE_DATA" | jq -r '.title')
BODY=$(echo "$ISSUE_DATA" | jq -r '.body')
CREATED=$(echo "$ISSUE_DATA" | jq -r '.createdAt')
Generate file path
生成文件路径
timestamp=$(date "+%Y-%m-%dT%H:%M")
date_prefix=$(date "+%Y-%m-%d")
slug=$(echo "$TITLE" | tr '[:upper:]' '[:lower:]' | tr ' ' '-' | tr -cd 'a-z0-9-' | head -c 40)
OWNER_REPO=$(gh repo view --json nameWithOwner --jq '.nameWithOwner')
timestamp=$(date "+%Y-%m-%dT%H:%M")
date_prefix=$(date "+%Y-%m-%d")
slug=$(echo "$TITLE" | tr '[:upper:]' '[:lower:]' | tr ' ' '-' | tr -cd 'a-z0-9-' | head -c 40)
OWNER_REPO=$(gh repo view --json nameWithOwner --jq '.nameWithOwner')
Create local file with provenance
创建包含来源信息的本地文件
cat > ".planning/issues/open/${date_prefix}-${slug}.md" << EOF
created: ${timestamp} title: ${TITLE} area: general provenance: github:${OWNER_REPO}#${ISSUE_NUMBER} files: []
cat > ".planning/issues/open/${date_prefix}-${slug}.md" << EOF
created: ${timestamp} title: ${TITLE} area: general provenance: github:${OWNER_REPO}#${ISSUE_NUMBER} files: []
Problem
问题
${BODY}
${BODY}
Solution
解决方案
TBD
EOF
The `provenance` field enables deduplication on subsequent checks.
Confirm: "Pulled GitHub Issue #[number] to local: .planning/issues/open/[filename]"
Return to list or offer to work on it.
**Work on it now (open local issue):**
**Based on mode selection from offer_actions step:**
**If "Quick task" mode selected:**
1. Move from open to in-progress:
```bash
mv ".planning/issues/open/[filename]" ".planning/issues/in-progress/"
ISSUE_FILE=".planning/issues/in-progress/[filename]"待确定
EOF
`provenance`字段用于后续检查时的去重操作。
确认提示:“已拉取GitHub Issue #[编号]到本地:.planning/issues/open/[文件名]”
返回列表或提供处理选项。
**立即处理(本地未处理issue):**
**基于offer_actions步骤中选择的模式:**
**如果选择“快速任务”模式:**
1. 从未处理目录移至进行中目录:
```bash
mv ".planning/issues/open/[filename]" ".planning/issues/in-progress/"
ISSUE_FILE=".planning/issues/in-progress/[filename]"Add in-progress label to GitHub Issue if linked
若关联GitHub Issue则添加in-progress标签
PROVENANCE=$(grep "^provenance:" "$ISSUE_FILE" | cut -d' ' -f2)
if echo "$PROVENANCE" | grep -q "^github:"; then
ISSUE_NUMBER=$(echo "$PROVENANCE" | grep -oE '#[0-9]+' | tr -d '#')
if [ -n "$ISSUE_NUMBER" ]; then
GITHUB_ENABLED=$(cat .planning/config.json 2>/dev/null | grep -o '"enabled"[[:space:]]:[[:space:]][^,}]*' | head -1 | grep -o 'true|false' || echo "false")
if [ "$GITHUB_ENABLED" = "true" ]; then
gh label create "in-progress" --description "Issue is actively being worked on" --color "FFA500" 2>/dev/null || true
gh issue edit "$ISSUE_NUMBER" --add-label "in-progress" 2>/dev/null || true
gh issue edit "$ISSUE_NUMBER" --add-assignee @me 2>/dev/null || true
fifi
fi
2. Display:Starting quick task execution for issue: [title]
3. Route to execute-quick-task with issue context:/kata-execute-quick-task --issue "$ISSUE_FILE"
The execute-quick-task skill will handle planning, execution, and PR creation.
**If "Planned" mode selected:**
Do NOT move issue to in-progress yet. Present planned execution options:
Use AskUserQuestion:
- header: "Planned Execution"
- question: "How should this issue be planned?"
- options:
- "Create new phase" — Add a phase to the roadmap for this issue
- "Link to existing phase" — Associate with an upcoming phase
- "Put it back" — Return to issue list
**If "Create new phase" selected:**
1. Extract issue context for phase creation:
```bash
ISSUE_TITLE=$(grep "^title:" "$ISSUE_FILE" | cut -d':' -f2- | xargs)
PROVENANCE=$(grep "^provenance:" "$ISSUE_FILE" | cut -d' ' -f2)
ISSUE_NUMBER=""
if echo "$PROVENANCE" | grep -q "^github:"; then
ISSUE_NUMBER=$(echo "$PROVENANCE" | grep -oE '#[0-9]+' | tr -d '#')
fi- Display routing guidance:
Creating phase from issue: ${ISSUE_TITLE}
${ISSUE_NUMBER:+GitHub Issue: #${ISSUE_NUMBER}}
The new phase will be linked to this issue.
When the phase PR merges, the issue will close automatically.
---PROVENANCE=$(grep "^provenance:" "$ISSUE_FILE" | cut -d' ' -f2)
if echo "$PROVENANCE" | grep -q "^github:"; then
ISSUE_NUMBER=$(echo "$PROVENANCE" | grep -oE '#[0-9]+' | tr -d '#')
if [ -n "$ISSUE_NUMBER" ]; then
GITHUB_ENABLED=$(cat .planning/config.json 2>/dev/null | grep -o '"enabled"[[:space:]]:[[:space:]][^,}]*' | head -1 | grep -o 'true|false' || echo "false")
if [ "$GITHUB_ENABLED" = "true" ]; then
gh label create "in-progress" --description "Issue is actively being worked on" --color "FFA500" 2>/dev/null || true
gh issue edit "$ISSUE_NUMBER" --add-label "in-progress" 2>/dev/null || true
gh issue edit "$ISSUE_NUMBER" --add-assignee @me 2>/dev/null || true
fifi
fi
2. 显示:开始快速任务执行:[标题]
3. 携带issue上下文路由到execute-quick-task:/kata-execute-quick-task --issue "$ISSUE_FILE"
execute-quick-task工具将处理规划、执行和PR创建流程。
**如果选择“计划任务”模式:**
暂不移至进行中目录。显示计划执行选项:
使用AskUserQuestion组件:
- 标题:"计划执行"
- 问题:"该issue应如何规划?"
- 选项:
- "创建新阶段" — 为该issue在Roadmap中添加一个阶段
- "关联到现有阶段" — 关联到即将到来的阶段
- "放回列表" — 返回issue列表
**如果选择“创建新阶段”:**
1. 提取issue上下文用于阶段创建:
```bash
ISSUE_TITLE=$(grep "^title:" "$ISSUE_FILE" | cut -d':' -f2- | xargs)
PROVENANCE=$(grep "^provenance:" "$ISSUE_FILE" | cut -d' ' -f2)
ISSUE_NUMBER=""
if echo "$PROVENANCE" | grep -q "^github:"; then
ISSUE_NUMBER=$(echo "$PROVENANCE" | grep -oE '#[0-9]+' | tr -d '#')
fi- 显示路由指引:
基于issue创建阶段:${ISSUE_TITLE}
${ISSUE_NUMBER:+GitHub Issue: #${ISSUE_NUMBER}}
新阶段将与该issue关联。
当阶段PR合并时,该issue将自动关闭。
---▶ Next Up
▶ 下一步
Create Phase: ${ISSUE_TITLE}
/kata-add-phase --issue ${ISSUE_FILE}<sub> first → fresh context window</sub>
/clearNote: Issue remains in open/ until phase work begins.
When phase planning starts, move issue to in-progress manually
or use /kata-check-issues to update status.
3. Keep issue in open/ (do NOT move to in-progress yet).
**If "Link to existing phase" selected:**
1. Find upcoming phases that might match:
```bash创建阶段: ${ISSUE_TITLE}
/kata-add-phase --issue ${ISSUE_FILE}<sub>先执行 → 刷新上下文窗口</sub>
/clear注意:issue将保留在open/目录,直到阶段工作开始。
当阶段规划启动时,可手动将issue移至in-progress/目录,或使用更新状态。
/kata-check-issues
3. 保持issue在open/目录(暂不移至in-progress/)。
**如果选择“关联到现有阶段”:**
1. 查找可能匹配的即将到来的阶段:
```bashGet phase directories that are not yet complete (no SUMMARY.md for all plans)
获取尚未完成的阶段目录(所有计划都没有对应的SUMMARY.md)
This is a heuristic - phases with incomplete plans
这是一种启发式方法 - 计划未完成的阶段
UPCOMING_PHASES=""
UPCOMING_PHASES=""
Scan all phase directories across states
扫描所有状态下的阶段目录
ALL_PHASE_DIRS=""
for state in active pending completed; do
[ -d ".planning/phases/${state}" ] && ALL_PHASE_DIRS="${ALL_PHASE_DIRS} $(find .planning/phases/${state} -maxdepth 1 -type d -not -name "${state}" 2>/dev/null)"
done
ALL_PHASE_DIRS=""
for state in active pending completed; do
[ -d ".planning/phases/${state}" ] && ALL_PHASE_DIRS="${ALL_PHASE_DIRS} $(find .planning/phases/${state} -maxdepth 1 -type d -not -name "${state}" 2>/dev/null)"
done
Fallback: include flat directories (backward compatibility)
兼容处理:包含扁平化目录(未迁移的项目)
FLAT_DIRS=$(find .planning/phases -maxdepth 1 -type d -name "[0-9]*" 2>/dev/null)
[ -n "$FLAT_DIRS" ] && ALL_PHASE_DIRS="${ALL_PHASE_DIRS} ${FLAT_DIRS}"
for phase_dir in $ALL_PHASE_DIRS; do
[ -d "$phase_dir" ] || continue
phase_name=$(basename "$phase_dir")
Check if phase has at least one PLAN.md but missing at least one SUMMARY.md
plan_count=$(find "$phase_dir" -maxdepth 1 -name "-PLAN.md" 2>/dev/null | wc -l)
summary_count=$(find "$phase_dir" -maxdepth 1 -name "-SUMMARY.md" 2>/dev/null | wc -l)
if [ "$plan_count" -gt 0 ] && [ "$plan_count" -gt "$summary_count" ]; then
# Extract phase goal from roadmap
phase_num=$(echo "$phase_name" | grep -oE '^[0-9]+')
phase_goal=$(grep -A2 "### Phase ${phase_num}:" .planning/ROADMAP.md | grep "Goal:" | cut -d':' -f2- | xargs)
UPCOMING_PHASES="${UPCOMING_PHASES}\n- ${phase_name}: ${phase_goal}"
fi
done
2. If matching phases found, present selection:Upcoming phases that could include this issue:
${UPCOMING_PHASES}
To link this issue to a phase:
- Note the issue reference when planning that phase
- Include issue context in the phase PLAN.md
- The issue PR will close the issue when merged
Which phase? (Enter phase name or "none" to go back)
3. If phase selected:
**Check if issue already linked to a phase:**
```bash
EXISTING_LINKAGE=$(grep "^linked_phase:" "$ISSUE_FILE" 2>/dev/null | cut -d' ' -f2)If EXISTING_LINKAGE exists:
This issue is already linked to phase: ${EXISTING_LINKAGE}
Options:
- Override — Link to ${SELECTED_PHASE} instead
- Cancel — Keep existing linkageUse AskUserQuestion to confirm override or cancel.
If override selected or no existing linkage:
Step 3a: Update issue file frontmatter with linked_phase:
bash
ISSUE_FILE="[path to issue file]"
PHASE_NAME="[selected phase name, e.g., '03-issue-roadmap-integration']"FLAT_DIRS=$(find .planning/phases -maxdepth 1 -type d -name "[0-9]*" 2>/dev/null)
[ -n "$FLAT_DIRS" ] && ALL_PHASE_DIRS="${ALL_PHASE_DIRS} ${FLAT_DIRS}"
for phase_dir in $ALL_PHASE_DIRS; do
[ -d "$phase_dir" ] || continue
phase_name=$(basename "$phase_dir")
检查阶段是否至少有一个PLAN.md但缺少至少一个SUMMARY.md
plan_count=$(find "$phase_dir" -maxdepth 1 -name "-PLAN.md" 2>/dev/null | wc -l)
summary_count=$(find "$phase_dir" -maxdepth 1 -name "-SUMMARY.md" 2>/dev/null | wc -l)
if [ "$plan_count" -gt 0 ] && [ "$plan_count" -gt "$summary_count" ]; then
# 提取阶段编号
phase_num=$(echo "$phase_name" | grep -oE '^[0-9]+')
phase_goal=$(grep -A2 "### Phase ${phase_num}:" .planning/ROADMAP.md | grep "Goal:" | cut -d':' -f2- | xargs)
UPCOMING_PHASES="${UPCOMING_PHASES}\n- ${phase_name}: ${phase_goal}"
fi
done
2. 若找到匹配阶段,显示选择列表:可能包含该issue的即将到来的阶段:
${UPCOMING_PHASES}
将该issue关联到阶段的步骤:
- 在规划该阶段时记录issue引用
- 在阶段PLAN.md中包含issue上下文
- 当阶段PR合并时,该issue将自动关闭
选择哪个阶段?(输入阶段名称或"none"返回)
3. 若选中阶段:
**检查issue是否已关联到其他阶段:**
```bash
EXISTING_LINKAGE=$(grep "^linked_phase:" "$ISSUE_FILE" 2>/dev/null | cut -d' ' -f2)若EXISTING_LINKAGE已存在:
该issue已关联到阶段:${EXISTING_LINKAGE}
选项:
- 覆盖 — 改为关联到${SELECTED_PHASE}
- 取消 — 保留现有关联使用AskUserQuestion组件确认覆盖或取消。
若选择覆盖或无现有关联:
步骤3a:更新issue文件的前置元数据,添加linked_phase:
bash
ISSUE_FILE="[issue文件路径]"
PHASE_NAME="[选中的阶段名称,例如:'03-issue-roadmap-integration']"Add linked_phase to issue frontmatter (after the opening ---)
在开头的---之后添加linked_phase
Use awk to insert after first ---
使用awk在第一个---后插入
awk -v phase="$PHASE_NAME" '
/^---$/ && !found {
print
print "linked_phase: " phase
found=1
next
}
{ print }
' "$ISSUE_FILE" > "$ISSUE_FILE.tmp" && mv "$ISSUE_FILE.tmp" "$ISSUE_FILE"
**Step 3b: Update STATE.md with linkage entry:**
```bash
STATE_FILE=".planning/STATE.md"awk -v phase="$PHASE_NAME" '
/^---$/ && !found {
print
print "linked_phase: " phase
found=1
next
}
{ print }
' "$ISSUE_FILE" > "$ISSUE_FILE.tmp" && mv "$ISSUE_FILE.tmp" "$ISSUE_FILE"
**步骤3b:更新STATE.md,添加关联记录:**
```bash
STATE_FILE=".planning/STATE.md"Extract issue details for STATE.md entry
提取issue详情用于STATE.md记录
ISSUE_TITLE=$(grep "^title:" "$ISSUE_FILE" | cut -d':' -f2- | xargs)
PROVENANCE=$(grep "^provenance:" "$ISSUE_FILE" | cut -d' ' -f2)
GITHUB_REF=""
if echo "$PROVENANCE" | grep -q "^github:"; then
GITHUB_REF="GitHub: $(echo "$PROVENANCE" | grep -oE '#[0-9]+')"
fi
TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
ISSUE_TITLE=$(grep "^title:" "$ISSUE_FILE" | cut -d':' -f2- | xargs)
PROVENANCE=$(grep "^provenance:" "$ISSUE_FILE" | cut -d' ' -f2)
GITHUB_REF=""
if echo "$PROVENANCE" | grep -q "^github:"; then
GITHUB_REF="GitHub: $(echo "$PROVENANCE" | grep -oE '#[0-9]+')"
fi
TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
Check if "### Pending Issues" section exists
检查是否存在"### Pending Issues"章节
if ! grep -q "^### Pending Issues" "$STATE_FILE"; then
Append section before "## Session Continuity" if exists, otherwise at end
if grep -q "^## Session Continuity" "$STATE_FILE"; then
sed -i '' '/^## Session Continuity/i\
if ! grep -q "^### Pending Issues" "$STATE_FILE"; then
若存在"## Session Continuity"则在其之前添加,否则添加到末尾
if grep -q "^## Session Continuity" "$STATE_FILE"; then
sed -i '' '/^## Session Continuity/i\
Pending Issues\
待处理Issues\
Issues linked to phases for planned work:
' "$STATE_FILE" else echo -e "\n### Pending Issues\n\nIssues linked to phases for planned work:\n" >> "$STATE_FILE" fi fi
关联到阶段的计划任务Issues:
' "$STATE_FILE" else echo -e "\n### 待处理Issues\n\n关联到阶段的计划任务Issues:\n" >> "$STATE_FILE" fi fi
Add linkage entry (format enables phase planning to find linked issues)
添加关联记录(格式便于阶段规划时查找关联的issues)
LINKAGE_ENTRY="- ${ISSUE_TITLE} → Phase ${PHASE_NAME}\n - File: ${ISSUE_FILE}\n ${GITHUB_REF:+- ${GITHUB_REF}}\n - Linked: ${TIMESTAMP}"
LINKAGE_ENTRY="- ${ISSUE_TITLE} → 阶段 ${PHASE_NAME}\n - 文件: ${ISSUE_FILE}\n ${GITHUB_REF:+- ${GITHUB_REF}}\n - 关联时间: ${TIMESTAMP}"
Insert after "### Pending Issues" header and description
在"### Pending Issues"标题和描述之后插入
awk -v entry="$LINKAGE_ENTRY" '
/^### Pending Issues/ { pending=1 }
pending && /^$/ && !inserted {
print
print entry
inserted=1
next
}
{ print }
' "$STATE_FILE" > "$STATE_FILE.tmp" && mv "$STATE_FILE.tmp" "$STATE_FILE"
**Step 3c: Display confirmation:**
Issue linked to phase: ${PHASE_NAME}
${ISSUE_TITLE}
File: ${ISSUE_FILE}
${GITHUB_REF:+GitHub: ${GITHUB_REF}}
The issue will be included when planning this phase.
Issue remains in open/ until phase work begins.
- Keep issue in open/
4. If no phases found:No upcoming phases found.
Options:
- /kata-add-phase --issue ${ISSUE_FILE} — Create a new phase
- /kata-track-progress — View current roadmap status
- Put it back — Return to issue list
**If "Put it back" selected from planned execution:**
Return to list_issues step.
**If "Put it back" selected from mode selection:**
Return to list_issues step.
**Legacy behavior (no mode selection, direct work):**
If proceeding without mode selection (e.g., for in-progress issues):
Move from open to in-progress (does NOT close GitHub Issue):
```bash
mv ".planning/issues/open/[filename]" ".planning/issues/in-progress/"awk -v entry="$LINKAGE_ENTRY" '
/^### Pending Issues/ { pending=1 }
pending && /^$/ && !inserted {
print
print entry
inserted=1
next
}
{ print }
' "$STATE_FILE" > "$STATE_FILE.tmp" && mv "$STATE_FILE.tmp" "$STATE_FILE"
**步骤3c:显示确认信息:**
已将issue关联到阶段:${PHASE_NAME}
${ISSUE_TITLE}
文件: ${ISSUE_FILE}
${GITHUB_REF:+GitHub: ${GITHUB_REF}}
该issue将在规划该阶段时被包含。
issue将保留在open/目录,直到阶段工作开始。
- 保持issue在open/目录
4. 若未找到阶段:未找到即将到来的阶段。
选项:
- /kata-add-phase --issue ${ISSUE_FILE} — 创建新阶段
- /kata-track-progress — 查看当前Roadmap状态
- 放回列表 — 返回issue列表
**如果从计划执行中选择“放回列表”:**
返回list_issues步骤。
**如果从模式选择中选择“放回列表”:**
返回list_issues步骤。
**旧版行为(无模式选择,直接处理):**
若无需模式选择直接处理(例如进行中的issue):
从未处理目录移至进行中目录(不关闭GitHub Issue):
```bash
mv ".planning/issues/open/[filename]" ".planning/issues/in-progress/"Add in-progress label to GitHub Issue if linked
若关联GitHub Issue则添加in-progress标签
PROVENANCE=$(grep "^provenance:" ".planning/issues/in-progress/[filename]" | cut -d' ' -f2)
if echo "$PROVENANCE" | grep -q "^github:"; then
ISSUE_NUMBER=$(echo "$PROVENANCE" | grep -oE '#[0-9]+' | tr -d '#')
if [ -n "$ISSUE_NUMBER" ]; then
GITHUB_ENABLED=$(cat .planning/config.json 2>/dev/null | grep -o '"enabled"[[:space:]]:[[:space:]][^,}]*' | head -1 | grep -o 'true|false' || echo "false")
if [ "$GITHUB_ENABLED" = "true" ]; then
# Create in-progress label idempotently (ignore error if exists)
gh label create "in-progress" --description "Issue is actively being worked on" --color "FFA500" 2>/dev/null || true
# Add in-progress label (keeps backlog label)
gh issue edit "$ISSUE_NUMBER" --add-label "in-progress" 2>/dev/null \
&& echo "Added in-progress label to GitHub Issue #${ISSUE_NUMBER}" \
|| echo "Warning: Failed to add in-progress label to GitHub Issue #${ISSUE_NUMBER}"
# Assign issue to self
gh issue edit "$ISSUE_NUMBER" --add-assignee @me 2>/dev/null \
&& echo "Assigned GitHub Issue #${ISSUE_NUMBER} to @me" \
|| echo "Warning: Failed to assign GitHub Issue #${ISSUE_NUMBER}"
fifi
fi
Display confirmation:Issue moved to in-progress: [filename]
[title]
Area: [area]
GitHub: Linked to #[number], added in-progress label, assigned to @me
-or- Not linked (if no provenance)
Ready to begin work.
When complete, use and select "Mark complete".
/kata-check-issues
Update STATE.md issue count. Present problem/solution context. Begin work or ask how to proceed.
**Work on it now (GitHub-only issue):**
First execute "Pull to local" action to create local file, then proceed based on mode selection.
**Based on mode selection from offer_actions step:**
**If "Quick task" mode selected:**
1. Pull to local (creates file at `.planning/issues/open/${date_prefix}-${slug}.md`)
2. Move to in-progress:
```bash
mv ".planning/issues/open/${date_prefix}-${slug}.md" ".planning/issues/in-progress/"
ISSUE_FILE=".planning/issues/in-progress/${date_prefix}-${slug}.md"PROVENANCE=$(grep "^provenance:" ".planning/issues/in-progress/[filename]" | cut -d' ' -f2)
if echo "$PROVENANCE" | grep -q "^github:"; then
ISSUE_NUMBER=$(echo "$PROVENANCE" | grep -oE '#[0-9]+' | tr -d '#')
if [ -n "$ISSUE_NUMBER" ]; then
GITHUB_ENABLED=$(cat .planning/config.json 2>/dev/null | grep -o '"enabled"[[:space:]]:[[:space:]][^,}]*' | head -1 | grep -o 'true|false' || echo "false")
if [ "$GITHUB_ENABLED" = "true" ]; then
# 幂等创建in-progress标签(若已存在则忽略错误)
gh label create "in-progress" --description "Issue is actively being worked on" --color "FFA500" 2>/dev/null || true
# 添加in-progress标签(保留backlog标签)
gh issue edit "$ISSUE_NUMBER" --add-label "in-progress" 2>/dev/null \
&& echo "已为GitHub Issue #${ISSUE_NUMBER}添加in-progress标签" \
|| echo "警告:无法为GitHub Issue #${ISSUE_NUMBER}添加in-progress标签"
# 将issue分配给自己
gh issue edit "$ISSUE_NUMBER" --add-assignee @me 2>/dev/null \
&& echo "已将GitHub Issue #${ISSUE_NUMBER}分配给@me" \
|| echo "警告:无法分配GitHub Issue #${ISSUE_NUMBER}"
fifi
fi
显示确认信息:已将issue移至进行中:[filename]
[标题]
领域: [area]
GitHub: 关联到#[number],已添加in-progress标签,分配给@me
-或- 未关联(若无来源信息)
准备开始工作。
完成后,使用并选择“标记为完成”。
/kata-check-issues
更新STATE.md中的issue计数。显示问题/解决方案上下文。开始工作或询问后续操作。
**立即处理(仅GitHub的issue):**
先执行“拉取到本地”操作创建本地文件,然后根据选择的模式继续流程。
**基于offer_actions步骤中选择的模式:**
**如果选择“快速任务”模式:**
1. 拉取到本地(创建文件到`.planning/issues/open/${date_prefix}-${slug}.md`)
2. 移至进行中目录:
```bash
mv ".planning/issues/open/${date_prefix}-${slug}.md" ".planning/issues/in-progress/"
ISSUE_FILE=".planning/issues/in-progress/${date_prefix}-${slug}.md"Add in-progress label to GitHub Issue (we know it's GitHub-linked)
为GitHub Issue添加in-progress标签(已知该issue关联GitHub)
GITHUB_ENABLED=$(cat .planning/config.json 2>/dev/null | grep -o '"enabled"[[:space:]]:[[:space:]][^,}]*' | head -1 | grep -o 'true|false' || echo "false")
if [ "$GITHUB_ENABLED" = "true" ]; then
gh label create "in-progress" --description "Issue is actively being worked on" --color "FFA500" 2>/dev/null || true
gh issue edit "$ISSUE_NUMBER" --add-label "in-progress" 2>/dev/null || true
gh issue edit "$ISSUE_NUMBER" --add-assignee @me 2>/dev/null || true
fi
3. Display:Starting quick task execution for issue: [title]
4. Route to execute-quick-task with issue context:/kata-execute-quick-task --issue "$ISSUE_FILE"
**If "Planned" mode selected:**
1. Pull to local (creates file at `.planning/issues/open/${date_prefix}-${slug}.md`)
2. Do NOT move to in-progress. Present planned execution options:
Use AskUserQuestion:
- header: "Planned Execution"
- question: "How should this issue be planned?"
- options:
- "Create new phase" — Add a phase to the roadmap for this issue
- "Link to existing phase" — Associate with an upcoming phase
- "Put it back" — Return to issue list
**If "Create new phase" selected (GitHub-only issue):**
1. Extract issue context (already have from pull-to-local):
```bash
ISSUE_FILE=".planning/issues/open/${date_prefix}-${slug}.md"
ISSUE_TITLE=$(grep "^title:" "$ISSUE_FILE" | cut -d':' -f2- | xargs)GITHUB_ENABLED=$(cat .planning/config.json 2>/dev/null | grep -o '"enabled"[[:space:]]:[[:space:]][^,}]*' | head -1 | grep -o 'true|false' || echo "false")
if [ "$GITHUB_ENABLED" = "true" ]; then
gh label create "in-progress" --description "Issue is actively being worked on" --color "FFA500" 2>/dev/null || true
gh issue edit "$ISSUE_NUMBER" --add-label "in-progress" 2>/dev/null || true
gh issue edit "$ISSUE_NUMBER" --add-assignee @me 2>/dev/null || true
fi
3. 显示:开始快速任务执行:[标题]
4. 携带issue上下文路由到execute-quick-task:/kata-execute-quick-task --issue "$ISSUE_FILE"
**如果选择“计划任务”模式:**
1. 拉取到本地(创建文件到`.planning/issues/open/${date_prefix}-${slug}.md`)
2. 暂不移至进行中目录。显示计划执行选项:
使用AskUserQuestion组件:
- 标题:"计划执行"
- 问题:"该issue应如何规划?"
- 选项:
- "创建新阶段" — 为该issue在Roadmap中添加一个阶段
- "关联到现有阶段" — 关联到即将到来的阶段
- "放回列表" — 返回issue列表
**如果选择“创建新阶段”(仅GitHub的issue):**
1. 提取issue上下文(拉取到本地时已获取):
```bash
ISSUE_FILE=".planning/issues/open/${date_prefix}-${slug}.md"
ISSUE_TITLE=$(grep "^title:" "$ISSUE_FILE" | cut -d':' -f2- | xargs)ISSUE_NUMBER already available from the GitHub-only flow
ISSUE_NUMBER在仅GitHub的流程中已可用
2. Display routing guidance:Creating phase from issue: ${ISSUE_TITLE}
GitHub Issue: #${ISSUE_NUMBER}
The new phase will be linked to this issue.
When the phase PR merges, the issue will close automatically.
2. 显示路由指引:基于issue创建阶段:${ISSUE_TITLE}
GitHub Issue: #${ISSUE_NUMBER}
新阶段将与该issue关联。
当阶段PR合并时,该issue将自动关闭。
▶ Next Up
▶ 下一步
Create Phase: ${ISSUE_TITLE}
/kata-add-phase --issue ${ISSUE_FILE}<sub> first → fresh context window</sub>
/clearNote: Issue remains in open/ until phase work begins.
When phase planning starts, move issue to in-progress manually
or use /kata-check-issues to update status.
3. Keep issue in open/ (do NOT move to in-progress yet).
**If "Link to existing phase" selected (GitHub-only issue):**
1. Find upcoming phases (same logic as local issue path):
```bash
UPCOMING_PHASES=""
ALL_PHASE_DIRS=""
for state in active pending completed; do
for d in .planning/phases/${state}/*/; do
[ -d "$d" ] && ALL_PHASE_DIRS="$ALL_PHASE_DIRS $d"
done
done创建阶段: ${ISSUE_TITLE}
/kata-add-phase --issue ${ISSUE_FILE}<sub>先执行 → 刷新上下文窗口</sub>
/clear注意:issue将保留在open/目录,直到阶段工作开始。
当阶段规划启动时,可手动将issue移至in-progress/目录,或使用更新状态。
/kata-check-issues
3. 保持issue在open/目录(暂不移至in-progress/)。
**如果选择“关联到现有阶段”(仅GitHub的issue):**
1. 查找即将到来的阶段(与本地issue流程逻辑相同):
```bash
UPCOMING_PHASES=""
ALL_PHASE_DIRS=""
for state in active pending completed; do
for d in .planning/phases/${state}/*/; do
[ -d "$d" ] && ALL_PHASE_DIRS="$ALL_PHASE_DIRS $d"
done
doneFlat directory fallback (unmigrated projects)
兼容扁平化目录(未迁移的项目)
for d in .planning/phases/[0-9]/; do
[ -d "$d" ] && ALL_PHASE_DIRS="$ALL_PHASE_DIRS $d"
done
for phase_dir in $ALL_PHASE_DIRS; do
phase_name=$(basename "$phase_dir")
plan_count=$(find "$phase_dir" -maxdepth 1 -name "-PLAN.md" 2>/dev/null | wc -l)
summary_count=$(find "$phase_dir" -maxdepth 1 -name "*-SUMMARY.md" 2>/dev/null | wc -l)
if [ "$plan_count" -gt 0 ] && [ "$plan_count" -gt "$summary_count" ]; then
phase_num=$(echo "$phase_name" | grep -oE '^[0-9]+')
phase_goal=$(grep -A2 "### Phase ${phase_num}:" .planning/ROADMAP.md | grep "Goal:" | cut -d':' -f2- | xargs)
UPCOMING_PHASES="${UPCOMING_PHASES}\n- ${phase_name}: ${phase_goal}"
fi
done
2. If matching phases found, present selection:Upcoming phases that could include this issue:
${UPCOMING_PHASES}
To link this issue to a phase:
- Note the issue reference when planning that phase
- Include issue context in the phase PLAN.md
- The issue PR will close the issue when merged
Which phase? (Enter phase name or "none" to go back)
3. If phase selected (GitHub-only issue):
**Note:** For GitHub-only issues, the local file was just created by "Pull to local" step.
Use the same linkage logic as local issues (see above for full implementation).
**Check if issue already linked to a phase:**
```bash
ISSUE_FILE=".planning/issues/open/${date_prefix}-${slug}.md"
EXISTING_LINKAGE=$(grep "^linked_phase:" "$ISSUE_FILE" 2>/dev/null | cut -d' ' -f2)If EXISTING_LINKAGE exists: Ask to override or cancel.
If override selected or no existing linkage:
Step 3a: Update issue file frontmatter with linked_phase:
bash
awk -v phase="$PHASE_NAME" '
/^---$/ && !found {
print
print "linked_phase: " phase
found=1
next
}
{ print }
' "$ISSUE_FILE" > "$ISSUE_FILE.tmp" && mv "$ISSUE_FILE.tmp" "$ISSUE_FILE"Step 3b: Update STATE.md with linkage entry:
bash
STATE_FILE=".planning/STATE.md"
ISSUE_TITLE=$(grep "^title:" "$ISSUE_FILE" | cut -d':' -f2- | xargs)
GITHUB_REF="GitHub: #${ISSUE_NUMBER}"
TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")for d in .planning/phases/[0-9]/; do
[ -d "$d" ] && ALL_PHASE_DIRS="$ALL_PHASE_DIRS $d"
done
for phase_dir in $ALL_PHASE_DIRS; do
phase_name=$(basename "$phase_dir")
plan_count=$(find "$phase_dir" -maxdepth 1 -name "-PLAN.md" 2>/dev/null | wc -l)
summary_count=$(find "$phase_dir" -maxdepth 1 -name "*-SUMMARY.md" 2>/dev/null | wc -l)
if [ "$plan_count" -gt 0 ] && [ "$plan_count" -gt "$summary_count" ]; then
phase_num=$(echo "$phase_name" | grep -oE '^[0-9]+')
phase_goal=$(grep -A2 "### Phase ${phase_num}:" .planning/ROADMAP.md | grep "Goal:" | cut -d':' -f2- | xargs)
UPCOMING_PHASES="${UPCOMING_PHASES}\n- ${phase_name}: ${phase_goal}"
fi
done
2. 若找到匹配阶段,显示选择列表:可能包含该issue的即将到来的阶段:
${UPCOMING_PHASES}
将该issue关联到阶段的步骤:
- 在规划该阶段时记录issue引用
- 在阶段PLAN.md中包含issue上下文
- 当阶段PR合并时,该issue将自动关闭
选择哪个阶段?(输入阶段名称或"none"返回)
3. 若选中阶段(仅GitHub的issue):
**注意:** 对于仅GitHub的issue,本地文件刚通过“拉取到本地”步骤创建。
使用与本地issue相同的关联逻辑(详见上文完整实现)。
**检查issue是否已关联到其他阶段:**
```bash
ISSUE_FILE=".planning/issues/open/${date_prefix}-${slug}.md"
EXISTING_LINKAGE=$(grep "^linked_phase:" "$ISSUE_FILE" 2>/dev/null | cut -d' ' -f2)若EXISTING_LINKAGE已存在: 询问是否覆盖或取消。
若选择覆盖或无现有关联:
步骤3a:更新issue文件的前置元数据,添加linked_phase:
bash
awk -v phase="$PHASE_NAME" '
/^---$/ && !found {
print
print "linked_phase: " phase
found=1
next
}
{ print }
' "$ISSUE_FILE" > "$ISSUE_FILE.tmp" && mv "$ISSUE_FILE.tmp" "$ISSUE_FILE"步骤3b:更新STATE.md,添加关联记录:
bash
STATE_FILE=".planning/STATE.md"
ISSUE_TITLE=$(grep "^title:" "$ISSUE_FILE" | cut -d':' -f2- | xargs)
GITHUB_REF="GitHub: #${ISSUE_NUMBER}"
TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")Check if "### Pending Issues" section exists, create if not
检查是否存在"### Pending Issues"章节,若不存在则创建
if ! grep -q "^### Pending Issues" "$STATE_FILE"; then
if grep -q "^## Session Continuity" "$STATE_FILE"; then
sed -i '' '/^## Session Continuity/i\
if ! grep -q "^### Pending Issues" "$STATE_FILE"; then
if grep -q "^## Session Continuity" "$STATE_FILE"; then
sed -i '' '/^## Session Continuity/i\
Pending Issues\
待处理Issues\
Issues linked to phases for planned work:
' "$STATE_FILE" else echo -e "\n### Pending Issues\n\nIssues linked to phases for planned work:\n" >> "$STATE_FILE" fi fi
关联到阶段的计划任务Issues:
' "$STATE_FILE" else echo -e "\n### 待处理Issues\n\n关联到阶段的计划任务Issues:\n" >> "$STATE_FILE" fi fi
Add linkage entry
添加关联记录
LINKAGE_ENTRY="- ${ISSUE_TITLE} → Phase ${PHASE_NAME}\n - File: ${ISSUE_FILE}\n - ${GITHUB_REF}\n - Linked: ${TIMESTAMP}"
awk -v entry="$LINKAGE_ENTRY" '
/^### Pending Issues/ { pending=1 }
pending && /^$/ && !inserted {
print
print entry
inserted=1
next
}
{ print }
' "$STATE_FILE" > "$STATE_FILE.tmp" && mv "$STATE_FILE.tmp" "$STATE_FILE"
**Step 3c: Display confirmation:**Issue linked to phase: ${PHASE_NAME}
${ISSUE_TITLE}
File: ${ISSUE_FILE}
GitHub: #${ISSUE_NUMBER}
The issue will be included when planning this phase.
Issue remains in open/ until phase work begins.
- Keep issue in open/
4. If no phases found:No upcoming phases found.
Options:
- /kata-add-phase --issue ${ISSUE_FILE} — Create a new phase
- /kata-track-progress — View current roadmap status
- Put it back — Return to issue list
**If "Put it back" selected from planned execution:**
Return to list_issues step (do not pull to local).
**If "Put it back" selected from mode selection:**
Return to list_issues step (do not pull to local).
**Legacy behavior (no mode selection):**
If proceeding without mode selection:
```bash
mv ".planning/issues/open/${date_prefix}-${slug}.md" ".planning/issues/in-progress/"LINKAGE_ENTRY="- ${ISSUE_TITLE} → 阶段 ${PHASE_NAME}\n - 文件: ${ISSUE_FILE}\n - ${GITHUB_REF}\n - 关联时间: ${TIMESTAMP}"
awk -v entry="$LINKAGE_ENTRY" '
/^### Pending Issues/ { pending=1 }
pending && /^$/ && !inserted {
print
print entry
inserted=1
next
}
{ print }
' "$STATE_FILE" > "$STATE_FILE.tmp" && mv "$STATE_FILE.tmp" "$STATE_FILE"
**步骤3c:显示确认信息:**已将issue关联到阶段:${PHASE_NAME}
${ISSUE_TITLE}
文件: ${ISSUE_FILE}
GitHub: #${ISSUE_NUMBER}
该issue将在规划该阶段时被包含。
issue将保留在open/目录,直到阶段工作开始。
- 保持issue在open/目录
4. 若未找到阶段:未找到即将到来的阶段。
选项:
- /kata-add-phase --issue ${ISSUE_FILE} — 创建新阶段
- /kata-track-progress — 查看当前Roadmap状态
- 放回列表 — 返回issue列表
**如果从计划执行中选择“放回列表”:**
返回list_issues步骤(不执行拉取到本地操作)。
**如果从模式选择中选择“放回列表”:**
返回list_issues步骤(不执行拉取到本地操作)。
**旧版行为(无模式选择):**
若无需模式选择直接处理:
```bash
mv ".planning/issues/open/${date_prefix}-${slug}.md" ".planning/issues/in-progress/"Add in-progress label to GitHub Issue (we know it's GitHub-linked since this is the GitHub-only path)
为GitHub Issue添加in-progress标签(已知该issue关联GitHub)
GITHUB_ENABLED=$(cat .planning/config.json 2>/dev/null | grep -o '"enabled"[[:space:]]:[[:space:]][^,}]*' | head -1 | grep -o 'true|false' || echo "false")
if [ "$GITHUB_ENABLED" = "true" ]; then
Create in-progress label idempotently (ignore error if exists)
gh label create "in-progress" --description "Issue is actively being worked on" --color "FFA500" 2>/dev/null || true
Add in-progress label (keeps backlog label)
Note: $ISSUE_NUMBER is already available from the pull-to-local step
gh issue edit "$ISSUE_NUMBER" --add-label "in-progress" 2>/dev/null
&& echo "Added in-progress label to GitHub Issue #${ISSUE_NUMBER}"
|| echo "Warning: Failed to add in-progress label to GitHub Issue #${ISSUE_NUMBER}"
&& echo "Added in-progress label to GitHub Issue #${ISSUE_NUMBER}"
|| echo "Warning: Failed to add in-progress label to GitHub Issue #${ISSUE_NUMBER}"
Assign issue to self
gh issue edit "$ISSUE_NUMBER" --add-assignee @me 2>/dev/null
&& echo "Assigned GitHub Issue #${ISSUE_NUMBER} to @me"
|| echo "Warning: Failed to assign GitHub Issue #${ISSUE_NUMBER}" fi
&& echo "Assigned GitHub Issue #${ISSUE_NUMBER} to @me"
|| echo "Warning: Failed to assign GitHub Issue #${ISSUE_NUMBER}" fi
Display confirmation:Issue moved to in-progress: [filename]
[title]
Area: [area]
GitHub: Linked to #[number], added in-progress label, assigned to @me
Ready to begin work.
When complete, use and select "Mark complete".
/kata-check-issues
Update STATE.md issue count. Present problem/solution context. Begin work or ask how to proceed.
**Mark complete (in-progress issue):**
Move from in-progress to closed and close GitHub Issue if linked:
```bash
mv ".planning/issues/in-progress/[filename]" ".planning/issues/closed/"GITHUB_ENABLED=$(cat .planning/config.json 2>/dev/null | grep -o '"enabled"[[:space:]]:[[:space:]][^,}]*' | head -1 | grep -o 'true|false' || echo "false")
if [ "$GITHUB_ENABLED" = "true" ]; then
幂等创建in-progress标签(若已存在则忽略错误)
gh label create "in-progress" --description "Issue is actively being worked on" --color "FFA500" 2>/dev/null || true
添加in-progress标签(保留backlog标签)
注意:$ISSUE_NUMBER在拉取到本地步骤中已可用
gh issue edit "$ISSUE_NUMBER" --add-label "in-progress" 2>/dev/null
&& echo "已为GitHub Issue #${ISSUE_NUMBER}添加in-progress标签"
|| echo "警告:无法为GitHub Issue #${ISSUE_NUMBER}添加in-progress标签"
&& echo "已为GitHub Issue #${ISSUE_NUMBER}添加in-progress标签"
|| echo "警告:无法为GitHub Issue #${ISSUE_NUMBER}添加in-progress标签"
将issue分配给自己
gh issue edit "$ISSUE_NUMBER" --add-assignee @me 2>/dev/null
&& echo "已将GitHub Issue #${ISSUE_NUMBER}分配给@me"
|| echo "警告:无法分配GitHub Issue #${ISSUE_NUMBER}" fi
&& echo "已将GitHub Issue #${ISSUE_NUMBER}分配给@me"
|| echo "警告:无法分配GitHub Issue #${ISSUE_NUMBER}" fi
显示确认信息:已将issue移至进行中:[filename]
[标题]
领域: [area]
GitHub: 关联到#[number],已添加in-progress标签,分配给@me
准备开始工作。
完成后,使用并选择“标记为完成”。
/kata-check-issues
更新STATE.md中的issue计数。显示问题/解决方案上下文。开始工作或询问后续操作。
**标记为完成(进行中的issue):**
从进行中目录移至已关闭目录,若关联GitHub Issue则关闭该issue:
```bash
mv ".planning/issues/in-progress/[filename]" ".planning/issues/closed/"Check if issue has GitHub provenance
检查issue是否包含GitHub来源信息
PROVENANCE=$(grep "^provenance:" ".planning/issues/closed/[filename]" | cut -d' ' -f2)
if echo "$PROVENANCE" | grep -q "^github:"; then
Extract issue number from provenance (format: github:owner/repo#N)
ISSUE_NUMBER=$(echo "$PROVENANCE" | grep -oE '#[0-9]+' | tr -d '#')
if [ -n "$ISSUE_NUMBER" ]; then
# Check github.enabled (may have changed since issue was created)
GITHUB_ENABLED=$(cat .planning/config.json 2>/dev/null | grep -o '"enabled"[[:space:]]:[[:space:]][^,}]*' | head -1 | grep -o 'true|false' || echo "false")
if [ "$GITHUB_ENABLED" = "true" ]; then
# Close GitHub Issue with comment
gh issue close "$ISSUE_NUMBER" --comment "Completed via Kata workflow" 2>/dev/null \
&& echo "Closed GitHub Issue #${ISSUE_NUMBER}" \
|| echo "Warning: Failed to close GitHub Issue #${ISSUE_NUMBER}"
fifi
fi
Display confirmation:Issue completed: [filename]
[title]
Area: [area]
GitHub: Closed #[number] (if provenance exists and close succeeded)
-or- Not linked (if no provenance)
-or- Failed to close #[number] (if close failed)
Issue closed.
Update STATE.md issue count.
**Put back to open (in-progress issue):**
Move from in-progress back to open:
```bash
mv ".planning/issues/in-progress/[filename]" ".planning/issues/open/"Confirm: "Issue moved back to open: [filename]"
Return to list.
Continue working (in-progress issue):
Present problem/solution context. Begin work or ask how to proceed.
View on GitHub (GitHub-only issues):
bash
gh issue view $ISSUE_NUMBER --webOpens issue in browser. Return to list.
Add to phase plan:
Note issue reference in phase planning notes. Keep in open. Return to list or exit.
Create a phase:
Display:
Keep in open. User runs command in fresh context.
/kata-add-phase --issue [issue file path]Brainstorm approach:
Keep in open. Start discussion about problem and approaches.
Put it back:
Return to list_issues step.
</step>
<step name="update_state">
After any action that changes issue count:
bash
OPEN_COUNT=$(find .planning/issues/open -maxdepth 1 -name "*.md" 2>/dev/null | wc -l | tr -d ' ')
IN_PROGRESS_COUNT=$(find .planning/issues/in-progress -maxdepth 1 -name "*.md" 2>/dev/null | wc -l | tr -d ' ')
CLOSED_COUNT=$(find .planning/issues/closed -maxdepth 1 -name "*.md" 2>/dev/null | wc -l | tr -d ' ')
echo "Open: $OPEN_COUNT, In Progress: $IN_PROGRESS_COUNT, Closed: $CLOSED_COUNT"Update STATE.md "### Pending Issues" section if exists.
</step>
<step name="git_commit">
If issue state changed, commit the change:
Check planning config:
bash
COMMIT_PLANNING_DOCS=$(cat .planning/config.json 2>/dev/null | grep -o '"commit_docs"[[:space:]]*:[[:space:]]*[^,}]*' | grep -o 'true\|false' || echo "true")
git check-ignore -q .planning 2>/dev/null && COMMIT_PLANNING_DOCS=falseIf : Skip git operations, log "Issue moved (not committed - commit_docs: false)"
COMMIT_PLANNING_DOCS=falseIf (default):
COMMIT_PLANNING_DOCS=trueIf moved to in-progress (Work on it now):
bash
git add .planning/issues/in-progress/[filename]
git rm --cached .planning/issues/open/[filename] 2>/dev/null || true
[ -f .planning/STATE.md ] && git add .planning/STATE.md
git commit -m "$(cat <<EOF
docs: start work on issue - [title]
Moved to in-progress.
EOF
)"Confirm: "Committed: docs: start work on issue - [title]"
If moved to closed (Mark complete):
bash
git add .planning/issues/closed/[filename]
git rm --cached .planning/issues/in-progress/[filename] 2>/dev/null || true
[ -f .planning/STATE.md ] && git add .planning/STATE.mdPROVENANCE=$(grep "^provenance:" ".planning/issues/closed/[filename]" | cut -d' ' -f2)
if echo "$PROVENANCE" | grep -q "^github:"; then
从来源信息中提取issue编号(格式:github:owner/repo#N)
ISSUE_NUMBER=$(echo "$PROVENANCE" | grep -oE '#[0-9]+' | tr -d '#')
if [ -n "$ISSUE_NUMBER" ]; then
# 检查github.enabled配置(可能自issue创建后已更改)
GITHUB_ENABLED=$(cat .planning/config.json 2>/dev/null | grep -o '"enabled"[[:space:]]:[[:space:]][^,}]*' | head -1 | grep -o 'true|false' || echo "false")
if [ "$GITHUB_ENABLED" = "true" ]; then
# 关闭GitHub Issue并添加评论
gh issue close "$ISSUE_NUMBER" --comment "通过Kata工作流完成" 2>/dev/null \
&& echo "已关闭GitHub Issue #${ISSUE_NUMBER}" \
|| echo "警告:无法关闭GitHub Issue #${ISSUE_NUMBER}"
fifi
fi
显示确认信息:已完成issue:[filename]
[标题]
领域: [area]
GitHub: 已关闭#[number](若存在来源信息且关闭成功)
-或- 未关联(若无来源信息)
-或- 无法关闭#[number](若关闭失败)
已关闭issue。
更新STATE.md中的issue计数。
**放回未处理(进行中的issue):**
从进行中目录移回未处理目录:
```bash
mv ".planning/issues/in-progress/[filename]" ".planning/issues/open/"确认提示:“已将issue移回未处理:[filename]”
返回列表。
继续处理(进行中的issue):
显示问题/解决方案上下文。开始工作或询问后续操作。
在GitHub查看(仅GitHub的issue):
bash
gh issue view $ISSUE_NUMBER --web在浏览器中打开issue。返回列表。
添加到阶段计划:
在阶段规划笔记中记录issue引用。保持在未处理目录。返回列表或退出。
创建阶段:
显示:
保持在未处理目录。用户在新上下文窗口中执行该指令。
/kata-add-phase --issue [issue文件路径]讨论解决方案:
保持在未处理目录。开始讨论问题和解决方案。
放回列表:
返回list_issues步骤。
</step>
<step name="更新状态">
在任何更改issue计数的操作后:
bash
OPEN_COUNT=$(find .planning/issues/open -maxdepth 1 -name "*.md" 2>/dev/null | wc -l | tr -d ' ')
IN_PROGRESS_COUNT=$(find .planning/issues/in-progress -maxdepth 1 -name "*.md" 2>/dev/null | wc -l | tr -d ' ')
CLOSED_COUNT=$(find .planning/issues/closed -maxdepth 1 -name "*.md" 2>/dev/null | wc -l | tr -d ' ')
echo "未处理: $OPEN_COUNT, 进行中: $IN_PROGRESS_COUNT, 已关闭: $CLOSED_COUNT"若存在STATE.md的“### Pending Issues”章节则更新该部分。
</step>
<step name="Git提交">
若issue状态发生变化,提交更改:
检查规划配置:
bash
COMMIT_PLANNING_DOCS=$(cat .planning/config.json 2>/dev/null | grep -o '"commit_docs"[[:space:]]*:[[:space:]]*[^,}]*' | grep -o 'true\|false' || echo "true")
git check-ignore -q .planning 2>/dev/null && COMMIT_PLANNING_DOCS=false若: 跳过Git操作,记录“Issue已移动(未提交 - commit_docs: false)”
COMMIT_PLANNING_DOCS=false若(默认值):
COMMIT_PLANNING_DOCS=true若移至进行中目录(立即处理):
bash
git add .planning/issues/in-progress/[filename]
git rm --cached .planning/issues/open/[filename] 2>/dev/null || true
[ -f .planning/STATE.md ] && git add .planning/STATE.md
git commit -m "$(cat <<EOF
docs: 开始处理issue - [title]
已移至进行中目录。
EOF
)"确认提示:“已提交: docs: 开始处理issue - [title]”
若移至已关闭目录(标记为完成):
bash
git add .planning/issues/closed/[filename]
git rm --cached .planning/issues/in-progress/[filename] 2>/dev/null || true
[ -f .planning/STATE.md ] && git add .planning/STATE.mdCheck if issue had GitHub provenance that was closed
检查issue是否包含已关闭的GitHub来源信息
PROVENANCE=$(grep "^provenance:" ".planning/issues/closed/[filename]" | cut -d' ' -f2)
GITHUB_REF=""
if echo "$PROVENANCE" | grep -q "^github:"; then
GITHUB_REF="Closes $(echo "$PROVENANCE" | grep -oE '#[0-9]+')"
fi
git commit -m "$(cat <<EOF
docs: complete issue - [title]
${GITHUB_REF}
EOF
)"
Confirm: "Committed: docs: complete issue - [title]"
**If moved back to open (Put back to open):**
```bash
git add .planning/issues/open/[filename]
git rm --cached .planning/issues/in-progress/[filename] 2>/dev/null || true
[ -f .planning/STATE.md ] && git add .planning/STATE.md
git commit -m "docs: return issue to backlog - [title]"Confirm: "Committed: docs: return issue to backlog - [title]"
</step>
</process>
<output>
- Moved issue to `.planning/issues/in-progress/` (if "Work on it now" with mode selection)
- Moved issue to `.planning/issues/closed/` (if "Mark complete")
- Moved issue to `.planning/issues/open/` (if "Put back to open")
- Created `.planning/issues/open/` file (if "Pull to local" from GitHub)
- Updated `.planning/STATE.md` (if issue count changed)
- Routed to `/kata-execute-quick-task` (if "Quick task" mode selected)
- Displayed planned execution guidance (if "Planned" mode selected)
</output>
<anti_patterns>
- Don't delete issues — use proper state transitions
- Don't close GitHub Issues when starting work — only when marking complete
- Don't create plans from this command — route to /kata-plan-phase or /kata-add-phase </anti_patterns>
<issue_lifecycle>
PROVENANCE=$(grep "^provenance:" ".planning/issues/closed/[filename]" | cut -d' ' -f2)
GITHUB_REF=""
if echo "$PROVENANCE" | grep -q "^github:"; then
GITHUB_REF="Closes $(echo "$PROVENANCE" | grep -oE '#[0-9]+')"
fi
git commit -m "$(cat <<EOF
docs: 完成issue - [title]
${GITHUB_REF}
EOF
)"
确认提示:“已提交: docs: 完成issue - [title]”
**若移回未处理目录(放回未处理):**
```bash
git add .planning/issues/open/[filename]
git rm --cached .planning/issues/in-progress/[filename] 2>/dev/null || true
[ -f .planning/STATE.md ] && git add .planning/STATE.md
git commit -m "docs: 将issue放回待办 - [title]"确认提示:“已提交: docs: 将issue放回待办 - [title]”
</step>
</流程>
<输出>
- 若选择“立即处理”并选择模式,将issue移至
.planning/issues/in-progress/ - 若选择“标记为完成”,将issue移至
.planning/issues/closed/ - 若选择“放回未处理”,将issue移至
.planning/issues/open/ - 若从GitHub“拉取到本地”,在创建文件
.planning/issues/open/ - 若issue计数变化,更新
.planning/STATE.md - 若选择“快速任务”模式,路由到
/kata-execute-quick-task - 若选择“计划任务”模式,显示计划执行指引 </输出>
<反模式>
- 不要删除issues — 使用正确的状态流转
- 开始工作时不要关闭GitHub Issues — 仅在标记为完成时关闭
- 不要通过该指令创建计划 — 路由到或
/kata-plan-phase</反模式>/kata-add-phase
<issue生命周期>
Issue Lifecycle
Issue生命周期
Issues follow a three-state lifecycle:
open/ → Backlog (not started)
in-progress/ → Actively being worked on
closed/ → CompletedState transitions:
- Work on it now (Quick task): →
open/→ routes toin-progress//kata-execute-quick-task - Work on it now (Planned): stays in with guidance for phase planning
open/ - Mark complete: →
in-progress/(closes GitHub Issue if linked)closed/ - Put back to open: →
in-progress/(useful if deprioritized)open/
GitHub Issue lifecycle:
- Created when: with
/kata-add-issuegithub.enabled=true - Linked via: in local file
provenance: github:owner/repo#N - Closed when: User selects "Mark complete" on an in-progress issue
- Alternative: GitHub auto-closes via "Closes #N" in PR description when PR merges
The provenance field is the linchpin - it enables deduplication and bidirectional updates.
</issue_lifecycle>
<success_criteria>
- Open and in-progress issues listed with title, area, age
- In-progress issues shown first with [IN PROGRESS] indicator
- GitHub backlog issues included (if github.enabled=true)
- Deduplication applied (local provenance matches GitHub #)
- GitHub-only issues marked with [GH] indicator
- Area filter applied if specified
- Selected issue's full context loaded
- Roadmap context checked for phase match
- Appropriate actions offered based on issue state
- "Work on it now" presents mode selection (Quick task vs Planned) via AskUserQuestion
- "Quick task" mode moves to in-progress and routes to
/kata-execute-quick-task --issue - "Planned" mode displays guidance message and returns gracefully
- "Work on it now" adds in-progress label to GitHub Issue (if linked, Quick task mode)
- "Work on it now" assigns GitHub Issue to @me (if linked, Quick task mode)
- "Mark complete" moves to closed AND closes GitHub Issue
- STATE.md updated if issue count changed
- Changes committed to git </success_criteria>
Issues遵循三状态生命周期:
open/ → 待办(未开始)
in-progress/ → 处理中
closed/ → 已完成状态流转:
- 立即处理(快速任务): →
open/→ 路由到in-progress//kata-execute-quick-task - 立即处理(计划任务): 保留在目录,提供阶段规划指引
open/ - 标记为完成: →
in-progress/(若关联GitHub Issue则关闭该issue)closed/ - 放回未处理: →
in-progress/(适用于优先级降低的情况)open/
GitHub Issue生命周期:
- 创建时机:且
/kata-add-issuegithub.enabled=true - 关联方式:本地文件中的字段
provenance: github:owner/repo#N - 关闭时机:用户对进行中的issue选择“标记为完成”
- 替代方式:PR合并时,通过PR描述中的“Closes #N”自动关闭GitHub Issue
来源字段是核心 — 它支持去重和双向更新。
</issue生命周期>
<成功标准>
- 未处理和进行中的issues显示标题、领域、创建时长
- 进行中的issues优先显示,带有[IN PROGRESS]标识
- 包含GitHub待办issues(若github.enabled=true)
- 应用去重(本地来源与GitHub #匹配)
- 仅GitHub的issues标记[GH]标识
- 若指定则应用领域筛选
- 加载选中issue的完整上下文
- 检查Roadmap上下文以匹配阶段
- 根据issue状态提供合适的操作选项
- “立即处理”通过AskUserQuestion提供模式选择(快速任务 vs 计划任务)
- “快速任务”模式将issue移至进行中目录并路由到
/kata-execute-quick-task --issue - “计划任务”模式显示指引信息并优雅返回
- “立即处理”为关联的GitHub Issue添加in-progress标签(快速任务模式)
- “立即处理”将关联的GitHub Issue分配给@me(快速任务模式)
- “标记为完成”将issue移至已关闭目录并关闭关联的GitHub Issue
- 若issue计数变化则更新STATE.md
- 将更改提交到Git </成功标准>