# Spec v1：内容监控自动追踪 QoL（v7.6.3）

> 业务规格 · 上游：`input_v1.md`、`monitor_common_context_v1.md`
> 状态：`spec_v1_reviewed_candidate`
> 日期：2026-09-20
> 最近修订：2026-09-22
> 版本：`v7.6.3`
> Review：`reviews/spec_v1_review.md`
> Demo 验收：`README.md`
> 适用端：WEB，Desktop First
> 产品模块：内容监控 / 自动追踪

## 0. 版本范围与公共约定

### 0.1 一句话定义

自动追踪规则支持多种频道选择来源、另存为新规则、可控暂停/恢复、7 天/30 天/长期生效期，以及保存时可选的 3/7/30 天历史补扫。历史补扫复用未来追踪的匹配、权限、异步、重试、失败、通知和任务去重语义。

### 0.2 本版本模块

| 模块 ID | 模块名称 | 优先级 | 核心职责 |
| --- | --- | --- | --- |
| M1 | 频道来源选择 | Must | 手动/Excel、收藏夹、当前项目其他规则统一选择频道 |
| M2 | 规则保存与另存 | Must | 新建、更新、另存为、另存后的立即生效确认 |
| M3 | 生命周期与生效期 | Must | 暂停/恢复、计费暂停、恢复重算、7d/30d/permanent |
| M4 | 历史补扫与多来源 | Must | 新建/另存保存时的 3/7/30 天补扫、任务去重、规则多来源 |
| M5 | 一致性与兼容 | Must | 关键词上限统一为 10、旧规则兼容、状态和来源展示 |

### 0.3 非目标

- 不做跨项目规则复制。
- 收藏夹和其他规则选择不复制关键词或短链，不自动保存规则。
- 编辑保存不能触发或取消历史补扫。
- 不提供全历史、自定义日期范围或独立历史配额。
- 不在本版本升级高于 7 天的计费规则；30 天和长期沿用 7 天计费口径。
- 不规定多来源关系使用关系表、数组或其他存储方案。
- 不新建重型自动追踪规则管理中心。
- 不把历史补扫做成用户可单独管理的另一种任务产品。
- 不为多来源新增明显扩展的详情视觉；优先使用现有内容标识和 hover Tips 承载来源说明。

### 0.4 核心名词

| 名词 | 定义 |
| --- | --- |
| 自动追踪规则 | 一个项目内的一组频道、关键词/短链匹配条件、生命周期和可选历史补扫配置 |
| 频道来源 | 把频道带入当前规则表单的方式，包括手动、Excel、收藏夹、其他规则 |
| 未来追踪 | 从规则 `startsAt` 起，只匹配之后新增内容的持续追踪 |
| 历史补扫 | 规则新建或另存保存时，向 `startsAt` 之前查询 3/7/30 天内容的可选补扫 |
| 监控任务 | 单条被监控内容的任务实体；同一内容只保留一个监控任务 |
| 规则命中关系 | 内容与自动追踪规则之间的关联；同一内容允许关联多个规则 |
| 立即生效 | 让新规则进入运行状态并开始计费/追踪；取消则保存为未生效状态 |
| 长期 | 规则没有自然到期时间；有效追踪时间内连续 7×24 小时没有新的未来命中时自动终止，仍受权限、席位、监控能力和用户停止/删除控制 |

### 0.5 全局规则

1. 收藏夹和其他规则只负责选择频道，不写入关键词、短链或规则保存请求。
2. 任何规则保存仍必须满足至少一个有效关键词，或每个频道有有效 Nox 短链。
3. 频道去重优先按 `platform + channelId`，无法取得 `channelId` 时按平台化 URL/alias 归一化。
4. 同一项目内规则名必须唯一；同名保存返回业务错误并保留当前表单。
5. 关键词产品上限统一为 10，前端和服务端必须一致。
6. 多来源只改变内容的规则命中关系和展示；不重复创建监控任务、不重复计入新增统计。
7. 历史补扫和未来追踪的权限、频道/关键词/短链匹配、内容去重和错误处理必须一致。

