ReadViewSDK/.claude/skills/discuss-feature-solution.md
2026-05-21 19:40:51 +08:00

287 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
name: "Discuss SDK Feature Solution"
description: "方案讨论优先 skill用于 ReadViewSDK 新需求的实现方案分析、路径对比、取舍沟通、已定方案细化和实现交接。"
argument-hint: "粘贴需求、目标模块、约束、已知备选方案;可附加:是否已确定方案 / 是否需要推荐方案 / 是否需要落方案文档。"
---
# Discuss SDK Feature Solution
## Purpose
面向 ReadViewSDK 的"实现方案讨论入口" skill。
用于在正式开发前,先把需求、约束、可选实现路径和关键取舍聊透;若方案已经确定,则只围绕已选方案继续细化,再交接给开发 skill 进入实现。
该 skill 借鉴 spec-driven 工作流思想:讨论阶段专门捕获灰区决策,计划阶段必须经过代码 / 文档事实核验,最终输出能直接喂给开发 skill 的结构化方案文档,避免"聊完还是不能开发"。
该 skill 的职责固定为:
- 先理解需求与约束
- 捕获灰区问题和实现假设
- 用现有代码 / 文档核验方案可行性
- 未定方案时:输出 2-4 个可行实现方案,并做对比
- 已定方案时:只围绕确认方案展开实现讨论,不再继续扩展其他方案
- 最后给出交接到开发 skill 的明确指令
- 最终必须产出一份可直接供开发 skill 使用的开发详细文档,或一段可直接执行的开发详细描述
## Core Discussion Rules
- Rule 1 — Think Before Coding
- 在提出方案前先核对代码和文档事实,不静默假设
- 必须显式写出关键假设、主要取舍和已知风险
- 遇到会改变实现路径的关键灰区,先提出并请求确认,不靠猜测补完整个方案
- 若存在更简单且满足目标的实现路径,必须主动指出并优先推荐
- Rule 2 — Simplicity First
- 推荐方案优先选择最小可落地路径,而不是概念上更"完整"的设计
- 不为了未来可能性预埋推测性扩展,不为单次使用引入抽象
- 若某个方案明显过度设计,必须直接指出并解释为什么不推荐
- Rule 3 — Surgical Changes
- 方案只覆盖完成当前目标所必需的改动面
- 不把无关重构、顺手统一风格或额外治理动作夹带进推荐方案
- 若确有相邻改动依赖,必须明确标注"必要改动"与"可选优化"的边界
- Rule 4 — Goal-Driven Execution
- 讨论输出必须先定义成功标准和验证方式,再给实现交接建议
- 不把讨论步骤本身当结果,重点是产出可执行、可验证的方案
- 交接给开发 skill 时,必须让对方清楚"做到什么算完成"
## When To Use
当用户提出以下类型需求时使用:
- "先讨论一下这个需求怎么实现"
- "这个功能可能有多种实现方式,先分析方案"
- "先别写代码,先帮我想实现路径"
- "先比较几种方案,再决定怎么做"
适用场景:
- 同一个需求可以通过多种技术路径实现
- 需要权衡 SDK 分层EPUBCore / EPUBTextRendering / RDReaderView / EPUBUI、复用、维护成本、回归影响
- 需要在实现前先明确推荐方案和待确认细节
- 已经明确采用某个方案,但还需要继续细化实现边界、拆解落地路径和交接开发
不适用场景:
- 用户已经明确要直接实现,且实现路径基本单一时,优先使用开发类 skill
- 用户只想生成文档,不需要方案讨论时,优先使用文档类 skill
## Inputs
推荐输入:
- 需求描述
- 目标模块或 Feature属于哪一层EPUBCore / EPUBTextRendering / RDReaderView / EPUBUI / Legacy
- 已知约束兼容性、性能、API 兼容、CocoaPods 发布等)
- 已有备选方案(如有)
- 已确认方案(如已决定)
- 是否需要推荐方案
- 是否需要最终落方案文档
若信息不足:
- 先通过代码和文档补齐可发现事实
- 再围绕真正影响方案选择的灰区进行澄清
- 若用户不想继续问答,必须显式列出"实现假设",并把假设写入方案或交接摘要
若用户已经明确指定"采用方案 X / 就按这个方案做"
- 视为进入"已定方案模式"
- 后续输出禁止继续罗列其他候选方案、备选实现或横向对比
- 仅允许在必要时补充"当前方案的风险、前提、边界和实现细化"
## Scope / Required Context
默认先读:
1. `Doc/ARCHITECTURE.md` — 四层架构、数据流、分页模式、位置模型、已知限制
2. `Doc/CODING_STYLE.md` — 命名规范RD/RDEPUB 前缀、分层规则、extension 拆分规则、SS→RD 迁移计划
3. `Doc/EPUB_MAINTENANCE.md` — 文件职责表、DTCoreText 渲染管线、常见排查场景
按需再读:
- 涉及 EPUB 解析时:`Sources/RDReaderView/EPUBCore/` 下相关文件
- 涉及文本渲染时:`Sources/RDReaderView/EPUBTextRendering/` 下相关文件
- 涉及阅读器容器时:`Sources/RDReaderView/RDReaderView.swift` 及同级文件
- 涉及 UI 层时:`Sources/RDReaderView/EPUBUI/` 下相关文件
- 涉及遗留代码时:`Sources/RDReaderView/LegacyRDReaderController/` 下相关文件
- 涉及 JS 桥接时:`Sources/RDReaderView/Resources/epub-bridge.js`
若文档与代码不一致:
- 以代码事实为准做方案讨论
- 在推荐方案中指出不一致点和可能影响
方案文档落地目录约束:
- 讨论型方案文档统一落到 `Doc/FeatureSolution/`(若目录不存在则创建)
- 不要把方案讨论文档写入其他目录
## SDK-Specific Discussion Rules
讨论时必须考虑的 SDK 特有约束:
- **分层边界**:方案必须明确落在哪一层,不得跨层引入反向依赖(上层依赖下层允许,反之不允许)
- **Public API 兼容性**:若改动涉及公共接口(`RDReaderView`、`RDReaderDataSource`、`RDURLReaderController`、`RDEPUBReaderController` 等),必须评估对宿主 App 的 breaking change 影响
- **渲染路径差异**:方案必须考虑三种渲染路径(`webFixedLayout` / `webInteractive` / `textReflowable`)的适用性,不能只覆盖单一路径
- **CocoaPods 发布影响**:若方案涉及新增依赖、资源文件或模块结构调整,必须评估 podspec 变更
- **RD 前缀规范**:所有新增类型必须使用 `RD` 前缀EPUB 相关使用 `RDEPUB` 前缀
- **Legacy 层边界**:不在 Legacy 层新增功能;若方案涉及 Legacy 代码,必须明确是迁移还是在新层实现
## GSD-Inspired Discussion Rules
讨论阶段要像 `discuss -> plan -> verify` 闭环一样,先捕获决策,再验证计划,而不是直接跳到实现建议。
必须执行:
- 灰区捕获:先识别布局、接口形态、数据结构、错误态、路由、持久化、兼容性、回归范围等不明确点
- 事实核验:方案落地前必须用本仓库代码和 `Doc/` 文档确认入口、复用点、约束和风险
- 假设显式化:不能确认的问题必须写成 `Assumption`,不得藏在方案正文里
- 阻塞分级:会改变实现路径的问题标记为 `Blocking Decision`,不会改变路径的问题标记为 `Follow-up`
- 审计留痕:若落方案文档,必须包含"讨论结论 / 关键决策 / 假设 / 非范围 / 验证清单 / 开发交接指令"
- 计划可执行:最终方案必须足够小,能被开发 skill 直接逐项执行
禁止行为:
- 不得只输出宽泛建议,必须落到文件、类、方法、数据流或协议层面的执行点
- 不得在用户已确认方案后继续展开新方案,除非用户明确要求重新比较
- 不得把未经核验的包、SDK、接口能力写成已确认事实
- 不得把需要用户拍板的关键决策伪装成默认实现
## Required Workflow
### Phase 1 — 识别需求、范围、约束、现状
- 明确目标价值、影响模块EPUBCore / EPUBTextRendering / RDReaderView / EPUBUI / Legacy、In Scope / Out of Scope
- 识别当前项目里已有的实现模式、相邻能力和复用点
- 判断这是单层需求还是跨层需求
- 建立灰区清单,区分 `Blocking Decision``Follow-up`
### Phase 2 — 判断讨论模式
- 若方案未定:进入"多方案对比模式"
- 若方案已定:进入"单方案细化模式"
- 一旦用户已确认方案,后续同一轮讨论默认保持"单方案细化模式",除非用户明确要求重新打开方案比较
### Phase 3 — Research / Verify核验代码与文档事实
- 对照当前仓库确认真实入口、调用链、数据模型、复用的 cell / view / handler / controller / protocol
- 若方案涉及新增文件,必须确认所属目录层级和是否需要更新 podspec 的 source_files
- 若方案涉及接口或数据字段,必须明确字段来源、空值策略和兼容策略
- 若方案涉及 JS 桥接,必须确认 epub-bridge.js 的交互契约
- 若发现文档和代码不一致,必须标注为风险或阻塞项
- 若核验结果推翻原方案,必须暂停说明,不得继续包装成可执行方案
### Phase 4A — 多方案对比模式:列出多种实现路径
- 至少提出 2 个可行方案,推荐 2-4 个方案
- 每个方案都要有清晰的实现方向,而不是抽象建议
- 优先从现有项目模式和复用能力出发
### Phase 4B — 多方案对比模式:比较方案优缺点和影响范围
- 比较每个方案的:
- 核心思路
- 落在哪一层EPUBCore / EPUBTextRendering / RDReaderView / EPUBUI
- 适用前提
- 优点
- 风险 / 成本
- 对 SDK 分层、Public API、podspec、回归范围的影响
- 明确哪些差异会真正影响后续实现和维护
### Phase 5A — 多方案对比模式:提出推荐方案,并列出待确认细节
- 必须明确推荐一个默认方案,不能只平铺选项
- 待确认项只保留真正影响实现的关键决策
- 默认产物为对话输出;若用户明确要求,再可选落到 `Doc/FeatureSolution/` 下方案文档
### Phase 5B — 单方案细化模式:围绕确认方案展开
- 不再输出"方案 A / 方案 B / 方案 C"式内容
- 不再补充"其他也可以这样做"的备选实现,除非用户明确要求回到方案比较
- 只讨论以下内容:
- 当前方案的实现拆解(文件 / 类 / 方法 / 协议)
- SDK 分层内的模块边界与职责分配
- 关键数据流 / 状态流 / 渲染流
- 复用点、依赖点、回归点
- 对三种渲染路径的覆盖情况
- 风险、前提、灰度方式、验证要点
- 交接给开发 skill 的实现摘要
### Phase 6 — 输出实现交接建议
- 在方案确认后,明确下一步应交给哪个开发 skill
- 小中型、单层、MVP 优先:轻量开发 skill
- 跨层、复杂联调、完整交付:完整开发 skill
- 无论是否落文档,最终都必须产出开发交接载体,且二选一不能缺失:
- 完整开发 skill产出可直接执行的开发详细文档默认落到 `Doc/FeatureSolution/`
- 轻量开发 skill产出可直接粘贴执行的开发详细描述覆盖实现目标、范围、代码落点、关键步骤、验收标准和自测要点
- 给出可直接粘贴给开发 skill 的实现摘要;若已有更完整的详细文档/描述,则摘要必须引用它而不是只给一句话概括
- 若落方案文档,必须让开发指令引用该文档的真实路径,并提醒开发 skill 严格按计划执行
## Output Contract
默认输出结构按模式区分:
若方案未定:
- A. 需求理解
- B. 灰区问题与实现假设
- C. 当前实现与约束
- D. 可选方案对比
- E. 推荐方案
- F. 待确认实现细节
- G. 实现交接建议
若方案已定:
- A. 需求理解
- B. 灰区问题与实现假设
- C. 当前实现与约束
- D. 确认方案拆解
- E. 实现风险与关键细节
- F. 实现交接建议
其中要求:
- 未定方案时:
- `B. 灰区问题与实现假设` 必须区分 Blocking Decision / Follow-up / Assumption
- `D. 可选方案对比` 至少给出 2 个方案,推荐 2-4 个
- `E. 推荐方案` 必须明确推荐一个默认方案
- `F. 待确认实现细节` 只保留会改变实现路径的关键问题
- `G. 实现交接建议` 必须明确下一步交给哪个开发 skill
- `G. 实现交接建议` 必须附带可供开发 skill 直接使用的交接内容:
- 若下一步是完整开发 skill必须提供开发详细文档路径或完整文档正文
- 若下一步是轻量开发 skill必须提供开发详细描述正文
- 已定方案时:
- `B. 灰区问题与实现假设` 必须列出阻塞项、假设和后续项
- `D. 确认方案拆解` 只能围绕确认方案展开,禁止附带其他方案信息
- `E. 实现风险与关键细节` 只讨论该方案落地所需信息
- `F. 实现交接建议` 必须明确下一步交给哪个开发 skill并附带可直接执行的详细文档或详细描述
若用户要求落方案文档,文档必须包含:
- 需求目标
- 讨论结论
- 关键决策
- 实现假设
- 非范围
- SDK 分层落点(文件 / 类 / 方法 / 协议)
- 数据流 / 状态流 / 渲染流
- 开发任务清单
- 验收标准
- 自测清单
- 待确认项
- 给开发 skill 的执行指令
若未落方案文档,但下一步要交给轻量开发 skill则最终输出中的"开发详细描述"至少必须包含:
- 实现目标
- In Scope / Out of Scope
- SDK 分层落点(文件 / 类 / 方法 / 协议)
- 实现步骤
- 关键约束与复用点
- 对三种渲染路径的覆盖说明
- 验收标准
- 自测清单
- 待确认项或实现假设
## Validation
- 本 skill 默认只做方案讨论,不直接进入代码实现
- 默认不修改仓库文件;只有用户明确要求时,才可选落方案文档到 `Doc/FeatureSolution/`
- 即使不落方案文档,最终回复也必须包含一份可直接交给开发 skill 使用的详细交接内容,不能只停留在高层方案结论
- 若本次调用只做讨论或只新增方案文档,可不执行构建验证
- 若新增或移动方案文档,建议同步更新目录索引
- 若后续进入代码实现,则由对应开发 skill 负责执行项目默认构建验证(`xcodebuild` 或 CocoaPods 集成验证)
- 若用户已确认方案,则默认进入单方案细化模式,除非用户明确要求重新比较备选方案
## Maintenance Rules
- 该 skill 的职责是"讨论后交接实现",不和开发 skill、文档类 skill 重叠
- 优先复用 `Doc/` 作为知识源,不新增独立 references 体系
- 方案文档目录固定为 `Doc/FeatureSolution/`
- 持续保持 `discuss -> research/verify -> plan handoff` 的轻量闭环,避免退化成只聊天不交付的建议列表
- 若该 skill 的默认输出结构、交接规则或适用边界调整,必须同步更新对应文档
- SDK 四层架构EPUBCore → EPUBTextRendering → RDReaderView → EPUBUI是方案讨论的核心参照框架任何方案都必须明确标注落点层级