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"
fi

Ensure 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
undefined
mkdir -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
undefined

Get 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)
fi
4. 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 | sort
5. 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 | sort
6. Merge and display:
Display in-progress issues first (if any), then open issues:
  • In-progress issues marked with
    [IN PROGRESS]
    indicator
  • Local issues display as-is with their area
  • GitHub-only issues (number NOT in LOCAL_PROVENANCE) display with
    [GH]
    indicator
  • Format:
    1. [IN PROGRESS] Fix auth bug (api, 2d ago)
    or
    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 exit
Format age as relative time. The
[GH]
indicator marks GitHub-only issues (not yet pulled to local). </step>
<step name="handle_selection"> Wait for user to reply with a number.
If valid: load selected issue, proceed. If invalid: "Invalid selection. Reply with a number (1-[N]) or
q
to exit." </step>
<step name="load_context"> **If local issue (has file path):** Read the issue file completely. Display:
undefined
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. 查询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)
fi
4. 优先查询进行中的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 | sort
5. 查询未处理的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 | sort
6. 合并并显示:
优先显示进行中的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` 退出
将时间格式化为相对时间。
[GH]
标识表示该issue仅存在于GitHub,尚未拉取到本地。 </step>
<step name="处理选择操作"> 等待用户回复编号。
若回复有效:加载选中的issue,继续流程。 若回复无效:显示“无效选择。请回复编号(1-[N])或
q
退出。” </step>
<step name="加载上下文"> **如果是本地issue(包含文件路径):** 完整读取issue文件内容。显示:
undefined

[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,labels
Display:
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:
  1. Check if issue's area matches an upcoming phase
  2. Check if issue's files overlap with a phase's scope
  3. Note any match for action options </step>
<step name="offer_actions"> **If in-progress issue:**
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存在:
  1. 检查issue的领域是否与即将到来的阶段匹配
  2. 检查issue的关联文件是否与某个阶段的范围重叠
  3. 记录匹配情况,用于后续操作选项 </step>
<step name="提供操作选项"> **如果是进行中的issue:**
使用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创建本地文件: ```bash

Get 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
fi
fi 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
  1. 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
fi
fi 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
  1. 显示路由指引:
基于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>
/clear
first → fresh context window</sub>

Note: 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>先执行
/clear
→ 刷新上下文窗口</sub>

注意:issue将保留在open/目录,直到阶段工作开始。 当阶段规划启动时,可手动将issue移至in-progress/目录,或使用
/kata-check-issues
更新状态。

3. 保持issue在open/目录(暂不移至in-progress/)。

**如果选择“关联到现有阶段”:**

1. 查找可能匹配的即将到来的阶段:
```bash

Get 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:
  1. Note the issue reference when planning that phase
  2. Include issue context in the phase PLAN.md
  3. 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 linkage
Use 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关联到阶段的步骤:
  1. 在规划该阶段时记录issue引用
  2. 在阶段PLAN.md中包含issue上下文
  3. 当阶段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}"
fi
fi 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
/kata-check-issues
and select "Mark complete".

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}"
fi
fi 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>
/clear
first → fresh context window</sub>

Note: 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>先执行
/clear
→ 刷新上下文窗口</sub>

注意: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
done

Flat 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:
  1. Note the issue reference when planning that phase
  2. Include issue context in the phase PLAN.md
  3. 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关联到阶段的步骤:
  1. 在规划该阶段时记录issue引用
  2. 在阶段PLAN.md中包含issue上下文
  3. 当阶段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}"

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

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
/kata-check-issues
and select "Mark complete".

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标签"

将issue分配给自己

gh issue edit "$ISSUE_NUMBER" --add-assignee @me 2>/dev/null
&& 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}"
fi
fi 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 --web
Opens 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:
/kata-add-phase --issue [issue file path]
Keep in open. User runs command in fresh context.
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=false
If
COMMIT_PLANNING_DOCS=false
:
Skip git operations, log "Issue moved (not committed - commit_docs: false)"
If
COMMIT_PLANNING_DOCS=true
(default):
If 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.md
PROVENANCE=$(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}"
fi
fi 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
COMMIT_PLANNING_DOCS=false
跳过Git操作,记录“Issue已移动(未提交 - commit_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.md

Check 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/      → Completed
State transitions:
  • Work on it now (Quick task):
    open/
    in-progress/
    → routes to
    /kata-execute-quick-task
  • Work on it now (Planned): stays in
    open/
    with guidance for phase planning
  • Mark complete:
    in-progress/
    closed/
    (closes GitHub Issue if linked)
  • Put back to open:
    in-progress/
    open/
    (useful if deprioritized)
GitHub Issue lifecycle:
  • Created when:
    /kata-add-issue
    with
    github.enabled=true
  • Linked via:
    provenance: github:owner/repo#N
    in local file
  • 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/
    closed/
    (若关联GitHub Issue则关闭该issue)
  • 放回未处理:
    in-progress/
    open/
    (适用于优先级降低的情况)
GitHub Issue生命周期:
  • 创建时机:
    /kata-add-issue
    github.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 </成功标准>