## 1. M1 · 频道来源选择

### 1.1 入口和表单边界

自动追踪表单保留现有手动添加和 Excel 上传，并增加两个频道选择入口：

| 来源 | 行为 | 是否保存规则 | 是否带入关键词/短链 |
| --- | --- | --- | --- |
| 手动/Excel | 选择或解析频道后加入当前待保存列表 | 否，等待用户点击保存 | 按现有表单输入处理 |
| 收藏夹 | 选择有权限访问的收藏夹及其中一个或多个平台的频道后加入当前列表 | 否 | 否 |
| 其他规则 | 选择当前项目内可见规则的频道后加入当前列表 | 否 | 否 |

来源选择完成后，用户仍停留在当前规则表单；关闭表单或取消编辑时，未保存的频道选择不写入规则。

### 1.2 收藏夹选择

- 只展示当前用户有权限访问的收藏夹。
- 一次选择一个收藏夹；同一选择流程内允许跨平台累积频道。
- 支持收藏夹内已有多平台频道数据；平台筛选和分页沿用资源夹现有能力，切换平台不清空已选频道。
- 导入结果进入当前表单的频道列表，不自动补关键词、短链、规则名或时长。
- 收藏夹频道不存在、平台缺失、权限失效或频道无法归一化时，逐条展示失败原因；成功频道仍可继续使用。
- 收藏夹频道缺少可用 Nox 短链时仍允许导入，并在当前表单标记为“缺少短链”；最终保存时按关键词或短链规则统一校验。
- 同一批次和当前表单已有频道重复时只保留一条，并展示去重数量。
- 导入结果不能绕过当前规则的关键词/短链校验和保存权限校验。

### 1.3 其他规则选择

- 只显示当前项目内当前用户有权限查看的规则。
- 支持一次选择多条当前项目规则，并将其频道合并到当前表单。
- 只复制频道，不复制关键词、短链、规则名、时长、生效期或历史补扫配置。
- 选择其他规则不会触发保存、启动、暂停或历史补扫。
- 已选择的源规则可以只读查看频道数量和频道列表；用户确认后将频道合并到当前表单。
- 跨项目规则不出现在选择列表中，也不接受通过请求参数绕过前端限制。

### 1.4 统一频道校验

统一处理：

- 平台和频道 ID/URL 归一化；
- 当前表单内重复；
- 批次内重复；
- 已删除、无权限或无法解析的频道；
- 频道数量上限和已有配额限制；
- 频道列表为空时的保存禁用状态。

频道导入成功不代表规则可保存。规则保存时继续执行关键词或短链约束。

### 1.5 收藏夹选择器的实现优先级

- 实现优先复用现有收藏夹导入组件 `../kol-next/components/email/detail/recipient/simpleResourceList.vue` 的交互模式：可搜索的收藏夹单选下拉、平台筛选/切换、分页频道表格、行选择/表头全选，以及“添加已选”和“添加全部”动作。
- 复用时只复用选择和展示交互；提交结果必须改为回填当前自动追踪规则表单的频道列表，不调用邮件收件人或推广任务的写入接口，不自动保存规则。
- 现有组件按单平台读取是实现现状，不构成自动追踪的产品约束；自动追踪导入必须允许在同一收藏夹内跨平台累积选择，提交项保留各频道自身的 `platform`。
- 复用组件若与自动追踪的跨平台选择、项目权限、频道数据结构、去重提示或未保存表单状态存在不可接受耦合，允许按同一交互复制一个自动追踪专用组件并适配；复制只承接交互语义，不复制原业务的提交、配额或文案逻辑。
- 无论复用还是复制，均必须保持单收藏夹、跨平台选择、部分频道选择、分页后已选状态和失败频道逐条反馈。

## 2. M2 · 规则保存与另存为

### 2.1 新建规则

新建规则提交前必须具备：

- 规则名；
- 至少一个有效频道；
- 至少一个关键词，或每个频道至少一条有效 Nox 短链；
- 有效 `durationMode`；
- 当前用户对项目的写入权限；
- 当前规则所需监控配额和席位校验通过。

