dev-manager-tauri/.claude/skills/retro-catchup/SKILL.md
lanrtop a41161f7d1
All checks were successful
Push & PR Check / check (push) Successful in 1m4s
feat(mcp): 单一全局 lian-jing 服务器——组级挂载收敛(T1-T3+T5)
T1 服务器层:新增全局 /mcp + /mcp/messages 路由,process_rpc 组上下文
Option 化;旧 /mcp/group/:gid 路由保留过渡,T6 移除。驻军测试 2 条。
T2 工具层:resolve_project_root 按 project_id 直查 project_workspaces,
删除 3 处组归属校验(实测无隔离价值);list_group_projects 改显式传参。
T3 注入层:settings.json 收敛为单 "lian-jing" key(URL /mcp),注入时
清理旧 lian-jing:group-* key;liangjing.json 主动删除 group_id;
启动时一次性迁移(重注入全量 + 清理旧全局注册两种命名格式,标记位防重)。
T5 同步:git-workflow 文档/模板、retro-catchup 技能 Python 兜底、
设置页 URL 展示、mcp-config-inject 模块取代注记。

收益:MCP 客户端配置成本 O(N组)→O(1),授权一次永久生效;
group_id 缺失/过期/移组同步一整类问题从根上消失。
2026-07-06 19:30:01 +09:00

126 lines
4.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
name: retro-catchup
description: 为项目中所有已完成但缺少复盘笔记的 M/L 任务卡补写历史复盘笔记,并通过 MCP append_project_note 写入炼境。Use when a project has completed M/L tasks but zero or few retrospective notes.
allowed-tools: Read, Glob, Grep, Bash(git log *), Bash(git diff *), Bash(python *), Bash(python3 *), mcp__lian*
---
# 复盘笔记补写Retro Catch-Up
为已完成的 M/L 任务卡补写事后重建版复盘笔记,推动飞轮数据积累。
> ⚠️ 这些笔记是**事后重建**,基于任务卡内容 + git 历史推断,比实时记录精度低。但对识别高频模式仍然有价值。
## 写入通道(三级降级)
每次调用 `append_project_note` 时,按以下顺序尝试,成功即停止:
**① 原生 MCP**:若 `append_project_note` 工具可用,直接调用。
**② Python HTTP 直调**:若原生 MCP 不可用Claude Code 与炼境握手失败的已知问题),读取项目 `.claude/liangjing.json` 取 project_id 与端口,用 Python 直接 POST 炼境单一全局服务器:
```python
import urllib.request, json, sys
# 从 .claude/liangjing.json 提取 project_id 和端口
with open('.claude/liangjing.json') as f:
ctx = json.load(f)
PROJECT_ID = ctx['project_id']
port = ctx.get('mcp_port', 27190)
url = f'http://localhost:{port}/mcp'
def mcp_call(method, params={}):
payload = json.dumps({'jsonrpc':'2.0','id':1,'method':method,'params':params}).encode()
req = urllib.request.Request(url, data=payload, method='POST')
req.add_header('Content-Type', 'application/json')
req.add_header('Accept', 'application/json')
with urllib.request.urlopen(req, timeout=10) as r:
return json.loads(r.read().decode('utf-8', errors='replace'))
# 调用示例
result = mcp_call('tools/call', {
'name': 'append_project_note',
'arguments': {'project_id': PROJECT_ID, 'content': NOTE_CONTENT}
})
```
**③ 本地文件兜底**:若炼境未运行(连接超时),将所有笔记追加写入 `.blueprint/retro-notes.md`,格式与正式笔记相同,头部加注 `<!-- 待炼境恢复后手动同步 -->`
## 步骤
### 1. 确认写入通道 + 项目 ID
按以下顺序确定:
1. 检测 `append_project_note` 是否在可用工具中 → 是则用**通道①**
2. 否则检测 `localhost:27190` 是否可达(`curl -s --max-time 2 http://localhost:27190` 或 Python urlopen→ 可达则用**通道②**,读取 `.claude/liangjing.json` 直接获取 `project_id` 与端口
3. 均不可达 → 用**通道③**,无需 project_id
告知用户当前使用哪个通道,例如:`使用通道②Python HTTP 直调)`。
### 2. 扫描所有已完成 M/L 任务卡
遍历 `.blueprint/modules/*.md`,收集满足以下条件的任务卡:
- 前缀为 ✅status: done
- complexity 为 `M``L`
输出扫描结果:共找到 N 张,列出标题 + 所属模块。
### 3. 逐卡重建复盘笔记
对每张任务卡按顺序处理:
**3a. 读取证据**
- 读取任务卡的 `files` 字段列出的所有文件(当前代码状态)
- 执行 `git log --oneline -- <file>` 查看相关文件的提交历史
- 若提交数 > 1执行 `git diff <first_commit>^..<last_commit> -- <file>` 了解变更量
**3b. 推断执行情况**
根据证据推断:
- **实际轮数**:相关文件的提交次数(粗估)
- **是否返工**:若同一文件有多次修改且 message 含 fix/修复/重新/又 等关键词
- **返工原因**:从 commit message 或代码变更中推断
- **有效策略**:从最终实现方式中提取关键设计决策
**3c. 写入笔记**
按步骤 1 确定的通道调用 `append_project_note`,内容格式:
```
【复盘·重建】<任务标题>
任务类型: 后端命令 | 前端组件 | 数据层 | MCP工具 | 架构调整
复杂度: M | L
实际轮数: N轮事后推断基于 git 提交数)
是否返工: 是/否/不确定
返工原因: <若返工,从 commit message 推断>
有效策略: <从最终实现中提取的关键做法>
遗留风险: <若代码中有明显 TODO 或边界情况未处理>
备注: 此笔记为事后重建,非实时记录
```
每写完一张,告知用户"✅ 已写入:<任务标题>"。
### 4. 输出汇总
```
## 复盘补写完成
共处理 N 张 M/L 任务卡:
- ✅ 成功写入X 张
- ⏭️ 跳过无足够证据Y 张
飞轮状态:累计复盘笔记 Z 条
```
## 跳过条件
以下情况跳过该任务卡,不强行写入:
- `files` 字段为空,且 git 中找不到相关提交
- 任务卡内容过于简单S 级错标为 M 的情况)
## 原则
- 笔记头部必须标注 `【复盘·重建】``备注: 此笔记为事后重建`,与实时笔记区分
- 宁可跳过,不要捏造。证据不足时注明"信息不足,无法推断"
- 每张卡独立处理,写入失败不影响后续