搜索/编写能返回通过、失败或无法判定的可访问性检查规则

编写能返回通过、失败或无法判定的可访问性检查规则

让 AI 在网页可访问性检查引擎中新增或修改规则时使用。它把 DOM 层和依赖层分开,从同一处读取 HTML 与 ARIA 数据,用接近真实的页面(含 Shadow DOM)测试,保持翻译同步,并避免破坏兼容性。

要使用这个AI规则
## 把 lint 和测试当作每次改动的一部分,而不是事后清理 将格式化、lint检查、测试、文档和提交规范视为变更本身的一部分,而不是实现完成后的清理工作。 ### 必需检查 - 提交前运行仓库指定的格式化工具和lint工具。 - 完成前运行完整测试套件,并针对行为变更提供单元测试和集成测试覆盖。 - 只有在变更不可能影响运行时行为时,才遵循已记录的例外规定。 - 将未解决的工作保留在项目的问题跟踪器中,不要把它隐藏在无关变更里。 - 不要提交临时日志或本地调试设置。 ### 代码规范 - 尽早处理错误和边界情况,让成功路径保持清晰易懂。 - 遵循既定的export位置、命名规则和import风格。 - 以一致方式命名文件和规则标识符;按照项目规范区分函数、布尔值和常量。 - 在变量首次使用的位置附近声明变量。 - 为导出的API、参数、返回值和复杂逻辑编写文档。 - 将重构与范围明确的功能开发或修复分开进行。 ## 区分虚拟节点与真实 DOM,并让依赖只朝一个方向 应有意识地在虚拟树抽象和真实DOM节点之间进行选择。抽象层能够高效处理已缓存的属性和特性,而浏览器API和布局行为则需要真实DOM。 ### 节点选择 - 访问属性、使用已缓存特性、遍历树和执行选择器操作时,优先使用虚拟节点。 - 处理布局、几何信息、根节点查找、浏览器计算行为和其他原生API时,使用真实DOM节点。 - 通过一个已记录的转换边界解决含糊不清的输入。 - 除非依赖虚拟节点具有明确的API优势或性能优势,否则通用工具应以真实DOM作为输入和输出。 - 不要把转换逻辑分散到各个规则中。 ### 依赖方向 - 将标准定义保留为不含运行时import的纯数据。 - 只允许低层工具通过明确路径依赖更低层的基础代码和标准数据。 - 将第三方模块的import集中到指定的适配器层。 - 允许共享领域辅助程序使用低层工具,但绝不允许依赖方向反转。 - 允许高层检查和规则组合下层组件,但不得形成循环依赖。 - 使用lint规则或构建规则以机械方式强制执行这些边界。 ## 返回通过、失败或无法判定,并把消息放进元数据 明确规定结果契约,使使用方能够区分合规、失败和证据不足。 ### 检查结果 - 测试条件得到满足时返回`pass`。 - 测试条件遭到违反时返回`fail`。 - 引擎无法可靠确定结果时返回`incomplete`。 - 附加结构化数据,供消息模板使用并说明产生`incomplete`结果的原因。 - 不要仅仅为了给出二元答案,就强行把不确定性归入`pass`或`fail`。 ### 规则定义 - 使用明确的`all`、`any`和`none`分组来组合检查。 - 使用选择器和可选的附加匹配器来限定候选元素的范围。 - 将影响程度限制为项目声明的严重性值。 - 从集中管理的标准数据中读取HTML和ARIA定义,不要在检查内部硬编码列表。 ### 面向用户的消息 - 将消息放在规则或检查的元数据中,而不是实现代码中。 - 使用命名数据占位符,其值由检查结果提供。 - 在语法需要时提供单数和复数变体。 - 每当源消息发生变化时,都要更新本地化模板。 ## 对颜色对比度和角色判定格外仔细地审查 有些可访问性结果依赖不完整的浏览器信息或快速演进的标准。这些领域需要保守的结果和有针对性的审查。 ### 颜色和可见性 - 考虑支持的颜色格式、不透明度、混合、堆叠上下文和文本效果。 - 无法确定有效背景或对比度时返回`incomplete`。 - 从语义层面评估屏幕阅读器的可见性,而不是只依赖CSS可见性。 - 包括隐藏状态属性、组合树和Shadow DOM边界。 ### 语义标准 - 让role和属性验证与当前可访问性规范保持同步。 - 分别解析隐式role和显式role。 - 查询集中管理的role和属性定义,确保每条规则都使用同一事实来源。 - 针对规范更新和以往被错误分类的标记添加回归测试用例。 - 当一项变更可能改变许多规则的结果时,必须进行有针对性的审查。 ## 在接近真实的页面上测试规则,包括 Shadow DOM 在单元测试树中映射源代码结构,使实现和测试的归属保持清晰。 ### 单元测试和检查测试 - 使用项目提供的标准检查上下文或测试工具框架。 - 如果共享fixture和虚拟树已由测试工具框架清除,则只重置由当前测试拥有的状态。 - 测试`pass`、`fail`和`incomplete`结果,包括附加的消息数据。 - 在增加广泛的集成测试覆盖前,先为边界条件添加有针对性的用例。 ### 集成测试 - 为每个规则fixture配套结构化的预期结果。 - 使用引擎的规范选择器表示形式,包括用于frame的嵌套选择器。 - 当文档级行为无法用片段表示时,使用完整的HTML页面。 - 为每条相关规则或检查添加一个open Shadow DOM用例。 - 当变更影响虚拟树评估时,更新虚拟规则覆盖。 - 迭代期间运行有针对性的测试,移交前运行作为权威依据的完整测试套件。 ## 在修改消息的同一次提交里重新生成翻译模板 区分生成的发布包与仓库有意跟踪的生成型源代码制品。 ### 制品政策 - 不要直接编辑已打包或已压缩的发布输出。 - 通过获准的构建流程重新生成受跟踪的模板或源代码制品。 - 将生成的本地化模板与产生它的消息源放在同一次变更中提交。 - 不要把需要同步的源代码更新和生成内容更新拆分到不同提交中。 - 不要把已忽略的发布包纳入常规功能提交。 ### 验证 - 检查生成的差异,查找意外的消息、语言区域或规则变更。 - 确认每个新占位符都存在于产生它的检查数据中。 - 消息变更后运行本地化验证和构建验证。 - 记录哪些制品是生成的、哪些受跟踪,以及哪些仅用于发布。 ## 更新变更日志和 API 文档,并避免破坏性变更 让每项变更保持范围集中,并使其公开影响对审查者和使用方清晰可见。 ### 变更文档 - 添加规则或对规则进行实质性变更时,更新变更日志。 - 公共接口发生变化时,同时更新API文档和类型定义。 - 使用仓库要求的conventional commit格式,提供简洁的主题,并在正文中说明动机。 - 通过支持的footer或拉取请求元数据关联已解决的问题。 - 移交前完成项目审查清单。 ### 兼容性 - 如果旧格式和新格式可以同时得到支持,应避免破坏性变更。 - 清楚标记已弃用的API,并提供迁移路径。 - 如果无法避免破坏性变更,应在发布元数据和变更日志中明确指出。 - 包括迁移指导、更新后的测试、同步后的生成文件,以及审查者可见的证据。 - 在格式化、lint检查、有针对性的测试、集成测试、完整测试套件和文档检查获得实际结果之前,不要声称已经准备就绪。