保存成功后服务端返回新规则身份和最终 `startsAt/expiresAt`。历史补扫开关若开启，随本次新建保存进入同一追踪链路。

### 2.2 更新原规则

- 编辑态带原 `ruleId`，保存后更新原规则。
- 更新不创建新规则，不改变原规则身份。
- 编辑态的生效期和历史补扫配置只读展示，不允许通过更新动作修改当前周期或历史补扫设定；如需调整，使用“新建规则”或另存后的新规则流程。
- 编辑保存不能触发历史补扫，也不能取消原有历史补扫设定。
- 仅修改规则名、备注或频道/关键词等配置时，都不能因为编辑保存自动启动历史补扫。
- 更新失败时恢复表单原值，不刷新为半更新状态。

### 2.3 另存为新规则

- 编辑已有规则时提供“保存并更新”和“另存为新规则”两个动作。
- “另存为新规则”只出现在编辑态表单底部，与“保存并更新”并列；列表行操作组不展示另存入口。
- 另存为生成新 `ruleId`，原规则的状态、时间、频道、历史任务和已有内容关系不变。
- 新规则使用当前表单的频道、关键词、短链和时长配置；不自动复制源规则的历史补扫执行结果。
- 保存成功后追加确认“是否立即生效？”：确认则运行并按既有计费口径生效；取消则保留为未生效状态，不开始未来追踪和历史补扫。
- 新规则名称默认可建议为“原规则名 - 副本”，同名时必须由用户修改或由产品既定的唯一化规则处理。
- 生效确认失败或关闭时，不回滚已经成功创建的新规则；列表必须能展示该规则为未生效。

### 2.4 未生效规则

未生效规则是已保存但用户未确认立即生效的规则：

- 可查看、编辑、删除和再次执行“立即生效”；
- 不产生未来追踪内容；
- 不触发历史补扫；
- 不占用运行中规则席位；
- 不产生运行中计费；
- 用户再次确认生效时重新计算 `startsAt` 和 `expiresAt`。

## 3. M3 · 生命周期、生效期与计费

### 3.1 规则状态

| 状态 | 含义 | 可执行操作 |
| --- | --- | --- |
| 未生效 | 已保存但未确认立即生效 | 编辑、删除、立即生效 |
| 运行中 | 正在追踪未来内容 | 编辑、另存、暂停 |
| 已暂停 | 用户主动暂停，追踪和计费暂停 | 编辑、恢复、删除 |
| 已过期 | 规则自然周期结束 | 编辑、另存、恢复、删除 |
| 无命中终止 | 长期规则连续 7×24 小时没有新的未来命中 | 查看原因、恢复、删除 |
| 配额阻断 | 因现有配额/席位约束不能继续运行 | 查看原因、恢复/重试、删除 |
| 已删除 | 规则已删除，不再出现在默认列表 | 无 |

后端可以继续兼容现有状态编码，但必须返回足够的状态原因，不能把用户暂停、配额不足和已过期混成同一用户文案。

### 3.2 暂停

- 用户主动暂停后，规则停止产生新的未来追踪命中。
- 暂停不删除已有监控任务、规则命中关系、历史补扫结果或来源展示。
- 暂停期间计费停止；账本不得继续按运行中状态扣减。
- 暂停不会自动改变规则配置、频道、关键词、短链和历史补扫设定。
- 暂停期间如果已有历史补扫异步任务运行，按未来追踪一致的任务控制规则处理；不因暂停删除已产生结果。

### 3.3 恢复

- 恢复动作必须由用户明确触发，项目撤销归档不能自动恢复。
- 恢复时重新计算新的 `startsAt`。
- `7d/30d` 按新的 `startsAt` 计算 `expiresAt`；`permanent` 不设置自然到期时间。
- 恢复后重新开始未来追踪和计费。
- 恢复不自动重新触发历史补扫；历史补扫只由新建或另存为保存动作触发。
- 无命中终止的长期规则恢复时重新开始 7 天无命中观察期，不把暂停或终止期间的自然时间计入观察期。
- 配额/席位不足时恢复失败，保留规则和原状态，返回可解释的失败原因。

