@redocly/recheck 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (595) hide show
  1. package/README.md +1023 -56
  2. package/dist/cli.js +40 -7
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/markdoc-schema.d.ts +17 -0
  5. package/dist/commands/markdoc-schema.d.ts.map +1 -0
  6. package/dist/commands/markdoc-schema.js +127 -0
  7. package/dist/commands/markdoc-schema.js.map +1 -0
  8. package/dist/commands/run.d.ts +2 -1
  9. package/dist/commands/run.d.ts.map +1 -1
  10. package/dist/commands/run.js +87 -10
  11. package/dist/commands/run.js.map +1 -1
  12. package/dist/config/load.d.ts +11 -0
  13. package/dist/config/load.d.ts.map +1 -1
  14. package/dist/config/load.js +12 -2
  15. package/dist/config/load.js.map +1 -1
  16. package/dist/config/presets/google.d.ts +3 -0
  17. package/dist/config/presets/google.d.ts.map +1 -0
  18. package/dist/config/presets/google.js +1671 -0
  19. package/dist/config/presets/google.js.map +1 -0
  20. package/dist/config/presets/inclusive-language.d.ts +3 -0
  21. package/dist/config/presets/inclusive-language.d.ts.map +1 -0
  22. package/dist/config/presets/inclusive-language.js +321 -0
  23. package/dist/config/presets/inclusive-language.js.map +1 -0
  24. package/dist/config/presets/index.d.ts +67 -0
  25. package/dist/config/presets/index.d.ts.map +1 -0
  26. package/dist/config/presets/index.js +137 -0
  27. package/dist/config/presets/index.js.map +1 -0
  28. package/dist/config/presets/markdoc.d.ts +21 -0
  29. package/dist/config/presets/markdoc.d.ts.map +1 -0
  30. package/dist/config/presets/markdoc.js +101 -0
  31. package/dist/config/presets/markdoc.js.map +1 -0
  32. package/dist/config/presets/markdown-relaxed.d.ts +3 -0
  33. package/dist/config/presets/markdown-relaxed.d.ts.map +1 -0
  34. package/dist/config/presets/markdown-relaxed.js +98 -0
  35. package/dist/config/presets/markdown-relaxed.js.map +1 -0
  36. package/dist/config/presets/markdown.d.ts +43 -0
  37. package/dist/config/presets/markdown.d.ts.map +1 -0
  38. package/dist/config/presets/markdown.js +132 -0
  39. package/dist/config/presets/markdown.js.map +1 -0
  40. package/dist/config/presets/microsoft.d.ts +3 -0
  41. package/dist/config/presets/microsoft.d.ts.map +1 -0
  42. package/dist/config/presets/microsoft.js +2268 -0
  43. package/dist/config/presets/microsoft.js.map +1 -0
  44. package/dist/config/presets/minimal.d.ts +3 -0
  45. package/dist/config/presets/minimal.d.ts.map +1 -0
  46. package/dist/config/presets/minimal.js +21 -0
  47. package/dist/config/presets/minimal.js.map +1 -0
  48. package/dist/config/presets/plain-language.d.ts +3 -0
  49. package/dist/config/presets/plain-language.d.ts.map +1 -0
  50. package/dist/config/presets/plain-language.js +351 -0
  51. package/dist/config/presets/plain-language.js.map +1 -0
  52. package/dist/config/presets/prose.d.ts +52 -0
  53. package/dist/config/presets/prose.d.ts.map +1 -0
  54. package/dist/config/presets/prose.js +138 -0
  55. package/dist/config/presets/prose.js.map +1 -0
  56. package/dist/config/schema.d.ts +128 -22
  57. package/dist/config/schema.d.ts.map +1 -1
  58. package/dist/config/schema.js +105 -21
  59. package/dist/config/schema.js.map +1 -1
  60. package/dist/config/validate.d.ts +12 -2
  61. package/dist/config/validate.d.ts.map +1 -1
  62. package/dist/config/validate.js +1200 -44
  63. package/dist/config/validate.js.map +1 -1
  64. package/dist/core/auto-fix.d.ts +8 -13
  65. package/dist/core/auto-fix.d.ts.map +1 -1
  66. package/dist/core/auto-fix.js +94 -75
  67. package/dist/core/auto-fix.js.map +1 -1
  68. package/dist/core/case-preserve.d.ts +46 -0
  69. package/dist/core/case-preserve.d.ts.map +1 -0
  70. package/dist/core/case-preserve.js +57 -0
  71. package/dist/core/case-preserve.js.map +1 -0
  72. package/dist/core/directives.d.ts +9 -0
  73. package/dist/core/directives.d.ts.map +1 -0
  74. package/dist/core/directives.js +73 -0
  75. package/dist/core/directives.js.map +1 -0
  76. package/dist/core/files.d.ts +63 -0
  77. package/dist/core/files.d.ts.map +1 -1
  78. package/dist/core/files.js +185 -0
  79. package/dist/core/files.js.map +1 -1
  80. package/dist/core/inline-code.d.ts +87 -0
  81. package/dist/core/inline-code.d.ts.map +1 -0
  82. package/dist/core/inline-code.js +104 -0
  83. package/dist/core/inline-code.js.map +1 -0
  84. package/dist/core/line-endings.d.ts +32 -0
  85. package/dist/core/line-endings.d.ts.map +1 -0
  86. package/dist/core/line-endings.js +65 -0
  87. package/dist/core/line-endings.js.map +1 -0
  88. package/dist/core/markdoc-tags.d.ts +79 -0
  89. package/dist/core/markdoc-tags.d.ts.map +1 -0
  90. package/dist/core/markdoc-tags.js +131 -0
  91. package/dist/core/markdoc-tags.js.map +1 -0
  92. package/dist/core/rule-filters.d.ts +17 -0
  93. package/dist/core/rule-filters.d.ts.map +1 -1
  94. package/dist/core/rule-filters.js +64 -0
  95. package/dist/core/rule-filters.js.map +1 -1
  96. package/dist/core/runner.d.ts +92 -3
  97. package/dist/core/runner.d.ts.map +1 -1
  98. package/dist/core/runner.js +348 -110
  99. package/dist/core/runner.js.map +1 -1
  100. package/dist/core/timing.d.ts.map +1 -1
  101. package/dist/data/markdoc-realm-schema.d.ts +3 -0
  102. package/dist/data/markdoc-realm-schema.d.ts.map +1 -0
  103. package/dist/data/markdoc-realm-schema.js +760 -0
  104. package/dist/data/markdoc-realm-schema.js.map +1 -0
  105. package/dist/data/proper-nouns.d.ts +2 -0
  106. package/dist/data/proper-nouns.d.ts.map +1 -0
  107. package/dist/data/proper-nouns.js +47 -0
  108. package/dist/data/proper-nouns.js.map +1 -0
  109. package/dist/index.d.ts +90 -0
  110. package/dist/index.d.ts.map +1 -0
  111. package/dist/index.js +152 -0
  112. package/dist/index.js.map +1 -0
  113. package/dist/metrics/formulas.d.ts +17 -0
  114. package/dist/metrics/formulas.d.ts.map +1 -0
  115. package/dist/metrics/formulas.js +70 -0
  116. package/dist/metrics/formulas.js.map +1 -0
  117. package/dist/metrics/index.d.ts +5 -0
  118. package/dist/metrics/index.d.ts.map +1 -0
  119. package/dist/metrics/index.js +3 -0
  120. package/dist/metrics/index.js.map +1 -0
  121. package/dist/metrics/statistics.d.ts +27 -0
  122. package/dist/metrics/statistics.d.ts.map +1 -0
  123. package/dist/metrics/statistics.js +56 -0
  124. package/dist/metrics/statistics.js.map +1 -0
  125. package/dist/parser/index.d.ts +18 -0
  126. package/dist/parser/index.d.ts.map +1 -0
  127. package/dist/parser/index.js +168 -0
  128. package/dist/parser/index.js.map +1 -0
  129. package/dist/parser/markdoc/extract-statics.d.ts +45 -0
  130. package/dist/parser/markdoc/extract-statics.d.ts.map +1 -0
  131. package/dist/parser/markdoc/extract-statics.js +139 -0
  132. package/dist/parser/markdoc/extract-statics.js.map +1 -0
  133. package/dist/parser/markdoc/pairing.d.ts +63 -0
  134. package/dist/parser/markdoc/pairing.d.ts.map +1 -0
  135. package/dist/parser/markdoc/pairing.js +94 -0
  136. package/dist/parser/markdoc/pairing.js.map +1 -0
  137. package/dist/parser/markdoc/schema.d.ts +85 -0
  138. package/dist/parser/markdoc/schema.d.ts.map +1 -0
  139. package/dist/parser/markdoc/schema.js +86 -0
  140. package/dist/parser/markdoc/schema.js.map +1 -0
  141. package/dist/parser/markdoc/span.d.ts +64 -0
  142. package/dist/parser/markdoc/span.d.ts.map +1 -0
  143. package/dist/parser/markdoc/span.js +729 -0
  144. package/dist/parser/markdoc/span.js.map +1 -0
  145. package/dist/parser/markdoc/structure.d.ts +28 -0
  146. package/dist/parser/markdoc/structure.d.ts.map +1 -0
  147. package/dist/parser/markdoc/structure.js +153 -0
  148. package/dist/parser/markdoc/structure.js.map +1 -0
  149. package/dist/parser/markdoc/syntax.d.ts +44 -0
  150. package/dist/parser/markdoc/syntax.d.ts.map +1 -0
  151. package/dist/parser/markdoc/syntax.js +317 -0
  152. package/dist/parser/markdoc/syntax.js.map +1 -0
  153. package/dist/parser/types.d.ts +18 -0
  154. package/dist/parser/types.d.ts.map +1 -0
  155. package/dist/parser/types.js.map +1 -0
  156. package/dist/reporter/fixes.d.ts.map +1 -1
  157. package/dist/reporter/fixes.js +22 -1
  158. package/dist/reporter/fixes.js.map +1 -1
  159. package/dist/reporter/statistics.d.ts +1 -8
  160. package/dist/reporter/statistics.d.ts.map +1 -1
  161. package/dist/reporter/statistics.js.map +1 -1
  162. package/dist/rules/registry.d.ts +15 -0
  163. package/dist/rules/registry.d.ts.map +1 -0
  164. package/dist/rules/registry.js +81 -0
  165. package/dist/rules/registry.js.map +1 -0
  166. package/dist/rules/scope/capitalization.d.ts +3 -0
  167. package/dist/rules/scope/capitalization.d.ts.map +1 -0
  168. package/dist/rules/scope/capitalization.js +163 -0
  169. package/dist/rules/scope/capitalization.js.map +1 -0
  170. package/dist/rules/scope/conditional.d.ts +3 -0
  171. package/dist/rules/scope/conditional.d.ts.map +1 -0
  172. package/dist/rules/scope/conditional.js +112 -0
  173. package/dist/rules/scope/conditional.js.map +1 -0
  174. package/dist/rules/scope/consistency.d.ts +3 -0
  175. package/dist/rules/scope/consistency.d.ts.map +1 -0
  176. package/dist/rules/scope/consistency.js +178 -0
  177. package/dist/rules/scope/consistency.js.map +1 -0
  178. package/dist/rules/scope/length.d.ts +3 -0
  179. package/dist/rules/scope/length.d.ts.map +1 -0
  180. package/dist/rules/scope/length.js +69 -0
  181. package/dist/rules/scope/length.js.map +1 -0
  182. package/dist/rules/scope/max-image-size.d.ts +3 -0
  183. package/dist/rules/scope/max-image-size.d.ts.map +1 -0
  184. package/dist/rules/scope/max-image-size.js +65 -0
  185. package/dist/rules/scope/max-image-size.js.map +1 -0
  186. package/dist/rules/scope/metric.d.ts +17 -0
  187. package/dist/rules/scope/metric.d.ts.map +1 -0
  188. package/dist/rules/scope/metric.js +216 -0
  189. package/dist/rules/scope/metric.js.map +1 -0
  190. package/dist/rules/scope/occurrence.d.ts +3 -0
  191. package/dist/rules/scope/occurrence.d.ts.map +1 -0
  192. package/dist/rules/scope/occurrence.js +48 -0
  193. package/dist/rules/scope/occurrence.js.map +1 -0
  194. package/dist/rules/scope/pattern.d.ts +3 -0
  195. package/dist/rules/scope/pattern.d.ts.map +1 -0
  196. package/dist/rules/scope/pattern.js +75 -0
  197. package/dist/rules/scope/pattern.js.map +1 -0
  198. package/dist/rules/scope/repetition.d.ts +3 -0
  199. package/dist/rules/scope/repetition.d.ts.map +1 -0
  200. package/dist/rules/scope/repetition.js +139 -0
  201. package/dist/rules/scope/repetition.js.map +1 -0
  202. package/dist/rules/scope/semantic-line-breaks.d.ts +3 -0
  203. package/dist/rules/scope/semantic-line-breaks.d.ts.map +1 -0
  204. package/dist/rules/scope/semantic-line-breaks.js +213 -0
  205. package/dist/rules/scope/semantic-line-breaks.js.map +1 -0
  206. package/dist/rules/scope/spelling.d.ts +27 -0
  207. package/dist/rules/scope/spelling.d.ts.map +1 -0
  208. package/dist/rules/scope/spelling.js +227 -0
  209. package/dist/rules/scope/spelling.js.map +1 -0
  210. package/dist/rules/scope/swap.d.ts +3 -0
  211. package/dist/rules/scope/swap.d.ts.map +1 -0
  212. package/dist/rules/scope/swap.js +149 -0
  213. package/dist/rules/scope/swap.js.map +1 -0
  214. package/dist/rules/scope/title-case.d.ts +46 -0
  215. package/dist/rules/scope/title-case.d.ts.map +1 -0
  216. package/dist/rules/scope/title-case.js +301 -0
  217. package/dist/rules/scope/title-case.js.map +1 -0
  218. package/dist/rules/token/blanks-around-fences.d.ts +3 -0
  219. package/dist/rules/token/blanks-around-fences.d.ts.map +1 -0
  220. package/dist/rules/token/blanks-around-fences.js +44 -0
  221. package/dist/rules/token/blanks-around-fences.js.map +1 -0
  222. package/dist/rules/token/blanks-around-headings.d.ts +3 -0
  223. package/dist/rules/token/blanks-around-headings.d.ts.map +1 -0
  224. package/dist/rules/token/blanks-around-headings.js +108 -0
  225. package/dist/rules/token/blanks-around-headings.js.map +1 -0
  226. package/dist/rules/token/blanks-around-lists.d.ts +3 -0
  227. package/dist/rules/token/blanks-around-lists.d.ts.map +1 -0
  228. package/dist/rules/token/blanks-around-lists.js +56 -0
  229. package/dist/rules/token/blanks-around-lists.js.map +1 -0
  230. package/dist/rules/token/blanks-around-tables.d.ts +3 -0
  231. package/dist/rules/token/blanks-around-tables.d.ts.map +1 -0
  232. package/dist/rules/token/blanks-around-tables.js +42 -0
  233. package/dist/rules/token/blanks-around-tables.js.map +1 -0
  234. package/dist/rules/token/code-block-style.d.ts +3 -0
  235. package/dist/rules/token/code-block-style.d.ts.map +1 -0
  236. package/dist/rules/token/code-block-style.js +30 -0
  237. package/dist/rules/token/code-block-style.js.map +1 -0
  238. package/dist/rules/token/code-fence-style.d.ts +3 -0
  239. package/dist/rules/token/code-fence-style.d.ts.map +1 -0
  240. package/dist/rules/token/code-fence-style.js +35 -0
  241. package/dist/rules/token/code-fence-style.js.map +1 -0
  242. package/dist/rules/token/commands-show-output.d.ts +3 -0
  243. package/dist/rules/token/commands-show-output.d.ts.map +1 -0
  244. package/dist/rules/token/commands-show-output.js +38 -0
  245. package/dist/rules/token/commands-show-output.js.map +1 -0
  246. package/dist/rules/token/descriptive-link-text.d.ts +3 -0
  247. package/dist/rules/token/descriptive-link-text.d.ts.map +1 -0
  248. package/dist/rules/token/descriptive-link-text.js +53 -0
  249. package/dist/rules/token/descriptive-link-text.js.map +1 -0
  250. package/dist/rules/token/emphasis-style.d.ts +3 -0
  251. package/dist/rules/token/emphasis-style.d.ts.map +1 -0
  252. package/dist/rules/token/emphasis-style.js +51 -0
  253. package/dist/rules/token/emphasis-style.js.map +1 -0
  254. package/dist/rules/token/fenced-code-language.d.ts +3 -0
  255. package/dist/rules/token/fenced-code-language.d.ts.map +1 -0
  256. package/dist/rules/token/fenced-code-language.js +35 -0
  257. package/dist/rules/token/fenced-code-language.js.map +1 -0
  258. package/dist/rules/token/first-line-h1.d.ts +3 -0
  259. package/dist/rules/token/first-line-h1.d.ts.map +1 -0
  260. package/dist/rules/token/first-line-h1.js +107 -0
  261. package/dist/rules/token/first-line-h1.js.map +1 -0
  262. package/dist/rules/token/heading-increment.d.ts +3 -0
  263. package/dist/rules/token/heading-increment.d.ts.map +1 -0
  264. package/dist/rules/token/heading-increment.js +27 -0
  265. package/dist/rules/token/heading-increment.js.map +1 -0
  266. package/dist/rules/token/heading-start-left.d.ts +3 -0
  267. package/dist/rules/token/heading-start-left.d.ts.map +1 -0
  268. package/dist/rules/token/heading-start-left.js +31 -0
  269. package/dist/rules/token/heading-start-left.js.map +1 -0
  270. package/dist/rules/token/heading-style.d.ts +3 -0
  271. package/dist/rules/token/heading-style.d.ts.map +1 -0
  272. package/dist/rules/token/heading-style.js +41 -0
  273. package/dist/rules/token/heading-style.js.map +1 -0
  274. package/dist/rules/token/helpers.d.ts +313 -0
  275. package/dist/rules/token/helpers.d.ts.map +1 -0
  276. package/dist/rules/token/helpers.js +746 -0
  277. package/dist/rules/token/helpers.js.map +1 -0
  278. package/dist/rules/token/hr-style.d.ts +3 -0
  279. package/dist/rules/token/hr-style.d.ts.map +1 -0
  280. package/dist/rules/token/hr-style.js +28 -0
  281. package/dist/rules/token/hr-style.js.map +1 -0
  282. package/dist/rules/token/index.d.ts +75 -0
  283. package/dist/rules/token/index.d.ts.map +1 -0
  284. package/dist/rules/token/index.js +226 -0
  285. package/dist/rules/token/index.js.map +1 -0
  286. package/dist/rules/token/line-length.d.ts +3 -0
  287. package/dist/rules/token/line-length.d.ts.map +1 -0
  288. package/dist/rules/token/line-length.js +120 -0
  289. package/dist/rules/token/line-length.js.map +1 -0
  290. package/dist/rules/token/link-fragments.d.ts +3 -0
  291. package/dist/rules/token/link-fragments.d.ts.map +1 -0
  292. package/dist/rules/token/link-fragments.js +145 -0
  293. package/dist/rules/token/link-fragments.js.map +1 -0
  294. package/dist/rules/token/link-image-reference-definitions.d.ts +3 -0
  295. package/dist/rules/token/link-image-reference-definitions.d.ts.map +1 -0
  296. package/dist/rules/token/link-image-reference-definitions.js +50 -0
  297. package/dist/rules/token/link-image-reference-definitions.js.map +1 -0
  298. package/dist/rules/token/link-image-style.d.ts +3 -0
  299. package/dist/rules/token/link-image-style.d.ts.map +1 -0
  300. package/dist/rules/token/link-image-style.js +131 -0
  301. package/dist/rules/token/link-image-style.js.map +1 -0
  302. package/dist/rules/token/list-indent.d.ts +3 -0
  303. package/dist/rules/token/list-indent.d.ts.map +1 -0
  304. package/dist/rules/token/list-indent.js +60 -0
  305. package/dist/rules/token/list-indent.js.map +1 -0
  306. package/dist/rules/token/list-length.d.ts +3 -0
  307. package/dist/rules/token/list-length.d.ts.map +1 -0
  308. package/dist/rules/token/list-length.js +55 -0
  309. package/dist/rules/token/list-length.js.map +1 -0
  310. package/dist/rules/token/list-marker-space.d.ts +3 -0
  311. package/dist/rules/token/list-marker-space.d.ts.map +1 -0
  312. package/dist/rules/token/list-marker-space.js +52 -0
  313. package/dist/rules/token/list-marker-space.js.map +1 -0
  314. package/dist/rules/token/markdoc-attributes.d.ts +3 -0
  315. package/dist/rules/token/markdoc-attributes.d.ts.map +1 -0
  316. package/dist/rules/token/markdoc-attributes.js +269 -0
  317. package/dist/rules/token/markdoc-attributes.js.map +1 -0
  318. package/dist/rules/token/markdoc-pairing.d.ts +3 -0
  319. package/dist/rules/token/markdoc-pairing.d.ts.map +1 -0
  320. package/dist/rules/token/markdoc-pairing.js +73 -0
  321. package/dist/rules/token/markdoc-pairing.js.map +1 -0
  322. package/dist/rules/token/markdoc-syntax.d.ts +3 -0
  323. package/dist/rules/token/markdoc-syntax.d.ts.map +1 -0
  324. package/dist/rules/token/markdoc-syntax.js +119 -0
  325. package/dist/rules/token/markdoc-syntax.js.map +1 -0
  326. package/dist/rules/token/markdoc-unknown-tag.d.ts +3 -0
  327. package/dist/rules/token/markdoc-unknown-tag.d.ts.map +1 -0
  328. package/dist/rules/token/markdoc-unknown-tag.js +64 -0
  329. package/dist/rules/token/markdoc-unknown-tag.js.map +1 -0
  330. package/dist/rules/token/messages.d.ts +4 -0
  331. package/dist/rules/token/messages.d.ts.map +1 -0
  332. package/dist/rules/token/messages.js +20 -0
  333. package/dist/rules/token/messages.js.map +1 -0
  334. package/dist/rules/token/no-alt-text.d.ts +3 -0
  335. package/dist/rules/token/no-alt-text.d.ts.map +1 -0
  336. package/dist/rules/token/no-alt-text.js +47 -0
  337. package/dist/rules/token/no-alt-text.js.map +1 -0
  338. package/dist/rules/token/no-bare-urls.d.ts +3 -0
  339. package/dist/rules/token/no-bare-urls.d.ts.map +1 -0
  340. package/dist/rules/token/no-bare-urls.js +88 -0
  341. package/dist/rules/token/no-bare-urls.js.map +1 -0
  342. package/dist/rules/token/no-blanks-blockquote.d.ts +3 -0
  343. package/dist/rules/token/no-blanks-blockquote.d.ts.map +1 -0
  344. package/dist/rules/token/no-blanks-blockquote.js +39 -0
  345. package/dist/rules/token/no-blanks-blockquote.js.map +1 -0
  346. package/dist/rules/token/no-duplicate-heading.d.ts +3 -0
  347. package/dist/rules/token/no-duplicate-heading.d.ts.map +1 -0
  348. package/dist/rules/token/no-duplicate-heading.js +101 -0
  349. package/dist/rules/token/no-duplicate-heading.js.map +1 -0
  350. package/dist/rules/token/no-duplicate-link-destinations.d.ts +3 -0
  351. package/dist/rules/token/no-duplicate-link-destinations.d.ts.map +1 -0
  352. package/dist/rules/token/no-duplicate-link-destinations.js +65 -0
  353. package/dist/rules/token/no-duplicate-link-destinations.js.map +1 -0
  354. package/dist/rules/token/no-emphasis-as-heading.d.ts +3 -0
  355. package/dist/rules/token/no-emphasis-as-heading.d.ts.map +1 -0
  356. package/dist/rules/token/no-emphasis-as-heading.js +44 -0
  357. package/dist/rules/token/no-emphasis-as-heading.js.map +1 -0
  358. package/dist/rules/token/no-empty-headings.d.ts +3 -0
  359. package/dist/rules/token/no-empty-headings.d.ts.map +1 -0
  360. package/dist/rules/token/no-empty-headings.js +28 -0
  361. package/dist/rules/token/no-empty-headings.js.map +1 -0
  362. package/dist/rules/token/no-empty-links.d.ts +3 -0
  363. package/dist/rules/token/no-empty-links.d.ts.map +1 -0
  364. package/dist/rules/token/no-empty-links.js +67 -0
  365. package/dist/rules/token/no-empty-links.js.map +1 -0
  366. package/dist/rules/token/no-hard-tabs.d.ts +3 -0
  367. package/dist/rules/token/no-hard-tabs.d.ts.map +1 -0
  368. package/dist/rules/token/no-hard-tabs.js +76 -0
  369. package/dist/rules/token/no-hard-tabs.js.map +1 -0
  370. package/dist/rules/token/no-inline-html.d.ts +3 -0
  371. package/dist/rules/token/no-inline-html.d.ts.map +1 -0
  372. package/dist/rules/token/no-inline-html.js +45 -0
  373. package/dist/rules/token/no-inline-html.js.map +1 -0
  374. package/dist/rules/token/no-missing-space-atx.d.ts +3 -0
  375. package/dist/rules/token/no-missing-space-atx.d.ts.map +1 -0
  376. package/dist/rules/token/no-missing-space-atx.js +36 -0
  377. package/dist/rules/token/no-missing-space-atx.js.map +1 -0
  378. package/dist/rules/token/no-missing-space-closed-atx.d.ts +3 -0
  379. package/dist/rules/token/no-missing-space-closed-atx.d.ts.map +1 -0
  380. package/dist/rules/token/no-missing-space-closed-atx.js +45 -0
  381. package/dist/rules/token/no-missing-space-closed-atx.js.map +1 -0
  382. package/dist/rules/token/no-multiple-blanks.d.ts +3 -0
  383. package/dist/rules/token/no-multiple-blanks.d.ts.map +1 -0
  384. package/dist/rules/token/no-multiple-blanks.js +35 -0
  385. package/dist/rules/token/no-multiple-blanks.js.map +1 -0
  386. package/dist/rules/token/no-multiple-space-atx.d.ts +13 -0
  387. package/dist/rules/token/no-multiple-space-atx.d.ts.map +1 -0
  388. package/dist/rules/token/no-multiple-space-atx.js +50 -0
  389. package/dist/rules/token/no-multiple-space-atx.js.map +1 -0
  390. package/dist/rules/token/no-multiple-space-blockquote.d.ts +3 -0
  391. package/dist/rules/token/no-multiple-space-blockquote.d.ts.map +1 -0
  392. package/dist/rules/token/no-multiple-space-blockquote.js +43 -0
  393. package/dist/rules/token/no-multiple-space-blockquote.js.map +1 -0
  394. package/dist/rules/token/no-multiple-space-closed-atx.d.ts +3 -0
  395. package/dist/rules/token/no-multiple-space-closed-atx.d.ts.map +1 -0
  396. package/dist/rules/token/no-multiple-space-closed-atx.js +19 -0
  397. package/dist/rules/token/no-multiple-space-closed-atx.js.map +1 -0
  398. package/dist/rules/token/no-reversed-links.d.ts +3 -0
  399. package/dist/rules/token/no-reversed-links.d.ts.map +1 -0
  400. package/dist/rules/token/no-reversed-links.js +52 -0
  401. package/dist/rules/token/no-reversed-links.js.map +1 -0
  402. package/dist/rules/token/no-space-in-code.d.ts +3 -0
  403. package/dist/rules/token/no-space-in-code.d.ts.map +1 -0
  404. package/dist/rules/token/no-space-in-code.js +75 -0
  405. package/dist/rules/token/no-space-in-code.js.map +1 -0
  406. package/dist/rules/token/no-space-in-emphasis.d.ts +3 -0
  407. package/dist/rules/token/no-space-in-emphasis.d.ts.map +1 -0
  408. package/dist/rules/token/no-space-in-emphasis.js +79 -0
  409. package/dist/rules/token/no-space-in-emphasis.js.map +1 -0
  410. package/dist/rules/token/no-space-in-links.d.ts +3 -0
  411. package/dist/rules/token/no-space-in-links.d.ts.map +1 -0
  412. package/dist/rules/token/no-space-in-links.js +48 -0
  413. package/dist/rules/token/no-space-in-links.js.map +1 -0
  414. package/dist/rules/token/no-trailing-punctuation.d.ts +3 -0
  415. package/dist/rules/token/no-trailing-punctuation.d.ts.map +1 -0
  416. package/dist/rules/token/no-trailing-punctuation.js +38 -0
  417. package/dist/rules/token/no-trailing-punctuation.js.map +1 -0
  418. package/dist/rules/token/no-trailing-spaces.d.ts +3 -0
  419. package/dist/rules/token/no-trailing-spaces.d.ts.map +1 -0
  420. package/dist/rules/token/no-trailing-spaces.js +89 -0
  421. package/dist/rules/token/no-trailing-spaces.js.map +1 -0
  422. package/dist/rules/token/ol-prefix.d.ts +3 -0
  423. package/dist/rules/token/ol-prefix.d.ts.map +1 -0
  424. package/dist/rules/token/ol-prefix.js +70 -0
  425. package/dist/rules/token/ol-prefix.js.map +1 -0
  426. package/dist/rules/token/proper-names.d.ts +3 -0
  427. package/dist/rules/token/proper-names.d.ts.map +1 -0
  428. package/dist/rules/token/proper-names.js +93 -0
  429. package/dist/rules/token/proper-names.js.map +1 -0
  430. package/dist/rules/token/reference-links-images.d.ts +3 -0
  431. package/dist/rules/token/reference-links-images.d.ts.map +1 -0
  432. package/dist/rules/token/reference-links-images.js +36 -0
  433. package/dist/rules/token/reference-links-images.js.map +1 -0
  434. package/dist/rules/token/required-headings.d.ts +3 -0
  435. package/dist/rules/token/required-headings.d.ts.map +1 -0
  436. package/dist/rules/token/required-headings.js +83 -0
  437. package/dist/rules/token/required-headings.js.map +1 -0
  438. package/dist/rules/token/single-h1.d.ts +3 -0
  439. package/dist/rules/token/single-h1.d.ts.map +1 -0
  440. package/dist/rules/token/single-h1.js +56 -0
  441. package/dist/rules/token/single-h1.js.map +1 -0
  442. package/dist/rules/token/single-trailing-newline.d.ts +3 -0
  443. package/dist/rules/token/single-trailing-newline.d.ts.map +1 -0
  444. package/dist/rules/token/single-trailing-newline.js +25 -0
  445. package/dist/rules/token/single-trailing-newline.js.map +1 -0
  446. package/dist/rules/token/strong-style.d.ts +3 -0
  447. package/dist/rules/token/strong-style.d.ts.map +1 -0
  448. package/dist/rules/token/strong-style.js +51 -0
  449. package/dist/rules/token/strong-style.js.map +1 -0
  450. package/dist/rules/token/table-column-count.d.ts +3 -0
  451. package/dist/rules/token/table-column-count.d.ts.map +1 -0
  452. package/dist/rules/token/table-column-count.js +44 -0
  453. package/dist/rules/token/table-column-count.js.map +1 -0
  454. package/dist/rules/token/table-column-style.d.ts +3 -0
  455. package/dist/rules/token/table-column-style.d.ts.map +1 -0
  456. package/dist/rules/token/table-column-style.js +179 -0
  457. package/dist/rules/token/table-column-style.js.map +1 -0
  458. package/dist/rules/token/table-pipe-style.d.ts +3 -0
  459. package/dist/rules/token/table-pipe-style.d.ts.map +1 -0
  460. package/dist/rules/token/table-pipe-style.js +54 -0
  461. package/dist/rules/token/table-pipe-style.js.map +1 -0
  462. package/dist/rules/token/ul-indent.d.ts +3 -0
  463. package/dist/rules/token/ul-indent.d.ts.map +1 -0
  464. package/dist/rules/token/ul-indent.js +72 -0
  465. package/dist/rules/token/ul-indent.js.map +1 -0
  466. package/dist/rules/token/ul-style.d.ts +3 -0
  467. package/dist/rules/token/ul-style.d.ts.map +1 -0
  468. package/dist/rules/token/ul-style.js +80 -0
  469. package/dist/rules/token/ul-style.js.map +1 -0
  470. package/dist/rules/types.d.ts +81 -0
  471. package/dist/rules/types.d.ts.map +1 -0
  472. package/dist/rules/types.js +2 -0
  473. package/dist/rules/types.js.map +1 -0
  474. package/dist/rules/utils.d.ts +29 -0
  475. package/dist/rules/utils.d.ts.map +1 -0
  476. package/dist/{assertions → rules}/utils.js +27 -0
  477. package/dist/rules/utils.js.map +1 -0
  478. package/dist/scopes/extractor.d.ts +7 -0
  479. package/dist/scopes/extractor.d.ts.map +1 -0
  480. package/dist/scopes/extractor.js +475 -0
  481. package/dist/scopes/extractor.js.map +1 -0
  482. package/dist/scopes/selector.d.ts +51 -0
  483. package/dist/scopes/selector.d.ts.map +1 -0
  484. package/dist/scopes/selector.js +121 -0
  485. package/dist/scopes/selector.js.map +1 -0
  486. package/dist/scopes/sentences.d.ts +15 -0
  487. package/dist/scopes/sentences.d.ts.map +1 -0
  488. package/dist/scopes/sentences.js +124 -0
  489. package/dist/scopes/sentences.js.map +1 -0
  490. package/dist/scopes/types.d.ts +44 -0
  491. package/dist/scopes/types.d.ts.map +1 -0
  492. package/dist/scopes/types.js +2 -0
  493. package/dist/scopes/types.js.map +1 -0
  494. package/dist/scopes/vocabulary.d.ts +16 -0
  495. package/dist/scopes/vocabulary.d.ts.map +1 -0
  496. package/dist/scopes/vocabulary.js +70 -0
  497. package/dist/scopes/vocabulary.js.map +1 -0
  498. package/dist/types/assertions.d.ts +95 -32
  499. package/dist/types/assertions.d.ts.map +1 -1
  500. package/dist/types/problems.d.ts +4 -5
  501. package/dist/types/problems.d.ts.map +1 -1
  502. package/dist/types/rules.d.ts +4 -6
  503. package/dist/types/rules.d.ts.map +1 -1
  504. package/examples/appendices/google.appendix.yaml +91 -0
  505. package/examples/appendices/inclusive-language.appendix.yaml +61 -0
  506. package/examples/appendices/microsoft.appendix.yaml +99 -0
  507. package/examples/appendices/plain-language.appendix.yaml +88 -0
  508. package/examples/google.yaml +1525 -0
  509. package/examples/inclusive-language.yaml +304 -0
  510. package/examples/microsoft.yaml +1542 -0
  511. package/examples/plain-language.yaml +325 -0
  512. package/package.json +49 -16
  513. package/presets/google/PROVENANCE.md +1022 -0
  514. package/presets/google/sources.json +192 -0
  515. package/presets/inclusive-language/PROVENANCE.md +174 -0
  516. package/presets/inclusive-language/sources.json +107 -0
  517. package/presets/microsoft/PROVENANCE.md +1555 -0
  518. package/presets/microsoft/sources.json +494 -0
  519. package/presets/plain-language/PROVENANCE.md +364 -0
  520. package/presets/plain-language/sources.json +108 -0
  521. package/dist/assertions/bullet-style.d.ts +0 -3
  522. package/dist/assertions/bullet-style.d.ts.map +0 -1
  523. package/dist/assertions/bullet-style.js +0 -60
  524. package/dist/assertions/bullet-style.js.map +0 -1
  525. package/dist/assertions/index.d.ts +0 -21
  526. package/dist/assertions/index.d.ts.map +0 -1
  527. package/dist/assertions/index.js +0 -30
  528. package/dist/assertions/index.js.map +0 -1
  529. package/dist/assertions/max-image-size.d.ts +0 -3
  530. package/dist/assertions/max-image-size.d.ts.map +0 -1
  531. package/dist/assertions/max-image-size.js +0 -73
  532. package/dist/assertions/max-image-size.js.map +0 -1
  533. package/dist/assertions/max-line-length.d.ts +0 -3
  534. package/dist/assertions/max-line-length.d.ts.map +0 -1
  535. package/dist/assertions/max-line-length.js +0 -68
  536. package/dist/assertions/max-line-length.js.map +0 -1
  537. package/dist/assertions/no-broken-fragment-links.d.ts +0 -3
  538. package/dist/assertions/no-broken-fragment-links.d.ts.map +0 -1
  539. package/dist/assertions/no-broken-fragment-links.js +0 -79
  540. package/dist/assertions/no-broken-fragment-links.js.map +0 -1
  541. package/dist/assertions/no-duplicate-headings.d.ts +0 -3
  542. package/dist/assertions/no-duplicate-headings.d.ts.map +0 -1
  543. package/dist/assertions/no-duplicate-headings.js +0 -66
  544. package/dist/assertions/no-duplicate-headings.js.map +0 -1
  545. package/dist/assertions/no-hard-tabs.d.ts +0 -3
  546. package/dist/assertions/no-hard-tabs.d.ts.map +0 -1
  547. package/dist/assertions/no-hard-tabs.js +0 -63
  548. package/dist/assertions/no-hard-tabs.js.map +0 -1
  549. package/dist/assertions/no-trailing-spaces.d.ts +0 -3
  550. package/dist/assertions/no-trailing-spaces.d.ts.map +0 -1
  551. package/dist/assertions/no-trailing-spaces.js +0 -72
  552. package/dist/assertions/no-trailing-spaces.js.map +0 -1
  553. package/dist/assertions/pattern.d.ts +0 -3
  554. package/dist/assertions/pattern.d.ts.map +0 -1
  555. package/dist/assertions/pattern.js +0 -39
  556. package/dist/assertions/pattern.js.map +0 -1
  557. package/dist/assertions/semantic-line-breaks.d.ts +0 -3
  558. package/dist/assertions/semantic-line-breaks.d.ts.map +0 -1
  559. package/dist/assertions/semantic-line-breaks.js +0 -152
  560. package/dist/assertions/semantic-line-breaks.js.map +0 -1
  561. package/dist/assertions/swap.d.ts +0 -3
  562. package/dist/assertions/swap.d.ts.map +0 -1
  563. package/dist/assertions/swap.js +0 -39
  564. package/dist/assertions/swap.js.map +0 -1
  565. package/dist/assertions/utils.d.ts +0 -8
  566. package/dist/assertions/utils.d.ts.map +0 -1
  567. package/dist/assertions/utils.js.map +0 -1
  568. package/dist/core/scope-parser.d.ts +0 -26
  569. package/dist/core/scope-parser.d.ts.map +0 -1
  570. package/dist/core/scope-parser.js +0 -110
  571. package/dist/core/scope-parser.js.map +0 -1
  572. package/dist/files.d.ts +0 -2
  573. package/dist/files.d.ts.map +0 -1
  574. package/dist/files.js +0 -39
  575. package/dist/files.js.map +0 -1
  576. package/dist/load-config.d.ts +0 -25
  577. package/dist/load-config.d.ts.map +0 -1
  578. package/dist/load-config.js +0 -104
  579. package/dist/load-config.js.map +0 -1
  580. package/dist/load.d.ts +0 -25
  581. package/dist/load.d.ts.map +0 -1
  582. package/dist/load.js +0 -112
  583. package/dist/load.js.map +0 -1
  584. package/dist/scope.d.ts +0 -26
  585. package/dist/scope.d.ts.map +0 -1
  586. package/dist/scope.js +0 -110
  587. package/dist/scope.js.map +0 -1
  588. package/dist/types.d.ts +0 -109
  589. package/dist/types.d.ts.map +0 -1
  590. package/dist/types.js.map +0 -1
  591. package/dist/validate.d.ts +0 -31
  592. package/dist/validate.d.ts.map +0 -1
  593. package/dist/validate.js +0 -154
  594. package/dist/validate.js.map +0 -1
  595. /package/dist/{types.js → parser/types.js} +0 -0
