开发者:持续问题追踪
触发条件
在每一次重要的编码迭代结束时运行,或者当用户明确要求时运行。不要在任务进行中运行 —— 等待一个自然的停止点。
此技能在会话启动时默认加载。它是安全且非破坏性的:仅写入 knowledge/issues/open/ 和 knowledge/issues/INDEX.md。
算法
阶段 1 —— 扫描当前聊天
审查当前对话中的以下信号类型:
| 信号 | 示例 | 优先级 |
|---|---|---|
| 修复的错误 | "PowerShell 错误解释了 {{ }}","ngx-translate v18 没有 forRoot()" | 高 |
| API 发现 | "linkedSignal 需要 Node ≥22","provideZonelessChangeDetection() 在 Angular 22 中稳定" | 高 |
| 找到的解决方法 | "使用 create_file 而不是 Set-Content 来处理模板" | 中 |
| 重复模式 | 同一个错误在本次会话中发生了 2 次或以上 | 高 |
| 项目特性 | "这个 monorepo 使用 npm workspaces",".gitignore 排除了 .github/" | 中 |
| 工具限制 | "Copilot 不直接暴露 usage.prompt_tokens" | 低 |
| 用户偏好 | "更喜欢用 ; 分隔命令,而不是 &&" | 中 |
阶段 2 —— 与问题注册表交叉引用
- 读取
knowledge/issues/INDEX.md—— 获取所有现有问题的 ID、标题和类别 - 对于阶段 1 中的每个信号,尝试与现有问题匹配:
- 通过关键词重叠(标题 + 描述)匹配
- 通过类别 + 相似的错误模式匹配
- 使用
grep_search在knowledge/issues/open/中搜索相关内容
阶段 3 —— 创建或更新问题
新问题(未找到匹配项)
生成 ID: ISSUE-YYYYMMDD-XXXX,其中 XXXX = UUID 的前 4 个十六进制字符
PowerShell: [guid]::NewGuid().ToString().Substring(0, 4)
示例: ISSUE-20260624-a1b2
使用 TEMPLATE.md 创建 knowledge/issues/open/ISSUE-YYYYMMDD-XXXX.md
设置 occurrences=1,certainty=low,status=open
将 created_by 设置为 "developer"(或当前代理标识符)
在 INDEX.md → 打开问题表中插入新行
如果您有会话令牌数据,可以选择将其添加到 证据 部分
ID 基于 UUID —— 无需先读取 INDEX.md。多个开发者同时工作时零冲突风险。
更新现有问题(找到匹配项)
将 occurrences 增加 1
将 last_seen 更新为今天的日期
将当前会话信息附加到 sessions 数组
重新评估确定性:
- 1 次出现 → 低
- 2 次出现 → 中
- 3 次及以上出现 → 高
使用 replace_string_in_file 更新 open/ 中的问题文件
更新 INDEX.md 中的计数和行数据
INDEX.md 合并冲突
如果两个开发者同时向 INDEX.md 添加行,会在表格体上发生 Git 合并冲突。解决方法:保留两个分支的所有行;重新统计目录以更新汇总数字。
报告
输出一个汇总表:
## 开发者报告 —— YYYY-MM-DD
| 动作 | ID | 标题 | 类别 | 详情 |
|--------|----|-------|----------|--------|
| 🆕 新建 | ISSUE-001 | ... | ... | 在 open/ 中创建 |
| 📈 更新 | ISSUE-002 | ... | ... | 1→2 次出现,确定性 低→中 |
重要规则
-
绝不推广问题。 推广是
ai-engineer技能的职责。您的唯一输出是open/中的问题文件和对INDEX.md的更新。 -
绝不修改技能或记忆文件。 您是
.github/skills/和/memories/的只读观察者。不要触碰它们。 -
绝不为模型已知的内容创建技能 —— 如果那是常识(例如,“使用
const而不是var”),完全跳过它。 -
保持问题文件简洁 —— TEMPLATE.md 格式是最大值,而非最小值。不要写长篇大论。
-
会话隔离 —— 前置元数据中的
sessions数组存储会话 UUID。如果可用,使用session_store_sql查找当前会话 UUID,否则使用基于日期的标识符。 -
始终填充
created_by—— 将其设置为代理名称或会话标识符,以便ai-engineer在审查过程中追溯问题来源。
交接给 AI 工程师
当问题达到 certainty: high(3 次及以上的出现)时,ai-engineer 技能负责推广。developer 技能不决定要推广什么或推广到哪里 —— 它只记录信号强度。当用户要求组织知识、清理问题或推广模式时,作为子代理运行 ai-engineer 技能。
文件路径参考
| 资源 | 路径 |
|---|---|
| 问题注册索引 | knowledge/issues/INDEX.md |
| 问题模板 | knowledge/issues/TEMPLATE.md |
| 打开的问题 | knowledge/issues/open/ISSUE-XXX.md |
| 已推广的问题 | knowledge/issues/promoted/ISSUE-XXX.md |
| 已丢弃的问题 | knowledge/issues/discarded/ISSUE-XXX.md |