### 3.4 生效期

```text
durationMode = 7d | 30d | permanent
startsAt      = 服务端确认进入生效状态的时间
expiresAt     = 7d/30d 的结束时间；permanent 为空
```

- `startsAt` 由服务端确认，不使用浏览器时间作为最终依据。
- 7 天、30 天、长期是规则能力选择，不在本版本引入新的差异化价格。
- 30 天和长期暂沿用 7 天计费方式；高于 7 天的独立计费规则后续另行立项。
- 长期不等于永不终止，也不等于无权限、无席位或无成本约束；仍受现有运行规则数、监控能力、账号权限、用户停止/删除和无命中终止控制。
- 长期规则没有自然 `expiresAt`；规则从 `startsAt` 或最近一次恢复时间开始计算有效追踪时间。
- 新的未来内容命中当前规则并成功建立规则命中关系时，更新该规则的 `lastMatchedAt`，重新开始 7 天观察期；同一内容去重不重复刷新。
- 历史补扫命中不更新 `lastMatchedAt`，不能阻止长期规则进入无命中终止。
- 已生效规则编辑时不修改当前生效周期；生效期调整必须通过新建规则或另存后的新规则完成，避免 `expiresAt`、计费周期和运行状态失配。
- 旧规则 `monitor_duration=null` 不自动迁移为长期；按旧周期兼容解释，并在新编辑/保存时补齐明确模式。

### 3.5 长期规则的无命中终止

- 终止条件：`durationMode=permanent` 且连续 7×24 小时没有新的未来命中。
- “新增命中”以服务端完成内容匹配并建立当前规则命中关系为准，不以频道有新视频、任务重复创建或历史补扫结果为准。
- 只有采集和匹配链路完整可判定的有效追踪时间才计入连续无命中时长；平台采集失败、任务积压或数据不完整时暂停终止判断，并记录异常原因。
- 暂停期间冻结无命中计时；恢复或从无命中终止状态手动恢复后，重新开始 7×24 小时观察期。
- 自动终止不删除规则、频道、关键词、历史内容或多来源关系；释放运行中席位和运行中计费，并展示“已终止 · 连续 7 天无新增命中”。
- 后端可沿用现有终止状态编码，但必须返回独立 `terminationReason=no_hit_7d`，不能与配额阻断、用户暂停或自然过期混用。

## 4. M4 · 历史补扫与多来源

### 4.1 补扫配置

```text
includeHistorical = false | true
historicalDays    = 3 | 7 | 30
historicalStartAt = historicalEndAt - historicalDays
historicalEndAt   = 本次规则保存确认时的当前时间
```

- 用户当前只看到开关和 3/7/30 天选择。
- 内部保存起止时间，为未来开放自定义起止时间预留。
- 默认 `includeHistorical=false`。
- 未开启时不发起历史查询、不创建补扫任务、不写入补扫结果。
- 当前不对外提供自定义日期范围、全历史或独立历史任务管理 UI。

### 4.2 触发时机

| 操作 | 是否触发历史补扫 | 说明 |
| --- | --- | --- |
| 新建规则保存 | 是，且仅在开关开启时 | `historicalEndAt=startsAt`，其中 `startsAt` 为服务端确认本次新建保存的时间 |
| 另存为保存 | 是，且仅在开关开启并确认立即生效时 | 新规则独立执行，原规则不受影响；取消生效则不启动补扫 |
| 更新原规则保存 | 否 | 不能触发或取消既有设定 |
| 修改规则名/备注 | 否 | 不改变匹配范围 |
| 修改频道/关键词/短链 | 否 | 不因编辑保存自动补扫 |
| 暂停后恢复 | 否 | 恢复只重启未来追踪 |

### 4.3 匹配和窗口

