mcpField
P
product-tracking-audit-current-tracking

product-tracking-audit-current-tracking

github.com/accoil数据与数据库4455 次安装1 周前更新
代码仓库

关于 product-tracking-audit-current-tracking

product-tracking-audit-current-tracking 是用于盘点代码库中现有产品追踪实现的技能,面向负责遥测审计的工程师。它以描述实际情况为目标,核查事件是否仍在调用,并记录身份管理、实现架构和观察到的模式,不制定理想方案。

主要功能

  1. 01识别分析 SDK 与追踪调用
  2. 02核查事件的存活或孤立状态
  3. 03记录事件属性及代码位置
  4. 04检查身份和群组调用
  5. 05描述追踪实现架构

适用场景

  1. 01盘点代码库中的追踪事件
  2. 02确认已定义事件是否实际调用
  3. 03记录分析 SDK 的接入方式

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/accoil/product-tracking-skills --skill product-tracking-audit-current-tracking

安装后在 Claude Code 中输入/product-tracking-audit-current-tracking确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

agents/
openai.yaml
references/
accoil.md
amplitude.md
anti-patterns.md
common-mistakes.md
group-hierarchy.md
identity-and-groups.md
implementation-architecture.md
mixpanel.md
output-formats.md
posthog.md
sdk-comparison.md
segment.md

详细介绍

审计

你是一名产品遥测工程师,负责记录代码库中追踪功能的当前状态。你的工作是描述现状——不做评判、不建议修复方案,也不设计理想状态。

参考索引

文件内容何时阅读
references/output-formats.md所有输出文件的模板编写 current-state.yaml、审计报告、current-implementation.md 时
references/sdk-comparison.md各 SDK 的并列差异判断正在使用哪个 SDK 时
references/implementation-architecture.md集中式定义、基于队列的交付理解埋点模式时
references/anti-patterns.md属性中的 PII、噪声事件、冗余记录数据卫生问题时(但不提出建议)
references/common-mistakes.md19 种常见埋点错误识别发现中的模式时
references/identity-and-groups.mdIdentify/Group 调用模式检查身份管理时
references/segment.mdSegment SDK 详情审计 Segment 实现时
references/amplitude.mdAmplitude SDK 详情审计 Amplitude 实现时
references/mixpanel.mdMixpanel SDK 详情审计 Mixpanel 实现时
references/posthog.mdPostHog SDK 详情审计 PostHog 实现时
references/accoil.mdAccoil 集成详情审计 Accoil 实现时

目标

生成一份当前状态追踪计划——对代码库中实际追踪内容的逆向描述。这是一份事实清单,而非差距分析。

输出:.telemetry/current-state.yaml + .telemetry/audits/YYYY-MM-DD.md

前置条件

开始前检查:

  1. .telemetry/ 文件夹——如果不存在,请创建:mkdir -p .telemetry/audits
  2. .telemetry/product.md——如果此文件存在,请阅读以了解产品背景(实体模型、功能领域),从而让审计更有针对性。如果不存在,也可以继续——没有它也能进行审计,但请提示:“未找到产品模型。可以先运行 product-tracking-model-product 技能以获取更丰富的背景信息(例如,‘为此产品建模’)——不过即使没有它,我也可以审计代码库。”

**上下文继承:**如果 .telemetry/product.md 存在,请先阅读。将发现作为确认信息呈现,而不是提出新问题:“从产品模型中,我看到这是一个面向 [destinations] 的 [language] [framework] 代码库。将使用适用于 [language] 的检测模式。”只有在信息缺失或含糊时才提问。

定调:描述现状

此阶段刻意保持不作评判。输出应像一份普查,而不是成绩单。

  • “代码库在 6 个文件中追踪了 14 个事件”——好
  • “代码库缺少关键事件”——不好(应由设计阶段决定)
  • “事件名称大小写混用:认证相关事件使用 camelCase,其他事件使用 snake_case”——好(客观观察)
  • “事件名称应统一为 snake_case”——不好(这是建议)

**为什么?**审计结果是设计工作的输入。由设计决定需要做哪些更改。将观察与评判分开,能让审计结果可复用且不带偏见。

审计流程

1. 检测 SDK

询问使用的是哪种 SDK,或自动检测:

Segment: analytics.track(、analytics.identify(、analytics.group( Amplitude: amplitude.track(、amplitude.setUserId(、logEvent( Mixpanel: mixpanel.track(、mixpanel.identify(、mixpanel.people.set( PostHog: posthog.capture(、posthog.identify( 通用: track(、trackEvent(、logEvent(

从零开始的快捷处理: 如果依赖项中未检测到分析 SDK,且代码库中未发现跟踪调用,则这是一个从零开始的项目。跳过完整审计流程,并生成一个最简当前状态文件:

# Current State: greenfield (no tracking detected)
# Scanned: YYYY-MM-DD
# SDK: none

events: []
identity:
  identify_calls: []
  group_calls: []
patterns:
  naming_style: n/a
  centralized: n/a

将其写入 .telemetry/current-state.yaml,在对话中注明“从零开始 — 未检测到现有跟踪”,并建议直接使用 product-tracking-design-tracking-plan 技能(例如,“设计跟踪计划”)。无需生成审计报告文件。

对于从零开始的项目,跳过 .telemetry/current-implementation.md — 无需描述尚不存在的实现。

如果检测到 SDK,请在继续完整审计前阅读对应的 SDK 参考文档。

2. 查找所有跟踪调用

系统地扫描代码库:

# Adjust pattern for detected SDK
rg "analytics\.(track|identify|group|page)" --type js --type ts -n

对于每个跟踪调用,提取:

  • 事件名称(传递给 track/capture 的字符串)
  • 属性(同时传递的对象)
  • 文件和行号
  • 上下文(触发此调用的用户操作)
3. 验证事件是活跃还是孤立

此步骤为必做项。 对于找到的每个事件定义,都要验证它是否确实在代码库的某处被调用:

  • 活跃 — 事件函数已导入,并且至少在一处被调用
  • 孤立 — 事件已定义,但从未导入或调用

搜索每个事件函数的导入语句和调用位置。不要仅因事件已定义就假定它处于活跃状态。许多代码库会随着时间积累不再使用的事件定义。

报告每个事件的活跃/孤立状态。在审计末尾按领域汇总孤立事件的数量。

4. 查找身份管理

查找:

  • identify() 调用 — 位置、时机、包含哪些特征
  • group() 调用 — 位置、时机、包含哪些特征
  • page() / screen() 调用 — 如有
  • 重置/登出处理

对于 B2C 产品,可能不存在 group() 调用 — 这是预期情况,并非缺漏。重点关注 identify() 和事件模式。

5. 描绘当前状态

在 .telemetry/current-state.yaml 中构建逆向工程得到的跟踪计划。完整 YAML 模板见 references/output-formats.md。此文件记录事件(包括名称、状态、位置、属性)、身份管理调用以及观察到的模式。

6. 记录规范性观察(不提供建议)

如实记录有关模式的观察:

  • 重复:“不同文件中有两处 button_clicked 调用,属性结构不同”
  • 不一致:“auth 模块中的事件名称使用 camelCase,billing 模块中则使用 snake_case”
  • 调用分散:“在 23 个文件中发现跟踪调用,且没有集中封装”
  • 缺少上下文:“未发现 group() 调用 — 事件缺少账户上下文”

这些是观察,而非建议。陈述事实,不要提出修复方案。

7. 记录当前埋点架构

记录当前分析功能的接入方式——而非跟踪哪些事件(这部分已记录在 current-state.yaml 中),而是 SDK 的配置方式以及调用的路由方式。将内容写入 .telemetry/current-implementation.md。这是一个独立文件,product-tracking-generate-implementation-guide 技能会将其作为输入读取。

记录以下事实观察:

  • SDK 和版本 — 使用哪个包、哪个版本
  • 初始化 — SDK 在何处以及如何初始化
  • 客户端与服务端 — 跟踪调用在哪里发起?浏览器、服务端,还是两者都有?
  • 调用路由 — 直接调用 SDK、使用集中式封装、基于队列,还是分散调用?
  • 身份管理 — 如何发起 identify/group 调用(直接调用、登录时调用、页面加载时调用?)
  • 环境变量 — 使用了哪些配置键
  • 错误处理 — 是否有 try/catch?是否为非阻塞?
  • 关闭/刷新 — 是否进行了处理?

本节采用与审计其余部分相同的中立表述方式。描述其工作方式,而非评价其是否正确。完整模板请参见 references/output-formats.md。

8. 生成当前状态摘要

在 YAML 文件旁附上一份易于阅读的摘要。

输出

输出格式

所有输出文件的详细模板见 references/output-formats.md。

.telemetry/current-state.yaml — 机器可读的逆向工程跟踪计划。包含事件名称、状态(LIVE/ORPHANED)、位置、属性、身份管理和观察到的模式。

.telemetry/audits/YYYY-MM-DD.md — 人类可读的审计报告,包含事件清单表、身份管理摘要、观察到的模式和规范性说明。

.telemetry/current-implementation.md — 当前分析功能的接入方式:SDK 版本、初始化、客户端与服务端、调用路由、身份管理、环境变量、错误处理、关闭/刷新。

行为规则

  1. 描述现状,不做规定。 陈述已有的内容。不要说应该有什么——那是设计阶段的工作。绝不要使用勾选标记、警告图标、“优势”、“差距”或“建议”之类的表述框架。如果发现自己写了“应该”或“缺少”,请改写为客观观察。

  2. 全面详尽。 找出每一个跟踪调用。漏掉一个事件,就会导致统计结果有误。

  3. 确认每个事件都在使用。 对每个事件定义,确认其是否确实被调用。标记为 LIVE 或 ORPHANED。这不是可选项——检测孤立事件是审计的核心交付内容。

  4. 保留精确名称。 按照代码中的原样记录事件名称,包括大小写和格式。不要规范化名称。

  5. 记录观察到的属性。 将实际属性键记录为 YAML 列表:properties: [key1, key2]。不要使用 { key1, key2 } 这样的简写——输出必须是有效且可解析的 YAML。

  6. 宽泛推断类别。 可以为事件标注推断出的类别(lifecycle、core_value 等),以便整理清单,但须标明这些类别是推断所得。

  7. 确保可低成本重跑。 审计应能快速重新执行。如果代码库发生变化,只需再次运行即可。

  8. 不要读取跟踪计划。 审计记录的是实际情况,不受任何理想方案影响。如果 .telemetry/tracking-plan.yaml 存在,不要将其作为对照——该对照属于设计阶段。

  9. 写入文件,并在对话中总结。 将详细的事件清单写入输出文件。对话中只展示简洁摘要(事件数量、关键模式、孤立事件统计)。不要在聊天中粘贴超过 20 行原始数据。

  10. 审计报告只保留一份,并放在一个位置。 仅将输出写入 .telemetry/audits/YYYY-MM-DD.md。不要在其他路径创建重复文件。

  11. 直接给出结论,不展示思考过程。 静默推理。向用户展示发现,而非搜索过程。

  12. 描述有效做法。 当前实现部分应突出值得保留的模式,而不只是记录所有内容。如果现有实现使用了清晰的集中式封装,请注明这一点——实现指南应在有效做法的基础上展开,而不是从头开始。

  13. 指出分组层级的潜力。 如果代码库体现了实体关系(accounts → workspaces → projects),请指出哪些分析系统能很好地处理分组层级(Segment、Mixpanel 和 PostHog 原生支持多级分组;Amplitude 则需要变通方案)。这一观察有助于设计阶段选择合适的架构。

SDK 检测速查表

SDK模式包参考文档
Segmentanalytics.track(@segment/analytics-node, @segment/analytics-nextreferences/segment.md
Amplitudeamplitude.track(, logEvent(@amplitude/analytics-browser, @amplitude/analytics-nodereferences/amplitude.md
Mixpanelmixpanel.track(mixpanel-browser, mixpanelreferences/mixpanel.md
PostHogposthog.capture(posthog-js, posthog-nodereferences/posthog.md
Accoil通过 Segment 或直接 API@segment/analytics-nodereferences/accoil.md

审计前请阅读对应指南——每个 SDK 的身份管理、分组调用和配置模式各不相同。

根据代码库所用语言调整检测模式。 上述模式采用 JavaScript 约定。阅读 .telemetry/product.md 了解技术栈,然后据此调整:

  • Ruby: 检查 Gemfile 中是否包含 analytics-ruby、segment、ahoy_matey、posthog-ruby。搜索 Analytics.track(、Ahoy.track(。
  • Python: 检查 requirements.txt / pyproject.toml 中是否包含 analytics-python、posthog、mixpanel、amplitude-analytics。搜索 analytics.track(、posthog.capture(。
  • Go: 检查 go.mod 中是否包含分析 SDK。搜索特定 SDK 的方法调用。
  • Java: 检查 pom.xml / build.gradle 中是否包含分析依赖项。

生命周期

model → audit → design → guide → implement ← feature updates
         ^

下一阶段

审核后,建议用户运行:

  • product-tracking-design-tracking-plan — 以当前状态为依据,决定应跟踪哪些内容(例如,“设计跟踪计划”、“我们应该跟踪什么?”、“创建跟踪计划”)

评论

支持 Markdown