README
Yomiya 现有数据产品分析包
Section titled “Yomiya 现有数据产品分析包”这套分析只读取现有数据,不修改产品行为、首页、付费墙、Cloudflare 配置或线上数据。
- MySQL Readonly MCP:内容、阅读、收藏、讲解、推送、用户、额度和 RevenueCat webhook。
- Server Log Access MCP:首页接口 delivered impression 与后续内容打开归因。
- GA4 Analytics Data API:先调用 Metadata,再查询 Metadata 明确支持的聚合维度。
- Cloudflare D1:RevenueCat 事件的只读聚合收入。
yomiya-service与firebase-ga4-slack:字段含义、接口返回结构和查询实现。
准备好本地只读凭据后,从 Root 仓库执行统一刷新,并显式指向包含既有 MCP 本地
配置的 yomiya-service checkout:
YOMIYA_SERVICE_REPO=/absolute/path/to/yomiya-service \ node product/YomiyaProductAnalytics/engineering/yomiya-service-analytics/scripts/refresh-analysis.mjs \ --mode incremental统一入口会拉取数据、重建分析并运行独立验收。脚本只把聚合结果写入
analytics/exports/、analytics/reports/ 和 analytics/sources/。原始访问
日志、原始用户 ID、邮箱、IP、Token、服务账号私钥和数据库密码都不会写入这些
目录。
需要强制重扫所有当前可见访问日志时执行:
在同一命令中将 --mode incremental 改为 --mode full。
run-analysis.mjs 与 validate-analysis.mjs 仍可分别用于调试。验收会检查必需
文件、CSV 粒度、数据源状态、数据库只读 grant、GA4 Metadata-first、D1
rows_written=0、首页可见日志文件覆盖、增量缓存结构、逐来源观察资格、匹配
平衡、订阅时点状态、隐私小样本、来源/产物哈希和敏感信息。
若终端网络路由无法连接 Google,但受控的 Codex 应用进程可以连接,可先通过同一
exportGa4Aggregate 实现生成一个只含聚合数据的本地快照,再显式传入:
YOMIYA_GA4_AGGREGATE_INPUT=analytics/private/cache/ga4-readonly-snapshot.json \ node analytics/scripts/refresh-analysis.mjs --mode incremental该入口只接受同一 property、已完成 Metadata-first、生成时间不超过 30 分钟的
快照,并记录输入 SHA-256。文件位于 Git 忽略的 analytics/private/,不能用旧
快照绕过 GA4 实时验收,也不能包含服务账号 JSON。
- Server Log:默认只读取新增或发生变化的 access 文件。只有已完整搜索、请求响应 在同一文件内配对、且没有可解析首页响应的文件才能复用缓存。
- MySQL:继续精确重算限定窗口。购买匹配、去重用户、首次购买和 D1/D7 随访不能 在不保存用户级历史的前提下安全相加。
- GA4:每次先调用 Metadata,再精确重算限定窗口。
totalUsers不能按天直接相加, 否则会重复计算跨天用户。 - D1:聚合查询很小,每次重新执行只读
SELECT,并校验rows_written=0。
因此这里是“安全的混合增量”,不是用近似值替代精确结果。忽略目录
analytics/private/cache/ 只保存不透明文件指纹和聚合计数,绝不保存原始日志、
路径、响应体或用户 ID。第一次运行用于建立缓存,耗时可能接近全量。
也可以在 Codex 中直接调用 Root 仓库 Skill:
$yomiya-product-analytics 增量刷新全部 Yomiya 数据并总结与上次相比的变化分析代码由 Root 维护;yomiya-service checkout 只提供既有的只读 MCP 配置和
本地输出/缓存位置。不要把本目录复制回服务仓库,不要修改 Admin MCP、数据库权限
或 Cloudflare 配置。
- 首页曝光是服务端已交付的
delivered impression,不是viewable impression。 - 首页扫描当前 Server Log MCP 能列出的全部 access 文件;MCP 文件目录、匹配数和 返回字节上限继续作为明确的数据可见性边界。
- 文件名中的 90/180/365d 是目标观察窗;实际数据覆盖由
analytics/reports/analysis_context.json和data_quality.md明确说明。 - 内容表现只纳入观察窗内实际被打开、收藏、讲解、推送交付或首页交付的
VISIBLE与MEMBERSHIP_VISIBLE内容,不要求内容本身在 90 天内发布。 - 收藏、讲解、推送、阅读、购买与随访分别声明观察资格;来源窗口不完整时字段 留空,不把“尚未采集、停止更新或不可用”写成 0。
- 购买前研究使用逐购买时点 risk set:未来购买者在其购买前仍可作为对照、对照 不复用、协变量窗口不与暴露窗重叠,并输出匹配平衡与 FDR。结构性零和小样本 直接标为不可估计。
- 套餐 D30/D60/D90 只使用该时点之前已经发生的 RevenueCat 事件重建 entitlement;未来续订或重新订阅不能改写过去状态。
- 额度按“用户 × 完整周期 × 资源”输出分布,不再使用跨周期 pooled
used/limit。 - GA4 始终先读取 Metadata,只查询已确认存在的维度;套餐、付费墙触发和来源屏幕 拆分是聚合结果,不能与 RevenueCat 购买者逐人连接。
- 购买前行为与购买的统计关联不能解释为因果关系。
- attraction_score 在缺少跨内容可比较的 delivered exposure 分母时只保留描述, 不输出校准或异常内容标签。
- 不同币种收入不做未经授权的汇率换算。
- D1 低于隐私阈值的分组整行移除;只要存在被移除分组,套餐收入明确标为 partial,不表述为总收入。
- 当前 MySQL 配置为
yomiya-staging,在没有独立证明其为生产镜像前,整套结果 固定标为非决策级。