- 补扫范围为规则支持的全部平台。
- 使用与未来追踪一致的频道、关键词、短链、权限和内容匹配规则。
- 历史窗口为半开区间 `[historicalStartAt, historicalEndAt)`，避免与未来窗口重复。
- 未来窗口从 `startsAt` 起计算新增内容；历史补扫只查 `startsAt` 之前的已发布内容。
- 补扫不消耗独立配额；产生的监控任务仍遵守现有监控配额、席位和项目权限。

### 4.4 执行和用户感知

- 产品上补扫与未来追踪属于同一条自动追踪链路。
- 用户感知为“立刻完成的异步任务”：保存动作成功后进入统一任务执行链路，过程对用户透明，不展示补扫专属进度或新增任务实体。
- 补扫复用未来追踪的排队、执行、重试、失败、部分成功和通知规则。
- 规则保存成功不能被补扫排队延迟阻断；只有统一任务出现问题时，任务状态允许增加一个“异常”状态，并展示可解释原因和现有重试入口。
- 补扫命中内容与未来追踪命中内容在内容任务层统一展示；如需解释历史命中，详情中展示“历史补扫”来源标识。

### 4.5 去重

- 同一平台内容只创建一个监控任务。
- 已有监控内容命中补扫时跳过新任务创建。
- 补扫和未来追踪并发命中同一内容时必须幂等，不能产生双任务。
- 内容唯一键优先使用平台内容 ID，无法取得时使用规范化 URL。
- 去重不能丢失当前规则命中关系；同一内容允许关联多个自动追踪规则。

### 4.6 多来源可观察行为

- 单来源内容展示一个自动追踪规则名。
- 多来源内容继续展示“自动追踪 · N 个规则”；hover 该标识时以 Tips 展示命中规则列表及历史/未来命中模式，不新增展开面板或详情区块。
- 来源筛选按规则关系命中：筛选某规则时，关联该规则的内容都应保留。
- 来源列表至少能让用户分辨未来追踪命中和历史补扫命中；具体数据结构由研发决定。
- 暂停、过期或删除规则不删除已有监控任务、其他规则来源或历史证据。
- 同一内容多规则命中时，监控任务数、新增内容数和系统通知按任务去重；规则明细保留多来源。

## 5. M5 · 一致性、权限与兼容

### 5.1 关键词上限

- 产品上限固定为 10 个关键词。
- 前端输入、批量导入后的表单状态、保存请求和服务端校验统一使用 10。
- 第 11 个关键词必须被拦截并展示超限提示。
- 规则编辑保存时按当前 10 个上限重新校验，不因历史规则原有字段异常而绕过限制。

### 5.2 权限

- 收藏夹选择仅显示当前用户有权限访问的收藏夹和频道。
- 其他规则选择仅显示当前项目内当前用户有权限访问的规则。
- 规则新建、更新、另存、暂停、恢复、删除和立即生效都必须由服务端重新校验项目权限。
- 客户端隐藏入口不构成权限证明；接口必须拒绝跨项目规则复制和越权生效。

### 5.3 配额和账本

- 30 天和长期不新增差异化计费规则，沿用 7 天计费口径。
- 暂停期间停止运行中计费；恢复时按新的生效起点重新开始计费。
- 历史补扫不新增独立配额，但其实际创建的监控任务仍受现有监控配额、席位和权限约束。
- 配额不足、席位不足、长期规则不允许等失败必须保留规则配置，并返回可解释原因。
- 具体账本字段、扣减时点和事务实现由研发方案确认，不能改变上述外部语义。

### 5.4 兼容

- 现有规则列表、编辑、暂停/恢复和删除入口继续可用。
- 旧规则没有显式 `durationMode` 时按旧时间字段兼容展示，不把 null 直接当长期。
- 现有内容来源单值数据升级后仍可作为只有一条来源的多来源结果展示。
- 现有通知和列表统计需要兼容多来源内容，不能因来源升级导致重复统计。
- 自动追踪真实服务端当前归属旧 `KOLServer`；新服务端迁移不在本 Spec 内默认完成。

## 6. 状态与异常处理

