搜索/在共享工作树中开发跨平台 CLI,且不破坏他人的工作

在共享工作树中开发跨平台 CLI,且不破坏他人的工作

用于在其他会话也在使用的工作树中开发命令行工具。它只在当前工作树内工作,不丢弃他人的改动,把数据输出和面向人的信息分开,编写各平台都能通过的测试,并保持快照和文档为最新。

要使用这个AI规则
## 只在当前工作树内搜索和修改 采用工作树开发时,当前工作目录就是活动分支的完整仓库。搜索、读取、构建、测试和编辑都只能在该根目录内进行。 - 使用相对路径,或已解析到当前根目录下的路径。 - 不要假定父目录就是仓库。 - 不要到同级工作树中搜索实现或配置。 - 拒绝硬编码的开发者主目录路径。 - 从活动根目录解析夹具和源文件路径。 离开工作树可能会把其他分支的陈旧代码混入分析和变更。 ## 不重置或删除其他会话的改动 应假定陌生文件和编辑可能属于另一个活动会话。绝不能仅因某项工作不在当前任务范围内,就将其删除、重置、丢弃或覆盖。 - 保留并非由你创建的文件。 - 移除未跟踪文件前先征求确认。 - 未经明确批准,不得执行重置、签出丢弃、清理或删除暂存工作等操作。 - 如果钩子因你未触碰的文件而失败,应报告冲突,而不是修改这些文件。 - 将变更限制在请求范围内,并检查最终差异。 将共享工作树状态视为用户数据;执行破坏性操作前,必须先明确其所有权。 ## 通过注册表添加命令,不到处加条件分支 使用注册表使命令、提供程序和集成具备扩展性。新实现应满足稳定接口,并通过唯一的规范路径注册,而不是在整个应用程序中增加条件分支。 - 为主要行为定义接口。 - 通过构造函数或字段注入依赖项。 - 使用仓库支持的生成器生成模拟对象。 - 对带默认值的可扩展配置采用函数式选项。 - 每个职责明确的文件只保留一个命令实现。 - 新增专用软件包,而不是扩充通用工具软件包。 引入平行逻辑前,先搜索现有命令层、执行层和软件包层。 ## 上下文只用于取消和期限,标志统一经过一个解析器 请求上下文只能用于取消、截止时间和少量请求范围值。函数接受上下文时,应将其置于首个参数。不要用上下文隐藏配置、依赖项或普通参数。 将配置建模为确定性流水线: 1. 加载配置源; 2. 处理导入和继承; 3. 按命令标志、环境、文件、默认值的顺序应用优先级; 4. 渲染受支持的模板; 5. 生成有效配置。 通过统一解析器处理标志和环境绑定。新增选项时更新所有归属该选项的架构,绝不能绕过中央绑定层。 ## 把可管道传递的数据和面向人的信息写到不同的输出流 可通过管道传递的结果只能写入数据流。提示、进度、警告和格式化的人类可读消息应写入界面流。结构化日志仅用于系统事件,不用于面向用户的输出。 - 使用共享I/O抽象,而不是直接打印。 - 由UI层负责颜色、图标、Markdown、终端宽度和能力检测。 - 当终端不支持样式或在持续集成环境中运行时,自动降级显示。 - 禁用人类可读格式后,仍要保持结构化数据有效。 - 始终应用机密信息屏蔽,且不要在遥测中采集用户数据。 测试或录制标志可以强制指定终端特性,但生产默认值应继续感知实际环境。 ## 保持函数精简,并用稳定的分类包装错误 保持文件和函数职责集中。从高复杂度编排中提取具名步骤,使顶层函数呈现为平坦的流水线。 - 使用仓库规定的格式、导入分组、别名和注释标点。 - 保留有帮助的注释,并在行为变化时同步更新。 - 对有实质意义的公开操作应用标准性能跟踪。 - 在策略允许时,简单访问器、构造函数、纯查询和简单委托可以例外。 - 使用稳定类别包装错误,并保留根因。 - 合并相互独立的失败时,不要丢失任一错误链。 - 通过语义匹配而不是字符串比较检查已包装的错误。 当用户需要提示、上下文或退出语义时,使用信息充分的错误构建器。 ## 用模拟对象和真正可能失败的测试来检验行为 对隔离行为优先采用使用生成模拟对象的快速单元测试;当公开命令行为跨越真实边界时,再增加集成或验收覆盖。 - 使用表驱动用例覆盖输入和错误。 - 测试行为,而不是内部实现。 - 移除桩函数、同义反复式测试以及永久跳过的测试。 - 对合并后的集合,分别修改结果和源,并通过独立检查证明双向隔离。 - 对切片结果,除长度外还要断言有代表性的内容。 - 增加负向测试,证明缺少触发条件时恢复逻辑不会启动。 - 对已包装的失败使用语义错误匹配。 只有当断言确实可能因受保护行为出错而失败时,覆盖率才构成证据。 ## 编写在各平台都能运行、准备缺失时明确失败的测试 测试必须能在受支持的桌面和服务器平台上运行,不得假定存在某种外壳、路径分隔符或平台专用工具。 - 使用标准路径库,从独立组成部分构建路径。 - 仅在进行可移植的后缀比较或显示时规范化分隔符。 - 使用测试可执行文件或注入的运行器,而不是平台专用命令。 - 将子进程门控合并到现有测试入口,不要再定义重复入口。 - 遍历或计数前,将夹具根目录解析为绝对路径。 - 当前提条件或夹具计数配置缺失时,让防护检查明确失败。 - 对字段重命名后必须使测试失败的架构字段,增加编译期哨兵。 测试依赖子进程行为前,先通过明确的前提子测试验证隐式环境传播。 ## 用测试工具重新生成快照,而不是手动编辑 黄金快照包含不可见格式、终端宽度、样式以及受环境影响的输出。绝不能手工编辑。 - 通过受支持的测试标志或生成器重新生成快照。 - 接受变更前检查生成的差异。 - 不要将快照或终端测试接入管道,因为重定向可能改变能力检测。 - 命令帮助或输出变化时,一并重新生成相关录制内容。 - 验证录制内容中不存在命令失败、引用缺失或机器专用路径泄漏。 - 未明确列入范围时,不要更改受保护的夹具或测试数据。 生成输出必须通过其归属源文件和规范工作流来更改。 ## 为每个新命令写文档,并把推迟的工作登记为议题 每个新命令、标志、参数或配置表面都需要用户文档,其中应包含仓库要求的元数据、用法、示例、参数、标志和视觉证据。 - 核实已声明的页面标识符,不要根据文件名猜测URL。 - 变更后构建文档站点,并检查链接、图像和组件。 - 仅在命令行为、帮助或输出变化时重新生成视觉捕获;纯文字编辑无需执行。 - 按指定位置和命名约定放置需求文档。 - 延后工作时,应在合并前创建可跟踪的问题,并链接其标识符。 - 使发布说明、路线图数据和标签与变更类别保持一致。 承诺了未跟踪后续工作的文档并不完整。 ## 不跳过钩子、不用破坏性 Git 命令来更新评审 使用仓库规定的评审工作流;除非已明确授权持久服务,否则应将重复维护自动化限定在当前会话内。 - 仅通过获准的分支流程执行变基或更新。 - 检查持续集成,并处理尚未解决的评审线程。 - 在原评审线程内回复,并验证关联关系。 - 更新评审前,运行补丁范围内的lint和测试覆盖率检查。 - 不要绕过钩子,也不要使用跳过验证的标志。 - 不要提交草稿笔记、研究材料或未解决的占位内容。 在明确确认会丢失哪些内容之前,绝不能执行破坏性Git命令,也不能移除其他会话的工作。 ## 先写重现 bug 的测试,并从根源修复未通过的检查 修复缺陷时,先编写复现测试并观察其失败,再实现最小修复并检查回归。 完成前确认: - 项目可使用固定工具链完成编译; - 已更改文件通过规范格式化器和lint检查; - 快速测试通过,并在受影响路径需要时运行完整测试或验收测试; - 覆盖率达到强制阈值,且没有流于形式的断言; - 生成的模拟对象、架构、快照、文档和视觉捕获均为最新; - 复杂度和文件大小仍满足限制; - 跨平台路径和子进程测试具备可移植性; - 差异中没有机密信息、用户数据或无关工作。 修复每个失败门控的根因,而不是削弱门控。