研发协作
为埋点分析从 PR/分支 diff 生成 YAML 变更简报
当你收到 PR 链接、分支比较或原始 diff,需要先理解改了什么、哪些用户可见变化需要埋点,并为下游埋点发现/实现技能生成机器可读 YAML 变更简报时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15
适用场景
为埋点分析从 PR/分支 diff 生成特定
解决思路
- 作为 analytics instrumentation 工作流第 1 步:读取 PR 或分支 diff,生成紧凑的 YAML 变更简报,供下游技能 `discover-event-surfaces`、`instrument-events` 消费;输出保持机器可读且精确,YAML 块外不要散文。
- Step 1:获取变更文件列表并分类。
- 对于 PR URL,运行 `gh pr view <number-or-url>`。
- 对于 PR URL,运行 `gh pr view <pr-number> --json files --jq '.files[] | "\(.path)\t+\(.additions) -\(.deletions)\t"'` 获取文件与增删行数。
- 对于分支比较,运行 `git log <main|master>..<branch>`。
- 对于分支比较,运行 `git diff --stat <main|master>..<branch>`。
- 对于模糊提及(PR 号、分支名),推断正确形式并直接获取,除非认证失败,否则不要询问。
- 根据路径将文件归类为 Core Logic(应用源码,如 `src/auth/login.py`、`database/models.ts`)。
- 根据路径将文件归类为 Generated(路径中含 `generated`)。
- 根据路径将文件归类为 Testing(测试文件)。
- 根据路径将文件归类为 Config / Dependencies(如 `package.json`、`docker-compose.yml` 等)。
- 根据路径将文件归类为 Documentation(README、`docs/`)。
- 根据路径将文件归类为 Noise(lock 文件、`.svg`、自动生成迁移)。
- 对每个文件记录:path、category、change type(Added / Modified / Deleted)、analytics likelihood(1–5)。
- Step 2:构建 file summary map;只读取并处理 Core Logic 文件,读取每一个 Core Logic 文件并创建 file summary map。
- 获取详细 diff:对于 PR,运行 `gh pr view <number-or-url> --json baseRefOid,headRefOid`。
- 使用上一步响应,运行 `git diff <baseRefOid>...<headRefOid> -- <file1> <file2> <file_n>` 获取详细 diff。
- 对于分支比较,运行 `git diff main..feature/foo -- <file1> <file2> <file_n>`。
- 对每个 Core Logic 文件记录 `summary`:2 行描述改了什么。
- 对每个 Core Logic 文件记录 `stack`:frontend、backend 或 shared。
- 在阅读 diff 和变更文件时,同时推导 `user_facing_changes`:扁平列表,包含对用户、PM 或分析师重要的具体行为变化;每项描述用户现在能做什么、看到什么或体验有何不同;省略纯内部重构。
- 同时推导 `surfaces.components`:直接涉及这些用户可见变化的 UI 组件、路由、页面、处理器或其他交互面;优先选择可能的埋点位置,而不是底层 helper。
- 对每个 surface 记录:`name`(组件、路由、页面、hook 或 surface 名称)、`file`(仓库相对路径)、`change`(`added`、`modified` 或 `deleted`)。
- 如果变更是后端专用或没有明确交互面,省略 `surfaces.components`,不要编造。
- Step 3:分类整体变更;推断 change type 和 analytics scope。
- 对 feat 类型:analytics implication 为 High——新 surface 可能需要埋点。
- 对 fix 类型:analytics implication 为 Low–Medium——可能影响现有事件条件。
- 对 refactor 类型:analytics implication 为 Low——埋点路径可能移动,有回归风险。
- 对 perf 类型:analytics implication 为 Low——通常无埋点影响。
- 对 revert 类型:analytics implication 为 Medium——需检查丢失了什么埋点。
- 对 style / docs / test / build / ci / chore 类型:analytics implication 为 None——跳过 analytics 分析。
- 计算 `analytics_scope` 为出现过的最高 implication:`none`(仅无影响类型)、`low`(仅 perf/refactor)、`medium`(fix)、`high`(任何 feature 或能力新增)。
- 如果 `analytics_scope` 为 `none`,输出 brief 并注明不需要下游技能。
- Step 4:输出 YAML brief;只输出 YAML 块,前后无散文。
- 严格遵循给定格式:`change_brief.classification.primary`(dominant conventional commit type)、`types`(所有检测到的类型)、`analytics_scope`(none | low | medium | high)、`stack`(frontend | backend | fullstack)、`summary`(一句话总体变更)、`user_facing_changes`、`surfaces.components`、`file_summary_map`。
- 在 `file_summary_map` 中逐个列出每个文件,不要用 globs;每个条目包含 `file`、`summary`、`layer`(frontend | backend | shared)。
适用边界 · 注意事项
- 没有 PR 链接、分支比较或原始 diff 可获取时,不适用。
- 当变更分类结果 `analytics_scope` 为 `none`(仅 style/docs/test/build/ci/chore 等无 analytics 影响类型)时,不需要继续调用下游 analytics instrumentation 技能。
- 当变更仅后端且没有明确交互面时,不要强行推断或编造 `surfaces.components`。