| 场景 | 预期结果 | 用户反馈 |
| --- | --- | --- |
| 收藏夹部分频道失效 | 有效频道进入表单，失效频道逐条列出 | 展示成功数、失败数和失败原因 |
| 其他规则为空 | 不改变当前表单 | 空态提示，无保存请求 |
| 导入频道重复 | 过滤重复频道 | 告知过滤数量 |
| 规则缺少关键词和有效短链 | 阻止保存 | 指向关键词/短链校验位置 |
| 规则名重复 | 阻止保存 | 保留表单，提示规则名已存在 |
| 另存保存成功、取消立即生效 | 新规则保留为未生效 | 不开始追踪、不补扫、不计运行中费用 |
| 另存保存成功、确认立即生效 | 新规则进入运行中 | 开始未来追踪；开关开启时启动补扫 |
| 暂停成功 | 规则进入已暂停 | 停止未来追踪，暂停计费 |
| 恢复成功 | 新周期运行 | 重新计算 `startsAt/expiresAt`，恢复计费 |
| 恢复失败 | 保留原状态和配置 | 展示配额/权限/系统错误原因 |
| 历史补扫无命中 | 规则正常运行，过程透明 | 不新增历史专属状态；无命中内容自然不出现在列表 |
| 长期规则连续 7 天无未来命中 | 规则自动终止 | 展示“已终止 · 连续 7 天无新增命中”，释放运行中席位和计费，可手动恢复 |
| 历史补扫部分失败 | 已成功内容保留，失败部分可按现有任务规则重试 | 统一任务状态显示“异常”，展示失败原因和重试入口 |
| 历史补扫与未来追踪重复命中 | 只保留一个监控任务 | 来源关系列出多个命中规则/模式 |
| 多规则命中同一内容 | 不重复创建任务或通知计数 | “自动追踪 · N 个规则” hover Tips 展示命中规则列表和历史/未来命中模式 |
| 编辑保存 | 只更新原规则 | 不触发或取消历史补扫 |

接口失败时沿用当前请求链路的真实业务错误码；前端不能用通用成功提示掩盖部分失败或生效失败。

## 7. 研发与 QA 验收条件

### 7.1 M1 频道来源

- [ ] 收藏夹可选择有权限的频道并带入当前表单，不自动保存。
- [ ] 收藏夹选择器优先复用现有 `simpleResourceList` 交互；若复制适配，交互行为与本 Spec 一致。
- [ ] 收藏夹可在同一选择流程中跨平台累积频道，切换平台不会清空已选项；提交项保留频道平台信息。
- [ ] 一次只选择一个收藏夹；收藏夹缺少短链的频道可先导入，并在保存校验时明确提示。
- [ ] 其他规则只能选择当前项目规则，只带入频道，不带入关键词/短链，不跨项目。
- [ ] 其他规则支持多选，合并频道后统一去重。
- [ ] 三种来源统一按平台和频道身份去重。
- [ ] 导入失败按频道展示原因，成功项可以继续保存。
- [ ] 关键词/短链校验仍由规则保存动作统一执行。

### 7.2 M2 保存与另存

- [ ] 新建规则的必填字段、权限和配额校验完整。
- [ ] 更新原规则不会产生新 `ruleId`。
- [ ] 编辑态表单底部并列展示“保存并更新”和“另存为新规则”，列表行操作组不重复展示另存入口。
- [ ] 编辑态显示“新建规则”入口；无未保存修改时可直接清空表单，有未保存修改时先确认再切换。
- [ ] 编辑态生效期、历史补扫开关和追溯时长只读；新建态可正常选择 7/30/长期和 3/7/30 天。
- [ ] 另存生成新 `ruleId`，原规则和已有任务不变。
- [ ] 另存保存成功后出现立即生效确认。
- [ ] 取消立即生效后新规则为未生效，不追踪、不补扫、不产生运行中计费。
- [ ] 同名、保存失败、生效失败均保留可恢复的表单和规则状态。

### 7.3 M3 生命周期与时长

