Issue Fix Context

发布时间:2026/9/9 21:50:31

Issue Fix Context Issue Fix Context【免费下载链接】oh-my-claudecodeTeams-first Multi-agent orchestration for Claude Code项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-claudecodeYou are fixing Issue #{{ISSUE_NUMBER}}:{{ISSUE_TITLE}}Issue DetailsURL: {{ISSUE_URL}}Labels: {{ISSUE_LABELS}}Branch:{{BRANCH_NAME}}标题与详情区共同回答了 Claude 最关心的三个问题**修什么**编号与标题、**在哪修**URL 与标签用于背景检索、**在哪个分支上修**BRANCH_NAME。其中 BRANCH_NAME 不是手工填写的而是由 PSM 在创建 worktree 时依据 Issue 标题自动 slugify 生成见 3.3 节。 ### 2.2 DescriptionIssue 正文 markdown ## Description {{ISSUE_BODY}}ISSUE_BODY直接透传 Issue 的原始描述。它可能是多行文本甚至 Markdown——正因为模板渲染采用 Bash 参数展开而非 sed 逐行处理多行值才能被安全地嵌入测试用例 #7 亦验证了含这类易被 sed 误解释为反向引用的字符也能原样保留见 test-psm-prompt-injection.sh。2.3 Approach四步修复法## Approach 1. **Understand the Issue** - Reproduce the problem if applicable - Identify root cause - Consider edge cases 2. **Plan the Fix** - Minimal changes to fix the issue - Dont introduce regressions - Consider backwards compatibility 3. **Implement** - Write the fix - Add/update tests - Update documentation if needed 4. **Verify** - Run existing tests - Test the specific fix - Check for regressionsApproach 是模板中真正约束 Claude“工作方法”的核心章节四步依次递进理解 Issue——能复现则复现定位根因root cause并考虑边界条件规划修复——坚持最小改动原则明确不引入回归、兼顾向后兼容实现——写修复、同步增改测试、必要时更新文档验证——跑既有测试、验证本次修复本身、检查是否引入回归。“先复现→再最小改动→补测试→验回归”的顺序设计是为了避免 Agent 在未充分理解问题时直接猜测性改码——这是修复类任务中最常见的返工来源。2.4 Commands命令模板# Run tests npm test # or appropriate test command # Check build npm run build # or appropriate build command # Create PR when done gh pr create --title Fix #{{ISSUE_NUMBER}}: description --body Fixes #{{ISSUE_NUMBER}}Commands 以 npm/gh为例给出“测试→构建→提 PR”的命令骨架并显式注明“or appropriate test command”提示 Claude 依据仓库实际工具链替换。PR 标题与正文遵循 GitHub 惯例标题写Fix #编号: 描述正文写Fixes #编号以在 PR 合并时自动关联并关闭对应 Issue。若仓库是 Jira 而非 GitHub则需要把最后一条替换为 Jira 流程Jira 没有 PR 概念PSM 对此有专门防护见 3.4 节。2.5 Fix Checklist完成度清单## Fix Checklist - [ ] Root cause identified - [ ] Fix implemented - [ ] Tests added/updated - [ ] All tests pass - [ ] No regressions introduced - [ ] Ready for PR六项勾选清单把“修复完成”具象化为可验证标准根因已识别、修复已实现、测试已增改、全部测试通过、无回归、可提交 PR。它与 feature.md、pr-review.md 中的清单风格一致保证 Agent 在收尾时不会遗漏验证与回归检查。3. 占位符从哪来渲染引擎与数据源映射模板中的{{KEY}}不能凭空出现——必须由 PSM 的渲染引擎从真实 Issue 数据逐一替换。这一小节回答“每个占位符是如何被填上真实值的”。3.1 渲染引擎psm_render_templatePSM 没有引入任何外部模板库渲染逻辑只是一个纯 Bash 函数实现在 lib/tmux.shpsm_render_template() { local template_file$1 shift if [[ ! -f $template_file ]]; then echo error|Template not found: $template_file 2 return 1 fi local content content$(cat $template_file) for assignment in $; do local key${assignment%%*} local value${assignment#*} # Bash parameter expansion handles multiline values safely content${content//\{\{${key}\}\}/$value} done printf %s\n $content }几个值得注意的实现细节传入形式为KEYVALUE的若干参数每次调用把模板中所有{{KEY}}用${var//pattern/replacement}参数展开替换Bash 参数展开天然支持含换行与特殊字符的多行值如ISSUE_BODY所以无需担心转义未引用的占位符会被原样保留而非静默删除——这在渲染失败时是重要的排错信号测试用例 #3 专门断言了这一行为模板文件不存在时返回非零并输出error|前缀的诊断信息渲染完全是大写键名ISSUE_NUMBER等与模板中的{{...}}一一对应因此新增占位符只需同时修改模板与psm.sh的渲染调用无需改动引擎。3.2 六个占位符的 GitHub 数据来源cmd_fixpsm.sh首先用 GitHub CLI 拉取 Issue 的 JSON 字段再从 JSON 中抽取各占位符所需的值gh issue view issue_number --repo repo --json number,title,body,labels,url对应关系如下表模板占位符GitHub JSON 字段说明{{ISSUE_NUMBER}}numberIssue 编号{{ISSUE_TITLE}}titleIssue 标题{{ISSUE_URL}}urlIssue 链接{{ISSUE_LABELS}}labels[].name逗号拼接标签名列表join(, )处理{{ISSUE_BODY}}bodyIssue 正文缺失时兜底为空串// {{BRANCH_NAME}}由title派生见 3.3 节在 psm.sh 中可以看到issue_body与issue_labels都使用了// /// empty之类的 jq 兜底防止正文或标签缺失导致渲染失败或空值异常。3.3BRANCH_NAME的生成从标题到 slugBRANCH_NAME并非来自远端而是由 Issue 标题实时派生。cmd_fix中先调用 lib/parse.sh 的psm_slugifypsm_slugify() { local title$1 local max_len${2:-30} echo $title | tr [:upper:] [:lower:] | sed s/[^a-z0-9]/-/g | sed s/--*/-/g | sed s/^-// | sed s/-$// | head -c $max_len }即转小写 → 非字母数字字符统一替换为-→ 压缩连续-→ 去掉首尾-→ 截断到 20 字符cmd_fix传入psm_slugify $issue_title 20。随后 lib/worktree.sh 的psm_create_issue_worktree把 slug 拼成规范分支名与 worktree 路径local worktree_path${worktree_root}/${alias}/issue-${issue_number} local branch_namefix/${issue_number}-${slug}例如标题Auth fails on token expiry会得到分支fix/42-auth-token-expiry测试脚本 #33-38 中即以此为例断言渲染结果。worktree_root默认来自配置~/.psm/worktrees可用defaults.worktree_root覆盖因此omc:issue-42会话的 worktree 目录就是~/.psm/worktrees/omc/issue-42。3.4 Jira 数据源字段结构不同当 alias 配置了provider: jira时cmd_fix走另一条数据路径psm.sh从 Jira CLI 结果中抽取issue_title←fields.summaryissue_url←selfissue_body←fields.description也就是同一个模板对 GitHub/Jira 双 provider 通用差异只在上游字段映射。注意 PSM 还规定了两条 Jira 约束详见 SKILL.mdpsm fix PROJ-123只在PROJ被显式配置为jira_project时才被识别防止FIX-123这类分支名误判而psm review对 Jira 直接报错因为 Jira 没有 PR 概念。4. 从psm fix到 Claude 开工完整调用链issue-fix.md的价值在于被正确投喂给 Agent。整个过程发生在cmd_fix中可分为五个阶段4.1 解析引用并拉取 Issue 数据用户执行psm fix omc#42引用格式见 psm.sh支持alias#num、owner/repo#num、URL 与当前仓库#num解析出 alias、repo、issue_number、base 等字段后按 3.2/3.4 节的 provider 分支拉取 Issue 信息。4.2 创建 worktree 与 fix 分支先确保本地仓库存在必要时按 alias 配置clone_url再调用psm_create_issue_worktreegit fetch origin base→git branch fix/num-slug origin/base→git worktree add。base默认main可通过 alias 的default_base覆盖。4.3 渲染模板并写入.psm/fix.md这是模板最直接的消费点psm.shlocal fix_context_rel.psm/fix.md local fix_context_file${worktree_path}/${fix_context_rel} mkdir -p $(dirname $fix_context_file) if ! psm_render_template $SCRIPT_DIR/templates/issue-fix.md \ ISSUE_NUMBER${issue_number} \ ISSUE_TITLE${issue_title} \ ISSUE_URL${issue_url} \ ISSUE_LABELS${issue_labels} \ ISSUE_BODY${issue_body} \ BRANCH_NAME${branch_name} \ $fix_context_file; then log_warn Failed to render issue fix template; Claude will start without task context fix_context_rel fi渲染后的上下文文件被写入 worktree 的.psm/fix.md恰好处于 Claude 即将工作的工作目录内Claude 可以随时再读取它而无需网络请求。若渲染失败模板缺失等会打印警告并把上下文引用置空Claude 仍可启动只是缺少任务说明——即“fail open with warning”策略。4.4 创建 tmux 会话并启动 Claudecmd_fix把 session idomc:issue-42换算成 tmux-safe 名字后创建 tmux 会话并启动 Claude细节见 lib/tmux.sh会话名遵循issue #3528引入的规范tmux 保留:与.因此公共 IDomc:issue-42在 tmux 边界处一律翻译为psm_omc_issue-42psm_tmux_safe_name用${name//[.:]/_}替换且翻译幂等通过tmux send-keys claude --dangerously-skip-permissions启动 Claude Code——跳过“信任该目录吗”与逐工具审批弹窗避免无人值守会话被阻塞在第一次工具调用上issue #2508 的修复Claude 以 worktree 路径为启动目录创建时用-c $worktree_path指定。4.5 探测 REPL 就绪并注入任务指令Claude 启动需要时间因此注入不是立刻send-keys而是先轮询探测交互提示符_psm_pane_has_claude_prompt() { printf %s $pane_text | grep -qE ^[[:space:]]*(|\?)[[:space:]]*$ }psm_wait_for_claude_prompt默认最多等 30 秒反复tmux capture-pane直到窗格出现单独一行的标准输入提示符或?信任弹窗为止随后psm_inject_prompt注入一条触发指令lib/tmux.shlocal triggerRead ${context_file} for full task context, then begin. # 使用 -lliteral模式防止 tmux 把文本中的按键名误解为指令 tmux send-keys -t $session_name -l -- $trigger最终 Claude 收到的第一句任务就是“读取.psm/fix.md获取完整任务上下文然后开始”而.psm/fix.md的内容正是渲染后的issue-fix.md。若未能检测到提示符超时只警告而不让会话创建失败非致命。此外psm_launch_claude对第二参数做了分流指向文件就按“上下文文件触发词”路径处理否则视为字面 prompt 延后投递等待PSM_CLAUDE_STARTUP_DELAY默认 5 秒。整个链路可概括为psm fix→ 拉取 Issue JSON → 建 worktree/branch → 渲染模板为.psm/fix.md→ tmux 内启 Claude → 探测/?→ 注入 Read .psm/fix.md … → Claude 按模板四步法开始修复。5. 会话生命周期与状态登记上下文投递完成后会话会写入注册表并对外展示session 数据登记见 psm.shSession ready! ID: omc:issue-42 Type: fix Issue: #42 - title Branch: fix/42-slug Worktree: ~/.psm/worktrees/omc/issue-42 Tmux: psm_omc_issue-42【免费下载链接】oh-my-claudecodeTeams-first Multi-agent orchestration for Claude Code项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-claudecode创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/9 21:50:31

