搜索/在不影响现有使用者的前提下,小幅修改有状态 UI 库

在不影响现有使用者的前提下,小幅修改有状态 UI 库

让 AI 修复或修改保存状态的浏览器 UI 库时使用。它会找到状态的所有者,保持公开 API 和已保存数据的兼容,先写会失败的测试,选择单元测试或真实浏览器测试,并在完成前检查差异和发布说明。

要使用这个AI规则
## 找到状态的所有者,只在库允许的位置修改状态 首先确定请求所影响的状态所有者、更新边界和公开契约。在不可变状态模型中,应通过一致的快照读取,并且只在库认可的更新上下文中进行修改。将节点或实体句柄视为带版本的引用;不要跨越更新边界保留其可变状态不变的假设。 将功能注册、命令、转换和监听器限制在其文档规定的生命周期内。新工作优先采用当前的扩展或组合机制,同时继续维护所有受支持的旧版集成路径。确保每项注册都有明确的清理路径,并保留现有使用者可能仍需加载的序列化格式。 ## 用能识别语法的搜索查找代码,让改动保持小而集中 当更改涉及 import、调用位置、类型注解或结构化代码时,使用能够识别语法的搜索与改写工具。面向行的正则表达式可能漏掉多行形式,也可能匹配无关的标识符。在应用大范围改写之前,先在语法树中确认候选匹配项。 使更改围绕目标行为展开,并保持局部性。使用体现领域含义的名称,为无效或已处理状态设置守卫子句,并让成功路径清晰可见。只有在辅助函数能够命名一项职责或简化调用方时才进行提取。不要把顺手进行的重构、调试日志、临时名称或无关的格式调整混入最终补丁。 在模块作用域创建无副作用的工厂函数时,应遵守项目的 tree-shaking 注解约定;如果工厂族本身有所扩展,还要更新负责强制执行该约定的规则。 ## 保持公开 API 兼容,并使用元素自身的 document 和 window 应假定外部代码依赖现有的公开名称、签名、行为和序列化数据。优先采用增量式 API 和可选参数。当破坏兼容性的更改无法避免时,在移除旧路径前先保留并将其标记为弃用,同时验证当前路径和兼容路径。 维护该 API 所触及的每一种受支持类型系统和生成声明界面。面向浏览器的代码必须从相关根节点或元素获取其所属的 document 和 window,而不能依赖环境中的全局对象。使用能够识别运行域的选择、焦点、事件目标和父级遍历辅助函数,避免影子根和嵌入式 document 悄然从错误环境读取信息。 对于序列化、请求处理、URL、HTML 或脚本输出、文件系统路径、身份验证或依赖项更改,应识别不可信输入及离它最近的验证守卫。优先采用失败时关闭的行为,不要让秘密信息进入日志或产物,并验证任何协议的写入端和读取端。 ## 先写会失败的测试,再选择单元测试或真实浏览器测试 对于行为更改或缺陷修复,先定义可观察的不变量。添加或更新最接近问题的聚焦测试;可行时,在实现前运行该测试,并确认它因预期原因失败。进行满足该不变量的最小更改,重新运行聚焦测试,然后只扩展到受影响范围所必需的验证。 对于不依赖真实布局或选择行为的逻辑,使用模拟环境单元测试。对于布局、选择、焦点、影子根或跨 document 行为,使用真实浏览器测试。端到端测试只用于导航、完整应用集成或需要运行中系统的协议。在采用测试结果作为依据前,先构建该测试实际使用的特定产物。 没有明确原因时,不要用宽泛的全仓库命令替代聚焦测试。无关测试套件通过,不能证明发生更改的边界正确。 ## 完成前检查差异,并补上发布说明 结束前,以新贡献者的视角审查差异。确认名称体现领域含义、边缘情况有明确守卫、主路径易于理解、清理完整,并且没有意外改变公开契约。运行受影响包所要求的格式化工具、检查工具、类型检查器或 API 快照任务。 当已发布的行为发生变化时,添加仓库规定的发布说明或变更集。描述面向使用者的修复或功能,而不是实现机制。不要在提交和拉取请求文本中包含私密会话链接、凭据或仅供内部使用的引用,并记录能够支持该更改的聚焦测试证据。