- [ ] 暂停停止未来追踪并暂停计费。
- [ ] 恢复重新计算生效起点和到期时间。
- [ ] 7 天、30 天、长期都沿用 7 天计费口径。
- [ ] 暂停、过期、配额阻断和未生效的用户语义可区分。
- [ ] 长期规则在 7×24 小时有效追踪时间无新的未来命中后自动终止，且展示独立终止原因。
- [ ] 历史补扫命中、重复去重内容、暂停时间和采集失败时间不刷新或消耗无命中观察期。
- [ ] 关键词第 11 个被拦截，前后端上限均为 10。

### 7.4 M4 历史补扫与多来源

- [ ] 只有新建和另存保存会触发补扫；更新、改名、改关键词、改频道、暂停和恢复不会触发或取消补扫。
- [ ] 补扫窗口为保存确认时间前的 3/7/30 天，全平台生效。
- [ ] 补扫不消耗独立配额，复用未来追踪的异步、重试、失败和通知语义。
- [ ] 补扫过程对用户透明，不新增补扫专属进度状态；任务异常时最多增加一个“异常”状态，并沿用现有原因展示和重试入口。
- [ ] 历史补扫与未来追踪重复命中时只创建一个监控任务。
- [ ] 一条内容可展示多个规则来源；通过“自动追踪 · N 个规则”的 hover Tips 查看规则列表和历史/未来命中模式，来源筛选按关系命中。
- [ ] 多规则命中不重复计入监控任务数、新增统计或通知数量。

### 7.5 兼容与回归

- [ ] 旧规则列表、编辑、暂停/恢复、删除和来源展示继续可用。
- [ ] 旧规则 `monitor_duration` 缺失时不被误判为长期。
- [ ] 现有内容单来源数据可正常展示为单元素来源列表。
- [ ] 现有自动追踪脚本测试和相关前端单元测试通过。
- [ ] 编辑规则 A 未保存时点击规则 B，必须先出现放弃修改确认；取消后仍停留在 A。
- [ ] Drawer 宽度小于设定宽度时按视口收缩，并始终提供独立关闭按钮。
- [ ] 收藏夹和其他规则入口位于“批量添加”内容内，不再占用来源横向 Tab。

## 8. 研发确认项

以下事项不改变产品口径，但需在研发技术方案中落地：

1. 历史补扫复用现有未来追踪哪个服务端入口或任务执行器。
2. `historicalStartAt/historicalEndAt` 的持久化和查询方式。
3. 任务与规则多来源关系的具体存储和幂等约束。
4. 暂停计费、恢复重算与现有席位/账本的事务边界。
5. 另存为原子 clone 或复用新增接口的错误回滚策略。
6. 部分成功、重试和通知聚合的现有接口映射。
7. 评估 `simpleResourceList` 的复用边界；如无法安全复用，按同交互复制自动追踪专用组件并隔离业务提交逻辑。
8. 长期无命中终止需要新增或映射 `lastMatchedAt`、有效追踪时长、采集完整性和 `terminationReason=no_hit_7d`；当前服务端仅按 `monitor_duration` 固定周期计算，不能由前端单独实现。

这些确认完成后，Design 需要基于 Spec 设计来源选择器、另存生效确认、生命周期状态和多来源展示；不得在 Design 阶段重新改变本 Spec 的产品语义。

## 9. Design 与 Demo 前置约定

- 跨平台选择的视觉形态由 Design 决定，可以采用平台 Tab、平台筛选或等价方案，但必须保留跨平台累积选择语义。
- Demo 采用可运行的静态交互样例，使用脱敏/模拟数据，不写入生产接口；Demo 通过不等同于生产权限、配额、异步任务或数据覆盖已验证。
- Demo 至少覆盖：单收藏夹跨平台选择、分页保留已选、其他规则多选、缺少短链提示、另存后未生效、暂停/恢复、历史补扫异常和多来源 hover Tips。
- Design 与 Demo 不新增历史补扫专属任务页面，也不为多来源增加明显的详情展开视觉。