全埋点方案落地:从事件协议到数据质量治理的完整实践

做APP数据分析的同事经常说:没有用户行为采集,一切优化都是拍脑袋。但真到自己动手做一套全埋点方案时,你会发现手动埋点的工作量远比你想象的大,漏埋、错埋、重复埋点都是日常。前阵子我把整个方案从技术选型做到事件协议&#x…

2026/9/9 22:50:48

Telegraf 上手指南:10分钟跑通第一条监控数据

Telegraf 上手指南:10分钟跑通第一条监控数据 【免费下载链接】telegraf Agent for collecting, processing, aggregating, and writing metrics, logs, and other arbitrary data. 项目地址: https://gitcode.com/GitHub_Trending/te/telegraf Telegraf 是一…

2026/9/9 22:50:48

数据治理实战:从元数据到主数据,构建可信数据底座

刚接手一家制造业客户的数据治理项目时,对方信息中心主任跟我倒苦水:集群搭起来了、数仓建好了、BI报表也上了线,可业务部门开月会还是各自从Excel里取数,因为系统里的同一个“客户”在不同部门口径下能差出三倍。这种事在大数据圈…

2026/9/9 22:50:48

DBA 面试不用再到处找题:530 道题库 + AI 模拟面试!

准备 DBA 面试时,最容易陷进去的不是没题,而是题太散:收藏夹里一份 Oracle 文档,网盘里几套 MySQL 题目,临面试了还在判断哪些该背、哪些只要理解。 ORA100 把这件事收拢成了一个面试准备台。先按数据库、难度和能力方…

