diff --git a/docs/superpowers/plans/2026-09-18-collection-phase-b.md b/docs/superpowers/plans/2026-09-18-collection-phase-b.md index 9a2fd8d..46fc630 100644 --- a/docs/superpowers/plans/2026-09-18-collection-phase-b.md +++ b/docs/superpowers/plans/2026-09-18-collection-phase-b.md @@ -271,9 +271,11 @@ function matchProduct(path: string): string | null { ### Task 6: Admin(时间线新事件 + 漏斗卡) **Files:** +- Modify: `server/tracker/api/visitors.py`(Step 0 时间线安全字段白名单) +- Modify: `server/tracker/tests/test_visitors.py`(Step 0 测试) - Modify: `admin/src/views/tracker/visitor/components/EventTimeline.vue`(EVENT_META 扩展) - Modify: `admin/src/views/tracker/dashboard/index.vue`(漏斗卡) -- Modify: `admin/src/api/`(漏斗 API 函数,沿 dashboard 既有 API 模块) +- Modify: `admin/src/api/tracker/dashboard.ts`(漏斗 API 函数)+ `admin/src/api/tracker/visitors.ts`(TimelineEvent 接口) - Test: Playwright 视觉验证(T6 内含) - [ ] **Step 0: server 时间线 payload 白名单扩展**(前置——timeline API 现只出 time/event_name/path/title/active_ms,不透出 properties,业务属性到不了前端):`server/tracker/api/visitors.py` 的 `_merge_page_stay`(约 178-202 行)事件序列化处,按事件名增加安全字段映射:contact_click→channel;form_start→form_id;form_submit→form_id+submission_id 前 8 位;form_error→error_code+field_count;form_submit_result→result_code;product_view→product_id+inferred(全部非 PII,OT10 白名单内字段)。test_visitors.py 加断言(新事件行带安全字段、无其他 properties 泄漏);admin `TimelineEvent` 接口(api/tracker/visitors.ts:119-127)同步字段。**先 server 测试红绿再动 admin**,随本任务 commit。