@@ -0,0 +1,192 @@
1
+ {
2
+ "normalization": {
3
+ "method": "article-body-sha256",
4
+ "description": "Each digest is sha256 over the UTF-8 bytes of the <article class=\"devsite-article\">...</article> region extracted from the raw HTML response -- NOT the full page. Hashing the full raw HTML is not reproducible: every fetch embeds a per-request <script type=\"application/json\" analytics> blob whose JSON keys serialize in non-deterministic order, a CSP nonce regenerated per request, and an inline feature-flag bootstrap array whose element order also varies per request. None of that reflects the guide's actual content. The <article class=\"devsite-article\"> region contains the guide's rendered content (headings, paragraphs, lists, tables) and excludes all of the above -- verified byte-identical across two consecutive fetches for all 30 pages below. See PROVENANCE.md's 'sources.json normalization' section for the full reproduction method and evidence.",
5
+ "extractionPattern": "<article class=\"devsite-article\">.*?</article>",
6
+ "extractionFlags": "dotall, first match",
7
+ "hashedBytesField": "bytes -- the byte length of the EXTRACTED region (UTF-8), not the raw page. A future re-check with a matching `bytes` but different `sha256` (or vice versa) signals the extraction may have changed shape rather than the content, and should be triaged before treating it as drift.",
8
+ "fetchMethod": "curl -- confirmed empirically (Fix wave C / Item 4) that a plain Node `fetch()` returns a materially different HTML variant of the same URL than `curl` does (not just the non-deterministic per-request noise described above -- a different response shape from the same server for the same request, attributable to the client). A future re-check must fetch with `curl`, not `fetch()` or another HTTP client, or a client-driven variant could be misread as guide drift."
9
+ },
10
+ "pages": [
11
+ {
12
+ "url": "https://developers.google.com/style/headings",
13
+ "fetchedAt": "2026-07-29",
14
+ "bytes": 25236,
15
+ "sha256": "676b223e99eea913e8c9f0e157c0a0d6e70622d8d2f655d34b77d07da8cac535"
16
+ },
17
+ {
18
+ "url": "https://developers.google.com/style/periods",
19
+ "fetchedAt": "2026-07-29",
20
+ "bytes": 18674,
21
+ "sha256": "d03856a7f631268b377e48d41011e2a596ee03811608ca375e8bfccde7b3ec0e"
22
+ },
23
+ {
24
+ "url": "https://developers.google.com/style/accessibility",
25
+ "fetchedAt": "2026-07-29",
26
+ "bytes": 28786,
27
+ "sha256": "c79419c7e4c446613b02eb4b1927ea52df874ef79bb6157e8e9097e28588d572"
28
+ },
29
+ {
30
+ "url": "https://developers.google.com/style/lists",
31
+ "fetchedAt": "2026-07-29",
32
+ "bytes": 29943,
33
+ "sha256": "45dd5bc49249431df11b2eda473f96404e4511f40076d63d9f7a0bb1c1765702"
34
+ },
35
+ {
36
+ "url": "https://developers.google.com/style/person",
37
+ "fetchedAt": "2026-07-29",
38
+ "bytes": 15672,
39
+ "sha256": "c25db5b5b3fba57de6a0ceae90d9eaa94565e4d1be8da78aa2bb74e6c6313ce2"
40
+ },
41
+ {
42
+ "url": "https://developers.google.com/style/contractions",
43
+ "fetchedAt": "2026-07-29",
44
+ "bytes": 10555,
45
+ "sha256": "932fea9d2ef6ae4e50a7a6596e1c6beca687b5004e8fc0499de5e3dde7b5d7f4"
46
+ },
47
+ {
48
+ "url": "https://developers.google.com/style/word-list",
49
+ "fetchedAt": "2026-07-29",
50
+ "bytes": 265744,
51
+ "sha256": "3a7a4548ee05ab97303fdee88878a6d8f64f04e8f3c9a481b3c20d732d99fec9"
52
+ },
53
+ {
54
+ "url": "https://developers.google.com/style/timeless-documentation",
55
+ "fetchedAt": "2026-07-29",
56
+ "bytes": 15993,
57
+ "sha256": "1d7286097aeb0d8de6282305db7db6354ff8ca20aceb6523ae77ad424d9ff4ee"
58
+ },
59
+ {
60
+ "url": "https://developers.google.com/style/abbreviations",
61
+ "fetchedAt": "2026-07-29",
62
+ "bytes": 22489,
63
+ "sha256": "89d73ca93921f5243a8b8e30b1668483c33b868352acb7e2eebf04291e219a14"
64
+ },
65
+ {
66
+ "url": "https://developers.google.com/style/slashes",
67
+ "fetchedAt": "2026-07-29",
68
+ "bytes": 15576,
69
+ "sha256": "0bfab0f261e86d07c65c2185f35770f690a405b628191f088f9abe71179f5b4c"
70
+ },
71
+ {
72
+ "url": "https://developers.google.com/style/numbers",
73
+ "fetchedAt": "2026-07-29",
74
+ "bytes": 24862,
75
+ "sha256": "cc227b69caaa189a7f51ea5da7848b42bc10b613e0fb38d781340396decf0514"
76
+ },
77
+ {
78
+ "url": "https://developers.google.com/style/dates-times",
79
+ "fetchedAt": "2026-07-29",
80
+ "bytes": 20103,
81
+ "sha256": "fb62cb89935f5d84d0ec3990b57bba4cd4f7acfb4b67fa847d49ddd5ee987aa3"
82
+ },
83
+ {
84
+ "url": "https://developers.google.com/style/commas",
85
+ "fetchedAt": "2026-07-29",
86
+ "bytes": 17596,
87
+ "sha256": "9008f0b428b66a3b405116976786ba88bda0462b4814add7704c4f68a57b9135"
88
+ },
89
+ {
90
+ "url": "https://developers.google.com/style/dashes",
91
+ "fetchedAt": "2026-07-29",
92
+ "bytes": 15316,
93
+ "sha256": "9103627b4bf7c194060a74f636078732a29c05ba8c7e5121ccb870dc8e9a5cab"
94
+ },
95
+ {
96
+ "url": "https://developers.google.com/style/pronouns",
97
+ "fetchedAt": "2026-07-29",
98
+ "bytes": 17699,
99
+ "sha256": "19429c67d35f0a423ce9de21365aafcba318235f918d7e10d557906e9acda96f"
100
+ },
101
+ {
102
+ "url": "https://developers.google.com/style/cross-references",
103
+ "fetchedAt": "2026-07-29",
104
+ "bytes": 33039,
105
+ "sha256": "be3023804a1841d52074a2a8b432baf66e6c13604e8a045e23759add57dd1075"
106
+ },
107
+ {
108
+ "url": "https://developers.google.com/style/text-formatting",
109
+ "fetchedAt": "2026-07-29",
110
+ "bytes": 17455,
111
+ "sha256": "84c794977bbeaf5b75d8e6ca9de5986a0cdd4ad4ecbb1b740e53ed781d014ce7"
112
+ },
113
+ {
114
+ "url": "https://developers.google.com/style/capitalization",
115
+ "fetchedAt": "2026-07-29",
116
+ "bytes": 17794,
117
+ "sha256": "4b31fc5bd9c60a1ae0b1a650e85b41c913d3497142c136c750424955d40ce538"
118
+ },
119
+ {
120
+ "url": "https://developers.google.com/style/code-in-text",
121
+ "fetchedAt": "2026-07-29",
122
+ "bytes": 35658,
123
+ "sha256": "416df7e082dbd679fa6aed9337c74a9a9956eb6188dfad15b011d8008444705d"
124
+ },
125
+ {
126
+ "url": "https://developers.google.com/style/ui-elements",
127
+ "fetchedAt": "2026-07-29",
128
+ "bytes": 43078,
129
+ "sha256": "d52aed7556c062270544a5f9b90360700a77c129b9aaa1153300c3fd520bb22e"
130
+ },
131
+ {
132
+ "url": "https://developers.google.com/style/procedures",
133
+ "fetchedAt": "2026-07-29",
134
+ "bytes": 32253,
135
+ "sha256": "15f0312be3cfc60d3a3eb4ac95c3b72da5c779c099035dea0ed45213106bdf40"
136
+ },
137
+ {
138
+ "url": "https://developers.google.com/style/inclusive-documentation",
139
+ "fetchedAt": "2026-07-29",
140
+ "bytes": 27744,
141
+ "sha256": "633fac89a8969bce0caf046d0478a22a40453a42729157277e8dab298a85142c"
142
+ },
143
+ {
144
+ "url": "https://developers.google.com/style/tables",
145
+ "fetchedAt": "2026-07-29",
146
+ "bytes": 20487,
147
+ "sha256": "704368a13fd7a53a0224fe4076361ad5ffe7b0869a2f76608f58d0aecf50dd1e"
148
+ },
149
+ {
150
+ "url": "https://developers.google.com/style/hyphens",
151
+ "fetchedAt": "2026-07-29",
152
+ "bytes": 24974,
153
+ "sha256": "e057fb6a0e8e8282c23a888d58467b50c2786a5e6deee3584ae257eedf13ff7f"
154
+ },
155
+ {
156
+ "url": "https://developers.google.com/style/colons",
157
+ "fetchedAt": "2026-07-29",
158
+ "bytes": 13625,
159
+ "sha256": "5eca4d777c3c0a8de729f28bc5898baff38110d50edcfaab70aef87487bdec02"
160
+ },
161
+ {
162
+ "url": "https://developers.google.com/style/tense",
163
+ "fetchedAt": "2026-07-29",
164
+ "bytes": 11163,
165
+ "sha256": "2282860317719650d11396af7a96f0acb0742bb62fe1cd42c59ca3458ec0a47c"
166
+ },
167
+ {
168
+ "url": "https://developers.google.com/style/translation",
169
+ "fetchedAt": "2026-07-29",
170
+ "bytes": 27763,
171
+ "sha256": "a36ab166809c41bdd89c53e4fc52fcd79ab3ed72acd9f360a7f6db894990a4ac"
172
+ },
173
+ {
174
+ "url": "https://developers.google.com/style/future",
175
+ "fetchedAt": "2026-07-29",
176
+ "bytes": 9743,
177
+ "sha256": "edb990cee9f33d0d5d293568ebe98b2960123f1fd41400e012b6f23f71cc1a8a"
178
+ },
179
+ {
180
+ "url": "https://developers.google.com/style/voice",
181
+ "fetchedAt": "2026-07-29",
182
+ "bytes": 14209,
183
+ "sha256": "44c5f24ad9814fe3f613cc8be0a1d70281d09a7167ef0f92c492bde73bdbf52d"
184
+ },
185
+ {
186
+ "url": "https://developers.google.com/style/tone",
187
+ "fetchedAt": "2026-07-29",
188
+ "bytes": 17959,
189
+ "sha256": "e44246ff3f5de71108430271f31f00c4b8a3f3f359e34135f3bfb2a3ffd3e9dd"
190
+ }
191
+ ]
192
+ }
@@ -0,0 +1,174 @@
1
+ # Provenance: `recheck/inclusive-language`
2
+
3
+ Composable, guide-agnostic preset: the **intersection** of `recheck/google`
4
+ and `recheck/microsoft`'s inclusive/bias-free/ableist/accessibility content —
5
+ terminology both flagship guides independently state should be avoided.
6
+ Sync date: **2026-07-30** (no new fetch; see "How this preset was verified"
7
+ below).
8
+
9
+ Modification note: rules are adapted to Recheck's assertion vocabulary
10
+ (`swap`, `pattern`); wording is paraphrased into each rule's `message`, not
11
+ quoted verbatim. Every rule carries a `link:` to one of its two source pages
12
+ (picked for specificity; the other guide's citation lives in this table and
13
+ in the rule's own code comment).
14
+
15
+ ## Shipped rules
16
+
17
+ All `warn` severity (pure word-choice/terminology, no structural content —
18
+ matching both flagships' "word choice → warn" policy) and all detection-only
19
+ (`fix: false`, forced structurally — see `inclusive-language.ts`'s header).
20
+
21
+ | Rule id | Term(s) | Google source | Microsoft source | Note |
22
+ |---|---|---|---|---|
23
+ | `inclusive-language/slave` | `slave` | C§3.5 row 2 ("Don't use. Instead, use alternative terms... such as worker or replica.") | a-z/master-slave (H.md row 46: "Don't use master/slave. Use primary/replica...") | Bare `master` excluded on both sides — too polysemous (master's degree, master key, git branch name); only the unambiguous `slave` ships as a swap. |
24
+ | `inclusive-language/master-slave-pairing` | `master/slave`, `master-slave` | C§3.5 row 1 ("Never use in conjunction with slave... primary, main, original, parent... controller... leader, or active") | a-z/master-slave (H.md row 46) + bias-free-communication (E.md V25) | The two guides disagree on the replacement (primary/replica vs. primary/subordinate) — ships as `pattern`, matching `microsoft/master-slave`'s own resolution of the identical disagreement. |
25
+ | `inclusive-language/blacklist-whitelist` | `blacklist`, `whitelist` (noun forms) | C§3.5 rows 3-4 | a-z/blacklist, a-z/whitelist (G.md row 58, H.md row 45) | Both guides separately caution the VERB forms don't take a word-for-word swap; message says so. Single-word replacement (`denylist`/`allowlist`) per spec, noting Microsoft's two-word preference. |
26
+ | `inclusive-language/dmz` | `DMZ`, `demilitarized zone` | C§3.5 row 26 | a-z/demilitarized-zone-dmz (G.md row 61) + bias-free-communication | Rare exact match: both guides recommend the identical replacement, "perimeter network". Anchored against the real Korean-border sense (`(?!\s+(?:dividing|between|separating)\b)`), the same guard already proven necessary in `microsoft/bias-free-terms`. |
27
+ | `inclusive-language/grayed-out` | `grayed-out`, `greyed-out` | C§3.5 row 20 | a-z/gray-grayed-out (G.md row 112) | Microsoft's own page: "Don't use gray or grayed out to describe commands or options that are in an unusable state—use not available or isn't available instead" — the shared conclusion is that the JARGON TERM itself should be avoided; Google's "unavailable" ships as the default replacement text. **Not** "shaded": the live page reserves "shaded" for describing the appearance of checkboxes that represent a mixture of settings, a narrower, different case, not a general alternate phrasing for "grayed out" (same distinction `recheck/microsoft`'s own PROVENANCE.md draws for its "shaded" entry). |
28
+ | `inclusive-language/he-she` | `he/she`, `s/he` | Google pronouns page (via C/D.md context) | bias-free-communication V23 (E.md): "Don't use constructions like he/she and s/he." | `(s)he` and "his or her" are NOT independently Microsoft-confirmed as literal banned strings (V23's own caveat) — left out. |
29
+ | `inclusive-language/nondisabled-person` | `normal person`, `healthy person` | D§3.6 row 45 (inclusive-documentation): "Don't describe people without disabilities as normal or healthy" | Microsoft accessibility table Row 5: "Person without a disability" preferred / "Non-disabled person, able-bodied person" acceptable | Matched phrase-level, never bare `normal`/`healthy` — both guides' own text (and `microsoft/accessibility-terms`'s collision note) flag the statistical/wellness senses of the bare words as unrelated and unaddressed. |
30
+ | `inclusive-language/suffering-victim` | `suffering from`, `victim of` | D§3.6 row 43 (inclusive-documentation): "such as victim of, suffering from... instead, use... experiencing, living with" | Microsoft accessibility table Row 4 ("suffers from", "a victim of" in Do-not-use column) + bias-free V28 | Microsoft's own replacement for Row 4 is sometimes a fuller, condition-specific sentence rewrite, not a literal swap — message notes this. Microsoft's "affected by"/"stricken with" (also Row 4) are NOT Google-confirmed and are excluded. |
31
+ | `inclusive-language/differently-abled` | `differently abled` | D§3.6 row 44 (inclusive-documentation, DETECT-ONLY, no replacement given): "physically challenged, special, differently abled, handi-capable" | Microsoft accessibility table Row 8 (Do-not-use column), preferred "person with cognitive disabilities, developmental disabilities, learning disabilities, or dyslexia" | Only "differently abled" is the exact shared string across the two guides' respective lists; Google's other three synonyms in the same row are not independently Microsoft-confirmed. Detection-only, no forced replacement: the two guides scope this euphemism to different specific disabilities. |
32
+ | `inclusive-language/crippled` | `cripple`, `crippled` | D§3.6 row 27 (word-list#cripple): figurative → "slowed down"; of-person → person-first alternatives | Microsoft accessibility table Row 2 (Do-not-use column), preferred "person with limited mobility, person who has a mobility or physical disability" | Detection-only, no forced replacement — the two guides give different alternative sets for the figurative vs. person-reference senses. `microsoft/accessibility-terms` already ships `crippled` bare/unguarded with no demonstrated unrelated collision; this preset does the same for both `cripple` and `crippled`. |
33
+ | `inclusive-language/nuke` | `nuke` | C§3.5 (word-list#nuke): "Don't use. Instead use remove or attack." | Militaristic-language "Never use" list (E.md V26): "...nuke, go nuclear..." | The one term drawn from Microsoft's militaristic list. No other Google-confirmed term overlaps that list. |
34
+
35
+ ## Excluded (single-guide coverage — the intersection principle)
36
+
37
+ These terms are `CONFIRMED` on only ONE guide's side, so they are left out —
38
+ shipping them here would make this preset silently guide-specific rather than
39
+ composable onto either flagship:
40
+
41
+ **Google-only** (no Microsoft evidence found in any verification pass):
42
+ `graylist`/`greylist`, `blackhat`/`whitehat`/`grayhat`, `blackhole` (verb),
43
+ `black-box`/`white-box`/`gray-box` testing (Microsoft's own "black box: never"
44
+ entry is a general A-Z word-choice row, not bias-free/accessibility-themed —
45
+ see "Also excluded" below), `white label`, `white glove`, `grandfathered`,
46
+ `guys`/`you guys`, `gypsy`, `ghetto`, `ninja`, `guru`, `sherpa`, `dojo`, `mom
47
+ test`/`grandma test`/`girlfriend test`, `monkey test`, `brown bag`, `build
48
+ cop`/`build sheriff`, `war room`, `tribal knowledge`, `native` (of people),
49
+ `first class`/`first-class citizen`, `male adapter`, `female adapter`, `man
50
+ hours`, `manmade`/`man made`, `manned`, `man-in-the-middle`/MITM,
51
+ `preferred pronouns`, `final solution`, `denigrate`, `target` (verb, of
52
+ people), `webmaster`, `sexy`, `voodoo`, `holiday`/`Black Friday`/`Cyber
53
+ Monday`, `the elderly`/`the aged`/`senior citizens`, `the disabled`, `a
54
+ quadriplegic`, `wheelchair-bound`, `unsighted`/`visually challenged` (these
55
+ resolve to `blind`'s person-reference alternatives, never its figurative
56
+ ones — moot here since Microsoft doesn't independently confirm either term),
57
+ `crazy`/`bonkers`/`mad`/`lunatic`/`insane`/`loony`, `sane`, `sanity check`,
58
+ `retarded`, `dumb down`, `dummy variable`, `blind to`/`blind eye to`.
59
+
60
+ **Microsoft-only** (no Google evidence found): `chairman`/`chairwoman`,
61
+ `mankind`, `manpower`, `salesman`/`salesmen` (Microsoft's own bias-free page,
62
+ V24 — Google's guide never states these), `screened subnet` (paired with DMZ
63
+ on Microsoft's page but not independently on Google's), `sight-impaired`,
64
+ `vision-impaired`, `hearing-impaired` (Google's own, DIFFERENT terms —
65
+ `unsighted`/`visually challenged` — are the Google-side equivalent family,
66
+ but the literal strings differ, so neither side's term is shipped here),
67
+ `dumb`, `mute`, `non-verbal`, `an epileptic`, `maimed`, `missing a limb`,
68
+ `birth defect`, `Special Ed person`, `stupid`, `slow learner`, `mentally
69
+ handicapped`, `special needs` (appears TWICE on Microsoft's own 11-row table
70
+ with two different preferred replacements — a real self-contradiction on
71
+ Microsoft's own page — moot here regardless since Google never states it),
72
+ `handicapped`/`the handicapped`/`people with handicaps`, `lame` (excluded on
73
+ Microsoft's own preset too, for colliding with "lame excuse"/"lame joke" —
74
+ the same reasoning applies here even though it happens to be
75
+ Microsoft-only), `Asperger's`.
76
+
77
+ ## Also excluded (present in both guides' broader word lists, but not shipped
78
+ here as inclusive-language)
79
+
80
+ - **`disable`/`disabled` (of a broken/malfunctioning system)** — Google
81
+ confirms (word-list#disable: "use inactive, unavailable, deactivate, turn
82
+ off, or deselect") and Microsoft confirms (a-z/disable-disabled: "Use turn
83
+ off") a narrow ableist-metaphor sense (describing something as "disabled"
84
+ to mean broken). **Deliberately not shipped**: `disable`/`disabled` is
85
+ core, ubiquitous, entirely correct technical vocabulary in exactly the
86
+ corpus Recheck targets ("disable this feature", "the API is disabled",
87
+ feature flags) — a bare-word rule would misfire on nearly every API
88
+ document that describes turning something off, a worse false-positive
89
+ profile than the `shall`/`implement`/`command` hazard the plain-language
90
+ preset's header calls out. The guide's actual "avoid" case (describing
91
+ something as broken, not merely off) has no reliable textual signal to
92
+ anchor against.
93
+ - **`hang`/`hung` (of a system)**, **`healthy` (of a system)** — present in
94
+ both Google's word-list (word-list#hang, word-list#healthy) and
95
+ Microsoft's general A-Z word list ("hang, hangs -> stop responding",
96
+ SUBSTRING-RISK-flagged). Excluded here because, looked at independently,
97
+ this is general word-choice/precision content on BOTH sides (not sourced
98
+ from either guide's bias-free-communication/inclusive-documentation/
99
+ accessibility pages) — `recheck/google`'s own PROVENANCE.md independently
100
+ excludes both for the identical polysemy reason ("hung the picture", "hung
101
+ jury", "a healthy amount of caution", "healthy competition").
102
+ - **`black box`** (bare, general sense) — Google's C§3.5 entry is
103
+ explicitly framed as inclusive language (alongside blacklist/whitelist);
104
+ Microsoft's matching A-Z row ("black box | never | DETECT-ONLY") is a
105
+ general word-choice entry with no bias-free/accessibility framing found in
106
+ any source. Left out for the same reason as `hang`/`healthy` above — only
107
+ one side's citation is actually inclusive-language-themed.
108
+
109
+ ## How this preset was verified
110
+
111
+ Every term shipped here was already confirmed against a live page while
112
+ verifying `recheck/google`'s inclusive/ableist-language content and
113
+ `recheck/microsoft`'s bias-free, militaristic-language, and
114
+ accessibility-terms content — no separate web fetch was needed for this
115
+ preset. This file was built by taking the **intersection** of those existing
116
+ results: a term ships here only if it is independently `CONFIRMED` on at
117
+ least one Google source AND at least one Microsoft source. Where only one
118
+ guide covers a term, it is listed in "Excluded" above with the reason — that
119
+ asymmetry is what keeps this preset safely composable onto *either* flagship
120
+ without duplicating or contradicting either one's own word list.
121
+
122
+ ### Duplicate-finding audit
123
+
124
+ Unlike `recheck/plain-language` (where two clean single-phrase duplicates
125
+ were found and removed — see its own PROVENANCE.md), this preset's overlap
126
+ with the flagships is NOT a removable defect: it is the direct, unavoidable
127
+ consequence of building it as their intersection in the first place. Every
128
+ term shipped here is, by construction, already confirmed by at least one of
129
+ the two flagship reports — which usually means it is already SHIPPED by
130
+ that flagship's own preset too.
131
+
132
+ Measured directly with `lintContent` over this preset's own violations
133
+ fixture (`inclusive-language-violations.md`, which exercises all 11 shipped
134
+ rules), stacked onto each flagship in turn (see `preset-composition.test.ts`'s
135
+ "duplicate findings" describe block for the live, asserted counts):
136
+
137
+ | Stacked with | Total problems | Duplicate positions | Rules that duplicate | Rules that are net-new |
138
+ |---|---|---|---|---|
139
+ | `recheck/google` | 32 | **11** | `slave`, `blacklist-whitelist`, `grayed-out`, `he-she`, `dmz`, `nuke`, `suffering-victim` (7 of 11) | `master-slave-pairing`, `nondisabled-person`, `differently-abled`, `crippled` (4 of 11) |
140
+ | `recheck/microsoft` | 27 | **8** | `dmz`, `master-slave-pairing`, `nondisabled-person`, `differently-abled`, `crippled`, `blacklist-whitelist` (6 of 11) | `slave`, `grayed-out`, `he-she`, `suffering-victim`, `nuke` (5 of 11) |
141
+
142
+ **The union of the two "duplicates" columns is all 11 rules.** There is no
143
+ rule in this preset that is simultaneously non-duplicate against BOTH
144
+ flagships — every single one duplicates at least one of them. This is
145
+ mathematically inevitable, not a quality gap to fix by trimming: trimming
146
+ the rules that duplicate Google would gut the preset's value for Microsoft
147
+ users and vice versa, and there is no third option that keeps the
148
+ intersection's whole reason for existing (cross-guide agreement) while being
149
+ simultaneously novel against either specific flagship alone.
150
+
151
+ **Decision, stated plainly rather than left for a user to discover**: this
152
+ preset's full, zero-duplicate value is realized STANDALONE, alongside
153
+ `recheck/prose`, or on a project using neither flagship. Stacked onto
154
+ exactly one flagship, it still adds real value — the "net-new" columns above
155
+ are genuine gaps that flagship's own editorial pass left out — but a
156
+ majority of its findings (7 of 11 with Google, 6 of 11 with Microsoft) will
157
+ be reported twice, once by each preset, for the same span. This is expected
158
+ behavior, documented here and in the preset's own file header and the
159
+ README, not a defect. Stacking it onto BOTH `recheck/google` AND
160
+ `recheck/microsoft` together adds no net-new coverage at all (the union
161
+ above is complete) — combined with this phase's existing guidance that
162
+ composing the two flagships together is not recommended in the first place,
163
+ this preset should not be reached for in that combination expecting new
164
+ signal either.
165
+
166
+ ### Carried-over corrections
167
+
168
+ - `chubby`/`fat` are Google's own **technical-precision** entries (vague
169
+ resource sizing, imprecise modifiers), never ableist ones — Google's
170
+ entries never mention people. Not shipped here (and Google-only besides).
171
+ - `unsighted`/`visually challenged` resolve to the `blind` entry's
172
+ **person-reference** alternatives, never its figurative ones — not shipped
173
+ here regardless, since Microsoft doesn't independently confirm either
174
+ term.
@@ -0,0 +1,107 @@
1
+ {
2
+ "methodology": {
3
+ "description": "recheck/inclusive-language performed NO NEW FETCH (Task 11 controller resolutions §2): every term is sourced from five existing verification reports (task-9-verify-C.md, task-9-verify-D.md, task-10-verify-E.md, task-10-verify-G.md, task-10-verify-H.md, task-10-verify-accessibility.md), which already fetched and hashed the relevant live pages while building recheck/google and recheck/microsoft. This file cross-references those existing hashes rather than re-fetching or fabricating new ones.",
4
+ "crossReferencedFiles": [
5
+ "packages/recheck/presets/google/sources.json",
6
+ "packages/recheck/presets/microsoft/sources.json"
7
+ ]
8
+ },
9
+ "pages": [
10
+ {
11
+ "url": "https://developers.google.com/style/word-list",
12
+ "guide": "google",
13
+ "hashRecordedIn": "packages/recheck/presets/google/sources.json",
14
+ "fetchedAt": "2026-07-29",
15
+ "coversTerms": [
16
+ "slave",
17
+ "master/slave",
18
+ "blacklist",
19
+ "whitelist",
20
+ "grayed-out",
21
+ "greyed-out",
22
+ "nuke"
23
+ ]
24
+ },
25
+ {
26
+ "url": "https://developers.google.com/style/inclusive-documentation",
27
+ "guide": "google",
28
+ "hashRecordedIn": "packages/recheck/presets/google/sources.json",
29
+ "fetchedAt": "2026-07-29",
30
+ "coversTerms": [
31
+ "normal person",
32
+ "healthy person",
33
+ "suffering from",
34
+ "victim of",
35
+ "differently abled"
36
+ ]
37
+ },
38
+ {
39
+ "url": "https://learn.microsoft.com/en-us/style-guide/bias-free-communication",
40
+ "guide": "microsoft",
41
+ "hashRecordedIn": "packages/recheck/presets/microsoft/sources.json",
42
+ "fetchedAt": "2026-07-29",
43
+ "coversTerms": [
44
+ "he/she",
45
+ "s/he",
46
+ "demilitarized zone",
47
+ "DMZ",
48
+ "master/slave (secondary citation)"
49
+ ]
50
+ },
51
+ {
52
+ "url": "https://learn.microsoft.com/en-us/style-guide/militaristic-language",
53
+ "guide": "microsoft",
54
+ "hashRecordedIn": "packages/recheck/presets/microsoft/sources.json",
55
+ "fetchedAt": "2026-07-29",
56
+ "coversTerms": ["nuke"]
57
+ },
58
+ {
59
+ "url": "https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/m/master-slave",
60
+ "guide": "microsoft",
61
+ "hashRecordedIn": "packages/recheck/presets/microsoft/sources.json",
62
+ "fetchedAt": "2026-07-29",
63
+ "coversTerms": ["master/slave"]
64
+ },
65
+ {
66
+ "url": "https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/b/blacklist",
67
+ "guide": "microsoft",
68
+ "hashRecordedIn": "packages/recheck/presets/microsoft/sources.json",
69
+ "fetchedAt": "2026-07-29",
70
+ "coversTerms": ["blacklist"]
71
+ },
72
+ {
73
+ "url": "https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/term-collections/accessibility-terms",
74
+ "guide": "microsoft",
75
+ "hashRecordedIn": "packages/recheck/presets/microsoft/sources.json",
76
+ "fetchedAt": "2026-07-29",
77
+ "coversTerms": [
78
+ "crippled",
79
+ "differently abled",
80
+ "victim of",
81
+ "normal person",
82
+ "healthy person"
83
+ ]
84
+ },
85
+ {
86
+ "url": "https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/w/whitelist",
87
+ "guide": "microsoft",
88
+ "hashRecordedIn": null,
89
+ "note": "Quoted verbatim in task-10-verify-H.md row 45 ('Never use whitelist. Use allow list instead.') but not independently hashed in microsoft/sources.json — cited via that report's quote, not re-fetched here.",
90
+ "coversTerms": ["whitelist"]
91
+ },
92
+ {
93
+ "url": "https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/d/demilitarized-zone-dmz",
94
+ "guide": "microsoft",
95
+ "hashRecordedIn": null,
96
+ "note": "Quoted verbatim in task-10-verify-G.md row 61 but not independently hashed in microsoft/sources.json — cited via that report's quote, not re-fetched here.",
97
+ "coversTerms": ["DMZ", "demilitarized zone"]
98
+ },
99
+ {
100
+ "url": "https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/g/gray-grayed-out",
101
+ "guide": "microsoft",
102
+ "hashRecordedIn": null,
103
+ "note": "Quoted verbatim in task-10-verify-G.md row 112 but not independently hashed in microsoft/sources.json — cited via that report's quote, not re-fetched here.",
104
+ "coversTerms": ["grayed-out", "greyed-out"]
105
+ }
106
+ ]
107
+ }