2026/9/9 22:45:48

Wonderdraft+Dungeondraft:从世界地图到战斗场景的地图制作实战指南

做地图这件事,做了这么多年,我越来越觉得它不是一个“画图”的活儿,而是一个“搭建舞台”的活儿。无论是跑团主持人准备一张大陆全景图,还是独立游戏开发者给关卡配一张战斗地图,工具选对了,效率能差出好几…

2026/9/9 13:11:35

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/8 7:15:15

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/9 16:31:09

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/9 0:00:48

MHS模型硬件标准:让大模型像调用软件一样控制物理设备

让Claude真正看着显微镜说“这个细胞形态不太对”,或者让大模型自己调一版机械臂的运动轨迹,这事儿听上去已经很接近科幻片了。但你真上手试一次就会发现,模型不缺智商,缺的是一个能插进显微镜、机械臂、激光控制器里的“通用插座…

2026/9/9 0:00:48

AI五大核心方向详解:从机器学习到大模型,零基础转行选哪条?

会有人告诉我,他想转行学AI,但打开招聘网站一看直接傻眼:机器学习、深度学习、自然语言处理、计算机视觉、大模型应用……满屏都是这些词,好像每个都会一点,又好像每个都离自己很远。还有人上来就问“学Python还是学Ja…

2026/9/9 0:00:49

从50行最小循环到生产级AI引擎:工程化改造全解析

直接说干货。这一章我写的不是那种"hello world跑通某个模型"的教程,而是把AI引擎当做一个真正要上线、要被人调用、要扛流量的系统来聊。从最初只有50行的最小循环,到能够承载生产流量的AI引擎,中间差的不是代码量,而是…

2026/9/7 16:23:03

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/7 22:46:00

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/9 10:21:54

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码