Loading...
Loading...
Compare original and translation side by side
ctocto/cto-heartbeat org/repo [goal-context]/cto-heartbeat fellowship-dev/booster-pack
/cto-heartbeat fellowship-dev/booster-pack "focus: Vercel deployment pipeline"/cto-heartbeat org/repo [goal-context]/cto-heartbeat fellowship-dev/booster-pack
/cto-heartbeat fellowship-dev/booster-pack "focus: Vercel deployment pipeline"export GH_TOKEN=$(grep "GH_PAT_FELLOWSHIP" $HOME/projects/fellowship-dev/claude-buddy/.env | cut -d= -f2)export GH_TOKEN=$(grep "GH_PAT_FELLOWSHIP" $HOME/projects/fellowship-dev/claude-buddy/.env | cut -d= -f2)
---
---gh label createexport REPO=$1
export GOAL_CONTEXT="${@:2}"
export GH_TOKEN=$(grep "GH_PAT_FELLOWSHIP" $HOME/projects/fellowship-dev/claude-buddy/.env | cut -d= -f2)gh label createexport REPO=$1
export GOAL_CONTEXT="${@:2}"
export GH_TOKEN=$(grep "GH_PAT_FELLOWSHIP" $HOME/projects/fellowship-dev/claude-buddy/.env | cut -d= -f2)undefinedundefinedundefinedundefined
Actions:
- **Dispatched issue has a merged PR?** → Close the issue or remove `dispatched` label, acknowledge completion
- **Dispatched issue has an open PR stuck >2 days?** → Flag as blocker, investigate
- **Dispatched issue has no PR at all and was dispatched >3 days ago?** → Flag as stale dispatch
- **Blocked issue** → Check if the blocker is resolved; if so, remove `blocked` label and re-prioritize
- **PR stuck without progressing through review pipeline** → Flag
**Output**: List of WIP items and their status. Any actions taken (labels removed, issues closed).
操作:
- **已分派问题关联了已合并的PR?** → 关闭该问题或移除`dispatched`标签,确认工作完成
- **已分派问题关联的PR停滞超过2天?** → 标记为阻塞项并调查原因
- **已分派问题未关联任何PR且已超过3天?** → 标记为陈旧分派
- **阻塞的问题** → 检查阻塞是否已解决;若已解决,移除`blocked`标签并重新排优先级
- **PR停滞未通过审核流程** → 标记出来
**输出**:在制品列表及其状态,以及已执行的操作(如移除标签、关闭问题)。dispatchedundefineddispatchedundefined
Filter out metadata labels (P0, P1, P2, dispatched, blocked, bug, enhancement, documentation, etc.) — whatever remains is an epic label.
Rules:
- If exactly one epic has dispatched work → that is the **active epic**. Focus all subsequent steps on it.
- If multiple epics have dispatched work → the one with the most dispatched issues is active. Flag the split as a concern.
- If no epic has dispatched work (WIP=0) → no active epic. Step 4 will pick from highest-priority across all epics.
**Output**: Active epic name (or "none — WIP is clear").
过滤掉元数据标签(P0、P1、P2、dispatched、blocked、bug、enhancement、documentation等)——剩余的即为史诗级标签。
规则:
- 如果恰好有一个史诗级任务包含已分派工作 → 这就是**活跃史诗级任务**。后续所有步骤都聚焦于此。
- 如果多个史诗级任务包含已分派工作 → 已分派问题最多的那个为活跃任务。标记这种分散情况为需要关注的问题。
- 如果没有史诗级任务包含已分派工作(WIP=0)→ 无活跃史诗级任务。步骤4将从所有史诗级任务中选择最高优先级的任务。
**输出**:活跃史诗级任务名称(或“无——在制品已清理完毕”)。undefinedundefined
For each unlabeled issue (up to 5):
1. Read the issue title and body
2. Assign a priority label: P0, P1, or P2
3. Assign an epic label if it fits an existing epic, or create a new epic label if the issue represents a new workstream
4. Apply the labels:
```bash
gh issue edit $ISSUE_NUM --repo $REPO --add-label "P1,epic-name"
针对每个未标记的问题(最多5个):
1. 阅读问题标题和内容
2. 分配优先级标签:P0、P1或P2
3. 如果问题符合现有史诗级任务则分配对应的史诗级标签,若问题代表新的工作流则创建新的史诗级标签
4. 应用标签:
```bash
gh issue edit $ISSUE_NUM --repo $REPO --add-label "P1,epic-name"dispatchedundefineddispatchedundefinedundefinedundefineddispatchedblocked/build-train org/repo --issues N,M,...dispatchedblocked/build-train org/repo --issues N,M,...REPORT_DIR="$(git rev-parse --show-toplevel)/reports"
REPORT_PATH="$REPORT_DIR/$(date +%Y-%m-%d)-cto-heartbeat-$(echo $REPO | tr "/" "-").md"undefinedREPORT_DIR="$(git rev-parse --show-toplevel)/reports"
REPORT_PATH="$REPORT_DIR/$(date +%Y-%m-%d)-cto-heartbeat-$(echo $REPO | tr "/" "-").md"undefined| Issue | Title | Status | Epic | Priority |
|---|---|---|---|---|
| #N | ... | dispatched / blocked / stale | epic-name | P1 |
| 问题 | 标题 | 状态 | 史诗级任务 | 优先级 |
|---|---|---|---|---|
| #N | ... | dispatched / blocked / stale | epic-name | P1 |
| Issue | Title | Priority | Epic |
|---|---|---|---|
| #N | ... | P1 | epic-name |
| 问题 | 标题 | 优先级 | 史诗级任务 |
|---|---|---|---|
| #N | ... | P1 | epic-name |
Post report to Quest:
```bash
QUEST_TOKEN=$(grep "^QUEST_TOKEN=" $HOME/projects/fellowship-dev/claude-buddy/.env | cut -d= -f2)
curl -s -X POST "http://127.0.0.1:4242/api/event" \
-H "Authorization: Bearer $QUEST_TOKEN" \
-H "Content-Type: application/json" \
-d "$(python3 -c "
import json
content = open('$REPORT_PATH').read()
print(json.dumps({
'source': 'commander',
'type': 'commander.report',
'title': 'CTO Heartbeat: $REPO',
'meta': {'content': content, 'report_type': 'cto-heartbeat'}
}))
")" 2>/dev/null || true
将报告发布到Quest:
```bash
QUEST_TOKEN=$(grep "^QUEST_TOKEN=" $HOME/projects/fellowship-dev/claude-buddy/.env | cut -d= -f2)
curl -s -X POST "http://127.0.0.1:4242/api/event" \
-H "Authorization: Bearer $QUEST_TOKEN" \
-H "Content-Type: application/json" \
-d "$(python3 -c "
import json
content = open('$REPORT_PATH').read()
print(json.dumps({
'source': 'commander',
'type': 'commander.report',
'title': 'CTO Heartbeat: $REPO',
'meta': {'content': content, 'report_type': 'cto-heartbeat'}
}))
")" 2>/dev/null || true| Verdict | Emoji | Label | Merge? |
|---|---|---|---|
| LGTM | ✅ | | No (heartbeat dispatches issues, not PRs) |
| REWORK | 🔄 | | No |
| BLOCKED | ⏸️ | | No |
| NEW_ISSUE | 📋 | — | Create separate issue |
| STALE | ⏰ | | No |
| 判定结果 | 表情 | 标签 | 合并? |
|---|---|---|---|
| LGTM | ✅ | | 否(heartbeat仅分派问题,不处理PR) |
| 需要返工 | 🔄 | | 否 |
| 阻塞 | ⏸️ | | 否 |
| 新建问题 | 📋 | — | 创建单独问题 |
| 陈旧 | ⏰ | | 否 |
/cto-reviewcto/cto-reviewcto