个人与匿名访问
登录用户使用随机的 analytics_person_id。匿名访问使用短期 ID,登录和退出时按用途管理关联。
面向 TikHub API 升级接入新 Platform:用真实接口、账户审计、结算记录与运营流程,说明分析数据如何形成。
打开行为分析后台演示 进入架构评审 →使用边界:行为上报与分析数据仅供内部授权员工使用,不向卖家开放。
代码依据:TikHub-Platform e2ea1b8a / TikHub_API 80132ea8 · 2026-11-09。API 只提供专属接口与请求事实;账户、组织、授权、资金和运营采用新 Platform 模型。分析旁路及 API 新平台接入尚待建设与联调,页面样本全部合成。
选择场景高亮完整路径;点击任意节点,查看数据内容和边界。
| 步骤 / 时间 | 事件或处理 | 模拟数据与结果 | 流向 |
|---|
示例用于解释目标设计;真实名称取自代码,API 新平台接入与分析投影仍待建设。高亮行跟随上方播放步骤变化。
以业务问题为中心定义事件,先覆盖关键节点;现有审计、业务记录与建议新增事件分别标识。
| EVENT / 事件 | 采集时机 | 来源 | 用于回答 |
|---|
同时表达个人、组织、成员和服务身份,保留事件发生时的真实上下文。
登录用户使用随机的 analytics_person_id。匿名访问使用短期 ID,登录和退出时按用途管理关联。
组织拥有独立分析 ID。记录操作人和成员关系;切换组织不会改写历史事件。
服务 Key 和自动任务标记为 service 或 system,不会被误认为自然人。
每个事件标明可信来源和所属 App,关键事实由拥有该事实的服务上报。
保留既有 pairwise sub 的业务语义。行为数据仅供内部授权员工使用,不向卖家开放,包括其自身数据和聚合。
映射表单独保护;查看与导出需授权和审计,注销或适用撤回时按策略处理数据。
全部使用隔离环境与合成数据。第三轮补测事件导出、队列重放、完整冷备恢复与外联;点击卡片查看范围。
历史 PoC 将 A / B 命名为合成卖家;A 持项目 read 权限,可查 B 并创建读取客户端导出。无授权项目的事件查询为 403。这是权限范围测试,不是卖家产品功能。
读取客户端创建、导出及撤销均返回 200。测试凭据已撤销;账号角色由合成数据库引导,不是原生卖家角色。共享链接、缓存和全部 API 尚未覆盖。当前边界是卖家零访问:不开放任何行为数据、聚合、导出或共享入口。内部员工查询仍须服务端权限控制;卖家全面拒绝尚待 R08 验收。
Alpha 有 3 个历史事件主体,显式分配后的成员列表是 2 人。Bob 重新分配到 Beta 后,旧 Alpha 分组仍保留。
这是第二轮观察:事件标签和画像成员是两套口径。TikHub 需维护可撤销、带生效时间的权威成员关系,并保留事件发生时的组织上下文。分析分组不能作为授权来源。
暂停 Worker 后将旧合成事件送入队列,删除对应数据库行,再恢复 Worker:事件从 0 条变回 1 条。
这次由实际 Redis 队列与 Worker 重放,区别于第二轮手工重新发送。直接删除了 ClickHouse 事件和画像,没有安装持久删除标记;不是原生完整删除流程验收。接入、队列消费和恢复后都应检查独立删除登记。
备份包含 PostgreSQL、ClickHouse、Redis 三个完整数据卷及 Compose、环境和数据库配置。恢复后 269 条事件、10 条画像原始行、2 条分组记录一致,产品导出 API 返回 200。
校验 10 个备份文件后,在新目录和全新卷中启动;复用本机已固定摘要的镜像。备份包约 58.1 MiB,解包后从写卷到服务健康约 18.66 秒,仅为本机小样本。备份后已在源库删除的哨兵事件与画像恢复成 1 / 1,必须重新执行删除策略。未覆盖远程灾备、镜像重下载、加密密钥恢复及生产 RPO/RTO;本地测试包未加密且没有公开上传。
浏览器报告拦截 api.openpanel.dev/track 和 cdn.userjot.com/sdk/v2/uj.js。API、Dashboard、Worker 的 DNS、IPv4 / IPv6 TCP 与空 HEAD 出站点探测均未成功。
覆盖项目、概览、事件、画像与 Groups 页面;共收到 6 条 CSP 报告、2 个目标。容器 internal 网络未开启 IPv6,IPv6 结果不能说明双栈部署安全。CSP 报告不是完整抓包;仍需移除外部组件,验证所有页面、故障和升级路径。测试 CSP 不作为生产模板。
依据两个项目代码重建总览、5 条动态业务流、账户身份、真实群发口径、审计风险和事件依据。模拟抖音接口的 200 / 402 / 429 / 500,观察指标变化。
纯前端合成数据,尚未接入 OpenPanel 或 TikHub 后端;不发送通知、不执行风控处置。刷新重置数据。展示的是内部员工后台,不向卖家开放行为数据;持久存储、服务端鉴权和生产分析尚未实现。
| 对照项目 | OpenPanel 2.x | Umami 3.4.1 |
|---|---|---|
| 初轮合成事件 | 22 条成功接收;重发会重复 | 22 条成功接收;重发会重复 |
| 产品能力 | 画像、组织与事件界面已验证 | 三步激活漏斗为 4 → 3 → 2 人 |
| 第二轮轻量负载 | 240 条全部入库;约 20 条/秒的短时测试 | 未做同条件负载测试 |
| 资源观察 | 第二轮负载 2.45–2.47 GiB;第三轮恢复后约 1.58 GiB | 第一轮单次快照约 271 MiB |
| 第三轮完整冷备 | 三个完整卷 + 配置恢复;产品 API 可读 | 本轮未补测恢复 |
恢复后的 3 次快照仅为短时页面操作后观察,CPU 合计约 5.31–12.90%;不含宿主与 Docker VM。不同轮次与条件不可直接作为性能排名。完整冷备恢复已在本机验证,生产灾备、完整删除、全面权限与完整出站审计仍未验收。PostHog 仍只作功能参考,未部署实测。
14 项决策议题,分别列出依据、解决方案、优先级、责任角色与验收标准。
不向卖家开放上报数据、事件明细、用户画像、聚合统计、看板、查询 API、导出或共享链接,包含卖家自身主体的数据。Market 的 pairwise 身份只用于原业务身份边界,不提供行为数据读取权。
这是已确认的设计要求;技术上的“卖家零访问”尚待 R08 验收。当前公开页面仅展示合成样本与评审说明。
三种标签不互斥:验证了风险不等于修复了风险。P0 阻断本期生产接入;P1 在相应功能启用前完成;P2 为后续扩展,本页不将其计入首期范围。责任角色是分工建议,具体人选与性能阈值须由团队确认。
已核对 Platform 账户、Key、资金、运营及 API 请求事实代码。
范围:只核对两个本地仓库;不代表生产已部署或跨仓联调完成。
查看依据 →历史合成测试中,同项目 read 账号可查询和导出另一测试主体。
范围:仅覆盖所测 API。当前设计不为卖家开放任何行为数据;拒绝访问仍须验收。
查看依据 →直接删除后为 0 条,恢复 Worker 后旧事件变回 1 条。
范围:验证的是缺口;持久删除登记与产品完整删除流程尚未实现。
查看依据 →新目录、新数据卷启动成功;269 条事件等计数匹配,产品导出 API 返回 200。
范围:本机小样本;复用缓存镜像,未验证加密备份、异机灾备及生产 RPO/RTO。
查看依据 →CSP 拦截 2 个外部目标;三个应用容器的出站点探测未成功。
范围:没有完成全流量抓包;网络未启用 IPv6,不构成双栈隔离认证。
查看依据 →恢复后 3 次内存快照合计约 1.58 GiB;已有短时合成负载记录。
范围:排除宿主和 Docker VM;不能作为生产容量或与 Umami 的同条件排名。
查看依据 →模拟请求、顺序漏斗、身份筛选、场景自动播放与移动布局已检查。
范围:纯前端合成演示;没有生产采集、服务端鉴权、活动发送或风险处置。
查看依据 →展示 14 / 14 项 · 上线门槛 9 项未关闭
首期围绕 API 接入激活,建立注册到首次业务成功的转化率与耗时基线,再验证接入引导的增量效果。
漏斗与合成请求交互已演示;尚未采集真实基线,也没有验证活动收益。
给每个看板绑定业务问题、行动和负责人。先运行一个接入引导试点,设未触达对照组,同时观察持续使用、退订和投诉。
新 Platform 管账户、组织、授权、资金与既有运营;Crawler Gateway 管 Data API Key 与调用授权,API App 管接口执行;分析层负责受控副本,OpenPanel 承担分析展示。网关侧职责仍须跨仓联调确认。
已核对两个仓库的接口与事件名称。Crawler Gateway、Billing Gateway 未独立读仓,端到端接入待联调。
冻结服务责任和数据契约,打通一个真实抖音接口的身份绑定、预扣、执行、结算与分析投影;分析层不写余额,不改变现有资金协议。
HTTP 200、业务结果成功、首次激活、实际结算、充值过账和净贡献必须分别定义。当前演示的 HTTP 200 漏斗只是代理指标。
已核对 usage_events 与 funding_postings 语义;演示尚未解析真实 API 业务成功结果。
建立版本化指标字典,登记主体、分母、时间窗口、退款与冲正口径。首次业务成功使用接口契约,不以非空响应或 HTTP 状态码单独判断。
四种角色独立记录。member 的操作人与组织付款账户分开;service 不冒充自然人;员工发信不能记成收件用户的操作。
Platform 字段契约与演示身份分离已核对;可信网关绑定及分析身份映射尚未接通。
身份由服务端绑定,保留事件发生时的上下文;当前员工权限独立于历史画像。Market pairwise sub 仅保留原业务身份语义,不赋予行为数据读取权。
旧应用账户映射到新 Platform 账户必须有可信依据;不确定的历史主体保留为未关联,不能仅按邮箱自动合并。
目前只有目标设计,没有执行真实账户迁移或历史回填验证。
建立受控迁移映射,保存依据、版本和生效时间;新旧统计并行核对。首次试点可只接新事件,历史回填另设启用条件。
数据质量必须可观测;缺数据不能解释为未使用,重试也不能制造新的业务事实。
已观察重复摄入与实际队列重放行为;尚未建设 TikHub 统一幂等与对账层。
以来源 + 稳定事件 ID 去重,区分发生与接收时间,版本化字段规范;建立权威事实对账、缺口补采、延迟与死信监控。展示数据水位。
业务请求不得同步等待 OpenPanel。分析副本从已提交事实异步形成,现有资金协议保持独立。
没有对真实 API / Platform 组合做断网、满盘、积压或性能影响验收。
设计有界缓冲、重试退避与积压告警;可重建事实允许补采,低价值交互按明确策略采样或丢弃并计数。分析失败不触发重复扣费。
用户已确认:行为上报与分析数据仅供 TikHub 内部授权员工使用,不向卖家开放,包含其自身主体的数据、聚合、画像与导出。
产品边界已确认。历史 read 账号越界测试仅说明共享项目权限范围,不代表已经验证卖家全面拒绝。
不创建卖家分析角色、项目凭据或共享入口。TikHub 服务端只接受明确授权的员工身份,逐次控制数据范围、字段和导出;普通业务账户、卖家会话与卖家 App 凭据默认拒绝。
自托管和密文上报不能单独证明安全。浏览器事件仍可能伪造,业务关键事实必须来自可信服务端。
已拦截厂商上报和第三方脚本的部分尝试;还未完成全页面、宿主、升级与故障路径的出口验证。
来源端字段白名单;传输和存储使用成熟加密机制,身份映射与密钥分离;移除不必要外部组件,采用明确出站允许列表。公开 Cloudflare 页面只展示合成内容,真实后台单独保护。
本次已复现直接删除记录被队列与旧备份带回。删除登记必须独立持久,覆盖分析数据的完整生命周期。
已验证重放和恢复会重引入记录;这两项是已知缺口,不是删除能力通过验收。
记录不可被普通数据快照回滚的删除标记,在接入、消费、回填、导出与恢复时检查;恢复先隔离、清理、核验再开放。资金和安全原始记录按各自保留策略处理。
never_used 是付款账户口径,不等于成员没有调用 API。自然人激活、组织使用和账户消费需要独立人群定义。
已核对现有受众条件、退订复核和 sent / failed;没有真实点击与增量归因链路。
人群只作候选,发送前由 Platform 重验资格、订阅和权限;按合适主体保留对照组。sent、点击、业务成功和净贡献分开统计。
将平台规则映射为有证据的调查线索,首期人工复核。HTTP 429、单次登录失败或创建 Key 不单独等同于违规。
已有审计词表与敏感操作分类已核对;没有验证真实检测准确率、案件流程或处罚能力。
规则包含版本、适用范围、证据窗口与例外;记录调查过程、结论和复核人。既有鉴权与限流独立运行;自动处罚不在本期范围。
1.58 GiB 快照与 18.66 秒本机恢复仅是小样本观察,不能直接形成生产预算或恢复承诺。
完整冷备已在本机新目录与新卷恢复;缺生产负载、镜像重获取、备份加密、异机及密钥恢复。
按日量、峰值、载荷、保留周期、查询并发和备份份数估算容量。分用途保留与聚合;隔离分析资源,补齐异机恢复和积压追赶。
TikHub 保有事件规范、身份映射和受控数据副本,通过适配层接入分析组件,避免关键业务依赖专有查询模型。
当前仍是候选评估;没有完成组件替换演练、完整许可证评审或人员责任分配。
优先适配而非深度分叉。固定版本并检查许可证、依赖、外联和迁移变更;指定端到端后端负责人,各来源维护事件契约。高级分析能力按收益进入 P2。
没有匹配议题,请调整筛选或搜索词。
确认内部使用边界、业务目标、职责与指标字典。证据:责任人和评审记录。
隔离预发布环境接通一个真实接口。证据:身份、请求、结算、分析副本关联及对账。
逐项验证权限拒绝、故障隔离、出口、删除与灾备。证据不足的项目保持未关闭。
通过 P0 后接入受控真实数据;首次触达前完成 R11,有对照组并观察负面影响。
P1 议题仍有自己的启用前置条件:历史回填看 R05、运营发送看 R11、风险调查看 R12、组件生产采用看 R14。高级自动化与自动处罚不在首期交付范围。
从内部员工权限开始。依赖、代码模块、责任角色与验收结果逐项可查。
员工身份 → 动作权限 → 数据 / 字段范围 → 受控查询与导出。卖家在每个入口都拒绝,包括自身数据及聚合。
Platform e2ea1b8a / TikHub_API 80132ea8;核对工作区代码,未验证生产部署。Crawler Gateway、Billing Gateway 尚未独立读仓,跨仓接口须负责人确认。
开发拆解与验收提案;22 项任务均待实施,不代表业务代码已修改或生产权限已生效。
阶段表达交付顺序;每张任务卡的“前置任务”才是精确依赖。T05 / T19 可与权限开发并行;T04 在早期用合成数据验证,在 T14 / T15 完成后必须重跑最终拓扑。
| 评审门槛 | 开发任务 | 关闭条件 |
|---|---|---|
| R08内部权限 / 卖家零访问 | T01 · T02 · T03 · T04 · T22 | T14 网络旁路与 T15 删除查询闸完成后重跑全矩阵 |
| R02职责与单接口联调 | T05 · T11 | Crawler / Billing Gateway 跨仓契约与试点资金链确认 |
| R03指标与资金口径 | T06 · T18 | 边界样本和权威事实对账无未解释差异 |
| R04可信身份 | T07 · T10 | 客户端不能声明高信任主体,历史上下文不漂移 |
| R06幂等与质量 | T09 · T13 | 重复、乱序、缺口、毒消息和不可用状态可观测可处理 |
| R07业务故障隔离 | T12 · T17 | 故障期间资金一致且满足事先批准的 API 增量预算 |
| R09安全 / 加密 / 外联 | T08 · T14 | 生产者授权、篡改 / 重放、白名单和实际出口覆盖 |
| R10删除与恢复不复活 | T15 · T16 | 旧队列 / 回填 / 旧备份均不重新暴露适用数据 |
| R13容量 / 成本 / 灾备 | T19 · T20 · T21 | 批准预算、代表性负载和包含密钥 / 登记的异机恢复达标 |
已有 KindStaff、StaffSessionAuthenticator、团队 grants、MFA 闸及 Owners *。现有 Constraints 主要服务资金与公告,不能直接假定支持分析行级范围。
默认不向现有普通团队自动授予分析权限。分别控制聚合、明细、身份映射、导出;导出不能单独代替读权限。Owners * 沿用动作权限语义,但分析范围仍须显式配置,缺失 / 格式错误一律拒绝。兼任卖家的员工只能凭独立员工会话和授权访问。
internal/platform/service/authz/catalog.go修改:登记 behavior.read、behavior.detail.read、behavior.identity.read、behavior.exportinternal/platform/service/authz/constraints.go参考现有语义;不把资金的 nil=无限套用于分析internal/platform/service/authn/staffsession.go复用:每次解析会话、员工状态和当前 grantsinternal/ops/service/behavior/policy.go拟新增:动作权限 AND 数据范围 AND 字段策略db/migrations/behavior1_access_policy.py拟新增:员工 / 团队分析范围、策略版本及审计字段应提交证据 权限矩阵、数据库迁移回退说明、策略单测及真实会话组合根测试。
定位任务 T01 ↗ops requireStaff 先检查 KindStaff;gateway 的 bmux 外层处理员工会话和 MFA。前端已有 routePerms / RequirePerm,但它们只控制界面。
第一版使用合成仓储实现。真实接入时只允许服务端访问 OpenPanel,员工浏览器不持有项目读密钥,不转发任意 SQL / 厂商 RPC。结果总数、筛选候选、明细、画像全部在受限范围内计算;Cache-Control: no-store,禁止 CDN 缓存真实数据。厂商原生 UI 留在单独运维网。
internal/ops/api/staff/routes.go修改:登记拟新增 /admin/behavior/* 固定查询接口和权限契约internal/ops/api/staff/deps.go复用 requireStaff;新增处理器仍逐项执行策略internal/bootstrap/gateway.go修改:只挂员工 bmux,不挂公开或卖家路由internal/bootstrap/behavior.go拟新增:策略、查询适配器、凭据注入web/admin/src/routePerms.ts修改:新增行为分析入口权限web/admin/src/App.tsx修改:挂接员工页面;同时调整 components/shellNav.tsinternal/ops/service/behavior/query.go拟新增:固定查询模板、字段投影和查询预算应提交证据 拟新增 internal/bootstrap/behavior_access_e2e_test.go;make openapi 后执行 make openapi-check;前端路由回归。
定位任务 T02 ↗auditq 有导出上限;opsaudit.Record 故意吞掉写入失败,适用于已完成业务改动的事后记录,不能直接承担敏感读取的失败关闭。kernel/audit.Sink.Record 会返回错误,可用于新增严格审计适配器。
导出须基础读取权限、相应明细权限和 behavior.export,并受同一范围 / 字段策略约束。限定行数、时窗、并发和 TTL;加密临时文件,仅通过员工鉴权下载端点读取,不发长期公网直链。执行及下载时重读当前权限和删除版本。身份查询 / 导出先通过严格审计适配器持久记录访问意图,再放行数据并补记结果;审计失败、nil 或生产误装 Nop 均拒绝。
internal/ops/service/auditq/auditq.go参考现有导出限额和字段处理internal/ops/service/opsaudit/opsaudit.go只复用归因格式,保留原业务事后审计语义internal/kernel/audit/audit.go复用返回 error 的 Sink 契约,生产不得装配 Nopinternal/ops/service/behavior/audit.go拟新增:敏感读取前持久记录,失败则拒绝放行internal/ops/service/behavior/export.go拟新增:导出创建 / 执行 / 下载三次授权internal/ops/service/auditrisk/auditrisk.go修改:登记 behavior 查询、身份解映射、导出与拒绝动作web/admin/src/auditActions.json修改:对应新审计动作名称应提交证据 异步导出撤权测试、审计失败测试、缓存 / 下载链接测试;T03 未验收时整个导出功能保持关闭。
定位任务 T03 ↗历史 OpenPanel 同项目读取测试说明项目密钥范围宽;不是当前卖家拒绝能力的证明。
覆盖匿名、个人、组织成员、组织服务 Key、卖家会话、卖家 App 内部 Key、普通员工、授权员工、撤权员工,以及同一人同时持有卖家与员工身份。禁止看板、明细、画像、聚合、总数、facets、导出、共享链接和 OpenPanel 直连旁路。
test/e2e/staff_test.go参考现有员工 e2e 模式internal/bootstrap/staff_sso_separation_e2e_test.go参考员工 / 用户身份分离用例test/e2e/behavior_access_test.go拟新增:全部入口 × 全部主体矩阵internal/platform/service/authz/firstparty.go核对卖家 App 不能获得分析机器权限应提交证据 矩阵 CSV、请求响应脱敏证据、网络不可达记录;拒绝矩阵必须进入后续升级回归。
定位任务 T04 ↗Platform 已有内部机器接口、账户 / 组织、资金事实;API main.py 仍含旧 AuthManager 扣费路径,不能作为升级目标。
Platform 管账户、组织、员工权限和资金协议;Crawler Gateway 管 Data API Key / 调用授权,API 管接口执行结果;分析系统仅消费受控副本。确认 request_id / reservation_id / event_id 关联、身份传递、调用超时及重试责任。Gateway 仓库待补核,是联调阻塞项。
docs/reference/36_apps_api_draft.md核对内部 App、预扣 / 结算及事件契约docs/reference/35_funding_api.md核对资金过账与冲正权威来源internal/platform/api/machine/keyevents.go核对 Data API Key 创建报告契约app/main.py标注旧鉴权 / 扣费替换边界,不在本轮改写auth/AuthManager.py核对当前调用方;迁移切换方案另行评审应提交证据 跨仓契约签字记录、接口 fixture、旧新切换和回退开关说明;不是一次性全量 API 迁移承诺。
定位任务 T05 ↗douyin_web 分享链接接口明确:作品已删除 / 受限仍可 HTTP 200 并正常计费;usage_events 一行是已结算事实,零价也写。
分别计请求完成、可用作品结果、首次可用结果、已结算金额和充值过账。合法空结果按接口定义分类,不默认失败、不倒改扣费;analytics.api.first_success 的分母、主体、窗口和成功版本须产品批准。
app/api/v1/endpoints/douyin_web.py核对 fetch_one_video_by_share_url 的 filter_detail 语义app/api/v1/models/APIResponseModel.py核对 HTTP / 业务字段,避免把 code=200 当统一可用结果internal/money/store/usage_rows.go权威结算列契约internal/money/store/funding_postings.go权威充值 / 冲正事实internal/ops/service/behavior/metrics.go拟新增:版本化指标规则应提交证据 指标字典、版本化 golden fixtures;最终账实对账由 T18 验收。
定位任务 T06 ↗Principal 区分 user / staff / service / account_key;UsageRow 区分付款 account_id 与 member actor_account_id。历史行可能缺 actor 信息。
记录 actor_kind、person_ref、payer_ref、org_ref、service_ref、app、subject_ref 与事件发生时成员关系。浏览器只能提交交互字段;服务端从当前会话绑定人和组织,服务间从已验证调用上下文绑定。账户 ID 不使用邮箱生成,映射表与事件库分开保护。
internal/kernel/authn/principal.go复用认证主体,避免浏览器自行声明身份internal/money/store/usage_rows.go读取付款 / 操作人字段;未知历史主体保留 unknowninternal/platform/store/marketid/marketid.go保持 pairwise sub 业务语义,不授分析权限internal/ops/service/behavior/identity.go拟新增:按来源校验可信上下文与假名映射db/migrations/behavior2_identity.py拟新增:用途隔离映射、版本与删除关联应提交证据 身份映射迁移、合成身份 fixture、组织切换 / 成员移除 / 注销再注册测试;历史回填继续受 R05 限制。
定位任务 T07 ↗已有 internal key、first_party scope 限制、App 事件 HMAC 和资金签名。资金 reqsig v1 明确不存 nonce;不能宣称现有签名已经防重放。
TLS 保护传输,内部调用另校验工作负载身份与 producer→App→事件族绑定。选择成熟 HTTP 消息签名实现 / 明确协议,绑定方法、目标、body digest、kid、时间、nonce;每次投递生成新 nonce,事件 ID 在重试中稳定。密钥不下发到浏览器,不与资金 / App 回调密钥共用。
internal/platform/service/authz/scopes.go修改:拟新增专用 behavior:write scopeinternal/platform/service/authz/firstparty.go修改:只给批准的第一方生产者;读权限不随写权限授予internal/kernel/httpx/reqsig.go参考签名绑定方式,保留资金既有协议不变internal/platform/service/appevents/sign.go参考原文字节验签和轮换;不是直接通用化现有协议internal/ops/api/behavior/ingest.go拟新增:独立内网入口、生产者和事件族白名单internal/ops/service/behavior/signature.go拟新增:标准签名适配及原子 nonce 存储应提交证据 篡改 / 重放 / 轮换负向测试、生产者权限表;凭据泄露演练与撤销路径。
定位任务 T08 ↗keyevents 已采用事件 ID 与内容冲突检测;App outbox 保持同一事件原文。分析层尚无统一 durable inbox。
只在持久接收事务提交后回 accepted;先验身份 / schema,再进行去重。同 ID 同内容重试返回既有接收结果,同 ID 不同内容返回冲突并隔离。未知版本 / 事件 / 字段拒收;occurred_at、received_at 分开,晚到规则独立于签名时间。
internal/platform/service/keyevents/keyevents.go参考 duplicate / idempotency_conflict 语义,不复用通知业务表internal/kernel/httpx/strictjson.go复用严格键校验;动态 properties 还需独立 schema 校验internal/ops/store/behavior/inbox.go拟新增:唯一键、内容哈希和原子接收db/migrations/behavior3_inbox.py拟新增:(producer, event_id) 唯一约束及投影状态应提交证据 并发 / 崩溃窗口测试、冲突样本、去重保留与回填最长窗口说明;不宣称跨系统 exactly-once。
定位任务 T09 ↗当前两个公开页面不采集真实行为。前端代码和用户设备由用户控制,无法保存一个对用户保密的永久签名密钥。
首期只收 ui.api_docs.viewed、ui.api_key.copy_clicked、ui.campaign.clicked 等提案事件;不收完整 DOM、响应正文、按键、Key、Cookie、完整分享 URL。登录态由服务端绑定;匿名不自动关联真实账户。客户端声明的 paid / settled / staff / identity 不能提升信任级别。
web/account/src/api.ts复用同源会话 / CSRF 调用模式web/account/src/behavior.ts拟新增:白名单体验事件与批量上限internal/platform/api/account/behavior.go拟新增:同源接入、会话绑定、CSRF、schema 与配额internal/ops/service/behavior/ingest_browser.go拟新增:强制 trust=client_claimed,隔离关键事实应提交证据 拟新增浏览器采集契约测试与 Playwright 合成用例;API 文档站不在当前前端仓库时由其负责人补接。
定位任务 T10 ↗API middleware 生成 request_id 并记录 access.log;分享链接接口有明确结果语义。该日志包含邮箱、IP 和 query,不可整条直送 OpenPanel。
隔离预发布先以替身上游测试,再由负责人批准有限真实端点联调。API 记录 api.request.completed(拟新增),可用结果单独分类;资金事件只从 Platform 结算 / 过账事实取。Crawler / Billing Gateway 代码未核对前不宣布端到端完成。
app/main.py修改:从新平台上下文提取白名单执行事实;切断试点的旧扣费分支app/api/v1/endpoints/douyin_web.py修改:为分享链接端点产出结果分类,保留业务返回契约app/utils/logging_setup.py参考现有异步日志;普通日志队列不是可靠事实队列app/analytics/platform_adapter.py拟新增:可信上下文、request_id / reservation_id 关联和有界提交internal/money/store/usage_rows.go只读权威结算投影,不修改资金列契约应提交证据 跨仓 staging trace、脱敏输入输出、每分支资金对账;此任务不是全量升级完成。
定位任务 T11 ↗App app_events 是面向指定 App 的业务 outbox;资金 bill:ch_retry 由资金回灌器消费。二者都不能被分析消费者争抢。
首期从已提交权威事实读取,独立检查点、重叠扫描 / 对账修补提交乱序,不靠 MAX(id) 假定提交顺序。浏览器信号走独立 inbox。限制每批读取和积压,禁止业务请求同步等待 OpenPanel;分析不能写余额或发起结算。
internal/platform/store/appevents/outbox.go参考事务内 outbox,不扩大原外发收件范围internal/money/store/ch_drain.go保持资金回灌独占;分析不消费 bill:ch_retryinternal/ops/service/behavior/projector.go拟新增:已提交审计 / 结算 / 过账增量投影internal/ops/service/behavior/openpanel.go拟新增:映射、限并发、重试和组件替换边界cmd/worker/main.go修改:独立分析任务开关及预算,或独立部署进程应提交证据 投影检查点测试、独立最小数据库权限、适配器兼容与重复投递报告。
定位任务 T12 ↗bulk_audience_ch 在用量源不可用时返回错误,不把缺数据解释为 never_used;应保持这一语义。
记录 source_count / accepted / duplicate / rejected / projected、延迟和死信原因;低价值丢弃显式计数。补采有审批范围、速率和删除检查。不要把 IP、event_id、用户 ID 当 Prometheus 标签。
internal/ops/store/bulk_audience_ch.go保持 fail-closed;分析派生人群不能绕过它internal/ops/service/behavior/quality.go拟新增:水位、丢弃 / 拒绝 / 冲突 / 延迟、重放治理deploy/prometheus/alerts.yml修改:新增受控基数的分析告警web/admin/src/pages/behavior/Quality.tsx拟新增:数据截至时间及不完整状态应提交证据 质量看板、告警触发截图、缺口补采与死信演练、有限标签检查。
定位任务 T13 ↗API 日志是疑似敏感 query 掩码,不是分析白名单;PoC 仅发现 / 拦截部分外联,未完成全面抓包。
OpenPanel、PG、ClickHouse、Redis 不对卖家或公网开放;业务员工仅通过 TikHub 查询层。身份映射独立权限和密钥。TLS + 静态数据 / 备份加密 + KMS 轮换,禁止自制密文协议和把加密钥匙写进 JS。Cloudflare 公共演示只放合成数据;若生产经 TLS 终止代理,明确代理能看什么,按需要选择端到端应用层加密。
app/main.py新增分析专用白名单,不能复制原 user / query / IP 字段internal/ops/service/behavior/redact.go拟新增:显式字段 / 类型 / 长度策略,错误日志同样脱敏deploy/behavior/拟新增:私网、出口允许列表、DNS、TLS、备份与密钥配置模板internal/platform/service/appevents/dial.go参考现有受限连接思路,不自动改变业务 App 回调路由应提交证据 字段清单、网络抓包摘要、密钥轮换 / 撤销记录、生产与公开演示资源隔离说明。
定位任务 T14 ↗identity 删除流程已有同事务 account.deleted 事件;PoC 证明旧队列与旧备份会使直接删除的分析记录回来。
删除先记入独立持久登记,接入、消费、补采、查询、缓存和导出均检查;登记不能随旧分析快照回退。即时阻止可访问数据,再按批准期限清理物理副本;持有最小删除标识以阻止复活。资金 / 安全原始记录按各自保留规则处理,不承诺全部擦除。
internal/platform/service/identity/deletion.go读取注销事实,核对通知接入点;不破坏原删除流程internal/platform/service/appevents/emit.go核对生命周期事件,不向卖家扩展分析内容internal/ops/service/behavior/deletion.go拟新增:删除登记、查询屏蔽、物理清理及传播db/migrations/behavior4_erasure.py拟新增:删除范围、版本、截止时间与执行凭据应提交证据 删除状态机、竞态测试、适配器清理回执、缓存 / 导出撤销与保留策略。
定位任务 T15 ↗冷备已在本机新卷恢复,但源端后续删除没有自动应用到旧备份。
恢复到无外发、无业务读取的隔离实例;恢复最新独立删除登记,重放快照之后的删除,再清理所有适用副本、缓存和导出。保存备份目录、校验和、登记水位与验证结果后才可开放。
deploy/behavior/restore/拟新增:隔离恢复、登记版本检查、清理与开放步骤internal/ops/service/behavior/readiness.go拟新增:恢复 / 删除校验通过前拒绝查询test/poc/behavior_analytics/新增删除后队列重放及旧备份恢复回归用例应提交证据 可复跑 runbook、独立登记恢复证明、开放前校验报告。
定位任务 T16 ↗普通 access.log 的内存队列有容量上限,不能推导出持久可靠分析;当前尚无真实链路故障验收。
注入 OpenPanel 停机、网络超时、队列满、磁盘满、nonce 库失联、投影进程崩溃和权限库失联。分析读 / 写拒绝按各自策略处理;业务与资金仍沿既定保护运行,关键事实从权威存储补采,不把分析失败作为再次扣费理由。
test/perf/使用 T19 修复后的 harness 增加分析 on / off 对照internal/ops/service/behavior/projector.go前置任务拟新增模块:验证并发 / 超时 / 熔断 / 限额app/analytics/platform_adapter.py前置任务拟新增模块:验证故障时有界缓冲、丢弃计数与可重建来源test/e2e/behavior_fault_test.go拟新增:资金不变量和分析故障联合检查应提交证据 故障矩阵、业务基线与资金对账、积压追赶曲线及降级验证。
定位任务 T17 ↗请求日志与已结算用量分属不同语义;资金过账不能由点击或前端 paid=true 推导。
将同一事件窗口按操作人、付款账户、App、接口、币种单位逐层复算。区分延迟、缺失、去重、退款、冲正和 unknown;分析数字不得回写账本。
internal/ops/service/behavior/reconcile.go拟新增:请求、结算、过账及派生指标对照internal/money/store/usage_rows.go只读权威数据internal/money/store/funding_postings.go只读充值 / 冲正事实app/api/v1/endpoints/douyin_web.py提供接口结果 fixture应提交证据 可重跑对账脚本、差异报告、产品与资金口径验收。
定位任务 T18 ↗test/perf/README.md 明确旧 /crawler/v1 harness 已失效,须适配 /internal/v1;现有 1.58 GiB 与 18.66 秒只代表本机小样本。
先定真实业务量级的目标模型,再测分析开 / 关基线。只使用专用隔离 perf 栈和合成账户;分别记录容器、Docker VM / 宿主、索引、备份、出口与运维成本。容量 / RPO / RTO 数字由团队批准,缺值视为未通过。
test/perf/loadgen/platform.go修改:以现行预扣 / 结算契约替换旧调用test/perf/perflib/seed.py修改:新 App / scope 与隔离样本 seedtest/perf/README.md更新可复跑前提与范围deploy/behavior/capacity.json拟新增:日量、峰值、载荷、保留期、成本及 RPO/RTO 目标应提交证据 修复后 harness、基线报告、批准的容量与灾备目标。
定位任务 T19 ↗各轮 OpenPanel / Umami 资源观察条件不同,不能作为生产成本排名。
同时测试服务端事实、浏览器突发、员工查询和导出,采用有基数差异与最大载荷的合成样本;控制并发和保留期,先削减低价值交互,保护权威事实。
test/perf/新增 ingest + query + export + backlog 组合负载deploy/behavior/前置任务拟新增模块:设置独立 CPU / 内存 / 连接 / 存储预算internal/ops/service/behavior/quality.go前置任务拟新增模块:提供延迟、丢弃、积压和高水位观测应提交证据 资源时间序列、增长模型、成本表、限流 / 降级触发与恢复记录。
定位任务 T20 ↗三卷冷备能在本机恢复,但未验证异机、镜像重获取、KMS 与删除登记一起恢复。
从没有缓存镜像的新环境开始计时,包含镜像、版本化配置、PG / CH / Redis、凭据恢复与密钥可用性、最新删除登记、队列及关键业务查询。备份密钥与备份介质分离。组件生产采用仍需 R14 许可 / 维护评审。
deploy/behavior/backup/拟新增:加密、清单、校验和、保留与密钥版本deploy/behavior/restore/前置任务拟新增模块:扩展异机恢复和旧版本回退test/poc/behavior_analytics/新增完整恢复验收记录模板应提交证据 异机演练、恢复计时分段、密钥恢复、权限和删除回归报告。
定位任务 T21 ↗公开蓝图与 MVP 只承载合成样本,没有服务端鉴权或生产采集。
先开放内部少量授权员工和一个批准的 API 场景,保留立即关闭采集 / 查询的独立开关。按九项 P0 对照证据签字;R11 的真实运营发送、R12 风险调查和 R14 组件采用继续保留各自前置条件。
internal/bootstrap/behavior.go前置任务拟新增模块:默认关闭真实采集和查询,按验收条件启用docs/planning/behavior-review.json附验收证据后才更新门槛状态test/e2e/behavior_access_test.go前置任务拟新增模块:在最终预发布拓扑重跑拒绝矩阵应提交证据 上线评审记录、内部授权名单、灰度范围与回退演练;真实用户数据不上公开 Cloudflare 演示。
定位任务 T22 ↗没有匹配任务。请调整阶段、门槛或关键词。
以上模块名中“拟新增”表示设计建议,当前仓库尚不存在。已有路径均已核对;新增测试名称和执行方式是验收计划,不是本轮已经运行的生产测试。
不能阻止用户控制自己的设备。目标是让改包不能变成越权、资金事实或自动处罚。
页面浏览、复制 Key、活动点击。可能被拦截、伪造或刷量;不单独驱动钱、资格与处罚。
API 执行、Platform 审计、结算与过账。身份来自可信上下文,生产者只能写允许的事件族。
激活、漏斗、人群和风险线索。保留来源、规则版本和完整性;真实行动前再验证资格。
设计推演 · 合成输入与预期结果,不调用真实接口。切换场景自动播放;启用系统“减少动态效果”时按静态步骤阅读。
先讲业务与边界,再用真实接口解释,最后确定负责人和验收门槛。
这套系统先解决 TikHub API 接入新 Platform 后的三个问题:用户卡在哪一步、哪些账户需要内部运营跟进、哪些异常值得人工调查。它只供 TikHub 内部授权员工使用。卖家不能看行为明细、聚合、画像和导出,包括卖家自己的行为数据。公开演示全部是合成样本,生产采集和权限还没有落地。
我们不从一张漂亮看板开始接真实数据。第一批四个任务先复用员工会话、团队权限和 MFA,再补分析数据范围、受控查询、导出撤权和拒绝测试。隐藏菜单没有安全作用,后台接口必须逐次判断当前员工身份和授权。OpenPanel 放在私网,只由 TikHub 服务端查询。普通用户、组织 Key、卖家会话或卖家 App Key 都不能获得读取权。
我们不能阻止用户查看和修改自己设备发出的请求,也不能把永久秘密藏在 JavaScript 里。我们的目标是:即使抓包、改包和重放,也不能越权、改余额、制造充值、骗取活动资格或直接触发处罚。浏览器只报告低信任体验信号;身份由服务端绑定,资金和业务结果来自拥有事实的服务。服务间再用 TLS、工作负载身份、签名、时间窗和 nonce 防篡改重放,用稳定事件 ID 防重复统计。加密保护机密性,签名保护来源与完整性,两者都不自动证明业务内容真实。
以 /api/v1/douyin/web/fetch_one_video_by_share_url 为例。用户打开文档、复制 Key,这些是可缺失、可伪造的前端线索。真正调用接口后,API 记录执行结果,Platform 提供可信操作人、付款账户和最终结算。这个接口对已删除或受限作品也可能返回 HTTP 200 并正常计费,所以请求完成、取得可用作品、首次激活、实际扣费必须分开统计。浏览器把点击改成已充值,不会进入资金事件入口;把组织改成别人,也不能改变服务端绑定的归属。
按依赖执行 22 个任务:内部访问边界;职责、指标与身份;一个 API 的服务端闭环;质量、出口与删除;最后故障、负载和异机恢复。每项都有代码模块、责任角色和可复现验收。验收不仅看成功请求,还要停 OpenPanel、撤销员工、重复消息、制造篡改、恢复旧备份。分析故障不能影响资金;删除过的数据不能在重放后回来。现有签名和日志可借鉴,但防重放、可靠分析队列和新的压测链都需要补建。
请确认第一批 T01 至 T04 的负责人,同时让 Platform、API、Crawler Gateway 和 Billing Gateway 负责人确认契约。产品确定可用结果和首次激活的口径,运维与业务共同批准容量、性能增量、保留期、成本及 RPO/RTO 目标。九项 P0 目前都未关闭;只有测试证据和责任人验收齐全,才开放内部受控真实数据试点。运营自动触达和风险处置另有启用门槛,不随看板上线自动开启。
① T01–T04 负责人和首批权限矩阵 ② 四个服务的契约负责人 ③ 可用结果 / 激活口径 ④ 容量、性能、保留与灾备目标。
不在本次静态页面直接批准上线。22 项任务和 9 项 P0 当前均未验收关闭。
先验证产品和数据边界,再逐步建设 TikHub 专属能力。
合成数据测试 OpenPanel 与 Umami,检查功能、身份适配、外联及资源。
建设事件规范、接入、脱敏、身份映射和可靠投递,不进入资金热路径。
展示核心漏斗,连接现有员工权限、站内活动、邮件订阅与退订。
补齐规则告警、人工复核、备份恢复、删除和权限审计后评估上线。