用途
该技能面向任何把文档归约为数字的流水线——字数统计、阅读时间、可读性、token 预算、去重键、校验和、搜索索引。这类流水线都有两半:把标记转换为可比较文本的规范化器,以及消费它的测量器。评审通常集中在测量器上,但几乎所有此类缺陷都藏在规范化器里,而且都不会抛出异常。失败模式高度一致:输出仍是看似合理的字符串,指标仍是看似合理的数字,没有任何地方报告问题。
主要能力
技能系统梳理了规范化环节的典型故障模式与审查方法:
- 缺失分隔符导致块融合:token 遍历式剥离器为内容 token 输出文本、为关闭 token 输出分隔符。漏掉一个关闭 token,两个块就会变成一个词。例如标题与正文融合为 "TitleBody text here.",导致字数下降、平均词长上升、可读性评分失真,且错误随标题密度放大;去重键或校验和也会与无标题的同一散文产生分歧。通用规则是:解析器打开的每个块级构造都必须以分隔符关闭,需从解析器枚举所有关闭 token 类型并逐一显式处理。
- 两类指标需要不同的规范化关注点:字符类指标(按字符数计算阅读时间、字节限制、字符配额、粗略 token 估算)会被残留语法字符破坏,如链接目标 URL、图片路径、围栏分隔符、表格竖线;在链接和图片密集的散文中,字符类阅读时间可能约为真实值的两倍。词/音节类指标(字数、可读性等级、音节比)按空白和标点分词,残留分隔符大多被冲掉,但丢失的块边界会直接破坏词和音节流,下游分词无法恢复。审查规则:对每个指标确认它消费规范化文本,再检查其类别盲区的失败——字符类查残留语法,词类查未插入的边界。
- 枚举规范化器的所有消费者:最常见的版本不是规范化器坏了,而是某个兄弟函数从未调用它。两个函数接受相同参数、位于同一文件、文档描述相同,却在任何 Markdown 输入上相差两倍。添加或修复规范化器时,应 grep 测量器的每个调用点而非规范化器,确认每个都经过规范化;同时记录规范化器的调用点数量,因为一旦有两个生产消费者,一行改动就会移动两个公开输出。还要检查分段路径(如 level="full" | "section" | "paragraph"),修复可能只应用于全文路径。
- 解析器预设是未选择的规则集:无参数构造解析器会选择默认配置,该配置决定哪些构造被识别。例如 CommonMark 预设没有 table 规则,GFM 表格会被当作普通段落,所有分隔符都会存活到所谓“纯文本”中。信任解析树前应打印启用的规则集,确认实际接收的构造在其中;启用规则时需在同一改动中匹配关闭 token 处理。
- 按非唯一自然键分组:将文档分段并按标题文本作为字典键,假设标题唯一,但 ### Example、## Notes、## Usage 在真实文档中反复出现。后果一是折叠,首次出现保留键,后续不再以自身键报告;后果二是重复计数,丢失内容通常被层级栈扩展到最近祖先段,使祖先的字数和阅读时间静默包含也报告在别处的正文,导致各段数字既不相加为整体也不保持不相交。应按结构唯一的东西(索引、(level, index) 对、带消歧后缀的 slug)为段设键,并将显示标题作为字段携带。
- 生成后缀与字面标题冲突:按标题出现次数计数不够,## Notes、另一个 ## Notes 和字面 ## Notes (2) 仍可能产生相同键。应在段首次创建时针对所有已用键分配每个键,保留原始标题用于显示,并测试重复标题和字面后缀标题的两种顺序。
- 写下哪些有损是故意的:规范化器在某些地方有意有损,例如剥离器可能丢弃列表标记,或完全忽略原始 HTML 块内容。这些是设计决策,乍看与缺失分隔符缺陷无法区分。两个方向的错误都会发生:有意丢弃被误读为缺陷而“修复”,意外融合被测试固定并作为表面意图存活多年。应在分支旁加一行注释说明意图,并让测试名称表达它。
- 测试规范化器而不依赖第三方常量:最强断言不需要分析库的任何常量——Markdown 输入必须与其手写纯文本等价物测量结果相同。当剥离器回归时该测试会硬失败,而评分库升级时仍通过。若分析依赖未固定版本,对其输出的精确浮点断言会随版本脆弱。需要文档数字时,使用与缺陷自身差距相称的容差,并通过运行代码测量期望值,绝不手工估计。固定错误输出的测试比没有测试更糟;发现规范化器缺陷时,应先读其测试文件,因为错误输出常已被逐字断言。
使用方式
技能以审查清单形式给出可操作步骤:确认解析器发出的每个块级关闭 token 都有显式分隔符分支,且列表从解析器枚举而非凭记忆;确认每个指标消费规范化文本,字符类额外审查残留语法字符,词类审查融合块边界;确认测量器的每个调用点都经过规范化器,包括分段路径;了解规范化器的生产消费者数量,改动时列出所有移动的输出;确认解析器规则集包含输入实际使用的构造,新启用规则有匹配的关闭 token 处理;段/分段映射按结构唯一键而非标题文本,并审查下游推导式和去重守卫的同一假设;有意有损在分支处注释并在测试中命名;回归测试断言 Markdown 等于纯文本等价物,加上精确的剥离字符串和字数,而非未固定库的浮点数;声明缺陷未测试前先检查现有测试是否固定了错误输出。
适用场景
适用于任何将文档归约为数字的流水线,尤其是文档页面、README、变更日志等标记密集且估算最重要的场景。
限制
资料未提供该技能的具体安装命令、依赖库、运行环境或平台信息,暂未提供。