@redocly/recheck 0.14.0 → 2.58.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 (1034) hide show
  1. package/README.md +71 -1869
  2. package/examples/appendices/google.appendix.yaml +1 -1
  3. package/examples/appendices/inclusive-language.appendix.yaml +1 -1
  4. package/examples/appendices/microsoft.appendix.yaml +1 -1
  5. package/examples/appendices/plain-language.appendix.yaml +1 -1
  6. package/examples/appendices/technical-english.appendix.yaml +1 -1
  7. package/examples/google.yaml +7 -7
  8. package/examples/inclusive-language.yaml +7 -7
  9. package/examples/microsoft.yaml +7 -7
  10. package/examples/plain-language.yaml +7 -7
  11. package/examples/technical-english.yaml +7 -7
  12. package/lib/actions/baseline.d.ts +15 -0
  13. package/lib/actions/baseline.d.ts.map +1 -0
  14. package/lib/actions/baseline.js +51 -0
  15. package/lib/actions/baseline.js.map +1 -0
  16. package/lib/actions/lint.d.ts +51 -0
  17. package/lib/actions/lint.d.ts.map +1 -0
  18. package/lib/actions/lint.js +123 -0
  19. package/lib/actions/lint.js.map +1 -0
  20. package/lib/actions/markdoc-schema.d.ts +34 -0
  21. package/lib/actions/markdoc-schema.d.ts.map +1 -0
  22. package/lib/actions/markdoc-schema.js +106 -0
  23. package/lib/actions/markdoc-schema.js.map +1 -0
  24. package/lib/actions/readability.d.ts +25 -0
  25. package/lib/actions/readability.d.ts.map +1 -0
  26. package/lib/actions/readability.js +47 -0
  27. package/lib/actions/readability.js.map +1 -0
  28. package/lib/actions/roots.d.ts +7 -0
  29. package/lib/actions/roots.d.ts.map +1 -0
  30. package/lib/actions/roots.js +36 -0
  31. package/lib/actions/roots.js.map +1 -0
  32. package/lib/config/presets/api-descriptions.d.ts +8 -0
  33. package/lib/config/presets/api-descriptions.d.ts.map +1 -0
  34. package/lib/config/presets/api-descriptions.js +24 -0
  35. package/lib/config/presets/api-descriptions.js.map +1 -0
  36. package/lib/config/presets/google.d.ts +3 -0
  37. package/lib/config/presets/google.d.ts.map +1 -0
  38. package/lib/config/presets/google.js +1086 -0
  39. package/lib/config/presets/google.js.map +1 -0
  40. package/lib/config/presets/inclusive-language.d.ts +3 -0
  41. package/lib/config/presets/inclusive-language.d.ts.map +1 -0
  42. package/lib/config/presets/inclusive-language.js +151 -0
  43. package/lib/config/presets/inclusive-language.js.map +1 -0
  44. package/lib/config/presets/index.d.ts +16 -0
  45. package/lib/config/presets/index.d.ts.map +1 -0
  46. package/lib/config/presets/index.js +38 -0
  47. package/lib/config/presets/index.js.map +1 -0
  48. package/lib/config/presets/markdoc.d.ts +3 -0
  49. package/lib/config/presets/markdoc.d.ts.map +1 -0
  50. package/lib/config/presets/markdoc.js +45 -0
  51. package/lib/config/presets/markdoc.js.map +1 -0
  52. package/lib/config/presets/markdown-relaxed.d.ts +3 -0
  53. package/lib/config/presets/markdown-relaxed.d.ts.map +1 -0
  54. package/lib/config/presets/markdown-relaxed.js +34 -0
  55. package/lib/config/presets/markdown-relaxed.js.map +1 -0
  56. package/lib/config/presets/markdown.d.ts +11 -0
  57. package/lib/config/presets/markdown.d.ts.map +1 -0
  58. package/lib/config/presets/markdown.js +73 -0
  59. package/lib/config/presets/markdown.js.map +1 -0
  60. package/lib/config/presets/microsoft.d.ts +3 -0
  61. package/lib/config/presets/microsoft.d.ts.map +1 -0
  62. package/lib/config/presets/microsoft.js +1260 -0
  63. package/lib/config/presets/microsoft.js.map +1 -0
  64. package/lib/config/presets/minimal.d.ts +3 -0
  65. package/lib/config/presets/minimal.d.ts.map +1 -0
  66. package/lib/config/presets/minimal.js +13 -0
  67. package/lib/config/presets/minimal.js.map +1 -0
  68. package/lib/config/presets/plain-language.d.ts +3 -0
  69. package/lib/config/presets/plain-language.d.ts.map +1 -0
  70. package/lib/config/presets/plain-language.js +175 -0
  71. package/lib/config/presets/plain-language.js.map +1 -0
  72. package/lib/config/presets/prose.d.ts +3 -0
  73. package/lib/config/presets/prose.d.ts.map +1 -0
  74. package/lib/config/presets/prose.js +60 -0
  75. package/lib/config/presets/prose.js.map +1 -0
  76. package/lib/config/presets/technical-english.d.ts +22 -0
  77. package/lib/config/presets/technical-english.d.ts.map +1 -0
  78. package/lib/config/presets/technical-english.js +61 -0
  79. package/lib/config/presets/technical-english.js.map +1 -0
  80. package/lib/config/resolve.d.ts +36 -0
  81. package/lib/config/resolve.d.ts.map +1 -0
  82. package/lib/config/resolve.js +106 -0
  83. package/lib/config/resolve.js.map +1 -0
  84. package/lib/config/schema.d.ts +215 -0
  85. package/lib/config/schema.d.ts.map +1 -0
  86. package/lib/config/schema.js +152 -0
  87. package/lib/config/schema.js.map +1 -0
  88. package/lib/config/validate.d.ts +19 -0
  89. package/lib/config/validate.d.ts.map +1 -0
  90. package/lib/config/validate.js +1049 -0
  91. package/lib/config/validate.js.map +1 -0
  92. package/lib/core/auto-fix.d.ts.map +1 -0
  93. package/lib/core/auto-fix.js +94 -0
  94. package/lib/core/auto-fix.js.map +1 -0
  95. package/lib/core/baseline.d.ts +43 -0
  96. package/lib/core/baseline.d.ts.map +1 -0
  97. package/lib/core/baseline.js +142 -0
  98. package/lib/core/baseline.js.map +1 -0
  99. package/lib/core/case-preserve.d.ts +11 -0
  100. package/lib/core/case-preserve.d.ts.map +1 -0
  101. package/lib/core/case-preserve.js +22 -0
  102. package/lib/core/case-preserve.js.map +1 -0
  103. package/lib/core/directives.d.ts.map +1 -0
  104. package/lib/core/directives.js +66 -0
  105. package/lib/core/directives.js.map +1 -0
  106. package/lib/core/files.d.ts +31 -0
  107. package/lib/core/files.d.ts.map +1 -0
  108. package/lib/core/files.js +184 -0
  109. package/lib/core/files.js.map +1 -0
  110. package/lib/core/inline-code.d.ts +33 -0
  111. package/lib/core/inline-code.d.ts.map +1 -0
  112. package/lib/core/inline-code.js +50 -0
  113. package/lib/core/inline-code.js.map +1 -0
  114. package/lib/core/line-endings.d.ts +13 -0
  115. package/lib/core/line-endings.d.ts.map +1 -0
  116. package/lib/core/line-endings.js +39 -0
  117. package/lib/core/line-endings.js.map +1 -0
  118. package/lib/core/markdoc-tags.d.ts +48 -0
  119. package/lib/core/markdoc-tags.d.ts.map +1 -0
  120. package/lib/core/markdoc-tags.js +102 -0
  121. package/lib/core/markdoc-tags.js.map +1 -0
  122. package/lib/core/prose-extract.d.ts +6 -0
  123. package/lib/core/prose-extract.d.ts.map +1 -0
  124. package/lib/core/prose-extract.js +71 -0
  125. package/lib/core/prose-extract.js.map +1 -0
  126. package/lib/core/readability.d.ts +17 -0
  127. package/lib/core/readability.d.ts.map +1 -0
  128. package/lib/core/readability.js +34 -0
  129. package/lib/core/readability.js.map +1 -0
  130. package/lib/core/rule-filters.d.ts +29 -0
  131. package/lib/core/rule-filters.d.ts.map +1 -0
  132. package/lib/core/rule-filters.js +88 -0
  133. package/lib/core/rule-filters.js.map +1 -0
  134. package/lib/core/runner.d.ts +60 -0
  135. package/lib/core/runner.d.ts.map +1 -0
  136. package/lib/core/runner.js +305 -0
  137. package/lib/core/runner.js.map +1 -0
  138. package/lib/core/summary.d.ts +4 -0
  139. package/lib/core/summary.d.ts.map +1 -0
  140. package/lib/core/summary.js +37 -0
  141. package/lib/core/summary.js.map +1 -0
  142. package/lib/core/timing.d.ts +9 -0
  143. package/lib/core/timing.d.ts.map +1 -0
  144. package/lib/core/timing.js +19 -0
  145. package/lib/core/timing.js.map +1 -0
  146. package/lib/data/markdoc-realm-schema.d.ts.map +1 -0
  147. package/lib/data/markdoc-realm-schema.js +782 -0
  148. package/lib/data/markdoc-realm-schema.js.map +1 -0
  149. package/lib/data/proper-nouns.d.ts.map +1 -0
  150. package/lib/data/proper-nouns.js +42 -0
  151. package/lib/data/proper-nouns.js.map +1 -0
  152. package/lib/data/realm-front-matter-schema.d.ts +12 -0
  153. package/lib/data/realm-front-matter-schema.d.ts.map +1 -0
  154. package/lib/data/realm-front-matter-schema.js +51 -0
  155. package/lib/data/realm-front-matter-schema.js.map +1 -0
  156. package/lib/index.d.ts +81 -0
  157. package/lib/index.d.ts.map +1 -0
  158. package/lib/index.js +114 -0
  159. package/lib/index.js.map +1 -0
  160. package/lib/metrics/formulas.d.ts +9 -0
  161. package/lib/metrics/formulas.d.ts.map +1 -0
  162. package/lib/metrics/formulas.js +59 -0
  163. package/lib/metrics/formulas.js.map +1 -0
  164. package/lib/metrics/statistics.d.ts +14 -0
  165. package/lib/metrics/statistics.d.ts.map +1 -0
  166. package/lib/metrics/statistics.js +35 -0
  167. package/lib/metrics/statistics.js.map +1 -0
  168. package/lib/parser/index.d.ts +13 -0
  169. package/lib/parser/index.d.ts.map +1 -0
  170. package/lib/parser/index.js +123 -0
  171. package/lib/parser/index.js.map +1 -0
  172. package/lib/parser/markdoc/extract-statics.d.ts +28 -0
  173. package/lib/parser/markdoc/extract-statics.d.ts.map +1 -0
  174. package/lib/parser/markdoc/extract-statics.js +80 -0
  175. package/lib/parser/markdoc/extract-statics.js.map +1 -0
  176. package/lib/parser/markdoc/pairing.d.ts +38 -0
  177. package/lib/parser/markdoc/pairing.d.ts.map +1 -0
  178. package/lib/parser/markdoc/pairing.js +77 -0
  179. package/lib/parser/markdoc/pairing.js.map +1 -0
  180. package/lib/parser/markdoc/schema.d.ts +56 -0
  181. package/lib/parser/markdoc/schema.d.ts.map +1 -0
  182. package/lib/parser/markdoc/schema.js +60 -0
  183. package/lib/parser/markdoc/schema.js.map +1 -0
  184. package/lib/parser/markdoc/span.d.ts +52 -0
  185. package/lib/parser/markdoc/span.d.ts.map +1 -0
  186. package/lib/parser/markdoc/span.js +577 -0
  187. package/lib/parser/markdoc/span.js.map +1 -0
  188. package/lib/parser/markdoc/structure.d.ts +17 -0
  189. package/lib/parser/markdoc/structure.d.ts.map +1 -0
  190. package/lib/parser/markdoc/structure.js +121 -0
  191. package/lib/parser/markdoc/structure.js.map +1 -0
  192. package/lib/parser/markdoc/syntax.d.ts +17 -0
  193. package/lib/parser/markdoc/syntax.d.ts.map +1 -0
  194. package/lib/parser/markdoc/syntax.js +262 -0
  195. package/lib/parser/markdoc/syntax.js.map +1 -0
  196. package/lib/parser/types.d.ts.map +1 -0
  197. package/lib/presets.d.ts +6 -0
  198. package/lib/presets.d.ts.map +1 -0
  199. package/lib/presets.js +12 -0
  200. package/lib/presets.js.map +1 -0
  201. package/lib/rules/registry.d.ts +13 -0
  202. package/lib/rules/registry.d.ts.map +1 -0
  203. package/lib/rules/registry.js +54 -0
  204. package/lib/rules/registry.js.map +1 -0
  205. package/lib/rules/scope/capitalization.d.ts.map +1 -0
  206. package/lib/rules/scope/capitalization.js +128 -0
  207. package/lib/rules/scope/capitalization.js.map +1 -0
  208. package/lib/rules/scope/conditional.d.ts.map +1 -0
  209. package/lib/rules/scope/conditional.js +93 -0
  210. package/lib/rules/scope/conditional.js.map +1 -0
  211. package/lib/rules/scope/consistency.d.ts.map +1 -0
  212. package/lib/rules/scope/consistency.js +118 -0
  213. package/lib/rules/scope/consistency.js.map +1 -0
  214. package/lib/rules/scope/length.d.ts.map +1 -0
  215. package/lib/rules/scope/length.js +50 -0
  216. package/lib/rules/scope/length.js.map +1 -0
  217. package/lib/rules/scope/max-image-size.d.ts.map +1 -0
  218. package/lib/rules/scope/max-image-size.js +55 -0
  219. package/lib/rules/scope/max-image-size.js.map +1 -0
  220. package/lib/rules/scope/metric.d.ts +3 -0
  221. package/lib/rules/scope/metric.d.ts.map +1 -0
  222. package/lib/rules/scope/metric.js +59 -0
  223. package/lib/rules/scope/metric.js.map +1 -0
  224. package/lib/rules/scope/occurrence.d.ts.map +1 -0
  225. package/lib/rules/scope/occurrence.js +41 -0
  226. package/lib/rules/scope/occurrence.js.map +1 -0
  227. package/lib/rules/scope/pattern.d.ts.map +1 -0
  228. package/lib/rules/scope/pattern.js +58 -0
  229. package/lib/rules/scope/pattern.js.map +1 -0
  230. package/lib/rules/scope/repetition.d.ts.map +1 -0
  231. package/lib/rules/scope/repetition.js +134 -0
  232. package/lib/rules/scope/repetition.js.map +1 -0
  233. package/lib/rules/scope/semantic-line-breaks.d.ts.map +1 -0
  234. package/lib/rules/scope/semantic-line-breaks.js +180 -0
  235. package/lib/rules/scope/semantic-line-breaks.js.map +1 -0
  236. package/lib/rules/scope/spelling.d.ts +11 -0
  237. package/lib/rules/scope/spelling.d.ts.map +1 -0
  238. package/lib/rules/scope/spelling.js +146 -0
  239. package/lib/rules/scope/spelling.js.map +1 -0
  240. package/lib/rules/scope/swap.d.ts.map +1 -0
  241. package/lib/rules/scope/swap.js +111 -0
  242. package/lib/rules/scope/swap.js.map +1 -0
  243. package/lib/rules/scope/title-case.d.ts +24 -0
  244. package/lib/rules/scope/title-case.d.ts.map +1 -0
  245. package/lib/rules/scope/title-case.js +216 -0
  246. package/lib/rules/scope/title-case.js.map +1 -0
  247. package/lib/rules/token/blanks-around-fences.d.ts.map +1 -0
  248. package/lib/rules/token/blanks-around-fences.js.map +1 -0
  249. package/lib/rules/token/blanks-around-headings.d.ts.map +1 -0
  250. package/lib/rules/token/blanks-around-headings.js +96 -0
  251. package/lib/rules/token/blanks-around-headings.js.map +1 -0
  252. package/lib/rules/token/blanks-around-lists.d.ts.map +1 -0
  253. package/lib/rules/token/blanks-around-lists.js +48 -0
  254. package/lib/rules/token/blanks-around-lists.js.map +1 -0
  255. package/lib/rules/token/blanks-around-tables.d.ts.map +1 -0
  256. package/lib/rules/token/blanks-around-tables.js +40 -0
  257. package/lib/rules/token/blanks-around-tables.js.map +1 -0
  258. package/lib/rules/token/code-block-style.d.ts.map +1 -0
  259. package/lib/rules/token/code-block-style.js.map +1 -0
  260. package/lib/rules/token/code-fence-style.d.ts.map +1 -0
  261. package/lib/rules/token/code-fence-style.js.map +1 -0
  262. package/lib/rules/token/commands-show-output.d.ts.map +1 -0
  263. package/lib/rules/token/commands-show-output.js.map +1 -0
  264. package/lib/rules/token/descriptive-link-text.d.ts.map +1 -0
  265. package/lib/rules/token/descriptive-link-text.js +46 -0
  266. package/lib/rules/token/descriptive-link-text.js.map +1 -0
  267. package/lib/rules/token/fenced-code-language.d.ts.map +1 -0
  268. package/lib/rules/token/fenced-code-language.js.map +1 -0
  269. package/lib/rules/token/first-line-h1.d.ts.map +1 -0
  270. package/lib/rules/token/first-line-h1.js +83 -0
  271. package/lib/rules/token/first-line-h1.js.map +1 -0
  272. package/lib/rules/token/front-matter.d.ts.map +1 -0
  273. package/lib/rules/token/front-matter.js +169 -0
  274. package/lib/rules/token/front-matter.js.map +1 -0
  275. package/lib/rules/token/heading-increment.d.ts.map +1 -0
  276. package/lib/rules/token/heading-increment.js +26 -0
  277. package/lib/rules/token/heading-increment.js.map +1 -0
  278. package/lib/rules/token/heading-start-left.d.ts.map +1 -0
  279. package/lib/rules/token/heading-start-left.js.map +1 -0
  280. package/lib/rules/token/heading-style.d.ts.map +1 -0
  281. package/lib/rules/token/heading-style.js.map +1 -0
  282. package/lib/rules/token/helpers.d.ts +115 -0
  283. package/lib/rules/token/helpers.d.ts.map +1 -0
  284. package/lib/rules/token/helpers.js +502 -0
  285. package/lib/rules/token/helpers.js.map +1 -0
  286. package/lib/rules/token/hr-style.d.ts.map +1 -0
  287. package/lib/rules/token/hr-style.js.map +1 -0
  288. package/lib/rules/token/index.d.ts +65 -0
  289. package/lib/rules/token/index.d.ts.map +1 -0
  290. package/lib/rules/token/index.js +157 -0
  291. package/lib/rules/token/index.js.map +1 -0
  292. package/lib/rules/token/line-length.d.ts.map +1 -0
  293. package/lib/rules/token/line-length.js +96 -0
  294. package/lib/rules/token/line-length.js.map +1 -0
  295. package/lib/rules/token/link-fragments.d.ts.map +1 -0
  296. package/lib/rules/token/link-fragments.js +398 -0
  297. package/lib/rules/token/link-fragments.js.map +1 -0
  298. package/lib/rules/token/link-image-reference-definitions.d.ts.map +1 -0
  299. package/lib/rules/token/link-image-reference-definitions.js.map +1 -0
  300. package/lib/rules/token/link-image-style.d.ts.map +1 -0
  301. package/lib/rules/token/link-image-style.js +138 -0
  302. package/lib/rules/token/link-image-style.js.map +1 -0
  303. package/lib/rules/token/list-indent.d.ts.map +1 -0
  304. package/lib/rules/token/list-indent.js.map +1 -0
  305. package/lib/rules/token/list-length.d.ts.map +1 -0
  306. package/lib/rules/token/list-length.js +31 -0
  307. package/lib/rules/token/list-length.js.map +1 -0
  308. package/lib/rules/token/list-marker-space.d.ts.map +1 -0
  309. package/lib/rules/token/list-marker-space.js.map +1 -0
  310. package/lib/rules/token/markdoc-attributes.d.ts.map +1 -0
  311. package/lib/rules/token/markdoc-attributes.js +198 -0
  312. package/lib/rules/token/markdoc-attributes.js.map +1 -0
  313. package/lib/rules/token/markdoc-pairing.d.ts.map +1 -0
  314. package/lib/rules/token/markdoc-pairing.js +65 -0
  315. package/lib/rules/token/markdoc-pairing.js.map +1 -0
  316. package/lib/rules/token/markdoc-syntax.d.ts.map +1 -0
  317. package/lib/rules/token/markdoc-syntax.js +84 -0
  318. package/lib/rules/token/markdoc-syntax.js.map +1 -0
  319. package/lib/rules/token/markdoc-unknown-tag.d.ts.map +1 -0
  320. package/lib/rules/token/markdoc-unknown-tag.js +44 -0
  321. package/lib/rules/token/markdoc-unknown-tag.js.map +1 -0
  322. package/lib/rules/token/no-alt-text.d.ts.map +1 -0
  323. package/lib/rules/token/no-alt-text.js +43 -0
  324. package/lib/rules/token/no-alt-text.js.map +1 -0
  325. package/lib/rules/token/no-bare-urls.d.ts.map +1 -0
  326. package/lib/rules/token/no-bare-urls.js +74 -0
  327. package/lib/rules/token/no-bare-urls.js.map +1 -0
  328. package/lib/rules/token/no-blanks-blockquote.d.ts.map +1 -0
  329. package/lib/rules/token/no-blanks-blockquote.js.map +1 -0
  330. package/lib/rules/token/no-duplicate-heading.d.ts.map +1 -0
  331. package/lib/rules/token/no-duplicate-heading.js +89 -0
  332. package/lib/rules/token/no-duplicate-heading.js.map +1 -0
  333. package/lib/rules/token/no-duplicate-link-destinations.d.ts.map +1 -0
  334. package/lib/rules/token/no-duplicate-link-destinations.js +54 -0
  335. package/lib/rules/token/no-duplicate-link-destinations.js.map +1 -0
  336. package/lib/rules/token/no-emphasis-as-heading.d.ts.map +1 -0
  337. package/lib/rules/token/no-emphasis-as-heading.js +39 -0
  338. package/lib/rules/token/no-emphasis-as-heading.js.map +1 -0
  339. package/lib/rules/token/no-empty-headings.d.ts.map +1 -0
  340. package/lib/rules/token/no-empty-headings.js +21 -0
  341. package/lib/rules/token/no-empty-headings.js.map +1 -0
  342. package/lib/rules/token/no-empty-links.d.ts.map +1 -0
  343. package/lib/rules/token/no-empty-links.js.map +1 -0
  344. package/lib/rules/token/no-hard-tabs.d.ts.map +1 -0
  345. package/lib/rules/token/no-hard-tabs.js.map +1 -0
  346. package/lib/rules/token/no-inline-html.d.ts.map +1 -0
  347. package/lib/rules/token/no-inline-html.js +41 -0
  348. package/lib/rules/token/no-inline-html.js.map +1 -0
  349. package/lib/rules/token/no-multiple-blanks.d.ts.map +1 -0
  350. package/lib/rules/token/no-multiple-blanks.js.map +1 -0
  351. package/lib/rules/token/no-multiple-space-atx.d.ts +9 -0
  352. package/lib/rules/token/no-multiple-space-atx.d.ts.map +1 -0
  353. package/lib/rules/token/no-multiple-space-atx.js +46 -0
  354. package/lib/rules/token/no-multiple-space-atx.js.map +1 -0
  355. package/lib/rules/token/no-multiple-space-closed-atx.d.ts.map +1 -0
  356. package/lib/rules/token/no-multiple-space-closed-atx.js.map +1 -0
  357. package/lib/rules/token/no-reversed-links.d.ts.map +1 -0
  358. package/lib/rules/token/no-reversed-links.js.map +1 -0
  359. package/lib/rules/token/no-space-in-code.d.ts.map +1 -0
  360. package/lib/rules/token/no-space-in-code.js.map +1 -0
  361. package/lib/rules/token/no-space-in-emphasis.d.ts.map +1 -0
  362. package/lib/rules/token/no-space-in-emphasis.js +72 -0
  363. package/lib/rules/token/no-space-in-emphasis.js.map +1 -0
  364. package/lib/rules/token/no-space-in-links.d.ts.map +1 -0
  365. package/lib/rules/token/no-space-in-links.js.map +1 -0
  366. package/lib/rules/token/no-trailing-punctuation.d.ts.map +1 -0
  367. package/lib/rules/token/no-trailing-punctuation.js.map +1 -0
  368. package/lib/rules/token/no-trailing-spaces.d.ts.map +1 -0
  369. package/lib/rules/token/no-trailing-spaces.js.map +1 -0
  370. package/lib/rules/token/ol-prefix.d.ts.map +1 -0
  371. package/lib/rules/token/ol-prefix.js.map +1 -0
  372. package/lib/rules/token/proper-names.d.ts.map +1 -0
  373. package/lib/rules/token/proper-names.js +87 -0
  374. package/lib/rules/token/proper-names.js.map +1 -0
  375. package/lib/rules/token/reference-links-images.d.ts.map +1 -0
  376. package/lib/rules/token/reference-links-images.js.map +1 -0
  377. package/lib/rules/token/required-headings.d.ts.map +1 -0
  378. package/lib/rules/token/required-headings.js +73 -0
  379. package/lib/rules/token/required-headings.js.map +1 -0
  380. package/lib/rules/token/single-h1.d.ts.map +1 -0
  381. package/lib/rules/token/single-h1.js +43 -0
  382. package/lib/rules/token/single-h1.js.map +1 -0
  383. package/lib/rules/token/table-column-count.d.ts.map +1 -0
  384. package/lib/rules/token/table-column-count.js.map +1 -0
  385. package/lib/rules/token/table-column-style.d.ts.map +1 -0
  386. package/lib/rules/token/table-column-style.js +162 -0
  387. package/lib/rules/token/table-column-style.js.map +1 -0
  388. package/lib/rules/token/table-pipe-style.d.ts.map +1 -0
  389. package/lib/rules/token/table-pipe-style.js.map +1 -0
  390. package/lib/rules/token/ul-indent.d.ts.map +1 -0
  391. package/lib/rules/token/ul-indent.js.map +1 -0
  392. package/lib/rules/token/ul-style.d.ts.map +1 -0
  393. package/lib/rules/token/ul-style.js +70 -0
  394. package/lib/rules/token/ul-style.js.map +1 -0
  395. package/lib/rules/types.d.ts +62 -0
  396. package/lib/rules/types.d.ts.map +1 -0
  397. package/lib/rules/utils.d.ts +18 -0
  398. package/lib/rules/utils.d.ts.map +1 -0
  399. package/lib/rules/utils.js +75 -0
  400. package/lib/rules/utils.js.map +1 -0
  401. package/lib/scopes/extractor.d.ts +6 -0
  402. package/lib/scopes/extractor.d.ts.map +1 -0
  403. package/lib/scopes/extractor.js +398 -0
  404. package/lib/scopes/extractor.js.map +1 -0
  405. package/lib/scopes/selector.d.ts +26 -0
  406. package/lib/scopes/selector.d.ts.map +1 -0
  407. package/lib/scopes/selector.js +78 -0
  408. package/lib/scopes/selector.js.map +1 -0
  409. package/lib/scopes/sentences.d.ts +13 -0
  410. package/lib/scopes/sentences.d.ts.map +1 -0
  411. package/lib/scopes/sentences.js +237 -0
  412. package/lib/scopes/sentences.js.map +1 -0
  413. package/lib/scopes/types.d.ts +35 -0
  414. package/lib/scopes/types.d.ts.map +1 -0
  415. package/lib/scopes/vocabulary.d.ts +12 -0
  416. package/lib/scopes/vocabulary.d.ts.map +1 -0
  417. package/lib/scopes/vocabulary.js +56 -0
  418. package/lib/scopes/vocabulary.js.map +1 -0
  419. package/lib/types/assertions.d.ts +97 -0
  420. package/lib/types/assertions.d.ts.map +1 -0
  421. package/lib/types/reporting.d.ts +23 -0
  422. package/lib/types/reporting.d.ts.map +1 -0
  423. package/lib/types/rules.d.ts +53 -0
  424. package/lib/types/rules.d.ts.map +1 -0
  425. package/lib/types/validation.d.ts +5 -0
  426. package/lib/types/validation.d.ts.map +1 -0
  427. package/lib/utils/is-plain-object.d.ts +2 -0
  428. package/lib/utils/is-plain-object.d.ts.map +1 -0
  429. package/lib/utils/is-plain-object.js +5 -0
  430. package/lib/utils/is-plain-object.js.map +1 -0
  431. package/package.json +58 -61
  432. package/presets/google/PROVENANCE.md +217 -221
  433. package/presets/inclusive-language/PROVENANCE.md +20 -19
  434. package/presets/microsoft/PROVENANCE.md +242 -243
  435. package/presets/plain-language/PROVENANCE.md +66 -60
  436. package/presets/technical-english/PROVENANCE.md +5 -5
  437. package/skills/recheck-config/SKILL.md +70 -20
  438. package/skills/recheck-lint/SKILL.md +37 -13
  439. package/dist/cli.d.ts +0 -3
  440. package/dist/cli.d.ts.map +0 -1
  441. package/dist/cli.js +0 -228
  442. package/dist/cli.js.map +0 -1
  443. package/dist/commands/baseline.d.ts +0 -10
  444. package/dist/commands/baseline.d.ts.map +0 -1
  445. package/dist/commands/baseline.js +0 -59
  446. package/dist/commands/baseline.js.map +0 -1
  447. package/dist/commands/markdoc-schema.d.ts +0 -17
  448. package/dist/commands/markdoc-schema.d.ts.map +0 -1
  449. package/dist/commands/markdoc-schema.js +0 -127
  450. package/dist/commands/markdoc-schema.js.map +0 -1
  451. package/dist/commands/readability.d.ts +0 -10
  452. package/dist/commands/readability.d.ts.map +0 -1
  453. package/dist/commands/readability.js +0 -90
  454. package/dist/commands/readability.js.map +0 -1
  455. package/dist/commands/run.d.ts +0 -21
  456. package/dist/commands/run.d.ts.map +0 -1
  457. package/dist/commands/run.js +0 -236
  458. package/dist/commands/run.js.map +0 -1
  459. package/dist/commands/validate.d.ts +0 -8
  460. package/dist/commands/validate.d.ts.map +0 -1
  461. package/dist/commands/validate.js +0 -43
  462. package/dist/commands/validate.js.map +0 -1
  463. package/dist/config/load.d.ts +0 -33
  464. package/dist/config/load.d.ts.map +0 -1
  465. package/dist/config/load.js +0 -98
  466. package/dist/config/load.js.map +0 -1
  467. package/dist/config/presets/api-descriptions.d.ts +0 -8
  468. package/dist/config/presets/api-descriptions.d.ts.map +0 -1
  469. package/dist/config/presets/api-descriptions.js +0 -24
  470. package/dist/config/presets/api-descriptions.js.map +0 -1
  471. package/dist/config/presets/google.d.ts +0 -3
  472. package/dist/config/presets/google.d.ts.map +0 -1
  473. package/dist/config/presets/google.js +0 -1671
  474. package/dist/config/presets/google.js.map +0 -1
  475. package/dist/config/presets/inclusive-language.d.ts +0 -3
  476. package/dist/config/presets/inclusive-language.d.ts.map +0 -1
  477. package/dist/config/presets/inclusive-language.js +0 -321
  478. package/dist/config/presets/inclusive-language.js.map +0 -1
  479. package/dist/config/presets/index.d.ts +0 -67
  480. package/dist/config/presets/index.d.ts.map +0 -1
  481. package/dist/config/presets/index.js +0 -141
  482. package/dist/config/presets/index.js.map +0 -1
  483. package/dist/config/presets/markdoc.d.ts +0 -21
  484. package/dist/config/presets/markdoc.d.ts.map +0 -1
  485. package/dist/config/presets/markdoc.js +0 -101
  486. package/dist/config/presets/markdoc.js.map +0 -1
  487. package/dist/config/presets/markdown-relaxed.d.ts +0 -3
  488. package/dist/config/presets/markdown-relaxed.d.ts.map +0 -1
  489. package/dist/config/presets/markdown-relaxed.js +0 -98
  490. package/dist/config/presets/markdown-relaxed.js.map +0 -1
  491. package/dist/config/presets/markdown.d.ts +0 -43
  492. package/dist/config/presets/markdown.d.ts.map +0 -1
  493. package/dist/config/presets/markdown.js +0 -132
  494. package/dist/config/presets/markdown.js.map +0 -1
  495. package/dist/config/presets/microsoft.d.ts +0 -3
  496. package/dist/config/presets/microsoft.d.ts.map +0 -1
  497. package/dist/config/presets/microsoft.js +0 -2268
  498. package/dist/config/presets/microsoft.js.map +0 -1
  499. package/dist/config/presets/minimal.d.ts +0 -3
  500. package/dist/config/presets/minimal.d.ts.map +0 -1
  501. package/dist/config/presets/minimal.js +0 -21
  502. package/dist/config/presets/minimal.js.map +0 -1
  503. package/dist/config/presets/plain-language.d.ts +0 -3
  504. package/dist/config/presets/plain-language.d.ts.map +0 -1
  505. package/dist/config/presets/plain-language.js +0 -351
  506. package/dist/config/presets/plain-language.js.map +0 -1
  507. package/dist/config/presets/prose.d.ts +0 -52
  508. package/dist/config/presets/prose.d.ts.map +0 -1
  509. package/dist/config/presets/prose.js +0 -138
  510. package/dist/config/presets/prose.js.map +0 -1
  511. package/dist/config/presets/technical-english.d.ts +0 -34
  512. package/dist/config/presets/technical-english.d.ts.map +0 -1
  513. package/dist/config/presets/technical-english.js +0 -79
  514. package/dist/config/presets/technical-english.js.map +0 -1
  515. package/dist/config/schema.d.ts +0 -226
  516. package/dist/config/schema.d.ts.map +0 -1
  517. package/dist/config/schema.js +0 -196
  518. package/dist/config/schema.js.map +0 -1
  519. package/dist/config/validate.d.ts +0 -22
  520. package/dist/config/validate.d.ts.map +0 -1
  521. package/dist/config/validate.js +0 -1296
  522. package/dist/config/validate.js.map +0 -1
  523. package/dist/core/auto-fix.d.ts.map +0 -1
  524. package/dist/core/auto-fix.js +0 -101
  525. package/dist/core/auto-fix.js.map +0 -1
  526. package/dist/core/baseline.d.ts +0 -49
  527. package/dist/core/baseline.d.ts.map +0 -1
  528. package/dist/core/baseline.js +0 -0
  529. package/dist/core/baseline.js.map +0 -1
  530. package/dist/core/case-preserve.d.ts +0 -46
  531. package/dist/core/case-preserve.d.ts.map +0 -1
  532. package/dist/core/case-preserve.js +0 -57
  533. package/dist/core/case-preserve.js.map +0 -1
  534. package/dist/core/directives.d.ts.map +0 -1
  535. package/dist/core/directives.js +0 -73
  536. package/dist/core/directives.js.map +0 -1
  537. package/dist/core/files.d.ts +0 -69
  538. package/dist/core/files.d.ts.map +0 -1
  539. package/dist/core/files.js +0 -260
  540. package/dist/core/files.js.map +0 -1
  541. package/dist/core/inline-code.d.ts +0 -87
  542. package/dist/core/inline-code.d.ts.map +0 -1
  543. package/dist/core/inline-code.js +0 -104
  544. package/dist/core/inline-code.js.map +0 -1
  545. package/dist/core/line-endings.d.ts +0 -32
  546. package/dist/core/line-endings.d.ts.map +0 -1
  547. package/dist/core/line-endings.js +0 -65
  548. package/dist/core/line-endings.js.map +0 -1
  549. package/dist/core/markdoc-tags.d.ts +0 -79
  550. package/dist/core/markdoc-tags.d.ts.map +0 -1
  551. package/dist/core/markdoc-tags.js +0 -131
  552. package/dist/core/markdoc-tags.js.map +0 -1
  553. package/dist/core/prose-extract.d.ts +0 -6
  554. package/dist/core/prose-extract.d.ts.map +0 -1
  555. package/dist/core/prose-extract.js +0 -79
  556. package/dist/core/prose-extract.js.map +0 -1
  557. package/dist/core/readability.d.ts +0 -17
  558. package/dist/core/readability.d.ts.map +0 -1
  559. package/dist/core/readability.js +0 -37
  560. package/dist/core/readability.js.map +0 -1
  561. package/dist/core/rule-filters.d.ts +0 -45
  562. package/dist/core/rule-filters.d.ts.map +0 -1
  563. package/dist/core/rule-filters.js +0 -118
  564. package/dist/core/rule-filters.js.map +0 -1
  565. package/dist/core/runner.d.ts +0 -99
  566. package/dist/core/runner.d.ts.map +0 -1
  567. package/dist/core/runner.js +0 -401
  568. package/dist/core/runner.js.map +0 -1
  569. package/dist/core/timing.d.ts +0 -24
  570. package/dist/core/timing.d.ts.map +0 -1
  571. package/dist/core/timing.js +0 -39
  572. package/dist/core/timing.js.map +0 -1
  573. package/dist/data/markdoc-realm-schema.d.ts.map +0 -1
  574. package/dist/data/markdoc-realm-schema.js +0 -798
  575. package/dist/data/markdoc-realm-schema.js.map +0 -1
  576. package/dist/data/proper-nouns.d.ts.map +0 -1
  577. package/dist/data/proper-nouns.js +0 -47
  578. package/dist/data/proper-nouns.js.map +0 -1
  579. package/dist/data/realm-front-matter-schema.d.ts +0 -28
  580. package/dist/data/realm-front-matter-schema.d.ts.map +0 -1
  581. package/dist/data/realm-front-matter-schema.js +0 -73
  582. package/dist/data/realm-front-matter-schema.js.map +0 -1
  583. package/dist/index.d.ts +0 -90
  584. package/dist/index.d.ts.map +0 -1
  585. package/dist/index.js +0 -152
  586. package/dist/index.js.map +0 -1
  587. package/dist/metrics/formulas.d.ts +0 -17
  588. package/dist/metrics/formulas.d.ts.map +0 -1
  589. package/dist/metrics/formulas.js +0 -70
  590. package/dist/metrics/formulas.js.map +0 -1
  591. package/dist/metrics/statistics.d.ts +0 -27
  592. package/dist/metrics/statistics.d.ts.map +0 -1
  593. package/dist/metrics/statistics.js +0 -56
  594. package/dist/metrics/statistics.js.map +0 -1
  595. package/dist/parser/index.d.ts +0 -19
  596. package/dist/parser/index.d.ts.map +0 -1
  597. package/dist/parser/index.js +0 -174
  598. package/dist/parser/index.js.map +0 -1
  599. package/dist/parser/markdoc/extract-statics.d.ts +0 -45
  600. package/dist/parser/markdoc/extract-statics.d.ts.map +0 -1
  601. package/dist/parser/markdoc/extract-statics.js +0 -139
  602. package/dist/parser/markdoc/extract-statics.js.map +0 -1
  603. package/dist/parser/markdoc/pairing.d.ts +0 -63
  604. package/dist/parser/markdoc/pairing.d.ts.map +0 -1
  605. package/dist/parser/markdoc/pairing.js +0 -94
  606. package/dist/parser/markdoc/pairing.js.map +0 -1
  607. package/dist/parser/markdoc/schema.d.ts +0 -85
  608. package/dist/parser/markdoc/schema.d.ts.map +0 -1
  609. package/dist/parser/markdoc/schema.js +0 -86
  610. package/dist/parser/markdoc/schema.js.map +0 -1
  611. package/dist/parser/markdoc/span.d.ts +0 -64
  612. package/dist/parser/markdoc/span.d.ts.map +0 -1
  613. package/dist/parser/markdoc/span.js +0 -729
  614. package/dist/parser/markdoc/span.js.map +0 -1
  615. package/dist/parser/markdoc/structure.d.ts +0 -28
  616. package/dist/parser/markdoc/structure.d.ts.map +0 -1
  617. package/dist/parser/markdoc/structure.js +0 -153
  618. package/dist/parser/markdoc/structure.js.map +0 -1
  619. package/dist/parser/markdoc/syntax.d.ts +0 -44
  620. package/dist/parser/markdoc/syntax.d.ts.map +0 -1
  621. package/dist/parser/markdoc/syntax.js +0 -317
  622. package/dist/parser/markdoc/syntax.js.map +0 -1
  623. package/dist/parser/types.d.ts.map +0 -1
  624. package/dist/reporter/fixes.d.ts +0 -3
  625. package/dist/reporter/fixes.d.ts.map +0 -1
  626. package/dist/reporter/fixes.js +0 -41
  627. package/dist/reporter/fixes.js.map +0 -1
  628. package/dist/reporter/formats/github-actions.d.ts +0 -6
  629. package/dist/reporter/formats/github-actions.d.ts.map +0 -1
  630. package/dist/reporter/formats/github-actions.js +0 -20
  631. package/dist/reporter/formats/github-actions.js.map +0 -1
  632. package/dist/reporter/formats/json.d.ts +0 -10
  633. package/dist/reporter/formats/json.d.ts.map +0 -1
  634. package/dist/reporter/formats/json.js +0 -25
  635. package/dist/reporter/formats/json.js.map +0 -1
  636. package/dist/reporter/formats/sarif.d.ts +0 -10
  637. package/dist/reporter/formats/sarif.d.ts.map +0 -1
  638. package/dist/reporter/formats/sarif.js +0 -66
  639. package/dist/reporter/formats/sarif.js.map +0 -1
  640. package/dist/reporter/formats/table.d.ts +0 -6
  641. package/dist/reporter/formats/table.d.ts.map +0 -1
  642. package/dist/reporter/formats/table.js +0 -43
  643. package/dist/reporter/formats/table.js.map +0 -1
  644. package/dist/reporter/index.d.ts +0 -10
  645. package/dist/reporter/index.d.ts.map +0 -1
  646. package/dist/reporter/index.js +0 -42
  647. package/dist/reporter/index.js.map +0 -1
  648. package/dist/reporter/prioritize-problems.d.ts +0 -7
  649. package/dist/reporter/prioritize-problems.d.ts.map +0 -1
  650. package/dist/reporter/prioritize-problems.js +0 -29
  651. package/dist/reporter/prioritize-problems.js.map +0 -1
  652. package/dist/reporter/statistics.d.ts +0 -10
  653. package/dist/reporter/statistics.d.ts.map +0 -1
  654. package/dist/reporter/statistics.js +0 -52
  655. package/dist/reporter/statistics.js.map +0 -1
  656. package/dist/reporter/summary.d.ts +0 -10
  657. package/dist/reporter/summary.d.ts.map +0 -1
  658. package/dist/reporter/summary.js +0 -49
  659. package/dist/reporter/summary.js.map +0 -1
  660. package/dist/rules/registry.d.ts +0 -15
  661. package/dist/rules/registry.d.ts.map +0 -1
  662. package/dist/rules/registry.js +0 -81
  663. package/dist/rules/registry.js.map +0 -1
  664. package/dist/rules/scope/capitalization.d.ts.map +0 -1
  665. package/dist/rules/scope/capitalization.js +0 -164
  666. package/dist/rules/scope/capitalization.js.map +0 -1
  667. package/dist/rules/scope/conditional.d.ts.map +0 -1
  668. package/dist/rules/scope/conditional.js +0 -112
  669. package/dist/rules/scope/conditional.js.map +0 -1
  670. package/dist/rules/scope/consistency.d.ts.map +0 -1
  671. package/dist/rules/scope/consistency.js +0 -179
  672. package/dist/rules/scope/consistency.js.map +0 -1
  673. package/dist/rules/scope/length.d.ts.map +0 -1
  674. package/dist/rules/scope/length.js +0 -73
  675. package/dist/rules/scope/length.js.map +0 -1
  676. package/dist/rules/scope/max-image-size.d.ts.map +0 -1
  677. package/dist/rules/scope/max-image-size.js +0 -65
  678. package/dist/rules/scope/max-image-size.js.map +0 -1
  679. package/dist/rules/scope/metric.d.ts +0 -5
  680. package/dist/rules/scope/metric.d.ts.map +0 -1
  681. package/dist/rules/scope/metric.js +0 -59
  682. package/dist/rules/scope/metric.js.map +0 -1
  683. package/dist/rules/scope/occurrence.d.ts.map +0 -1
  684. package/dist/rules/scope/occurrence.js +0 -48
  685. package/dist/rules/scope/occurrence.js.map +0 -1
  686. package/dist/rules/scope/pattern.d.ts.map +0 -1
  687. package/dist/rules/scope/pattern.js +0 -75
  688. package/dist/rules/scope/pattern.js.map +0 -1
  689. package/dist/rules/scope/repetition.d.ts.map +0 -1
  690. package/dist/rules/scope/repetition.js +0 -139
  691. package/dist/rules/scope/repetition.js.map +0 -1
  692. package/dist/rules/scope/semantic-line-breaks.d.ts.map +0 -1
  693. package/dist/rules/scope/semantic-line-breaks.js +0 -236
  694. package/dist/rules/scope/semantic-line-breaks.js.map +0 -1
  695. package/dist/rules/scope/spelling.d.ts +0 -27
  696. package/dist/rules/scope/spelling.d.ts.map +0 -1
  697. package/dist/rules/scope/spelling.js +0 -227
  698. package/dist/rules/scope/spelling.js.map +0 -1
  699. package/dist/rules/scope/swap.d.ts.map +0 -1
  700. package/dist/rules/scope/swap.js +0 -149
  701. package/dist/rules/scope/swap.js.map +0 -1
  702. package/dist/rules/scope/title-case.d.ts +0 -46
  703. package/dist/rules/scope/title-case.d.ts.map +0 -1
  704. package/dist/rules/scope/title-case.js +0 -301
  705. package/dist/rules/scope/title-case.js.map +0 -1
  706. package/dist/rules/token/blanks-around-fences.d.ts.map +0 -1
  707. package/dist/rules/token/blanks-around-fences.js.map +0 -1
  708. package/dist/rules/token/blanks-around-headings.d.ts.map +0 -1
  709. package/dist/rules/token/blanks-around-headings.js +0 -108
  710. package/dist/rules/token/blanks-around-headings.js.map +0 -1
  711. package/dist/rules/token/blanks-around-lists.d.ts.map +0 -1
  712. package/dist/rules/token/blanks-around-lists.js +0 -56
  713. package/dist/rules/token/blanks-around-lists.js.map +0 -1
  714. package/dist/rules/token/blanks-around-tables.d.ts.map +0 -1
  715. package/dist/rules/token/blanks-around-tables.js +0 -42
  716. package/dist/rules/token/blanks-around-tables.js.map +0 -1
  717. package/dist/rules/token/code-block-style.d.ts.map +0 -1
  718. package/dist/rules/token/code-block-style.js.map +0 -1
  719. package/dist/rules/token/code-fence-style.d.ts.map +0 -1
  720. package/dist/rules/token/code-fence-style.js.map +0 -1
  721. package/dist/rules/token/commands-show-output.d.ts.map +0 -1
  722. package/dist/rules/token/commands-show-output.js.map +0 -1
  723. package/dist/rules/token/descriptive-link-text.d.ts.map +0 -1
  724. package/dist/rules/token/descriptive-link-text.js +0 -53
  725. package/dist/rules/token/descriptive-link-text.js.map +0 -1
  726. package/dist/rules/token/fenced-code-language.d.ts.map +0 -1
  727. package/dist/rules/token/fenced-code-language.js.map +0 -1
  728. package/dist/rules/token/first-line-h1.d.ts.map +0 -1
  729. package/dist/rules/token/first-line-h1.js +0 -107
  730. package/dist/rules/token/first-line-h1.js.map +0 -1
  731. package/dist/rules/token/front-matter.d.ts.map +0 -1
  732. package/dist/rules/token/front-matter.js +0 -177
  733. package/dist/rules/token/front-matter.js.map +0 -1
  734. package/dist/rules/token/heading-increment.d.ts.map +0 -1
  735. package/dist/rules/token/heading-increment.js +0 -27
  736. package/dist/rules/token/heading-increment.js.map +0 -1
  737. package/dist/rules/token/heading-start-left.d.ts.map +0 -1
  738. package/dist/rules/token/heading-start-left.js.map +0 -1
  739. package/dist/rules/token/heading-style.d.ts.map +0 -1
  740. package/dist/rules/token/heading-style.js.map +0 -1
  741. package/dist/rules/token/helpers.d.ts +0 -313
  742. package/dist/rules/token/helpers.d.ts.map +0 -1
  743. package/dist/rules/token/helpers.js +0 -746
  744. package/dist/rules/token/helpers.js.map +0 -1
  745. package/dist/rules/token/hr-style.d.ts.map +0 -1
  746. package/dist/rules/token/hr-style.js.map +0 -1
  747. package/dist/rules/token/index.d.ts +0 -76
  748. package/dist/rules/token/index.d.ts.map +0 -1
  749. package/dist/rules/token/index.js +0 -229
  750. package/dist/rules/token/index.js.map +0 -1
  751. package/dist/rules/token/line-length.d.ts.map +0 -1
  752. package/dist/rules/token/line-length.js +0 -120
  753. package/dist/rules/token/line-length.js.map +0 -1
  754. package/dist/rules/token/link-fragments.d.ts.map +0 -1
  755. package/dist/rules/token/link-fragments.js +0 -393
  756. package/dist/rules/token/link-fragments.js.map +0 -1
  757. package/dist/rules/token/link-image-reference-definitions.d.ts.map +0 -1
  758. package/dist/rules/token/link-image-reference-definitions.js.map +0 -1
  759. package/dist/rules/token/link-image-style.d.ts.map +0 -1
  760. package/dist/rules/token/link-image-style.js +0 -131
  761. package/dist/rules/token/link-image-style.js.map +0 -1
  762. package/dist/rules/token/list-indent.d.ts.map +0 -1
  763. package/dist/rules/token/list-indent.js.map +0 -1
  764. package/dist/rules/token/list-length.d.ts.map +0 -1
  765. package/dist/rules/token/list-length.js +0 -55
  766. package/dist/rules/token/list-length.js.map +0 -1
  767. package/dist/rules/token/list-marker-space.d.ts.map +0 -1
  768. package/dist/rules/token/list-marker-space.js.map +0 -1
  769. package/dist/rules/token/markdoc-attributes.d.ts.map +0 -1
  770. package/dist/rules/token/markdoc-attributes.js +0 -269
  771. package/dist/rules/token/markdoc-attributes.js.map +0 -1
  772. package/dist/rules/token/markdoc-pairing.d.ts.map +0 -1
  773. package/dist/rules/token/markdoc-pairing.js +0 -73
  774. package/dist/rules/token/markdoc-pairing.js.map +0 -1
  775. package/dist/rules/token/markdoc-syntax.d.ts.map +0 -1
  776. package/dist/rules/token/markdoc-syntax.js +0 -119
  777. package/dist/rules/token/markdoc-syntax.js.map +0 -1
  778. package/dist/rules/token/markdoc-unknown-tag.d.ts.map +0 -1
  779. package/dist/rules/token/markdoc-unknown-tag.js +0 -64
  780. package/dist/rules/token/markdoc-unknown-tag.js.map +0 -1
  781. package/dist/rules/token/no-alt-text.d.ts.map +0 -1
  782. package/dist/rules/token/no-alt-text.js +0 -47
  783. package/dist/rules/token/no-alt-text.js.map +0 -1
  784. package/dist/rules/token/no-bare-urls.d.ts.map +0 -1
  785. package/dist/rules/token/no-bare-urls.js +0 -88
  786. package/dist/rules/token/no-bare-urls.js.map +0 -1
  787. package/dist/rules/token/no-blanks-blockquote.d.ts.map +0 -1
  788. package/dist/rules/token/no-blanks-blockquote.js.map +0 -1
  789. package/dist/rules/token/no-duplicate-heading.d.ts.map +0 -1
  790. package/dist/rules/token/no-duplicate-heading.js +0 -101
  791. package/dist/rules/token/no-duplicate-heading.js.map +0 -1
  792. package/dist/rules/token/no-duplicate-link-destinations.d.ts.map +0 -1
  793. package/dist/rules/token/no-duplicate-link-destinations.js +0 -65
  794. package/dist/rules/token/no-duplicate-link-destinations.js.map +0 -1
  795. package/dist/rules/token/no-emphasis-as-heading.d.ts.map +0 -1
  796. package/dist/rules/token/no-emphasis-as-heading.js +0 -44
  797. package/dist/rules/token/no-emphasis-as-heading.js.map +0 -1
  798. package/dist/rules/token/no-empty-headings.d.ts.map +0 -1
  799. package/dist/rules/token/no-empty-headings.js +0 -28
  800. package/dist/rules/token/no-empty-headings.js.map +0 -1
  801. package/dist/rules/token/no-empty-links.d.ts.map +0 -1
  802. package/dist/rules/token/no-empty-links.js.map +0 -1
  803. package/dist/rules/token/no-hard-tabs.d.ts.map +0 -1
  804. package/dist/rules/token/no-hard-tabs.js.map +0 -1
  805. package/dist/rules/token/no-inline-html.d.ts.map +0 -1
  806. package/dist/rules/token/no-inline-html.js +0 -45
  807. package/dist/rules/token/no-inline-html.js.map +0 -1
  808. package/dist/rules/token/no-multiple-blanks.d.ts.map +0 -1
  809. package/dist/rules/token/no-multiple-blanks.js.map +0 -1
  810. package/dist/rules/token/no-multiple-space-atx.d.ts +0 -13
  811. package/dist/rules/token/no-multiple-space-atx.d.ts.map +0 -1
  812. package/dist/rules/token/no-multiple-space-atx.js +0 -50
  813. package/dist/rules/token/no-multiple-space-atx.js.map +0 -1
  814. package/dist/rules/token/no-multiple-space-closed-atx.d.ts.map +0 -1
  815. package/dist/rules/token/no-multiple-space-closed-atx.js.map +0 -1
  816. package/dist/rules/token/no-reversed-links.d.ts.map +0 -1
  817. package/dist/rules/token/no-reversed-links.js.map +0 -1
  818. package/dist/rules/token/no-space-in-code.d.ts.map +0 -1
  819. package/dist/rules/token/no-space-in-code.js.map +0 -1
  820. package/dist/rules/token/no-space-in-emphasis.d.ts.map +0 -1
  821. package/dist/rules/token/no-space-in-emphasis.js +0 -79
  822. package/dist/rules/token/no-space-in-emphasis.js.map +0 -1
  823. package/dist/rules/token/no-space-in-links.d.ts.map +0 -1
  824. package/dist/rules/token/no-space-in-links.js.map +0 -1
  825. package/dist/rules/token/no-trailing-punctuation.d.ts.map +0 -1
  826. package/dist/rules/token/no-trailing-punctuation.js.map +0 -1
  827. package/dist/rules/token/no-trailing-spaces.d.ts.map +0 -1
  828. package/dist/rules/token/no-trailing-spaces.js.map +0 -1
  829. package/dist/rules/token/ol-prefix.d.ts.map +0 -1
  830. package/dist/rules/token/ol-prefix.js.map +0 -1
  831. package/dist/rules/token/proper-names.d.ts.map +0 -1
  832. package/dist/rules/token/proper-names.js +0 -93
  833. package/dist/rules/token/proper-names.js.map +0 -1
  834. package/dist/rules/token/reference-links-images.d.ts.map +0 -1
  835. package/dist/rules/token/reference-links-images.js.map +0 -1
  836. package/dist/rules/token/required-headings.d.ts.map +0 -1
  837. package/dist/rules/token/required-headings.js +0 -83
  838. package/dist/rules/token/required-headings.js.map +0 -1
  839. package/dist/rules/token/single-h1.d.ts.map +0 -1
  840. package/dist/rules/token/single-h1.js +0 -56
  841. package/dist/rules/token/single-h1.js.map +0 -1
  842. package/dist/rules/token/table-column-count.d.ts.map +0 -1
  843. package/dist/rules/token/table-column-count.js.map +0 -1
  844. package/dist/rules/token/table-column-style.d.ts.map +0 -1
  845. package/dist/rules/token/table-column-style.js +0 -179
  846. package/dist/rules/token/table-column-style.js.map +0 -1
  847. package/dist/rules/token/table-pipe-style.d.ts.map +0 -1
  848. package/dist/rules/token/table-pipe-style.js.map +0 -1
  849. package/dist/rules/token/ul-indent.d.ts.map +0 -1
  850. package/dist/rules/token/ul-indent.js.map +0 -1
  851. package/dist/rules/token/ul-style.d.ts.map +0 -1
  852. package/dist/rules/token/ul-style.js +0 -80
  853. package/dist/rules/token/ul-style.js.map +0 -1
  854. package/dist/rules/types.d.ts +0 -83
  855. package/dist/rules/types.d.ts.map +0 -1
  856. package/dist/rules/utils.d.ts +0 -31
  857. package/dist/rules/utils.d.ts.map +0 -1
  858. package/dist/rules/utils.js +0 -90
  859. package/dist/rules/utils.js.map +0 -1
  860. package/dist/scopes/extractor.d.ts +0 -7
  861. package/dist/scopes/extractor.d.ts.map +0 -1
  862. package/dist/scopes/extractor.js +0 -536
  863. package/dist/scopes/extractor.js.map +0 -1
  864. package/dist/scopes/selector.d.ts +0 -51
  865. package/dist/scopes/selector.d.ts.map +0 -1
  866. package/dist/scopes/selector.js +0 -121
  867. package/dist/scopes/selector.js.map +0 -1
  868. package/dist/scopes/sentences.d.ts +0 -15
  869. package/dist/scopes/sentences.d.ts.map +0 -1
  870. package/dist/scopes/sentences.js +0 -202
  871. package/dist/scopes/sentences.js.map +0 -1
  872. package/dist/scopes/types.d.ts +0 -46
  873. package/dist/scopes/types.d.ts.map +0 -1
  874. package/dist/scopes/vocabulary.d.ts +0 -16
  875. package/dist/scopes/vocabulary.d.ts.map +0 -1
  876. package/dist/scopes/vocabulary.js +0 -70
  877. package/dist/scopes/vocabulary.js.map +0 -1
  878. package/dist/types/assertions.d.ts +0 -119
  879. package/dist/types/assertions.d.ts.map +0 -1
  880. package/dist/types/reporting.d.ts +0 -32
  881. package/dist/types/reporting.d.ts.map +0 -1
  882. package/dist/types/rules.d.ts +0 -41
  883. package/dist/types/rules.d.ts.map +0 -1
  884. package/dist/types/validation.d.ts +0 -6
  885. package/dist/types/validation.d.ts.map +0 -1
  886. /package/{dist → lib}/core/auto-fix.d.ts +0 -0
  887. /package/{dist → lib}/core/directives.d.ts +0 -0
  888. /package/{dist → lib}/data/markdoc-realm-schema.d.ts +0 -0
  889. /package/{dist → lib}/data/proper-nouns.d.ts +0 -0
  890. /package/{dist → lib}/metrics/index.d.ts +0 -0
  891. /package/{dist → lib}/metrics/index.d.ts.map +0 -0
  892. /package/{dist → lib}/metrics/index.js +0 -0
  893. /package/{dist → lib}/metrics/index.js.map +0 -0
  894. /package/{dist → lib}/parser/types.d.ts +0 -0
  895. /package/{dist → lib}/parser/types.js +0 -0
  896. /package/{dist → lib}/parser/types.js.map +0 -0
  897. /package/{dist → lib}/rules/scope/capitalization.d.ts +0 -0
  898. /package/{dist → lib}/rules/scope/conditional.d.ts +0 -0
  899. /package/{dist → lib}/rules/scope/consistency.d.ts +0 -0
  900. /package/{dist → lib}/rules/scope/length.d.ts +0 -0
  901. /package/{dist → lib}/rules/scope/max-image-size.d.ts +0 -0
  902. /package/{dist → lib}/rules/scope/occurrence.d.ts +0 -0
  903. /package/{dist → lib}/rules/scope/pattern.d.ts +0 -0
  904. /package/{dist → lib}/rules/scope/repetition.d.ts +0 -0
  905. /package/{dist → lib}/rules/scope/semantic-line-breaks.d.ts +0 -0
  906. /package/{dist → lib}/rules/scope/swap.d.ts +0 -0
  907. /package/{dist → lib}/rules/token/blanks-around-fences.d.ts +0 -0
  908. /package/{dist → lib}/rules/token/blanks-around-fences.js +0 -0
  909. /package/{dist → lib}/rules/token/blanks-around-headings.d.ts +0 -0
  910. /package/{dist → lib}/rules/token/blanks-around-lists.d.ts +0 -0
  911. /package/{dist → lib}/rules/token/blanks-around-tables.d.ts +0 -0
  912. /package/{dist → lib}/rules/token/code-block-style.d.ts +0 -0
  913. /package/{dist → lib}/rules/token/code-block-style.js +0 -0
  914. /package/{dist → lib}/rules/token/code-fence-style.d.ts +0 -0
  915. /package/{dist → lib}/rules/token/code-fence-style.js +0 -0
  916. /package/{dist → lib}/rules/token/commands-show-output.d.ts +0 -0
  917. /package/{dist → lib}/rules/token/commands-show-output.js +0 -0
  918. /package/{dist → lib}/rules/token/descriptive-link-text.d.ts +0 -0
  919. /package/{dist → lib}/rules/token/emphasis-style.d.ts +0 -0
  920. /package/{dist → lib}/rules/token/emphasis-style.d.ts.map +0 -0
  921. /package/{dist → lib}/rules/token/emphasis-style.js +0 -0
  922. /package/{dist → lib}/rules/token/emphasis-style.js.map +0 -0
  923. /package/{dist → lib}/rules/token/fenced-code-language.d.ts +0 -0
  924. /package/{dist → lib}/rules/token/fenced-code-language.js +0 -0
  925. /package/{dist → lib}/rules/token/first-line-h1.d.ts +0 -0
  926. /package/{dist → lib}/rules/token/front-matter.d.ts +0 -0
  927. /package/{dist → lib}/rules/token/heading-increment.d.ts +0 -0
  928. /package/{dist → lib}/rules/token/heading-start-left.d.ts +0 -0
  929. /package/{dist → lib}/rules/token/heading-start-left.js +0 -0
  930. /package/{dist → lib}/rules/token/heading-style.d.ts +0 -0
  931. /package/{dist → lib}/rules/token/heading-style.js +0 -0
  932. /package/{dist → lib}/rules/token/hr-style.d.ts +0 -0
  933. /package/{dist → lib}/rules/token/hr-style.js +0 -0
  934. /package/{dist → lib}/rules/token/line-length.d.ts +0 -0
  935. /package/{dist → lib}/rules/token/link-fragments.d.ts +0 -0
  936. /package/{dist → lib}/rules/token/link-image-reference-definitions.d.ts +0 -0
  937. /package/{dist → lib}/rules/token/link-image-reference-definitions.js +0 -0
  938. /package/{dist → lib}/rules/token/link-image-style.d.ts +0 -0
  939. /package/{dist → lib}/rules/token/list-indent.d.ts +0 -0
  940. /package/{dist → lib}/rules/token/list-indent.js +0 -0
  941. /package/{dist → lib}/rules/token/list-length.d.ts +0 -0
  942. /package/{dist → lib}/rules/token/list-marker-space.d.ts +0 -0
  943. /package/{dist → lib}/rules/token/list-marker-space.js +0 -0
  944. /package/{dist → lib}/rules/token/markdoc-attributes.d.ts +0 -0
  945. /package/{dist → lib}/rules/token/markdoc-pairing.d.ts +0 -0
  946. /package/{dist → lib}/rules/token/markdoc-syntax.d.ts +0 -0
  947. /package/{dist → lib}/rules/token/markdoc-unknown-tag.d.ts +0 -0
  948. /package/{dist → lib}/rules/token/messages.d.ts +0 -0
  949. /package/{dist → lib}/rules/token/messages.d.ts.map +0 -0
  950. /package/{dist → lib}/rules/token/messages.js +0 -0
  951. /package/{dist → lib}/rules/token/messages.js.map +0 -0
  952. /package/{dist → lib}/rules/token/no-alt-text.d.ts +0 -0
  953. /package/{dist → lib}/rules/token/no-bare-urls.d.ts +0 -0
  954. /package/{dist → lib}/rules/token/no-blanks-blockquote.d.ts +0 -0
  955. /package/{dist → lib}/rules/token/no-blanks-blockquote.js +0 -0
  956. /package/{dist → lib}/rules/token/no-duplicate-heading.d.ts +0 -0
  957. /package/{dist → lib}/rules/token/no-duplicate-link-destinations.d.ts +0 -0
  958. /package/{dist → lib}/rules/token/no-emphasis-as-heading.d.ts +0 -0
  959. /package/{dist → lib}/rules/token/no-empty-headings.d.ts +0 -0
  960. /package/{dist → lib}/rules/token/no-empty-links.d.ts +0 -0
  961. /package/{dist → lib}/rules/token/no-empty-links.js +0 -0
  962. /package/{dist → lib}/rules/token/no-hard-tabs.d.ts +0 -0
  963. /package/{dist → lib}/rules/token/no-hard-tabs.js +0 -0
  964. /package/{dist → lib}/rules/token/no-inline-html.d.ts +0 -0
  965. /package/{dist → lib}/rules/token/no-missing-space-atx.d.ts +0 -0
  966. /package/{dist → lib}/rules/token/no-missing-space-atx.d.ts.map +0 -0
  967. /package/{dist → lib}/rules/token/no-missing-space-atx.js +0 -0
  968. /package/{dist → lib}/rules/token/no-missing-space-atx.js.map +0 -0
  969. /package/{dist → lib}/rules/token/no-missing-space-closed-atx.d.ts +0 -0
  970. /package/{dist → lib}/rules/token/no-missing-space-closed-atx.d.ts.map +0 -0
  971. /package/{dist → lib}/rules/token/no-missing-space-closed-atx.js +0 -0
  972. /package/{dist → lib}/rules/token/no-missing-space-closed-atx.js.map +0 -0
  973. /package/{dist → lib}/rules/token/no-multiple-blanks.d.ts +0 -0
  974. /package/{dist → lib}/rules/token/no-multiple-blanks.js +0 -0
  975. /package/{dist → lib}/rules/token/no-multiple-space-blockquote.d.ts +0 -0
  976. /package/{dist → lib}/rules/token/no-multiple-space-blockquote.d.ts.map +0 -0
  977. /package/{dist → lib}/rules/token/no-multiple-space-blockquote.js +0 -0
  978. /package/{dist → lib}/rules/token/no-multiple-space-blockquote.js.map +0 -0
  979. /package/{dist → lib}/rules/token/no-multiple-space-closed-atx.d.ts +0 -0
  980. /package/{dist → lib}/rules/token/no-multiple-space-closed-atx.js +0 -0
  981. /package/{dist → lib}/rules/token/no-reversed-links.d.ts +0 -0
  982. /package/{dist → lib}/rules/token/no-reversed-links.js +0 -0
  983. /package/{dist → lib}/rules/token/no-space-in-code.d.ts +0 -0
  984. /package/{dist → lib}/rules/token/no-space-in-code.js +0 -0
  985. /package/{dist → lib}/rules/token/no-space-in-emphasis.d.ts +0 -0
  986. /package/{dist → lib}/rules/token/no-space-in-links.d.ts +0 -0
  987. /package/{dist → lib}/rules/token/no-space-in-links.js +0 -0
  988. /package/{dist → lib}/rules/token/no-trailing-punctuation.d.ts +0 -0
  989. /package/{dist → lib}/rules/token/no-trailing-punctuation.js +0 -0
  990. /package/{dist → lib}/rules/token/no-trailing-spaces.d.ts +0 -0
  991. /package/{dist → lib}/rules/token/no-trailing-spaces.js +0 -0
  992. /package/{dist → lib}/rules/token/ol-prefix.d.ts +0 -0
  993. /package/{dist → lib}/rules/token/ol-prefix.js +0 -0
  994. /package/{dist → lib}/rules/token/proper-names.d.ts +0 -0
  995. /package/{dist → lib}/rules/token/reference-links-images.d.ts +0 -0
  996. /package/{dist → lib}/rules/token/reference-links-images.js +0 -0
  997. /package/{dist → lib}/rules/token/required-headings.d.ts +0 -0
  998. /package/{dist → lib}/rules/token/single-h1.d.ts +0 -0
  999. /package/{dist → lib}/rules/token/single-trailing-newline.d.ts +0 -0
  1000. /package/{dist → lib}/rules/token/single-trailing-newline.d.ts.map +0 -0
  1001. /package/{dist → lib}/rules/token/single-trailing-newline.js +0 -0
  1002. /package/{dist → lib}/rules/token/single-trailing-newline.js.map +0 -0
  1003. /package/{dist → lib}/rules/token/strong-style.d.ts +0 -0
  1004. /package/{dist → lib}/rules/token/strong-style.d.ts.map +0 -0
  1005. /package/{dist → lib}/rules/token/strong-style.js +0 -0
  1006. /package/{dist → lib}/rules/token/strong-style.js.map +0 -0
  1007. /package/{dist → lib}/rules/token/table-column-count.d.ts +0 -0
  1008. /package/{dist → lib}/rules/token/table-column-count.js +0 -0
  1009. /package/{dist → lib}/rules/token/table-column-style.d.ts +0 -0
  1010. /package/{dist → lib}/rules/token/table-pipe-style.d.ts +0 -0
  1011. /package/{dist → lib}/rules/token/table-pipe-style.js +0 -0
  1012. /package/{dist → lib}/rules/token/ul-indent.d.ts +0 -0
  1013. /package/{dist → lib}/rules/token/ul-indent.js +0 -0
  1014. /package/{dist → lib}/rules/token/ul-style.d.ts +0 -0
  1015. /package/{dist → lib}/rules/types.js +0 -0
  1016. /package/{dist → lib}/rules/types.js.map +0 -0
  1017. /package/{dist → lib}/scopes/types.js +0 -0
  1018. /package/{dist → lib}/scopes/types.js.map +0 -0
  1019. /package/{dist → lib}/types/assertions.js +0 -0
  1020. /package/{dist → lib}/types/assertions.js.map +0 -0
  1021. /package/{dist → lib}/types/index.d.ts +0 -0
  1022. /package/{dist → lib}/types/index.d.ts.map +0 -0
  1023. /package/{dist → lib}/types/index.js +0 -0
  1024. /package/{dist → lib}/types/index.js.map +0 -0
  1025. /package/{dist → lib}/types/problems.d.ts +0 -0
  1026. /package/{dist → lib}/types/problems.d.ts.map +0 -0
  1027. /package/{dist → lib}/types/problems.js +0 -0
  1028. /package/{dist → lib}/types/problems.js.map +0 -0
  1029. /package/{dist → lib}/types/reporting.js +0 -0
  1030. /package/{dist → lib}/types/reporting.js.map +0 -0
  1031. /package/{dist → lib}/types/rules.js +0 -0
  1032. /package/{dist → lib}/types/rules.js.map +0 -0
  1033. /package/{dist → lib}/types/validation.js +0 -0
  1034. /package/{dist → lib}/types/validation.js.map +0 -0
@@ -33,9 +33,9 @@ Confirmed two independent ways:
33
33
  - The raw `LICENSE` file itself is the full CC BY 4.0 legal code.
34
34
 
35
35
  The site's Terms of Use (`https://learn.microsoft.com/en-us/legal/termsofuse`)
36
- explicitly defers to this: *"Certain documentation may be subject to
36
+ explicitly defers to this: _"Certain documentation may be subject to
37
37
  explicit license terms separate from the terms contained here. To the
38
- extent the terms conflict, the explicit license terms control."*
38
+ extent the terms conflict, the explicit license terms control."_
39
39
 
40
40
  **Bottom line, and the reason this matters for the preset:** CC-BY-4.0
41
41
  attribution is factually correct to ship, but every `link:` in `microsoft.ts`
@@ -91,35 +91,35 @@ rather than a complete test) is `warn`.
91
91
 
92
92
  ### Structural (heading, list, table, alt-text, link mechanics) — `error` unless noted
93
93
 
94
- | Rule id | Source URL | Quote | Verdict |
95
- |---|---|---|---|
96
- | `microsoft/heading-sentence-case` | [capitalization](https://learn.microsoft.com/en-us/style-guide/capitalization) | "Microsoft style uses sentence-style capitalization." | CONFIRMED |
97
- | `microsoft/capitalize-after-heading-colon` (`warn`) | [colons](https://learn.microsoft.com/en-us/style-guide/punctuation/colons) | "Always capitalize the word after the colon." | CONFIRMED, scoped to headings only — the mid-sentence-colon form is merely "Acceptable" per the guide's own table, not shipped |
98
- | `microsoft/no-trailing-punctuation` | [headings](https://learn.microsoft.com/en-us/style-guide/scannable-content/headings) | "Don't end headings with a period." | CONFIRMED — default punctuation set (`.,;:` with `?` stripped) already matches Microsoft's own `?`-allowed/`!`-rarely exceptions with no override |
99
- | `microsoft/no-ampersand-in-headings` (`warn`) | [headings](https://learn.microsoft.com/en-us/style-guide/scannable-content/headings) | "Don't use ampersands (&) or plus signs (+) in headings unless..." | CONFIRMED, `exceptions.lines` for `C++`/`A+`/`.NET`; `&` pattern excludes `&`/` `/`<`/`>`/`"`/numeric entities |
100
- | `microsoft/vs-in-headings` (`warn`) | [versus-vs](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/v/versus-vs) | "In headings, use the abbreviation vs., all lowercase." | CONFIRMED, scoped to `heading` |
101
- | `microsoft/versus-in-text` (`warn`) | same | "In text, spell out as versus." | CONFIRMED, scoped to `[paragraph, list-item, table.cell]` — two scoped rules with opposite directions so they don't fight each other |
102
- | `microsoft/no-multiple-blanks` | [headings](https://learn.microsoft.com/en-us/style-guide/scannable-content/headings) | "Don't use extra line breaks to increase heading spacing." | CONFIRMED |
103
- | `microsoft/no-emphasis-as-heading` | [writing-all-abilities](https://learn.microsoft.com/en-us/style-guide/accessibility/writing-all-abilities) | "Use heading levels instead of text formatting to communicate... hierarchy." | CONFIRMED |
104
- | `microsoft/no-apostrophe-plural-decade` (`warn`) | [apostrophes](https://learn.microsoft.com/en-us/style-guide/punctuation/apostrophes) | "Don't use an apostrophe... to form the plural of a singular noun." | CONFIRMED, scoped to the unambiguous decade case (`1990's`); a bare `[A-Z]{2,}'s` (e.g. `API's`) is excluded — frequently a legitimate possessive |
105
- | `microsoft/article-before-acronym` (`warn`) | [acronyms](https://learn.microsoft.com/en-us/style-guide/acronyms) | "a DLL / an ISP / a URL / a SQL database" | CONFIRMED |
106
- | `microsoft/list-item-capital` | [lists](https://learn.microsoft.com/en-us/style-guide/scannable-content/lists) | "Begin each item in a list with a capital letter." | CONFIRMED, custom-regex `capitalization` (not `$sentence`, which would overshoot) |
107
- | `microsoft/no-trailing-conjunction-list` (`warn`) | [lists](https://learn.microsoft.com/en-us/style-guide/scannable-content/lists) | "Don't use semicolons, commas, or conjunctions... at the end of list items." | CONFIRMED |
108
- | `microsoft/no-ellipsis-column-header` (`warn`) | [tables](https://learn.microsoft.com/en-us/style-guide/scannable-content/tables) | "Don't use ellipses at the end of column headers." | CONFIRMED |
109
- | `microsoft/no-blank-table-cell` (`warn`) | [tables](https://learn.microsoft.com/en-us/style-guide/scannable-content/tables) | "Don't leave a cell blank or use an em dash. Instead, use Not applicable or None." | CONFIRMED, **em dash only** — the guide's other half ("don't leave a cell blank") is NOT enforced: a truly blank `table.cell` segment's content is the empty string, and every `pattern` token can only ever produce a zero-width match against `''`, which pattern.ts deliberately skips (no real text to report) — an architectural limit of the `pattern` assertion, not a missed narrowing pass. See the rule's doc comment in `config/presets/microsoft.ts` for the full reasoning and what a real fix would require (a token rule or an extractor-level change). The draft's original broader pattern also matched an en dash/hyphen, which the guide never names for this rule either. |
110
- | `microsoft/single-space-after-punctuation` (`warn`) | [periods](https://learn.microsoft.com/en-us/style-guide/punctuation/periods) + [top-10-tips](https://learn.microsoft.com/en-us/style-guide/top-10-tips-style-voice) | "Put one space, not two, after a period" — top-10-tips broadens to "periods, question marks, and colons" | CONFIRMED, widened scope per verifier F's note |
111
- | `microsoft/no-space-around-em-dash` (`warn`) | [dashes-hyphens](https://learn.microsoft.com/en-us/style-guide/punctuation/dashes-hyphens/) | "Don't use spaces around em dashes." | CONFIRMED, **narrowed to em dash only** — the en-dash rule has an explicit worked exception for UI timestamps/date ranges ("2:15 PM – 4:45 PM") a blind regex can't distinguish from the ordinary case; en-dash spacing is not enforced at all |
112
- | `microsoft/no-from-before-en-dash-range` (`warn`) | [numbers](https://learn.microsoft.com/en-us/style-guide/numbers) | "Don't use from before a range indicated by an en dash." | CONFIRMED |
113
- | `microsoft/straight-quotes` (`warn`) | [quotation-marks](https://learn.microsoft.com/en-us/style-guide/punctuation/quotation-marks) | "Use straight quotation marks. Segoe Sans... does not have a curly quotation mark option." | CONFIRMED |
114
- | `microsoft/spell-out-ordinals` (`warn`) | [numbers](https://learn.microsoft.com/en-us/style-guide/numbers) | "Always spell out ordinal numbers." | CONFIRMED |
115
- | `microsoft/ordinal-no-ly` (`warn`) | [numbers](https://learn.microsoft.com/en-us/style-guide/numbers) | "Don't add -ly to an ordinal number, as in firstly or secondly." | CONFIRMED |
116
- | `microsoft/noon-midnight` (`warn`) | [numbers](https://learn.microsoft.com/en-us/style-guide/numbers) | "Don't use numerals for 12:00. Use noon or midnight instead." | CONFIRMED |
117
- | `microsoft/no-alt-text` | [alternative-text](https://learn.microsoft.com/en-us/style-guide/accessibility/alternative-text) | "Add alt text to all images that convey important meaning." | CONFIRMED |
118
- | `microsoft/alt-text-length` (`warn`) | same | "Limit the length to 150 characters." | CONFIRMED — structural number |
119
- | `microsoft/alt-text-format` (`warn`) | same | "Begin alt text with a capital letter. End it with a period." | CONFIRMED, incomplete — the guide's own carve-out ("even if it's just a fragment, if doing so is practical for the image type") is not modeled; see "Known limitations" |
120
- | `microsoft/alt-text-generic-opener` (`warn`) | same | "Don't start alt text with 'Image.'" / "Don't start... with 'Button' or 'Link.'" | CONFIRMED — `Screenshot`/`Diagram`/`Photograph`/`Chart`/`Drawing` are prescribed openers, deliberately absent from the pattern |
121
- | `microsoft/alt-text-no-filename` (`warn`) | same | "Don't use the file name of an image as alt text." | CONFIRMED |
122
- | `microsoft/descriptive-link-text` | [urls-web-addresses](https://learn.microsoft.com/en-us/style-guide/urls-web-addresses) | "rather than a generic phrase like click here" | CONFIRMED |
94
+ | Rule id | Source URL | Quote | Verdict |
95
+ | --------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
96
+ | `microsoft/heading-sentence-case` | [capitalization](https://learn.microsoft.com/en-us/style-guide/capitalization) | "Microsoft style uses sentence-style capitalization." | CONFIRMED |
97
+ | `microsoft/capitalize-after-heading-colon` (`warn`) | [colons](https://learn.microsoft.com/en-us/style-guide/punctuation/colons) | "Always capitalize the word after the colon." | CONFIRMED, scoped to headings only — the mid-sentence-colon form is merely "Acceptable" per the guide's own table, not shipped |
98
+ | `microsoft/no-trailing-punctuation` | [headings](https://learn.microsoft.com/en-us/style-guide/scannable-content/headings) | "Don't end headings with a period." | CONFIRMED — default punctuation set (`.,;:` with `?` stripped) already matches Microsoft's own `?`-allowed/`!`-rarely exceptions with no override |
99
+ | `microsoft/no-ampersand-in-headings` (`warn`) | [headings](https://learn.microsoft.com/en-us/style-guide/scannable-content/headings) | "Don't use ampersands (&) or plus signs (+) in headings unless..." | CONFIRMED, `exceptions.lines` for `C++`/`A+`/`.NET`; `&` pattern excludes `&`/` `/`<`/`>`/`"`/numeric entities |
100
+ | `microsoft/vs-in-headings` (`warn`) | [versus-vs](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/v/versus-vs) | "In headings, use the abbreviation vs., all lowercase." | CONFIRMED, scoped to `heading` |
101
+ | `microsoft/versus-in-text` (`warn`) | same | "In text, spell out as versus." | CONFIRMED, scoped to `[paragraph, list-item, table.cell]` — two scoped rules with opposite directions so they don't fight each other |
102
+ | `microsoft/no-multiple-blanks` | [headings](https://learn.microsoft.com/en-us/style-guide/scannable-content/headings) | "Don't use extra line breaks to increase heading spacing." | CONFIRMED |
103
+ | `microsoft/no-emphasis-as-heading` | [writing-all-abilities](https://learn.microsoft.com/en-us/style-guide/accessibility/writing-all-abilities) | "Use heading levels instead of text formatting to communicate... hierarchy." | CONFIRMED |
104
+ | `microsoft/no-apostrophe-plural-decade` (`warn`) | [apostrophes](https://learn.microsoft.com/en-us/style-guide/punctuation/apostrophes) | "Don't use an apostrophe... to form the plural of a singular noun." | CONFIRMED, scoped to the unambiguous decade case (`1990's`); a bare `[A-Z]{2,}'s` (e.g. `API's`) is excluded — frequently a legitimate possessive |
105
+ | `microsoft/article-before-acronym` (`warn`) | [acronyms](https://learn.microsoft.com/en-us/style-guide/acronyms) | "a DLL / an ISP / a URL / a SQL database" | CONFIRMED |
106
+ | `microsoft/list-item-capital` | [lists](https://learn.microsoft.com/en-us/style-guide/scannable-content/lists) | "Begin each item in a list with a capital letter." | CONFIRMED, custom-regex `capitalization` (not `$sentence`, which would overshoot) |
107
+ | `microsoft/no-trailing-conjunction-list` (`warn`) | [lists](https://learn.microsoft.com/en-us/style-guide/scannable-content/lists) | "Don't use semicolons, commas, or conjunctions... at the end of list items." | CONFIRMED |
108
+ | `microsoft/no-ellipsis-column-header` (`warn`) | [tables](https://learn.microsoft.com/en-us/style-guide/scannable-content/tables) | "Don't use ellipses at the end of column headers." | CONFIRMED |
109
+ | `microsoft/no-blank-table-cell` (`warn`) | [tables](https://learn.microsoft.com/en-us/style-guide/scannable-content/tables) | "Don't leave a cell blank or use an em dash. Instead, use Not applicable or None." | CONFIRMED, **em dash only** — the guide's other half ("don't leave a cell blank") is NOT enforced: a truly blank `table.cell` segment's content is the empty string, and every `pattern` token can only ever produce a zero-width match against `''`, which pattern.ts deliberately skips (no real text to report) — an architectural limit of the `pattern` assertion, not a missed narrowing pass. See the rule's doc comment in `config/presets/microsoft.ts` for the full reasoning and what a real fix would require (a token rule or an extractor-level change). The draft's original broader pattern also matched an en dash/hyphen, which the guide never names for this rule either. |
110
+ | `microsoft/single-space-after-punctuation` (`warn`) | [periods](https://learn.microsoft.com/en-us/style-guide/punctuation/periods) + [top-10-tips](https://learn.microsoft.com/en-us/style-guide/top-10-tips-style-voice) | "Put one space, not two, after a period" — top-10-tips broadens to "periods, question marks, and colons" | CONFIRMED, widened scope per verifier F's note |
111
+ | `microsoft/no-space-around-em-dash` (`warn`) | [dashes-hyphens](https://learn.microsoft.com/en-us/style-guide/punctuation/dashes-hyphens/) | "Don't use spaces around em dashes." | CONFIRMED, **narrowed to em dash only** — the en-dash rule has an explicit worked exception for UI timestamps/date ranges ("2:15 PM – 4:45 PM") a blind regex can't distinguish from the ordinary case; en-dash spacing is not enforced at all |
112
+ | `microsoft/no-from-before-en-dash-range` (`warn`) | [numbers](https://learn.microsoft.com/en-us/style-guide/numbers) | "Don't use from before a range indicated by an en dash." | CONFIRMED |
113
+ | `microsoft/straight-quotes` (`warn`) | [quotation-marks](https://learn.microsoft.com/en-us/style-guide/punctuation/quotation-marks) | "Use straight quotation marks. Segoe Sans... does not have a curly quotation mark option." | CONFIRMED |
114
+ | `microsoft/spell-out-ordinals` (`warn`) | [numbers](https://learn.microsoft.com/en-us/style-guide/numbers) | "Always spell out ordinal numbers." | CONFIRMED |
115
+ | `microsoft/ordinal-no-ly` (`warn`) | [numbers](https://learn.microsoft.com/en-us/style-guide/numbers) | "Don't add -ly to an ordinal number, as in firstly or secondly." | CONFIRMED |
116
+ | `microsoft/noon-midnight` (`warn`) | [numbers](https://learn.microsoft.com/en-us/style-guide/numbers) | "Don't use numerals for 12:00. Use noon or midnight instead." | CONFIRMED |
117
+ | `microsoft/no-alt-text` | [alternative-text](https://learn.microsoft.com/en-us/style-guide/accessibility/alternative-text) | "Add alt text to all images that convey important meaning." | CONFIRMED |
118
+ | `microsoft/alt-text-length` (`warn`) | same | "Limit the length to 150 characters." | CONFIRMED — structural number |
119
+ | `microsoft/alt-text-format` (`warn`) | same | "Begin alt text with a capital letter. End it with a period." | CONFIRMED, incomplete — the guide's own carve-out ("even if it's just a fragment, if doing so is practical for the image type") is not modeled; see "Known limitations" |
120
+ | `microsoft/alt-text-generic-opener` (`warn`) | same | "Don't start alt text with 'Image.'" / "Don't start... with 'Button' or 'Link.'" | CONFIRMED — `Screenshot`/`Diagram`/`Photograph`/`Chart`/`Drawing` are prescribed openers, deliberately absent from the pattern |
121
+ | `microsoft/alt-text-no-filename` (`warn`) | same | "Don't use the file name of an image as alt text." | CONFIRMED |
122
+ | `microsoft/descriptive-link-text` | [urls-web-addresses](https://learn.microsoft.com/en-us/style-guide/urls-web-addresses) | "rather than a generic phrase like click here" | CONFIRMED |
123
123
 
124
124
  ### Structural numbers (`warn`) — see the dedicated section below
125
125
 
@@ -127,36 +127,36 @@ rather than a complete test) is `warn`.
127
127
 
128
128
  ### Voice, contractions — `warn`
129
129
 
130
- | Rule id | Source URL | Quote | Verdict |
131
- |---|---|---|---|
132
- | `microsoft/use-contractions` | [use-contractions](https://learn.microsoft.com/en-us/style-guide/word-choice/use-contractions) + [top-10-tips](https://learn.microsoft.com/en-us/style-guide/top-10-tips-style-voice) | "Use contractions like it's, you'll, you're, we're, and let's." | CONFIRMED — the signature Microsoft rule and the sharpest voice difference from other guides. Every pair is a clean word-for-word contraction; `applyMatchCase` verified to handle sentence-initial capitalized matches correctly ("Do not" → "Don't"). |
133
- | `microsoft/no-awkward-contractions` | [use-contractions](https://learn.microsoft.com/en-us/style-guide/word-choice/use-contractions) | "Avoid ambiguous or awkward contractions, such as there'd, it'll, and they'd." | CONFIRMED |
134
- | `microsoft/contraction-consistency` | same | "don't use can't and cannot in the same UI." | CONFIRMED — textbook fit for first-seen-wins `consistency` |
135
- | `microsoft/no-weak-phrasing` | [top-10-tips](https://learn.microsoft.com/en-us/style-guide/top-10-tips-style-voice) | "Avoid weak phrasing like there is, there are, and there were." | CONFIRMED |
136
- | `microsoft/avoid-please` | [a-z/please](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/p/please) | "Avoid please except in situations where the customer is asked to do something inconvenient..." | CONFIRMED |
130
+ | Rule id | Source URL | Quote | Verdict |
131
+ | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
132
+ | `microsoft/use-contractions` | [use-contractions](https://learn.microsoft.com/en-us/style-guide/word-choice/use-contractions) + [top-10-tips](https://learn.microsoft.com/en-us/style-guide/top-10-tips-style-voice) | "Use contractions like it's, you'll, you're, we're, and let's." | CONFIRMED — the signature Microsoft rule and the sharpest voice difference from other guides. Every pair is a clean word-for-word contraction; `applyMatchCase` verified to handle sentence-initial capitalized matches correctly ("Do not" → "Don't"). |
133
+ | `microsoft/no-awkward-contractions` | [use-contractions](https://learn.microsoft.com/en-us/style-guide/word-choice/use-contractions) | "Avoid ambiguous or awkward contractions, such as there'd, it'll, and they'd." | CONFIRMED |
134
+ | `microsoft/contraction-consistency` | same | "don't use can't and cannot in the same UI." | CONFIRMED — textbook fit for first-seen-wins `consistency` |
135
+ | `microsoft/no-weak-phrasing` | [top-10-tips](https://learn.microsoft.com/en-us/style-guide/top-10-tips-style-voice) | "Avoid weak phrasing like there is, there are, and there were." | CONFIRMED |
136
+ | `microsoft/avoid-please` | [a-z/please](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/p/please) | "Avoid please except in situations where the customer is asked to do something inconvenient..." | CONFIRMED |
137
137
 
138
138
  ### US spelling, Latin abbreviations, simple words — `error` (mechanical, per the research's "ship at error" framing)
139
139
 
140
- | Rule id | Source URL | Quote | Verdict |
141
- |---|---|---|---|
142
- | `microsoft/us-spelling` | [use-us-spelling](https://learn.microsoft.com/en-us/style-guide/word-choice/use-us-spelling-avoid-non-english-words) | "use the US spelling. For example, use license, not licence." | CONFIRMED — a subset not already covered by `recheck/prose`'s `consistency` rule (behavior/color/license/organize) |
143
- | `microsoft/no-latin-abbreviations` | same | "Avoid Latin abbreviations for common English phrases." | CONFIRMED for e.g./i.e./viz./ergo/de facto/ad hoc/vis-a-vis. `via` deliberately dropped (see self-contradictions section) |
144
- | `microsoft/simple-words` | [use-simple-words](https://learn.microsoft.com/en-us/style-guide/word-choice/use-simple-words-concise-sentences) | "Choose simple verbs without modifiers." / "Don't use two or three words when one will do." | CONFIRMED |
145
- | `microsoft/leverage` | [avoid-jargon](https://learn.microsoft.com/en-us/style-guide/word-choice/avoid-jargon) | "using leverage to mean take advantage of" | CONFIRMED — split into its own rule so its `link:` points at the page that actually states it |
146
- | `microsoft/glyph` | same | "such as symbol instead of glyph" | CONFIRMED |
147
- | `microsoft/bucketize` | [dont-use-common-words](https://learn.microsoft.com/en-us/style-guide/word-choice/dont-use-common-words-in-new-ways) | "Don't create a new word from an existing word." | CONFIRMED |
148
- | `microsoft/impact-verb` (`warn`) | same | "Don't use verbs as nouns or nouns as verbs" | CONFIRMED, narrowly anchored to `impact` immediately followed by a specific object noun (performance/productivity/quality/reliability/availability/latency/throughput) — bare "impact" is also a common, correct noun ("the impact of this change") per verifier E's own caution |
149
- | `microsoft/the-ask` (`warn`) | [dont-use-common-words](https://learn.microsoft.com/en-us/style-guide/word-choice/dont-use-common-words-in-new-ways) | "respond to the request" vs. "respond to the ask" | CONFIRMED |
140
+ | Rule id | Source URL | Quote | Verdict |
141
+ | ---------------------------------- | -------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
142
+ | `microsoft/us-spelling` | [use-us-spelling](https://learn.microsoft.com/en-us/style-guide/word-choice/use-us-spelling-avoid-non-english-words) | "use the US spelling. For example, use license, not licence." | CONFIRMED — a subset not already covered by `recheck/prose`'s `consistency` rule (behavior/color/license/organize) |
143
+ | `microsoft/no-latin-abbreviations` | same | "Avoid Latin abbreviations for common English phrases." | CONFIRMED for e.g./i.e./viz./ergo/de facto/ad hoc/vis-a-vis. `via` deliberately dropped (see self-contradictions section) |
144
+ | `microsoft/simple-words` | [use-simple-words](https://learn.microsoft.com/en-us/style-guide/word-choice/use-simple-words-concise-sentences) | "Choose simple verbs without modifiers." / "Don't use two or three words when one will do." | CONFIRMED |
145
+ | `microsoft/leverage` | [avoid-jargon](https://learn.microsoft.com/en-us/style-guide/word-choice/avoid-jargon) | "using leverage to mean take advantage of" | CONFIRMED — split into its own rule so its `link:` points at the page that actually states it |
146
+ | `microsoft/glyph` | same | "such as symbol instead of glyph" | CONFIRMED |
147
+ | `microsoft/bucketize` | [dont-use-common-words](https://learn.microsoft.com/en-us/style-guide/word-choice/dont-use-common-words-in-new-ways) | "Don't create a new word from an existing word." | CONFIRMED |
148
+ | `microsoft/impact-verb` (`warn`) | same | "Don't use verbs as nouns or nouns as verbs" | CONFIRMED, narrowly anchored to `impact` immediately followed by a specific object noun (performance/productivity/quality/reliability/availability/latency/throughput) — bare "impact" is also a common, correct noun ("the impact of this change") per verifier E's own caution |
149
+ | `microsoft/the-ask` (`warn`) | [dont-use-common-words](https://learn.microsoft.com/en-us/style-guide/word-choice/dont-use-common-words-in-new-ways) | "respond to the request" vs. "respond to the ask" | CONFIRMED |
150
150
 
151
151
  ### Bias-free, militaristic, derogatory language — `error` (sensitive category)
152
152
 
153
- | Rule id | Source URL | Quote | Verdict |
154
- |---|---|---|---|
155
- | `microsoft/bias-free-terms` | [bias-free](https://learn.microsoft.com/en-us/style-guide/bias-free-communication) | chairman→chair; mankind→humanity; manmade→synthetic; manpower→workforce; salesman→sales representative; DMZ→perimeter network | CONFIRMED. `master/slave` deliberately NOT included in this rule's pairs — it ships separately as `microsoft/master-slave`, see next row and the self-contradictions section |
156
- | `microsoft/master-slave` | [bias-free](https://learn.microsoft.com/en-us/style-guide/bias-free-communication) + [a-z/master-slave](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/m/master-slave) | "primary/subordinate ← master/slave" (bias-free); "Don't use master/slave. Use primary/replica or alternatives such as primary/secondary, principal/agent, controller/worker" (a-z) | CONFIRMED both pages ban the term; the two pages disagree only on the replacement — added in the task-10 fix wave as `pattern` (detection-only), naming both candidates in its message rather than shipping neither direction. See "Self-contradictions" |
157
- | `microsoft/cyberattack-spelling` | [militaristic-language](https://learn.microsoft.com/en-us/style-guide/militaristic-language) | "add cyber- in front of threat so it reads cyberthreat, all one word no space no hyphen" | CONFIRMED — spelling normalization only; the guide's separate "needs a qualifier in front of it" test is not mechanically decidable and is not enforced |
158
- | `microsoft/no-derogatory-slang` | [bias-free](https://learn.microsoft.com/en-us/style-guide/bias-free-communication) | "Don't use profane or derogatory terms, such as pimp or bitch." / "spirit animal" | CONFIRMED, detection-only (no safe fixed replacement for any of these) |
159
- | `microsoft/racial-ethnic-capitalization` | same | "Use title-style capitalization for Asian, Black and African American, Hispanic and Latinx..." | CONFIRMED, case-sensitive match (only genuinely-lowercase forms flagged); `white`/`multiracial` (which the guide says to LOWERCASE) deliberately excluded — a bare capitalized "White" collides constantly with unrelated proper nouns |
153
+ | Rule id | Source URL | Quote | Verdict |
154
+ | ---------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
155
+ | `microsoft/bias-free-terms` | [bias-free](https://learn.microsoft.com/en-us/style-guide/bias-free-communication) | chairman→chair; mankind→humanity; manmade→synthetic; manpower→workforce; salesman→sales representative; DMZ→perimeter network | CONFIRMED. `master/slave` deliberately NOT included in this rule's pairs — it ships separately as `microsoft/master-slave`, see next row and the self-contradictions section |
156
+ | `microsoft/master-slave` | [bias-free](https://learn.microsoft.com/en-us/style-guide/bias-free-communication) + [a-z/master-slave](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/m/master-slave) | "primary/subordinate ← master/slave" (bias-free); "Don't use master/slave. Use primary/replica or alternatives such as primary/secondary, principal/agent, controller/worker" (a-z) | CONFIRMED both pages ban the term; the two pages disagree only on the replacement — added in the task-10 fix wave as `pattern` (detection-only), naming both candidates in its message rather than shipping neither direction. See "Self-contradictions" |
157
+ | `microsoft/cyberattack-spelling` | [militaristic-language](https://learn.microsoft.com/en-us/style-guide/militaristic-language) | "add cyber- in front of threat so it reads cyberthreat, all one word no space no hyphen" | CONFIRMED — spelling normalization only; the guide's separate "needs a qualifier in front of it" test is not mechanically decidable and is not enforced |
158
+ | `microsoft/no-derogatory-slang` | [bias-free](https://learn.microsoft.com/en-us/style-guide/bias-free-communication) | "Don't use profane or derogatory terms, such as pimp or bitch." / "spirit animal" | CONFIRMED, detection-only (no safe fixed replacement for any of these) |
159
+ | `microsoft/racial-ethnic-capitalization` | same | "Use title-style capitalization for Asian, Black and African American, Hispanic and Latinx..." | CONFIRMED, case-sensitive match (only genuinely-lowercase forms flagged); `white`/`multiracial` (which the guide says to LOWERCASE) deliberately excluded — a bare capitalized "White" collides constantly with unrelated proper nouns |
160
160
 
161
161
  **Note on the militaristic-language word bundle:** the broader "kill chain /
162
162
  blast radius / locked down / threat intel / defense-in-depth approach /
@@ -230,15 +230,15 @@ adjective-for-clause instead of verb-for-noun.
230
230
 
231
231
  ### UI verbs and checkbox/dialog terminology — `warn`
232
232
 
233
- | Rule id | Source URL | Quote | Verdict |
234
- |---|---|---|---|
235
- | `microsoft/no-click` | [describing-interactions-with-ui](https://learn.microsoft.com/en-us/style-guide/procedures-instructions/describing-interactions-with-ui) | "Don't use input-specific verbs, such as click or swipe." | CONFIRMED — **the single sharpest divergence from `recheck/google`**, which allows "click". Anchored with a negative lookbehind/lookahead to exclude the hyphen-joined compounds `double-click`/`right-click` (a real substring risk: `\bclick\b` DOES match inside "double-click" once a hyphen precedes it, since a hyphen is a non-word character) and the unrelated compounds `clickstream`/`clickthrough`. Verified via a dedicated fix-safety test. |
236
- | `microsoft/press-key-verb` | [a-z/hit](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/h/hit) | "Don't use press, depress, hit, or strike [to describe pressing a key]. Use select instead." | CONFIRMED, narrowly anchored to recognizable key-press phrasing (Enter/Tab/Esc/Delete/etc., or "the ... key") — bare "press"/"hit"/"strike" are far too polysemous (press releases, press charges, hit a milestone, strike a balance) to match unconditionally |
237
- | `microsoft/checkbox-verbs` | [describing-interactions-with-ui](https://learn.microsoft.com/en-us/style-guide/procedures-instructions/describing-interactions-with-ui) | "Clear \| Clearing the selection from a checkbox." | CONFIRMED for `uncheck`/`unmark`/`unselect` → `clear`. Bare `check`/`deselect` deliberately excluded: "check" is extremely polysemous, and "deselect"'s replacement differs by UI-element type ("clear" for checkboxes, "cancel the selection" elsewhere) in a way a blind swap can't resolve |
238
- | `microsoft/dialog-terminology` | [formatting-text-in-instructions](https://learn.microsoft.com/en-us/style-guide/procedures-instructions/formatting-text-in-instructions) | "Don't use pop-up window, dialog box, or dialogue box." | CONFIRMED |
239
- | `microsoft/mouse-over` | [mouse-and-mouse-interaction-terms](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/term-collections/mouse-and-mouse-interaction-terms) | "Don't use mouse over or move the mouse pointer to." | CONFIRMED (conditionally OK for beginner-skill content per the same page — low risk for reference documentation) |
240
- | `microsoft/keyboard-shortcut-plus-spacing` | [formatting-text-in-instructions](https://learn.microsoft.com/en-us/style-guide/procedures-instructions/formatting-text-in-instructions) | "Don't put a space around the plus sign (+) in keyboard shortcuts." | CONFIRMED, detection-only — `swap` replacements are literal (Constraint 2), and the fix would need to reproduce whichever modifier key matched, which needs capture-group interpolation the engine does not support |
241
- | `microsoft/sign-in-sign-out` | [log-on-log-off](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/l/log-on-log-off) | "Don't use log in, login, log into, log on... unless it appears in the UI (and you're writing instructions)." | CONFIRMED, `fix: false` — "login"/"logon" are frequently used as NOUNS or adjectives ("the login page", "your login credentials"), where "sign in" (a verb phrase) does not slot in grammatically. The guide's exception is also a two-part test (UI match AND instructions context) neither this nor the research draft attempts to model — flagged here as a known limitation, not silently dropped |
233
+ | Rule id | Source URL | Quote | Verdict |
234
+ | ------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
235
+ | `microsoft/no-click` | [describing-interactions-with-ui](https://learn.microsoft.com/en-us/style-guide/procedures-instructions/describing-interactions-with-ui) | "Don't use input-specific verbs, such as click or swipe." | CONFIRMED — **the single sharpest divergence from `recheck/google`**, which allows "click". Anchored with a negative lookbehind/lookahead to exclude the hyphen-joined compounds `double-click`/`right-click` (a real substring risk: `\bclick\b` DOES match inside "double-click" once a hyphen precedes it, since a hyphen is a non-word character) and the unrelated compounds `clickstream`/`clickthrough`. Verified via a dedicated fix-safety test. |
236
+ | `microsoft/press-key-verb` | [a-z/hit](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/h/hit) | "Don't use press, depress, hit, or strike [to describe pressing a key]. Use select instead." | CONFIRMED, narrowly anchored to recognizable key-press phrasing (Enter/Tab/Esc/Delete/etc., or "the ... key") — bare "press"/"hit"/"strike" are far too polysemous (press releases, press charges, hit a milestone, strike a balance) to match unconditionally |
237
+ | `microsoft/checkbox-verbs` | [describing-interactions-with-ui](https://learn.microsoft.com/en-us/style-guide/procedures-instructions/describing-interactions-with-ui) | "Clear \| Clearing the selection from a checkbox." | CONFIRMED for `uncheck`/`unmark`/`unselect` → `clear`. Bare `check`/`deselect` deliberately excluded: "check" is extremely polysemous, and "deselect"'s replacement differs by UI-element type ("clear" for checkboxes, "cancel the selection" elsewhere) in a way a blind swap can't resolve |
238
+ | `microsoft/dialog-terminology` | [formatting-text-in-instructions](https://learn.microsoft.com/en-us/style-guide/procedures-instructions/formatting-text-in-instructions) | "Don't use pop-up window, dialog box, or dialogue box." | CONFIRMED |
239
+ | `microsoft/mouse-over` | [mouse-and-mouse-interaction-terms](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/term-collections/mouse-and-mouse-interaction-terms) | "Don't use mouse over or move the mouse pointer to." | CONFIRMED (conditionally OK for beginner-skill content per the same page — low risk for reference documentation) |
240
+ | `microsoft/keyboard-shortcut-plus-spacing` | [formatting-text-in-instructions](https://learn.microsoft.com/en-us/style-guide/procedures-instructions/formatting-text-in-instructions) | "Don't put a space around the plus sign (+) in keyboard shortcuts." | CONFIRMED, detection-only — `swap` replacements are literal (Constraint 2), and the fix would need to reproduce whichever modifier key matched, which needs capture-group interpolation the engine does not support |
241
+ | `microsoft/sign-in-sign-out` | [log-on-log-off](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/l/log-on-log-off) | "Don't use log in, login, log into, log on... unless it appears in the UI (and you're writing instructions)." | CONFIRMED, `fix: false` — "login"/"logon" are frequently used as NOUNS or adjectives ("the login page", "your login credentials"), where "sign in" (a verb phrase) does not slot in grammatically. The guide's exception is also a two-part test (UI match AND instructions context) neither this nor the research draft attempts to model — flagged here as a known limitation, not silently dropped |
242
242
 
243
243
  ## Excluded candidates
244
244
 
@@ -275,29 +275,29 @@ Fix wave B / Step 6.3: every row below now carries its own source URL(s) —
275
275
  the stated bar for this table is rule + URL + reason, and a reason without
276
276
  a citation isn't verifiable by a future reader.
277
277
 
278
- | Candidate | Why excluded | Source(s) |
279
- |---|---|---|
280
- | `deprecated` → `obsolete`; `user` → `customer`; `client` (a person) → `customer`; `utility` → `tool`; `cursor`; `machine` → `computer`; `start` (an app) → `open` | Each carries an explicit or de-facto developer/technical-audience carve-out that directly applies to Redocly's own documentation — see "Additional tier-boundary findings" above. | [d/deprecated](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/d/deprecated), [u/user-end-user](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/u/user-end-user), [c/client](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/c/client), [u/utility](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/u/utility), [mouse-mouse-interaction-terms](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/term-collections/mouse-mouse-interaction-terms), [computer-device-terms](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/term-collections/computer-device-terms), [o/open](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/o/open) |
281
- | `freeze`/`frozen` (as system-hang synonyms) | Sense-ambiguous: "freeze an account," "freeze a value," "deep freeze" are all common, unrelated, correct uses; the guide's own carve-out ("as a synonym for stop responding") names a specific sense a blind swap can't isolate. | [f/freeze-frozen](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/f/freeze-frozen) |
282
- | `header`/`head` → `heading`; `context menu` → `shortcut menu`; `disk` → `hard drive`; `directory` → `folder`; `field`/`entry field` → `box`; `attribute` (meaning property) → `property`; `issue` (meaning problem) → `problem` | Each has a common, correct, unrelated technical sense in API/developer documentation (HTTP header, context menu in a sample app, managed disk, working directory, JSON field, XML attribute, GitHub issue / "issue a token") that a blind match would corrupt. | [h/header](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/h/header), [c/context-menu](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/c/context-menu), [d/disk](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/d/disk), [d/directory](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/d/directory), [f/field](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/f/field), [a/attribute](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/a/attribute), [i/issue](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/i/issue) |
283
- | `radio button`, `scroll`, `Microsoft's` (possessive), x-multiplication, `shortcut key` | Tier-4/Tier-1 crossings — see Rule 0. | [r/radio-button](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/r/radio-button), [s/scroll](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/s/scroll), [m/microsoft](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/m/microsoft), [m/multiplication-sign](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/m/multiplication-sign), [keys-keyboard-shortcuts](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/term-collections/keys-keyboard-shortcuts) |
284
- | `may` (ability modal) | Homograph collision with the proper noun "May" (the month) — `ignoreCase: true` (needed to catch sentence-initial "May") would flag "released in May 2024" as a modal verb. | [c/can-may](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/c/can-may) |
285
- | `that` (referring to people) → `who` | One of the most common words in English; only a small fraction of occurrences refer to people. A literal `swap` would be extraordinarily noisy; the guide's own quote scopes the objection to a use a `pattern`/`swap` can't isolate. | [w/who-vs-that](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/w/who-vs-that) |
286
- | `star` → `asterisk` | Ordinary English word (star rating, star performer) with a narrow, Microsoft-documented exception (OK for a phone-keypad key) a blanket swap would miss in both directions. | [keys-keyboard-shortcuts](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/term-collections/keys-keyboard-shortcuts) |
287
- | `+` (plus sign, in text) | Single punctuation character; collides with `C++`, query strings, and ordinary arithmetic in code-adjacent prose. | [p/plus-sign](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/p/plus-sign) |
288
- | `field`, `attribute`, `issue` | See row above — TOO-RISKY for Redocly's schema/API documentation specifically. | (same as above) |
289
- | `foo`/`foobar`/`fubar` (as placeholders) | "OK to use... in content for a technical audience" — Redocly's docs qualify. | [f/foo-foobar-fubar](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/f/foo-foobar-fubar) |
290
- | `Internet Service Provider`/`Key Performance Indicator` (C20 illustrative pairs) | The general principle (lowercase spelled-out acronym forms) is CONFIRMED, but these specific phrase pairs were not independently re-quoted as live-page examples by any verifier — dropped rather than shipped on the author's own unverified guess. | [acronyms](https://learn.microsoft.com/en-us/style-guide/acronyms) (general principle only; no per-phrase page exists to cite) |
291
- | `API's`/`URL's`/`SDK's` → `APIs`/`URLs`/`SDKs` (C18) | The general "add lowercase s, not an apostrophe" principle is CONFIRMED, but a bare `[A-Z]{2,}'s` is frequently a legitimate POSSESSIVE ("the API's response"), not an attempted plural — verifier G's own note flags this exact ambiguity. Excluded entirely; only the unambiguous decade-plural case (`microsoft/no-apostrophe-plural-decade`) ships. | [acronyms](https://learn.microsoft.com/en-us/style-guide/acronyms) |
292
- | `property sheet`/`property page` → "dialog box or tab"; `application developer` → "software developer, web developer, developer, or programmer" | Multiple, meaningfully different acceptable replacements — no single canonical swap target can be chosen without guessing which the guide's authors intended for a given context. | [p/property-sheet-property-page](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/p/property-sheet-property-page), [a/application-developer-app-developer](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/a/application-developer-app-developer) |
293
- | Broader militaristic-language bundle (`kill chain`, `blast radius`, `locked down`, `threat intel`, `defense-in-depth approach`, `frontline analysts`, `first line of defense`) | See the note under "Bias-free, militaristic, derogatory language" above — content confirmed real, but no verifier independently quoted exact replacement text for each multi-word term, and the same page's "12 never-use terms" count was already shown to be wrong. | [militaristic-language](https://learn.microsoft.com/en-us/style-guide/militaristic-language) |
294
- | `corrupt`/`corrupted` (detection-only) | Considered as a `pattern` fallback after ruling out the `swap` to "damaged"; ultimately not shipped at all — the guide's own instruction ("offer help fixing it if possible") is a request for an empathetic, context-dependent rewrite, not a term to flag mechanically. | [c/corrupted](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/c/corrupted) |
295
- | C21 acronym first-mention expansion | See "Known limitations" #5. | [acronyms](https://learn.microsoft.com/en-us/style-guide/acronyms) |
296
- | Broader "spell out & / + / ~ in prose" (A9) | NOISY in developer docs outside heading/list-item/alt scope (query strings, HTML entities, code-adjacent `&&`); the one high-value case (ampersands in HEADINGS specifically) is already covered by `microsoft/no-ampersand-in-headings`. | [headings](https://learn.microsoft.com/en-us/style-guide/scannable-content/headings) |
297
- | `no-possessive-product-names` (C16, "Don't use Microsoft's") | **Not shippable at all**, conditionally or not — see below. | [m/microsoft](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/m/microsoft) |
298
- | `SMB` → "small or medium-sized business" | Fix wave B / Step 4 drop, added here in fix wave C to give it a URL + reason row (it previously existed only in the narrative "Fix wave B / Step 4" prose below, which this table's own stated purpose — "why doesn't `recheck/microsoft` check X?" — doesn't cover). Bare, case-shouted acronym with a common, correct, unrelated technical sense in exactly Redocly's domain: SMB as the Server Message Block network protocol ("mount the SMB share"). No syntactic anchor distinguishes either sense — both are just the bare acronym in ordinary noun position. | [s/smb](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/s/smb) |
299
- | `SKU` → "subscription, edition, version, or tier" | Fix wave B / Step 4 drop, same table-completeness reason as `SMB` above. Common, correct, unrelated e-commerce/inventory sense ("the SKU field") with no syntactic anchor separating it from Microsoft's intended sense. Carries a second, independent hazard even where the guide's sense IS intended: the guide names FOUR acceptable alternatives, not one, so no single canonical swap target exists either. | [s/sku](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/s/sku) |
300
- | `terminate` → "close" | Fix wave B / Step 4 drop, same table-completeness reason as `SMB`/`SKU` above. "Terminate the instance/process/session/connection" is standard, correct cloud-infrastructure vocabulary throughout Redocly's own API-documentation domain (a genuine meaning change, not a false match: the guide's sense is "close an app or window"), and no reliable positional anchor separates that sense from the guide's UI sense the way `exit`'s determiner-based anchor does. | [t/terminate](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/t/terminate) |
278
+ | Candidate | Why excluded | Source(s) |
279
+ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
280
+ | `deprecated` → `obsolete`; `user` → `customer`; `client` (a person) → `customer`; `utility` → `tool`; `cursor`; `machine` → `computer`; `start` (an app) → `open` | Each carries an explicit or de-facto developer/technical-audience carve-out that directly applies to Redocly's own documentation — see "Additional tier-boundary findings" above. | [d/deprecated](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/d/deprecated), [u/user-end-user](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/u/user-end-user), [c/client](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/c/client), [u/utility](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/u/utility), [mouse-mouse-interaction-terms](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/term-collections/mouse-mouse-interaction-terms), [computer-device-terms](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/term-collections/computer-device-terms), [o/open](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/o/open) |
281
+ | `freeze`/`frozen` (as system-hang synonyms) | Sense-ambiguous: "freeze an account," "freeze a value," "deep freeze" are all common, unrelated, correct uses; the guide's own carve-out ("as a synonym for stop responding") names a specific sense a blind swap can't isolate. | [f/freeze-frozen](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/f/freeze-frozen) |
282
+ | `header`/`head` → `heading`; `context menu` → `shortcut menu`; `disk` → `hard drive`; `directory` → `folder`; `field`/`entry field` → `box`; `attribute` (meaning property) → `property`; `issue` (meaning problem) → `problem` | Each has a common, correct, unrelated technical sense in API/developer documentation (HTTP header, context menu in a sample app, managed disk, working directory, JSON field, XML attribute, GitHub issue / "issue a token") that a blind match would corrupt. | [h/header](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/h/header), [c/context-menu](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/c/context-menu), [d/disk](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/d/disk), [d/directory](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/d/directory), [f/field](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/f/field), [a/attribute](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/a/attribute), [i/issue](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/i/issue) |
283
+ | `radio button`, `scroll`, `Microsoft's` (possessive), x-multiplication, `shortcut key` | Tier-4/Tier-1 crossings — see Rule 0. | [r/radio-button](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/r/radio-button), [s/scroll](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/s/scroll), [m/microsoft](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/m/microsoft), [m/multiplication-sign](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/m/multiplication-sign), [keys-keyboard-shortcuts](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/term-collections/keys-keyboard-shortcuts) |
284
+ | `may` (ability modal) | Homograph collision with the proper noun "May" (the month) — `ignoreCase: true` (needed to catch sentence-initial "May") would flag "released in May 2024" as a modal verb. | [c/can-may](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/c/can-may) |
285
+ | `that` (referring to people) → `who` | One of the most common words in English; only a small fraction of occurrences refer to people. A literal `swap` would be extraordinarily noisy; the guide's own quote scopes the objection to a use a `pattern`/`swap` can't isolate. | [w/who-vs-that](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/w/who-vs-that) |
286
+ | `star` → `asterisk` | Ordinary English word (star rating, star performer) with a narrow, Microsoft-documented exception (OK for a phone-keypad key) a blanket swap would miss in both directions. | [keys-keyboard-shortcuts](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/term-collections/keys-keyboard-shortcuts) |
287
+ | `+` (plus sign, in text) | Single punctuation character; collides with `C++`, query strings, and ordinary arithmetic in code-adjacent prose. | [p/plus-sign](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/p/plus-sign) |
288
+ | `field`, `attribute`, `issue` | See row above — TOO-RISKY for Redocly's schema/API documentation specifically. | (same as above) |
289
+ | `foo`/`foobar`/`fubar` (as placeholders) | "OK to use... in content for a technical audience" — Redocly's docs qualify. | [f/foo-foobar-fubar](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/f/foo-foobar-fubar) |
290
+ | `Internet Service Provider`/`Key Performance Indicator` (C20 illustrative pairs) | The general principle (lowercase spelled-out acronym forms) is CONFIRMED, but these specific phrase pairs were not independently re-quoted as live-page examples by any verifier — dropped rather than shipped on the author's own unverified guess. | [acronyms](https://learn.microsoft.com/en-us/style-guide/acronyms) (general principle only; no per-phrase page exists to cite) |
291
+ | `API's`/`URL's`/`SDK's` → `APIs`/`URLs`/`SDKs` (C18) | The general "add lowercase s, not an apostrophe" principle is CONFIRMED, but a bare `[A-Z]{2,}'s` is frequently a legitimate POSSESSIVE ("the API's response"), not an attempted plural — verifier G's own note flags this exact ambiguity. Excluded entirely; only the unambiguous decade-plural case (`microsoft/no-apostrophe-plural-decade`) ships. | [acronyms](https://learn.microsoft.com/en-us/style-guide/acronyms) |
292
+ | `property sheet`/`property page` → "dialog box or tab"; `application developer` → "software developer, web developer, developer, or programmer" | Multiple, meaningfully different acceptable replacements — no single canonical swap target can be chosen without guessing which the guide's authors intended for a given context. | [p/property-sheet-property-page](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/p/property-sheet-property-page), [a/application-developer-app-developer](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/a/application-developer-app-developer) |
293
+ | Broader militaristic-language bundle (`kill chain`, `blast radius`, `locked down`, `threat intel`, `defense-in-depth approach`, `frontline analysts`, `first line of defense`) | See the note under "Bias-free, militaristic, derogatory language" above — content confirmed real, but no verifier independently quoted exact replacement text for each multi-word term, and the same page's "12 never-use terms" count was already shown to be wrong. | [militaristic-language](https://learn.microsoft.com/en-us/style-guide/militaristic-language) |
294
+ | `corrupt`/`corrupted` (detection-only) | Considered as a `pattern` fallback after ruling out the `swap` to "damaged"; ultimately not shipped at all — the guide's own instruction ("offer help fixing it if possible") is a request for an empathetic, context-dependent rewrite, not a term to flag mechanically. | [c/corrupted](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/c/corrupted) |
295
+ | C21 acronym first-mention expansion | See "Known limitations" #5. | [acronyms](https://learn.microsoft.com/en-us/style-guide/acronyms) |
296
+ | Broader "spell out & / + / ~ in prose" (A9) | NOISY in developer docs outside heading/list-item/alt scope (query strings, HTML entities, code-adjacent `&&`); the one high-value case (ampersands in HEADINGS specifically) is already covered by `microsoft/no-ampersand-in-headings`. | [headings](https://learn.microsoft.com/en-us/style-guide/scannable-content/headings) |
297
+ | `no-possessive-product-names` (C16, "Don't use Microsoft's") | **Not shippable at all**, conditionally or not — see below. | [m/microsoft](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/m/microsoft) |
298
+ | `SMB` → "small or medium-sized business" | Fix wave B / Step 4 drop, added here in fix wave C to give it a URL + reason row (it previously existed only in the narrative "Fix wave B / Step 4" prose below, which this table's own stated purpose — "why doesn't `recheck/microsoft` check X?" — doesn't cover). Bare, case-shouted acronym with a common, correct, unrelated technical sense in exactly Redocly's domain: SMB as the Server Message Block network protocol ("mount the SMB share"). No syntactic anchor distinguishes either sense — both are just the bare acronym in ordinary noun position. | [s/smb](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/s/smb) |
299
+ | `SKU` → "subscription, edition, version, or tier" | Fix wave B / Step 4 drop, same table-completeness reason as `SMB` above. Common, correct, unrelated e-commerce/inventory sense ("the SKU field") with no syntactic anchor separating it from Microsoft's intended sense. Carries a second, independent hazard even where the guide's sense IS intended: the guide names FOUR acceptable alternatives, not one, so no single canonical swap target exists either. | [s/sku](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/s/sku) |
300
+ | `terminate` → "close" | Fix wave B / Step 4 drop, same table-completeness reason as `SMB`/`SKU` above. "Terminate the instance/process/session/connection" is standard, correct cloud-infrastructure vocabulary throughout Redocly's own API-documentation domain (a genuine meaning change, not a false match: the guide's sense is "close an app or window"), and no reliable positional anchor separates that sense from the guide's UI sense the way `exit`'s determiner-based anchor does. | [t/terminate](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/t/terminate) |
301
301
 
302
302
  Every URL in the "Source(s)" column above was re-verified live (`curl`,
303
303
  HTTP 200) during this fix wave — see `sources.json` for the ones this
@@ -333,12 +333,12 @@ Redocly's own vocabulary, not something the Microsoft guide provides.
333
333
 
334
334
  ### NOT-ENFORCEABLE (real guide content, requires human judgment or structure Recheck doesn't have)
335
335
 
336
- | Candidate | Why excluded |
337
- |---|---|
338
- | V19-V22, V37-V39 (noun+verb contractions, active voice, subjunctive mood, verb-first sentences, modifier stacks, that/who omission, -ing word care) | Each requires POS tagging or grammatical-role judgment beyond regex/AST primitives. |
336
+ | Candidate | Why excluded |
337
+ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
338
+ | V19-V22, V37-V39 (noun+verb contractions, active voice, subjunctive mood, verb-first sentences, modifier stacks, that/who omission, -ing word care) | Each requires POS tagging or grammatical-role judgment beyond regex/AST primitives. |
339
339
  | C10 (second-level headings need ≥2 siblings), C11 (no two headings in a row), L4 (periods only on complete sentences), L5 (per-list punctuation consistency), L7 (list parallelism), T1 (table sentence-case — NOISY, reference tables are dense with identifiers/proper nouns), T4 ("Name" is a bad column header — NOISY, "Name" is genuinely correct in many API reference tables), T5/T6/T10 (table intro-sentence rules, minimum table dimensions), P3/P4/P6/P8/P9/P10-P12 (multiple-hyphens-for-dash, en-dash-for-minus, from/through ranges, closing-quote placement, mid-sentence colon rules, colon-before-block), N1/N2/N6/N7/N9/N11 (spell out 0-9, no sentence-initial numerals, no K/M/B abbreviation, comma grouping, spell out months, decimal leading zero) | Each is confirmed content, but every one carries either a documented exception too common to ignore (space-limited UI text, "if one item requires a numeral," page numbers/addresses/decimals) or needs structural context (paragraph→table/list/heading adjacency) Recheck's segment model doesn't expose — matching the research draft's own NOISY/NOT-ENFORCEABLE verdicts, independently re-confirmed rather than re-litigated. |
340
- | U5 (don't name the UI element type unless it adds clarity), U8 (file extensions lowercase / device names uppercase), U9 (bold not italic for work titles), A7 (directional terms as the only clue to location), W1-W4 (URL formatting/bare-URL rules) | "Unless it adds needed clarity" and "as the only clue" are judgment calls; the URL rules were separately judged too weakly cited (W4) or too noisy in a docs site full of real clickable links (W1/W2) to attribute to Microsoft specifically — available generically via `recheck/markdown`'s `no-bare-urls` if wanted. |
341
- | S1-S4 (link fragments, fenced-code-language, single-H1, consistent bullet/fence/emphasis/table-pipe style) | The research draft itself labels these "House rule; no Microsoft statement" — no live-page citation exists for any of them, so none ship under a Microsoft attribution (unlike `recheck/google`, whose equivalent structural rules ARE independently Google-cited). |
340
+ | U5 (don't name the UI element type unless it adds clarity), U8 (file extensions lowercase / device names uppercase), U9 (bold not italic for work titles), A7 (directional terms as the only clue to location), W1-W4 (URL formatting/bare-URL rules) | "Unless it adds needed clarity" and "as the only clue" are judgment calls; the URL rules were separately judged too weakly cited (W4) or too noisy in a docs site full of real clickable links (W1/W2) to attribute to Microsoft specifically — available generically via `recheck/markdown`'s `no-bare-urls` if wanted. |
341
+ | S1-S4 (link fragments, fenced-code-language, single-H1, consistent bullet/fence/emphasis/table-pipe style) | The research draft itself labels these "House rule; no Microsoft statement" — no live-page citation exists for any of them, so none ship under a Microsoft attribution (unlike `recheck/google`, whose equivalent structural rules ARE independently Google-cited). |
342
342
 
343
343
  ## Deliberation and development history
344
344
 
@@ -358,13 +358,13 @@ research draft's config shipped five terms unconditionally at `error` while
358
358
  those SAME five also appeared, verbatim, on its own Tier-4 "never enforce"
359
359
  list:
360
360
 
361
- | Term | Live page carve-out |
362
- |---|---|
363
- | `execute` | "Don't use except to follow the UI. Use run instead." |
364
- | `reboot` | "If the UI or API uses reboot in a label... it's OK to refer to the label." |
365
- | `navigate` | "You don't need to find an alternative to navigation when it's the most precise word in the context." |
366
- | `ZIP Code` | "It's OK to use ZIP Code in content that's intended for a US audience only." |
367
- | `disjoint selection` | "Don't use... except for a technical audience, and only if the term appears in the UI or API." |
361
+ | Term | Live page carve-out |
362
+ | -------------------- | ----------------------------------------------------------------------------------------------------- |
363
+ | `execute` | "Don't use except to follow the UI. Use run instead." |
364
+ | `reboot` | "If the UI or API uses reboot in a label... it's OK to refer to the label." |
365
+ | `navigate` | "You don't need to find an alternative to navigation when it's the most precise word in the context." |
366
+ | `ZIP Code` | "It's OK to use ZIP Code in content that's intended for a US audience only." |
367
+ | `disjoint selection` | "Don't use... except for a technical audience, and only if the term appears in the UI or API." |
368
368
 
369
369
  None of the five ship. Their siblings sharing the exact same conditional
370
370
  sentence (`contiguous selection`, `nonadjacent selection`, `noncontiguous
@@ -372,13 +372,13 @@ selection` — same sentence as `disjoint selection`) are excluded too.
372
372
 
373
373
  #### The five additional mis-filed entries the corrections doc flagged for evaluation
374
374
 
375
- | Term | Carve-out found | Disposition |
376
- |---|---|---|
377
- | `shortcut key` | Bundled in the same Tier-1 row as `accelerator key, fast key, hot key, quick key, speed key`, but `keys-keyboard-shortcuts` grants it, alone, the identical developer-audience carve-out already accepted for `access key` (correctly Tier 4). | Removed from the row; `accelerator key`/`fast key`/`hot key`/`quick key`/`speed key` still ship (no carve-out for those). |
378
- | `radio button` | "Use radio button **only** in content for developers in which the API includes the term." | Excluded entirely. |
379
- | `scroll` | "It's OK to use scroll in content that teaches beginning skills." | Excluded entirely. |
380
- | x-multiplication (`x` → `×`) | "Use an asterisk (\*) **if you need to match the UI**" — Tier 4's own defining phrase, verbatim. Also SUBSTRING-RISK (bare `x` collides with `x-axis`/`x-ray`/`x-coordinate`, all hyphen-joined so `\bx\b` DOES match inside them). | Excluded entirely (double reason). |
381
- | `Microsoft's` (possessive ban) | "Exception: it's OK to use Microsoft's occasionally when referring to the company itself" — with the guide's own worked example, "Microsoft's privacy policies." | Excluded entirely — see "C16" above; not shippable at all, conditional or not (see reasoning). |
375
+ | Term | Carve-out found | Disposition |
376
+ | ------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
377
+ | `shortcut key` | Bundled in the same Tier-1 row as `accelerator key, fast key, hot key, quick key, speed key`, but `keys-keyboard-shortcuts` grants it, alone, the identical developer-audience carve-out already accepted for `access key` (correctly Tier 4). | Removed from the row; `accelerator key`/`fast key`/`hot key`/`quick key`/`speed key` still ship (no carve-out for those). |
378
+ | `radio button` | "Use radio button **only** in content for developers in which the API includes the term." | Excluded entirely. |
379
+ | `scroll` | "It's OK to use scroll in content that teaches beginning skills." | Excluded entirely. |
380
+ | x-multiplication (`x` → `×`) | "Use an asterisk (\*) **if you need to match the UI**" — Tier 4's own defining phrase, verbatim. Also SUBSTRING-RISK (bare `x` collides with `x-axis`/`x-ray`/`x-coordinate`, all hyphen-joined so `\bx\b` DOES match inside them). | Excluded entirely (double reason). |
381
+ | `Microsoft's` (possessive ban) | "Exception: it's OK to use Microsoft's occasionally when referring to the company itself" — with the guide's own worked example, "Microsoft's privacy policies." | Excluded entirely — see "C16" above; not shippable at all, conditional or not (see reasoning). |
382
382
 
383
383
  #### Additional tier-boundary findings made while authoring (beyond the ten above)
384
384
 
@@ -387,19 +387,19 @@ rows that were not individually named by the corrections doc but share the
387
387
  identical shape. Found by re-reading the verifier tables while authoring,
388
388
  not pre-flagged:
389
389
 
390
- | Term | Carve-out | Disposition |
391
- |---|---|---|
392
- | `deprecated` → `obsolete` | "Avoid in content for a **technical audience**. Don't use in content for a general audience." | **Excluded.** Redocly's docs are technical-audience API documentation, and "deprecated" is itself load-bearing OpenAPI vocabulary (the `deprecated: true` field). Shipping this unconditionally would misfire on Redocly's own domain, the same shape as `header`/`context menu`/`disk`/`directory` below. |
393
- | `and/or` → `or` | "Don't use **unless it helps you avoid lengthy, complex wording**." | Excluded (not in the shipped word list). |
394
- | `freeze`/`frozen` | "Don't use freeze **as a synonym for stop responding**" — i.e. only in that one sense; "freeze" has many unrelated senses (freeze an account, freeze a value). | Excluded from `az-state-failure`. **Correction (fix wave B / Step 9):** this row previously said "not verifier-flagged" — false. Verifier G:76 marks it `CONFIRMED (cond.)` with the exact quote above; the exclusion is a real, verifier-confirmed sense-ambiguity call (the same class as `marquee`, which verifier H explicitly calls "context-flipped"), not an unflagged author guess. |
395
- | `user` → `customer`/`person`/etc. | "It's OK to use user in content for **developers**." | Excluded — Redocly's docs are developer content, and "user" is one of the most common words in any documentation. |
396
- | `cursor` (as opposed to `insertion point`) | "Use cursor only for a **technical audience**." | Only `insertion point` → `pointer` ships (unconditional per the same page); bare `cursor` excluded. |
397
- | `machine` → `computer` | "It's OK to use machine in content for a **technical audience** and... virtualization." | Excluded — "virtual machine", "state machine", "build machine" are all extremely common in Redocly's domain. |
398
- | `foo, foobar, fubar` | "OK to use these words as placeholders... in content for a **technical audience**." | Excluded (Redocly's docs qualify). |
399
- | `client` (a person) → `customer` | Not marked `(cond.)` by the verifier — G:93 states it plainly ("Don't use client to refer to a person. Use customer instead."), no carve-out at all. | Excluded anyway (see the fix-wave-B note directly below — this is a considered "anchoring isn't reliable" call, not silent inference). |
400
- | `utility` → `tool` | Not marked `(cond.)` either — H:55 is also unconditional ("Use tool, not utility, to describe a feature..."). | Excluded anyway (same fix-wave-B note). |
401
- | `start` (an app) → `open` | Not marked `(cond.)` — G:89 bundles it with `launch` under one unconditional CONFIRMED row. The row bundles `launch, start (an app), boot`; "start" alone is one of the most common words in English with countless unrelated correct senses (start a server, start a request, from the start). | Excluded; only `launch` → `open` and `boot` → `turn on` ship from this row. |
402
- | `deinstall`, `machine`, `user`, `client`, `utility` cross-checked against Redocly's own domain vocabulary | — | See individual rows above. |
390
+ | Term | Carve-out | Disposition |
391
+ | --------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
392
+ | `deprecated` → `obsolete` | "Avoid in content for a **technical audience**. Don't use in content for a general audience." | **Excluded.** Redocly's docs are technical-audience API documentation, and "deprecated" is itself load-bearing OpenAPI vocabulary (the `deprecated: true` field). Shipping this unconditionally would misfire on Redocly's own domain, the same shape as `header`/`context menu`/`disk`/`directory` below. |
393
+ | `and/or` → `or` | "Don't use **unless it helps you avoid lengthy, complex wording**." | Excluded (not in the shipped word list). |
394
+ | `freeze`/`frozen` | "Don't use freeze **as a synonym for stop responding**" — i.e. only in that one sense; "freeze" has many unrelated senses (freeze an account, freeze a value). | Excluded from `az-state-failure`. **Correction (fix wave B / Step 9):** this row previously said "not verifier-flagged" — false. Verifier G:76 marks it `CONFIRMED (cond.)` with the exact quote above; the exclusion is a real, verifier-confirmed sense-ambiguity call (the same class as `marquee`, which verifier H explicitly calls "context-flipped"), not an unflagged author guess. |
395
+ | `user` → `customer`/`person`/etc. | "It's OK to use user in content for **developers**." | Excluded — Redocly's docs are developer content, and "user" is one of the most common words in any documentation. |
396
+ | `cursor` (as opposed to `insertion point`) | "Use cursor only for a **technical audience**." | Only `insertion point` → `pointer` ships (unconditional per the same page); bare `cursor` excluded. |
397
+ | `machine` → `computer` | "It's OK to use machine in content for a **technical audience** and... virtualization." | Excluded — "virtual machine", "state machine", "build machine" are all extremely common in Redocly's domain. |
398
+ | `foo, foobar, fubar` | "OK to use these words as placeholders... in content for a **technical audience**." | Excluded (Redocly's docs qualify). |
399
+ | `client` (a person) → `customer` | Not marked `(cond.)` by the verifier — G:93 states it plainly ("Don't use client to refer to a person. Use customer instead."), no carve-out at all. | Excluded anyway (see the fix-wave-B note directly below — this is a considered "anchoring isn't reliable" call, not silent inference). |
400
+ | `utility` → `tool` | Not marked `(cond.)` either — H:55 is also unconditional ("Use tool, not utility, to describe a feature..."). | Excluded anyway (same fix-wave-B note). |
401
+ | `start` (an app) → `open` | Not marked `(cond.)` — G:89 bundles it with `launch` under one unconditional CONFIRMED row. The row bundles `launch, start (an app), boot`; "start" alone is one of the most common words in English with countless unrelated correct senses (start a server, start a request, from the start). | Excluded; only `launch` → `open` and `boot` → `turn on` ship from this row. |
402
+ | `deinstall`, `machine`, `user`, `client`, `utility` cross-checked against Redocly's own domain vocabulary | — | See individual rows above. |
403
403
 
404
404
  **Fix wave B / Step 8 — these three are inference, not a documented guide
405
405
  exception, and that distinction matters.** Unlike `header`/`context
@@ -449,28 +449,28 @@ the developer/API-documentation audience Redocly serves. **None of the four
449
449
  ship**, unconditionally or otherwise — running this preset on Redocly's own
450
450
  docs must not flag any of them:
451
451
 
452
- | Term | Carve-out |
453
- |---|---|
454
- | `header` (meaning heading) → `heading` | Microsoft's own page confirms "it's OK to use header as a short form of file header, as in HTML header" — the standard, correct term for an HTTP/API request/response header throughout API documentation. |
455
- | `context menu` → `shortcut menu` | "Use context menu only in content for developers." |
456
- | `disk`/`fixed disk`/`hard disk`/`disk drive` → `hard drive` | "Use disk only in the context of Azure cloud storage and virtual machines" — extremely common, correct in cloud/infra API docs. |
457
- | `directory` → `folder` | "Use directory only in content for developers... to match the API" — CLI paths, working directory, root directory. |
452
+ | Term | Carve-out |
453
+ | ----------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
454
+ | `header` (meaning heading) → `heading` | Microsoft's own page confirms "it's OK to use header as a short form of file header, as in HTML header" — the standard, correct term for an HTTP/API request/response header throughout API documentation. |
455
+ | `context menu` → `shortcut menu` | "Use context menu only in content for developers." |
456
+ | `disk`/`fixed disk`/`hard disk`/`disk drive` → `hard drive` | "Use disk only in the context of Azure cloud storage and virtual machines" — extremely common, correct in cloud/infra API docs. |
457
+ | `directory` → `folder` | "Use directory only in content for developers... to match the API" — CLI paths, working directory, root directory. |
458
458
 
459
459
  `microsoft-clean.md` includes a paragraph using all four terms in exactly
460
460
  this developer sense, and the test suite asserts zero findings on it.
461
461
 
462
462
  ### Section 3 — wrong, inverted, and non-guidance entries corrected
463
463
 
464
- | Entry | Problem found | Resolution |
465
- |---|---|---|
466
- | `shaded` | **Inverted.** The draft bundled it into an avoid-term row (`gray, grayed out, dimmed, shaded, unavailable, disabled`); the live pages state Microsoft **recommends** "shaded" for the appearance of a checkbox representing a mixture of settings. | `shaded` does not appear anywhere in this preset, in either direction. **Nor does the rest of that row** — no `grayed out` or `dimmed` rule ships here either (an earlier revision of this table claimed one did; it never existed). `recheck/inclusive-language` covers `grayed out` → `unavailable`, sourced from Google. |
467
- | `boot` → `open` | Wrong direction AND target. Live page: *"Don't use as a verb. Use turn on to refer to turning on power to a device."* | Shipped separately as `boot` → `turn on` (`microsoft/az-lifecycle-verbs`), not bundled with `launch`/`open`. |
468
- | `corrupt`/`corrupted` → `damaged` | Not guidance — the source asks for an empathetic sentence **rewrite** ("Try to use a more empathetic statement... offer help"); its own worked example never uses "damaged". | Not shipped as a swap. (Detection-only was considered and also dropped for scope reasons — see "Excluded candidates".) |
469
- | `invalid` → `not valid` | Soft preference: *"Both terms are OK to use, but try to use more specific terms instead"* — a machine-translation-safety tip, not a "never use" rule. | Not shipped. |
470
- | "afflicted with" (Tier 2) | **Fabricated** — appears nowhere on the live `accessibility-terms` page; the actual Row 5 avoid-list is "Affected by, stricken with, suffers from, a victim of, an epileptic." | Not shipped anywhere. `affected by`/`stricken with`/`suffers from`/`a victim of` (the real Row 5 terms, minus "an epileptic", which needs a sentence rewrite no pattern/swap can safely target) ship in `microsoft/accessibility-terms`. |
471
- | `ToolTip` regex (Tier 3) | Config-mechanics bug: a shared `ignoreCase: true` flag on the combined "tool tip"/"ToolTip" pattern made the "ToolTip"-only branch also match the already-correct lowercase "tooltip". | `microsoft/tooltip-capitalization` ships as its OWN case-sensitive (`ignoreCase: false`) rule, separate from `microsoft/spelling-hyphenation`'s case-insensitive "tool tip" (spacing) pattern. |
472
- | Row-1452 "(all don't use)" bundle | **Under-shipped.** The draft filed the whole bundle as detection-only; six of its members have an explicit, single-value replacement stated on their own page. | `friendly name` → `display name`, `print queue`/`printer queue` → `list of documents`, `data record` → `record`, `e-form` → `form`, `upsize` → `scale up` ship in `microsoft/az-real-replacements` (plus `working memory`, `soft copy`, `print out`, `search and replace`, `target drive`/`target file`, which had replacements but weren't singled out by the corrections doc). `property sheet`/`property page` (multi-option: "dialog box or tab") and `application developer` (four very different alternatives: "software developer, web developer, developer, or programmer") are excluded — no single canonical replacement can be chosen without guessing which the guide's authors intended. |
473
- | Tier 2 accessibility table | **Three crossed pairings.** The draft merged two separate live rows into one, producing wrong swap targets: `handicapped` → `person with a disability` (wrong; that word belongs to Row 3, whose target is "person with limited mobility..."); `differently abled` → `person with a disability` (wrong; Row 9's target is "person with cognitive disabilities, developmental disabilities, learning disabilities, or dyslexia"). | See "Tier 2 design" below — resolved by shipping **detection-only**, sidestepping the wrong-target risk entirely rather than attempting to re-derive every row's exact target from partial verifier quotes. |
464
+ | Entry | Problem found | Resolution |
465
+ | --------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
466
+ | `shaded` | **Inverted.** The draft bundled it into an avoid-term row (`gray, grayed out, dimmed, shaded, unavailable, disabled`); the live pages state Microsoft **recommends** "shaded" for the appearance of a checkbox representing a mixture of settings. | `shaded` does not appear anywhere in this preset, in either direction. **Nor does the rest of that row** — no `grayed out` or `dimmed` rule ships here either (an earlier revision of this table claimed one did; it never existed). `recheck/inclusive-language` covers `grayed out` → `unavailable`, sourced from Google. |
467
+ | `boot` → `open` | Wrong direction AND target. Live page: _"Don't use as a verb. Use turn on to refer to turning on power to a device."_ | Shipped separately as `boot` → `turn on` (`microsoft/az-lifecycle-verbs`), not bundled with `launch`/`open`. |
468
+ | `corrupt`/`corrupted` → `damaged` | Not guidance — the source asks for an empathetic sentence **rewrite** ("Try to use a more empathetic statement... offer help"); its own worked example never uses "damaged". | Not shipped as a swap. (Detection-only was considered and also dropped for scope reasons — see "Excluded candidates".) |
469
+ | `invalid` → `not valid` | Soft preference: _"Both terms are OK to use, but try to use more specific terms instead"_ — a machine-translation-safety tip, not a "never use" rule. | Not shipped. |
470
+ | "afflicted with" (Tier 2) | **Fabricated** — appears nowhere on the live `accessibility-terms` page; the actual Row 5 avoid-list is "Affected by, stricken with, suffers from, a victim of, an epileptic." | Not shipped anywhere. `affected by`/`stricken with`/`suffers from`/`a victim of` (the real Row 5 terms, minus "an epileptic", which needs a sentence rewrite no pattern/swap can safely target) ship in `microsoft/accessibility-terms`. |
471
+ | `ToolTip` regex (Tier 3) | Config-mechanics bug: a shared `ignoreCase: true` flag on the combined "tool tip"/"ToolTip" pattern made the "ToolTip"-only branch also match the already-correct lowercase "tooltip". | `microsoft/tooltip-capitalization` ships as its OWN case-sensitive (`ignoreCase: false`) rule, separate from `microsoft/spelling-hyphenation`'s case-insensitive "tool tip" (spacing) pattern. |
472
+ | Row-1452 "(all don't use)" bundle | **Under-shipped.** The draft filed the whole bundle as detection-only; six of its members have an explicit, single-value replacement stated on their own page. | `friendly name` → `display name`, `print queue`/`printer queue` → `list of documents`, `data record` → `record`, `e-form` → `form`, `upsize` → `scale up` ship in `microsoft/az-real-replacements` (plus `working memory`, `soft copy`, `print out`, `search and replace`, `target drive`/`target file`, which had replacements but weren't singled out by the corrections doc). `property sheet`/`property page` (multi-option: "dialog box or tab") and `application developer` (four very different alternatives: "software developer, web developer, developer, or programmer") are excluded — no single canonical replacement can be chosen without guessing which the guide's authors intended. |
473
+ | Tier 2 accessibility table | **Three crossed pairings.** The draft merged two separate live rows into one, producing wrong swap targets: `handicapped` → `person with a disability` (wrong; that word belongs to Row 3, whose target is "person with limited mobility..."); `differently abled` → `person with a disability` (wrong; Row 9's target is "person with cognitive disabilities, developmental disabilities, learning disabilities, or dyslexia"). | See "Tier 2 design" below — resolved by shipping **detection-only**, sidestepping the wrong-target risk entirely rather than attempting to re-derive every row's exact target from partial verifier quotes. |
474
474
 
475
475
  ### Self-contradictions — enforced in NEITHER direction (three), plus one escalated
476
476
 
@@ -481,12 +481,12 @@ the task-10 fix wave to ship detection-only — see the dedicated subsection
481
481
  below the table. Both citations for all four are recorded here regardless,
482
482
  per the task's instruction:
483
483
 
484
- | Case | Page A | Page B |
485
- |---|---|---|
486
- | **`%` vs. spelled-out "percent"** | [numbers](https://learn.microsoft.com/en-us/style-guide/numbers) (`ms.date` 2022-05-13): "Use a numeral plus percent to specify a percentage." | [a-z/percent-percentage](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/p/percent-percentage) (`ms.date` 2023-11-15, newer): "Use the percent sign (\"%\") with numerals, rather than spelling out \"percent.\"" |
487
- | **`master/slave` replacement target** — ESCALATED, ships detection-only, see below | [bias-free](https://learn.microsoft.com/en-us/style-guide/bias-free-communication): "primary/subordinate ← master/slave" | [a-z/master-slave](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/m/master-slave): "Don't use master/slave. Use primary/replica or alternatives such as primary/secondary, principal/agent, controller/worker" — and separately rejects `primary/subordinate` as a synonym for parent/child. |
488
- | **`etc.`** | [use-us-spelling](https://learn.microsoft.com/en-us/style-guide/word-choice/use-us-spelling-avoid-non-english-words): "It's OK to use etc., in situations where space is limited." | [a-z/etc](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/e/etc): "Don't use. Instead be specific. When space is limited, use such as or like." |
489
- | **Forced line breaks** | [writing-all-abilities](https://learn.microsoft.com/en-us/style-guide/accessibility/writing-all-abilities): "Don't force line breaks... within sentences and paragraphs." | [headings](https://learn.microsoft.com/en-us/style-guide/scannable-content/headings): "Break two-line headings carefully... (Shift + Enter inserts a manual line break)." |
484
+ | Case | Page A | Page B |
485
+ | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
486
+ | **`%` vs. spelled-out "percent"** | [numbers](https://learn.microsoft.com/en-us/style-guide/numbers) (`ms.date` 2022-05-13): "Use a numeral plus percent to specify a percentage." | [a-z/percent-percentage](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/p/percent-percentage) (`ms.date` 2023-11-15, newer): "Use the percent sign (\"%\") with numerals, rather than spelling out \"percent.\"" |
487
+ | **`master/slave` replacement target** — ESCALATED, ships detection-only, see below | [bias-free](https://learn.microsoft.com/en-us/style-guide/bias-free-communication): "primary/subordinate ← master/slave" | [a-z/master-slave](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/m/master-slave): "Don't use master/slave. Use primary/replica or alternatives such as primary/secondary, principal/agent, controller/worker" — and separately rejects `primary/subordinate` as a synonym for parent/child. |
488
+ | **`etc.`** | [use-us-spelling](https://learn.microsoft.com/en-us/style-guide/word-choice/use-us-spelling-avoid-non-english-words): "It's OK to use etc., in situations where space is limited." | [a-z/etc](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/e/etc): "Don't use. Instead be specific. When space is limited, use such as or like." |
489
+ | **Forced line breaks** | [writing-all-abilities](https://learn.microsoft.com/en-us/style-guide/accessibility/writing-all-abilities): "Don't force line breaks... within sentences and paragraphs." | [headings](https://learn.microsoft.com/en-us/style-guide/scannable-content/headings): "Break two-line headings carefully... (Shift + Enter inserts a manual line break)." |
490
490
 
491
491
  Also note: `via` is dropped from the Latin-abbreviation swap list on
492
492
  verifier E's own recommendation ("Could not independently confirm 'via'
@@ -526,12 +526,12 @@ Shipping a `metric` rule under a Microsoft citation would misattribute an
526
526
  invented numeric mandate. Instead, this preset ships the guide's own real
527
527
  structural numbers:
528
528
 
529
- | Rule | Assertion | Guide's number | Source |
530
- |---|---|---|---|
531
- | `microsoft/paragraph-length` | `length`, `unit: sentences`, `max: 7` | "Three to seven lines is about the right length for a paragraph." | [scannable-content](https://learn.microsoft.com/en-us/style-guide/scannable-content/) |
532
- | `microsoft/list-length` | `list-length`, `min: 2, max: 7` | "at least two items but (if possible) no more than seven items" | [lists](https://learn.microsoft.com/en-us/style-guide/scannable-content/lists) |
533
- | `microsoft/comma-density` | `occurrence`, pattern `,`, `max: 2`, `scope: sentence` | "If a sentence contains more than a comma or two and ending punctuation, consider rewriting it" | [punctuation](https://learn.microsoft.com/en-us/style-guide/punctuation/) |
534
- | `microsoft/alt-text-length` | `length`, `unit: characters`, `max: 150`, `scope: alt` | "Limit the length to 150 characters." | [alternative-text](https://learn.microsoft.com/en-us/style-guide/accessibility/alternative-text) |
529
+ | Rule | Assertion | Guide's number | Source |
530
+ | ---------------------------- | ------------------------------------------------------ | ----------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ |
531
+ | `microsoft/paragraph-length` | `length`, `unit: sentences`, `max: 7` | "Three to seven lines is about the right length for a paragraph." | [scannable-content](https://learn.microsoft.com/en-us/style-guide/scannable-content/) |
532
+ | `microsoft/list-length` | `list-length`, `min: 2, max: 7` | "at least two items but (if possible) no more than seven items" | [lists](https://learn.microsoft.com/en-us/style-guide/scannable-content/lists) |
533
+ | `microsoft/comma-density` | `occurrence`, pattern `,`, `max: 2`, `scope: sentence` | "If a sentence contains more than a comma or two and ending punctuation, consider rewriting it" | [punctuation](https://learn.microsoft.com/en-us/style-guide/punctuation/) |
534
+ | `microsoft/alt-text-length` | `length`, `unit: characters`, `max: 150`, `scope: alt` | "Limit the length to 150 characters." | [alternative-text](https://learn.microsoft.com/en-us/style-guide/accessibility/alternative-text) |
535
535
 
536
536
  **Two deliberate deviations from the brief's literal numbers, both found
537
537
  empirically while building this preset's own clean fixture, both discussed
@@ -887,24 +887,24 @@ already-correct `favorite` spelling too) narrowed to `favourite` only.
887
887
 
888
888
  #### Step 4 — ~15 Tier-1 pairs no longer rewrite correct prose
889
889
 
890
- | Pair | Disposition | Reasoning |
891
- |---|---|---|
892
- | `SMB` → `small or medium-sized business` | **Dropped** | Homograph with the Server Message Block protocol, common in exactly Redocly's domain ("mount the SMB share"); no positional anchor distinguishes the senses. |
893
- | `SKU` → `edition` | **Dropped** | `SKU` is standard e-commerce/inventory vocabulary in API docs; also carried an independent ALL-CAPS-shout hazard (single-word replacement) and a multi-target guide quote (subscription/edition/version/tier). |
894
- | `terminate` → `close` | **Dropped** | "Terminate the instance/process/session" is standard, correct cloud-infrastructure vocabulary in Redocly's own domain — a genuine meaning change, not a false match, with no reliable anchor. |
895
- | `exit` → `close` | **Anchored, stays fixable** | Lookaround excludes preceding "the/an/no/emergency" and following "code/status/button/sign/strategy/interview/poll/ramp/velocity/row" (noun-compound senses). |
896
- | `launch` → `open` | **Anchored, stays fixable** | Excludes preceding "product/software/game/website/app/feature/rocket/mission" and following "date/event/party/window/site/pad/day/plan/schedule/announcement". |
897
- | `boot` → `turn on` | **Anchored, stays fixable** | Excludes following "disk/sector/loader/sequence/process/time/options/record/partition/menu/order/camera". |
898
- | `crash` → `fail` | **Moved to detection-only** (`az-state-failure-detect`) | G:73 gives a hardware/software target split ("fail" vs. "stop responding") a single `swap` replacement can't express; also anchored against "crash dump/report/log/course/test/site". |
899
- | `lock up` → `fail` | **Moved to detection-only** (`az-state-failure-detect`) | Same hardware/software split (G:77). |
900
- | `hangs`/`hang` → `stops responding`/`stop responding` | **Anchored, stays fixable** | Excludes "hang(s) on/up/around/out/together" (retain, end a call, loiter — unrelated phrasal verbs). |
901
- | `roman` → `regular type` | **Anchored, stays fixable** | Excludes the civilization/proper-noun sense ("Roman numerals/Empire/alphabet/calendar/..."), a homograph collision of the `aka`-inside-`Akamai` shape. |
902
- | `italics`/`italicized` → `italic` | **Moved to detection-only** (`microsoft/italic-as-noun`) | The guide's own rule ("use only as an adjective, not a noun") makes a direct swap ungrammatical in exactly the position the avoid-term occupies — the same class as `actionable`. |
903
- | `blade` → `pane` | **Anchored, stays fixable** | Excludes following "server(s)/enclosure/chassis/center(s)/centre(s)" (physical hardware sense). |
904
- | `beta` → `preview` | **Anchored, stays fixable** | Excludes following "distribution/function/coefficient/particle/blocker/decay" (statistical/physics/medical senses). |
905
- | `visit` → `go to` | **Anchored, stays fixable** | Excludes following "count(s)/duration/frequency/history/log/data" (analytics-metric noun sense). |
906
- | `in addition` → `also` | **Anchored, stays fixable** | Excludes following "to" (the standard, grammatically necessary preposition phrase "in addition to X", distinct from the guide's stand-alone-adverb target). |
907
- | `print out` → `print` | **Anchored, stays fixable** | Excludes following "of" (noun sense — "a print out of X" — distinct from the guide's verb-scoped rule). |
890
+ | Pair | Disposition | Reasoning |
891
+ | ----------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
892
+ | `SMB` → `small or medium-sized business` | **Dropped** | Homograph with the Server Message Block protocol, common in exactly Redocly's domain ("mount the SMB share"); no positional anchor distinguishes the senses. |
893
+ | `SKU` → `edition` | **Dropped** | `SKU` is standard e-commerce/inventory vocabulary in API docs; also carried an independent ALL-CAPS-shout hazard (single-word replacement) and a multi-target guide quote (subscription/edition/version/tier). |
894
+ | `terminate` → `close` | **Dropped** | "Terminate the instance/process/session" is standard, correct cloud-infrastructure vocabulary in Redocly's own domain — a genuine meaning change, not a false match, with no reliable anchor. |
895
+ | `exit` → `close` | **Anchored, stays fixable** | Lookaround excludes preceding "the/an/no/emergency" and following "code/status/button/sign/strategy/interview/poll/ramp/velocity/row" (noun-compound senses). |
896
+ | `launch` → `open` | **Anchored, stays fixable** | Excludes preceding "product/software/game/website/app/feature/rocket/mission" and following "date/event/party/window/site/pad/day/plan/schedule/announcement". |
897
+ | `boot` → `turn on` | **Anchored, stays fixable** | Excludes following "disk/sector/loader/sequence/process/time/options/record/partition/menu/order/camera". |
898
+ | `crash` → `fail` | **Moved to detection-only** (`az-state-failure-detect`) | G:73 gives a hardware/software target split ("fail" vs. "stop responding") a single `swap` replacement can't express; also anchored against "crash dump/report/log/course/test/site". |
899
+ | `lock up` → `fail` | **Moved to detection-only** (`az-state-failure-detect`) | Same hardware/software split (G:77). |
900
+ | `hangs`/`hang` → `stops responding`/`stop responding` | **Anchored, stays fixable** | Excludes "hang(s) on/up/around/out/together" (retain, end a call, loiter — unrelated phrasal verbs). |
901
+ | `roman` → `regular type` | **Anchored, stays fixable** | Excludes the civilization/proper-noun sense ("Roman numerals/Empire/alphabet/calendar/..."), a homograph collision of the `aka`-inside-`Akamai` shape. |
902
+ | `italics`/`italicized` → `italic` | **Moved to detection-only** (`microsoft/italic-as-noun`) | The guide's own rule ("use only as an adjective, not a noun") makes a direct swap ungrammatical in exactly the position the avoid-term occupies — the same class as `actionable`. |
903
+ | `blade` → `pane` | **Anchored, stays fixable** | Excludes following "server(s)/enclosure/chassis/center(s)/centre(s)" (physical hardware sense). |
904
+ | `beta` → `preview` | **Anchored, stays fixable** | Excludes following "distribution/function/coefficient/particle/blocker/decay" (statistical/physics/medical senses). |
905
+ | `visit` → `go to` | **Anchored, stays fixable** | Excludes following "count(s)/duration/frequency/history/log/data" (analytics-metric noun sense). |
906
+ | `in addition` → `also` | **Anchored, stays fixable** | Excludes following "to" (the standard, grammatically necessary preposition phrase "in addition to X", distinct from the guide's stand-alone-adverb target). |
907
+ | `print out` → `print` | **Anchored, stays fixable** | Excludes following "of" (noun sense — "a print out of X" — distinct from the guide's verb-scoped rule). |
908
908
 
909
909
  #### Step 5 — the "CONFIRMED unconditional" comment corrected
910
910
 
@@ -916,17 +916,17 @@ contradicted it; each was moved to a `*-detect` `pattern` sibling,
916
916
  - **Moved to detection-only:** `quit`/`deinstall`/`reinitialize`
917
917
  (`az-lifecycle-verbs-detect`; G:88 multi-target, G:156/H:52 "(cond.)"),
918
918
  `crash`/`lock up` (`az-state-failure-detect`; Step 4), `bottom
919
- left`/`bottom right` (`az-direction-layout-detect`; G:106, the
919
+ left`/`bottom right` (`az-direction-layout-detect`; G:106, the
920
920
  BottomLeft/BottomRight API-property carve-out), `thank you`
921
921
  (`az-geography-detect`; H:62), `hierarchical menu`/`secondary
922
- menu`/`running head`/`running foot` (`az-ui-nouns-detect`; G:146/H:93),
922
+ menu`/`running head`/`running foot` (`az-ui-nouns-detect`; G:146/H:93),
923
923
  `pound sign` (`az-abbreviations-names-detect`; H:115).
924
924
  - **`fix: false`:** `left-hand`/`right-hand` (new rule
925
925
  `microsoft/left-hand-right-hand`; G:108 marks these DETECT-ONLY outright
926
926
  — no replacement is stated on the live page for the modifier sense, so
927
927
  shipping one fixable was itself the defect).
928
928
  - **Already detection-only, no change needed:** `backbone`/`natural user
929
- interface` (G:187/G:190) already ship as `pattern` in
929
+ interface` (G:187/G:190) already ship as `pattern` in
930
930
  `microsoft/az-no-replacement`. `indices` is excluded entirely (see Step
931
931
  5's own TOO-RISKY note below), so its math-carve-out marker (G:168) never
932
932
  reached a shipped pair either.
@@ -941,38 +941,38 @@ instead of unconditionally.
941
941
  (16 rules pre-wave, more after Step 4/5 added new rules) now cites the
942
942
  real, live, term-specific page for one of its pairs (verified via
943
943
  `curl`, HTTP 200, for every one — see the table below). `microsoft/
944
- mouse-over`'s slug carried a spurious "-and-"
944
+ mouse-over`'s slug carried a spurious "-and-"
945
945
  (`mouse-and-mouse-interaction-terms`, 404) corrected to
946
946
  `mouse-mouse-interaction-terms` (200) — verifier G's own fetch log
947
947
  named the correct slug at G:200; the verifier never cited the broken
948
948
  form itself.
949
949
 
950
- | Rule | New link slug |
951
- |---|---|
952
- | `spelling-hyphenation` | `e/email` |
953
- | `az-case-only` | `i/internet-intranet-extranet` |
954
- | `az-verb-able` | `b/blacklist` |
955
- | `az-state-failure` | `h/hang` |
956
- | `az-state-failure-detect` | `c/crash` |
957
- | `az-lifecycle-verbs` | `b/boot` |
958
- | `az-lifecycle-verbs-detect` | `q/quit` |
959
- | `az-judgment-words` | `f/finalize` |
960
- | `az-geography` | `f/far-east` |
961
- | `az-geography-detect` | `t/thanks-thank-you` |
962
- | `az-direction-layout` | `f/far-left-far-right` |
963
- | `az-direction-layout-detect` | `b/bottom-left-bottom-right` |
964
- | `left-hand-right-hand` | `l/left-leftmost-left-hand` |
965
- | `az-ui-nouns` | `b/blade` |
966
- | `az-ui-nouns-detect` | `h/hierarchical-menu` |
967
- | `az-typography` | `r/roman` |
968
- | `az-filesystem` | `c/child-folder` |
969
- | `az-grammar-usage` | `a/as-well-as` |
970
- | `az-abbreviations-names` | `h/hexadecimal` |
971
- | `az-abbreviations-names-detect` | `n/number-sign` |
972
- | `az-navigation` | `v/visit` |
973
- | `bookmark-favorite` | `b/bookmark` |
974
- | `az-no-replacement` | `b/black-box` |
975
- | `az-real-replacements` | `f/friendly-name` |
950
+ | Rule | New link slug |
951
+ | ------------------------------- | ------------------------------ |
952
+ | `spelling-hyphenation` | `e/email` |
953
+ | `az-case-only` | `i/internet-intranet-extranet` |
954
+ | `az-verb-able` | `b/blacklist` |
955
+ | `az-state-failure` | `h/hang` |
956
+ | `az-state-failure-detect` | `c/crash` |
957
+ | `az-lifecycle-verbs` | `b/boot` |
958
+ | `az-lifecycle-verbs-detect` | `q/quit` |
959
+ | `az-judgment-words` | `f/finalize` |
960
+ | `az-geography` | `f/far-east` |
961
+ | `az-geography-detect` | `t/thanks-thank-you` |
962
+ | `az-direction-layout` | `f/far-left-far-right` |
963
+ | `az-direction-layout-detect` | `b/bottom-left-bottom-right` |
964
+ | `left-hand-right-hand` | `l/left-leftmost-left-hand` |
965
+ | `az-ui-nouns` | `b/blade` |
966
+ | `az-ui-nouns-detect` | `h/hierarchical-menu` |
967
+ | `az-typography` | `r/roman` |
968
+ | `az-filesystem` | `c/child-folder` |
969
+ | `az-grammar-usage` | `a/as-well-as` |
970
+ | `az-abbreviations-names` | `h/hexadecimal` |
971
+ | `az-abbreviations-names-detect` | `n/number-sign` |
972
+ | `az-navigation` | `v/visit` |
973
+ | `bookmark-favorite` | `b/bookmark` |
974
+ | `az-no-replacement` | `b/black-box` |
975
+ | `az-real-replacements` | `f/friendly-name` |
976
976
 
977
977
  All 60 distinct URLs this preset's rules now cite were verified live
978
978
  (`curl -A "Mozilla/5.0..."`) at HTTP 200 as of 2026-07-30.
@@ -1016,13 +1016,13 @@ polysemous for any anchor to meaningfully narrow).
1016
1016
 
1017
1017
  - `case-preserve.ts`'s "KNOWN EDGE" note claimed no shipped pair hit the
1018
1018
  hyphen/dot-joined-replacement shouting gap — false; `spelling-
1019
- hyphenation`'s `ecommerce`→`e-commerce`/`elearning`→`e-learning`/
1019
+ hyphenation`'s `ecommerce`→`e-commerce`/`elearning`→`e-learning`/
1020
1020
  `ebook`→`e-book` all do (comment corrected, no behavior change).
1021
1021
  - `az-case-only`'s claim that all 17 pairs would "silently no-op" was
1022
1022
  verified against the live `applyMatchCase` function directly (not
1023
1023
  re-reasoned by eye): true for only 7 (`Internet`, `Intranet`,
1024
1024
  `Extranet`, `Euro`, `WWW`, `Registry`, `Spam`). The other 10 (`Big
1025
- Data`, `Dark Mode`, `darkmode`, `Devops`, `devops`, `bluetooth`,
1025
+ Data`, `Dark Mode`, `darkmode`, `Devops`, `devops`, `bluetooth`,
1026
1026
  `boolean`, `Javascript`, `javascript`, `World Wide Web`) now ship
1027
1027
  fixable in a new rule, `microsoft/az-case-fixable`, instead of
1028
1028
  reporting forever for no reason.
@@ -1053,18 +1053,18 @@ one rule family nobody had named (`az-grammar-usage`) and found two more
1053
1053
  corrupting pairs — both marked plain `CONFIRMED` by a verifier, with the
1054
1054
  correct quote attached:
1055
1055
 
1056
- - `as well as` → `and`: a/as-well-as says *"Don't use as a synonym for
1057
- and"* — a caution against treating the two as interchangeable, not an
1056
+ - `as well as` → `and`: a/as-well-as says _"Don't use as a synonym for
1057
+ and"_ — a caution against treating the two as interchangeable, not an
1058
1058
  instruction to replace the text.
1059
1059
  - `or greater`/`or higher`/`or lower` → `or later`/`or earlier`:
1060
- g/greater-better and h/higher scope this to *"identifying multiple
1061
- versions of programs or apps"* — a version-number rule, not a
1060
+ g/greater-better and h/higher scope this to _"identifying multiple
1061
+ versions of programs or apps"_ — a version-number rule, not a
1062
1062
  general-magnitude rule.
1063
1063
 
1064
1064
  #### The root cause, restated precisely
1065
1065
 
1066
- A `CONFIRMED` verdict means *the live page genuinely discusses this term*.
1067
- It does **not** mean *a blind textual substitution of that term is safe*.
1066
+ A `CONFIRMED` verdict means _the live page genuinely discusses this term_.
1067
+ It does **not** mean _a blind textual substitution of that term is safe_.
1068
1068
  Those are two different properties, and this task's verification passes
1069
1069
  (E/F/G/H/accessibility) only ever checked the first one. Fixing the two
1070
1070
  named pairs without addressing the conflation would have left the rest of
@@ -1085,18 +1085,18 @@ all HTTP 200.
1085
1085
 
1086
1086
  **10 pairs reclassified** from fixable to detection-only or `fix: false`:
1087
1087
 
1088
- | Pair | Rule (before → after) | Guidance shape (live quote) | Why unsafe as a blind swap |
1089
- |---|---|---|---|
1090
- | `as well as` → `and` | `az-grammar-usage` → `az-grammar-usage-detect` (`pattern`) | "Don't use **as a synonym for** and." | Caution against conflation, not an instruction to replace — "As well as being fast, the API is reliable." → "And being fast, the API is reliable." is not grammatical; "and" can't head a sentence the way a subordinating phrase can. |
1091
- | `or greater` → `or later` | `az-grammar-usage` → `az-grammar-usage-detect` | "Don't use greater or better to mean or later **when identifying multiple versions of programs or apps**." | Scoped to version numbers; "a score of 80 or greater" → "a score of 80 or later" is nonsensical for a magnitude. |
1092
- | `or higher` → `or later` | `az-grammar-usage` → `az-grammar-usage-detect` | Same page, PLUS: "It's OK to use higher to refer to **display resolution**. Don't use higher to refer to **processor speed**. Use **faster** instead." | Scoped to version numbers AND multi-target (resolution: unchanged; processor speed: "faster"; version: "later") — no single literal replacement covers all three senses the live page itself names. |
1093
- | `or lower` → `or earlier` | `az-grammar-usage` → `az-grammar-usage-detect` | "Don't use **to indicate product version numbers**. Use earlier instead." | Same version-number scoping; "lower" is an ordinary magnitude word (price, temperature, priority) in every other context. |
1094
- | `leverage`/`leveraging`/`leveraged` → `use`/`using`/`used` | `microsoft/leverage`, `fix: false` | "Don't use **as a verb** to mean take advantage of. Use take advantage of, use, or **another more appropriate word or phrase**." | Verb-sense-scoped AND multiple-alternatives. "Leverage"/"leveraged" are also common, correct nouns/adjectives this page never addresses ("financial leverage", "a highly leveraged company", "a leveraged buyout") — unlike `impact-verb`, there's no small enumerable set of following objects to anchor on (leverage takes almost any direct object), so detection-only is the fallback, not an abandoned first attempt. |
1095
- | `glyph` → `symbol` | `microsoft/glyph`, `fix: false` | "Don't use to refer generically to a graphic... on a button, on an icon, or in a message box. Use symbol instead. **It's OK to use glyph in a technical discussion of fonts and characters.**" | Context-scoped exactly like the developer-audience carve-outs already excluded for `header`/`disk`/`directory`/`context menu` — font/Unicode documentation (plausible in Redocly's own docs) uses "glyph" as a precise technical term this page's objection doesn't cover, and no anchor tells "technical discussion of fonts" apart from the generic-icon sense. |
1096
- | `de facto` → `in practice` | `no-latin-abbreviations` → `no-latin-abbreviations-detect` (`pattern`) | use-us-spelling's ONLY sentence: "Avoid non-English words or phrases, **such as** de facto or ad hoc." | No replacement given at all — an example list of avoid-terms, not a "use Y instead of X" table row (unlike `e.g./i.e./viz./ergo`, which come from this same page's own table). "in practice" was the author's own reasonable-sounding guess. |
1097
- | `ad hoc` → `as needed` | `no-latin-abbreviations` → `no-latin-abbreviations-detect` | Same sentence as `de facto`. | Same — no replacement stated. |
1098
- | `vis-a-vis` → `compared with` | `no-latin-abbreviations` → `no-latin-abbreviations-detect` | **Not named on any fetched page at all** — confirmed via a live 404 on `v/vis-a-vis`. | Not just "no replacement given" — the term itself isn't sourced anywhere; "compared with" is entirely the author's own invention. |
1099
- | `visit` → `go to` | `az-navigation` → `az-navigation-detect` (`pattern`) | "use go to in **most cases**... It's OK to use visit... if you're using a tone that's meant to imply [a suggestion, or browsing]." Worked example: "**Visit** the product website to learn about offerings..." | The live page's own approved example uses "visit" — a blind fix would rewrite Microsoft's own sanctioned usage. Also a second, independent hazard the wave-B anchor never covered: "visit" preceded by an article ("Schedule a visit", "during my visit") is a common noun sense the noun-**compound** anchor (which only excluded specific FOLLOWING words) never excluded — "Schedule a go to with the doctor" is not English. |
1088
+ | Pair | Rule (before → after) | Guidance shape (live quote) | Why unsafe as a blind swap |
1089
+ | ---------------------------------------------------------- | ---------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
1090
+ | `as well as` → `and` | `az-grammar-usage` → `az-grammar-usage-detect` (`pattern`) | "Don't use **as a synonym for** and." | Caution against conflation, not an instruction to replace — "As well as being fast, the API is reliable." → "And being fast, the API is reliable." is not grammatical; "and" can't head a sentence the way a subordinating phrase can. |
1091
+ | `or greater` → `or later` | `az-grammar-usage` → `az-grammar-usage-detect` | "Don't use greater or better to mean or later **when identifying multiple versions of programs or apps**." | Scoped to version numbers; "a score of 80 or greater" → "a score of 80 or later" is nonsensical for a magnitude. |
1092
+ | `or higher` → `or later` | `az-grammar-usage` → `az-grammar-usage-detect` | Same page, PLUS: "It's OK to use higher to refer to **display resolution**. Don't use higher to refer to **processor speed**. Use **faster** instead." | Scoped to version numbers AND multi-target (resolution: unchanged; processor speed: "faster"; version: "later") — no single literal replacement covers all three senses the live page itself names. |
1093
+ | `or lower` → `or earlier` | `az-grammar-usage` → `az-grammar-usage-detect` | "Don't use **to indicate product version numbers**. Use earlier instead." | Same version-number scoping; "lower" is an ordinary magnitude word (price, temperature, priority) in every other context. |
1094
+ | `leverage`/`leveraging`/`leveraged` → `use`/`using`/`used` | `microsoft/leverage`, `fix: false` | "Don't use **as a verb** to mean take advantage of. Use take advantage of, use, or **another more appropriate word or phrase**." | Verb-sense-scoped AND multiple-alternatives. "Leverage"/"leveraged" are also common, correct nouns/adjectives this page never addresses ("financial leverage", "a highly leveraged company", "a leveraged buyout") — unlike `impact-verb`, there's no small enumerable set of following objects to anchor on (leverage takes almost any direct object), so detection-only is the fallback, not an abandoned first attempt. |
1095
+ | `glyph` → `symbol` | `microsoft/glyph`, `fix: false` | "Don't use to refer generically to a graphic... on a button, on an icon, or in a message box. Use symbol instead. **It's OK to use glyph in a technical discussion of fonts and characters.**" | Context-scoped exactly like the developer-audience carve-outs already excluded for `header`/`disk`/`directory`/`context menu` — font/Unicode documentation (plausible in Redocly's own docs) uses "glyph" as a precise technical term this page's objection doesn't cover, and no anchor tells "technical discussion of fonts" apart from the generic-icon sense. |
1096
+ | `de facto` → `in practice` | `no-latin-abbreviations` → `no-latin-abbreviations-detect` (`pattern`) | use-us-spelling's ONLY sentence: "Avoid non-English words or phrases, **such as** de facto or ad hoc." | No replacement given at all — an example list of avoid-terms, not a "use Y instead of X" table row (unlike `e.g./i.e./viz./ergo`, which come from this same page's own table). "in practice" was the author's own reasonable-sounding guess. |
1097
+ | `ad hoc` → `as needed` | `no-latin-abbreviations` → `no-latin-abbreviations-detect` | Same sentence as `de facto`. | Same — no replacement stated. |
1098
+ | `vis-a-vis` → `compared with` | `no-latin-abbreviations` → `no-latin-abbreviations-detect` | **Not named on any fetched page at all** — confirmed via a live 404 on `v/vis-a-vis`. | Not just "no replacement given" — the term itself isn't sourced anywhere; "compared with" is entirely the author's own invention. |
1099
+ | `visit` → `go to` | `az-navigation` → `az-navigation-detect` (`pattern`) | "use go to in **most cases**... It's OK to use visit... if you're using a tone that's meant to imply [a suggestion, or browsing]." Worked example: "**Visit** the product website to learn about offerings..." | The live page's own approved example uses "visit" — a blind fix would rewrite Microsoft's own sanctioned usage. Also a second, independent hazard the wave-B anchor never covered: "visit" preceded by an article ("Schedule a visit", "during my visit") is a common noun sense the noun-**compound** anchor (which only excluded specific FOLLOWING words) never excluded — "Schedule a go to with the doctor" is not English. |
1100
1100
 
1101
1101
  `hot link` (same `az-navigation` rule) and `e.g./i.e./viz./ergo` (same
1102
1102
  `no-latin-abbreviations` rule) were audited alongside their reclassified
@@ -1110,11 +1110,11 @@ real but incomplete — the guidance shape was correctly identified as
1110
1110
  sense-scoped, but the exclusion list didn't cover every common noun/idiom
1111
1111
  sense:
1112
1112
 
1113
- | Pair | Rule | Gap found | Fix |
1114
- |---|---|---|---|
1115
- | `hang`/`hangs` → `stop(s) responding` | `az-state-failure` | Exclusion list (`on/up/around/out/together`) missed "get the hang **of** it" (a knack, not a system), "hang **in** there"/"hang **tight**"/"hang **loose**"/"hang **fire**" (encouragement/waiting idioms), and the literal suspension sense ("hangs **from** the ceiling"/"hangs **over** the door"). | Added `of/in/tight/loose/fire/from/over` to the exclusion list. Not exhaustive — "hang" is as broad a word as `crash`/`lock up`, which were moved to detection-only in wave B for the identical breadth reason — but this closes the specific gap a plausible Redocly onboarding sentence ("Once you get the hang of the API...") would have hit. |
1116
- | `print out` → `print` | `az-real-replacements` | The noun-compound anchor only excluded "print out **of** X" — "Keep the print out safe"/"Attach the print out to the ticket" (a determiner-preceded noun, no "of" following) still corrupted to "Keep the print safe"/"Attach the print to the ticket" (register shift toward "print" = photograph). | Added a negative lookbehind excluding a preceding determiner/possessive (`a/an/the/this/that/your/my/its/his/her/their/our`) — the verb sense is never preceded by a determiner directly. |
1117
- | `click`/`clicks` → `select(s)` | `no-click` | The live page's ban is verb-scoped ("Avoid this **verb**"); the anchor excluded hyphen-joined compounds and letter-adjacent compounds (`double-click`, `clickstream`) but not the ordinary noun sense ("click count", "clicks per session") — plausible in analytics/UI-event documentation, exactly Redocly's domain. | Added a follow-word exclusion for noun-compound risk (`count(s)/rate(s)/event(s)/tracking/data/metrics/history/id(s)/per`). Residual, accepted risk (not anchored): the live page's own carve-out "OK to use click when you need to describe mouse actions specifically" isn't mechanically detectable — same class as `hex`'s mechanical-fastener sense, low practical likelihood in Redocly's API-documentation domain. |
1113
+ | Pair | Rule | Gap found | Fix |
1114
+ | ------------------------------------- | ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
1115
+ | `hang`/`hangs` → `stop(s) responding` | `az-state-failure` | Exclusion list (`on/up/around/out/together`) missed "get the hang **of** it" (a knack, not a system), "hang **in** there"/"hang **tight**"/"hang **loose**"/"hang **fire**" (encouragement/waiting idioms), and the literal suspension sense ("hangs **from** the ceiling"/"hangs **over** the door"). | Added `of/in/tight/loose/fire/from/over` to the exclusion list. Not exhaustive — "hang" is as broad a word as `crash`/`lock up`, which were moved to detection-only in wave B for the identical breadth reason — but this closes the specific gap a plausible Redocly onboarding sentence ("Once you get the hang of the API...") would have hit. |
1116
+ | `print out` → `print` | `az-real-replacements` | The noun-compound anchor only excluded "print out **of** X" — "Keep the print out safe"/"Attach the print out to the ticket" (a determiner-preceded noun, no "of" following) still corrupted to "Keep the print safe"/"Attach the print to the ticket" (register shift toward "print" = photograph). | Added a negative lookbehind excluding a preceding determiner/possessive (`a/an/the/this/that/your/my/its/his/her/their/our`) — the verb sense is never preceded by a determiner directly. |
1117
+ | `click`/`clicks` → `select(s)` | `no-click` | The live page's ban is verb-scoped ("Avoid this **verb**"); the anchor excluded hyphen-joined compounds and letter-adjacent compounds (`double-click`, `clickstream`) but not the ordinary noun sense ("click count", "clicks per session") — plausible in analytics/UI-event documentation, exactly Redocly's domain. | Added a follow-word exclusion for noun-compound risk (`count(s)/rate(s)/event(s)/tracking/data/metrics/history/id(s)/per`). Residual, accepted risk (not anchored): the live page's own carve-out "OK to use click when you need to describe mouse actions specifically" isn't mechanically detectable — same class as `hex`'s mechanical-fastener sense, low practical likelihood in Redocly's API-documentation domain. |
1118
1118
 
1119
1119
  #### Bug fix found during the audit (not a substitution-safety issue — a detection bug)
1120
1120
 
@@ -1242,7 +1242,7 @@ wrong under `--fix` twice:
1242
1242
  corruption strings above pass axis 1 (each guide page states a plain
1243
1243
  "use Y instead of X" rule) and fail on axis 2 — `DMZ` is also the
1244
1244
  Korean border zone; `the ask` is also the bid/ask market term; `home
1245
- directory` always means the Unix `$HOME` sense in the corrupted
1245
+ directory` always means the Unix `$HOME` sense in the corrupted
1246
1246
  sentence, and the guide's "root directory" target is a genuinely
1247
1247
  different concept (the filesystem's `/`, not a per-user directory);
1248
1248
  `unmark` collides with no listed acceptable alternative for non-
@@ -1252,7 +1252,7 @@ wrong under `--fix` twice:
1252
1252
  3. **The posture**: auto-fix is retained **only** where a replacement
1253
1253
  cannot be wrong — the same word, normalized (spelling, hyphenation,
1254
1254
  casing, or a non-standard written form of the identical word). A pair
1255
- that substitutes a *different* word or phrase — even one that always
1255
+ that substitutes a _different_ word or phrase — even one that always
1256
1256
  looks safe, like `alright` → `OK` — moves to detection-only, because
1257
1257
  "this one looks safe" is exactly the per-pair judgement call that
1258
1258
  produced three rounds of misses. Mechanical classification, not
@@ -1267,12 +1267,12 @@ is a whole-RULE flag, not per-pair, so a mixed bundle has to split). The
1267
1267
  16 rules that remain fixable are exhaustively enumerated with before/after
1268
1268
  fix output in the fix-posture report; four representative examples:
1269
1269
 
1270
- | Rule | Pair | Why it stays fixable |
1271
- |---|---|---|
1272
- | `microsoft/us-spelling` | `centre` → `center` | Spelling variant of the identical word (the brief's own textbook example). |
1273
- | `microsoft/spelling-hyphenation` | `e-mail` → `email` | Hyphenation of the identical word. |
1274
- | `microsoft/az-case-fixable` | `javascript` → `JavaScript` | Casing of the identical token; empirically re-verified against `applyMatchCase` this wave (case-sensitive matching means an ALL-CAPS input like `JAVASCRIPT` can never reach these keys in the first place, so the ALL-CAPS-shout no-op class `az-case-only` exists to avoid doesn't recur here). |
1275
- | `microsoft/az-grammar-usage` | `broadcasted` → `broadcast` | Non-standard inflection of the identical word (the guide's own irregular past tense), the same class as "alot" → "a lot". |
1270
+ | Rule | Pair | Why it stays fixable |
1271
+ | -------------------------------- | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
1272
+ | `microsoft/us-spelling` | `centre` → `center` | Spelling variant of the identical word (the brief's own textbook example). |
1273
+ | `microsoft/spelling-hyphenation` | `e-mail` → `email` | Hyphenation of the identical word. |
1274
+ | `microsoft/az-case-fixable` | `javascript` → `JavaScript` | Casing of the identical token; empirically re-verified against `applyMatchCase` this wave (case-sensitive matching means an ALL-CAPS input like `JAVASCRIPT` can never reach these keys in the first place, so the ALL-CAPS-shout no-op class `az-case-only` exists to avoid doesn't recur here). |
1275
+ | `microsoft/az-grammar-usage` | `broadcasted` → `broadcast` | Non-standard inflection of the identical word (the guide's own irregular past tense), the same class as "alot" → "a lot". |
1276
1276
 
1277
1277
  Two rules flipped for a reason found DURING this wave, not named in the
1278
1278
  brief:
@@ -1288,7 +1288,7 @@ brief:
1288
1288
  each has to be checked against the actual function, not just the shape
1289
1289
  of the rule.
1290
1290
  - **`MSFT` → `Microsoft` (`az-abbreviations-names`) moved to detection-only
1291
- for a fix-*mechanism* defect, not a word-choice one.** `MSFT` is
1291
+ for a fix-_mechanism_ defect, not a word-choice one.** `MSFT` is
1292
1292
  virtually always written all-caps (it's a stock ticker); with
1293
1293
  `ignoreCase: true`, `applyMatchCase`'s ALL-CAPS branch shouts a
1294
1294
  single-word replacement, so the "fix" would produce `"MICROSOFT"` (wrong
@@ -1399,12 +1399,12 @@ this preset, plus 5 `consistency` pairs left untouched — 118 total; the
1399
1399
  parallel sweep in `recheck/google` is documented in that preset's own
1400
1400
  PROVENANCE.md) was checked against question 3. This preset's flips:
1401
1401
 
1402
- | Rule | Pair(s) flipped | Real proper noun that collides |
1403
- |---|---|---|
1404
- | `microsoft/usa-abbreviation` | `USA`/`U.S.A.`/`U.S.` -> `US` (all 3) | "USA Gymnastics" (US national governing body), "U.S. Bank" (top-10 US bank), "U.S.A. Track and Field" (national governing body), "U.S. Steel" — named brief case. |
1405
- | `microsoft/us-spelling` | `centre`/`centres` -> `center`/`centers` | "Bell Centre" (Montreal Canadiens' arena, official English spelling) and "Centre County, Pennsylvania" (a real US county whose OWN official name keeps the British "re"). |
1406
- | `microsoft/us-spelling` | `catalogue`/`catalogues` -> `catalog`/`catalogs` | "Catalogue of Life" (a real, commonly-cited global species database whose own name is spelled with the British "ue"). |
1407
- | `microsoft/az-case-fixable` | `boolean` -> `Boolean` | Not proper-noun (question 2, found during this sweep): lowercase `boolean` is the REQUIRED spelling of the OpenAPI/JSON Schema type name (`"type": "boolean"`) — exactly Redocly's own domain — and auto-capitalizing it would corrupt extremely common, completely correct schema prose. |
1402
+ | Rule | Pair(s) flipped | Real proper noun that collides |
1403
+ | ---------------------------- | ------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
1404
+ | `microsoft/usa-abbreviation` | `USA`/`U.S.A.`/`U.S.` -> `US` (all 3) | "USA Gymnastics" (US national governing body), "U.S. Bank" (top-10 US bank), "U.S.A. Track and Field" (national governing body), "U.S. Steel" — named brief case. |
1405
+ | `microsoft/us-spelling` | `centre`/`centres` -> `center`/`centers` | "Bell Centre" (Montreal Canadiens' arena, official English spelling) and "Centre County, Pennsylvania" (a real US county whose OWN official name keeps the British "re"). |
1406
+ | `microsoft/us-spelling` | `catalogue`/`catalogues` -> `catalog`/`catalogs` | "Catalogue of Life" (a real, commonly-cited global species database whose own name is spelled with the British "ue"). |
1407
+ | `microsoft/az-case-fixable` | `boolean` -> `Boolean` | Not proper-noun (question 2, found during this sweep): lowercase `boolean` is the REQUIRED spelling of the OpenAPI/JSON Schema type name (`"type": "boolean"`) — exactly Redocly's own domain — and auto-capitalizing it would corrupt extremely common, completely correct schema prose. |
1408
1408
 
1409
1409
  **4 pairs swept out of the 113 live `swap` pairs, all moved to a
1410
1410
  detection-only sibling rather than anchored** — `microsoft/us-spelling`
@@ -1434,6 +1434,7 @@ round of anchor-then-leak was not worth it for pairs this marginal.
1434
1434
  `fix: false` was preferred over an anchor for every pair this wave found.
1435
1435
 
1436
1436
  #### `aka` was misclassified, not newly found unsafe (recorded here for
1437
+
1437
1438
  cross-reference; the pair itself lives in `recheck/google`)
1438
1439
 
1439
1440
  Expanding an abbreviation into a phrase is a substitution, not a
@@ -1491,7 +1492,7 @@ RISING hit rate after three rounds of narrowing, spanning every category
1491
1492
  the three axes above treated as clean:
1492
1493
 
1493
1494
  - **Spelling**, believed the safest category of all: Hemingway's real,
1494
- correctly spelled published title *A Moveable Feast* is corrected to "A
1495
+ correctly spelled published title _A Moveable Feast_ is corrected to "A
1495
1496
  Movable Feast" by this preset's own `microsoft/az-grammar-usage`'s
1496
1497
  `moveable` → `movable` pair — a genuine same-word normalization by every
1497
1498
  axis above (axis 1 passes, axis 2 finds no unrelated sense, axis 3 finds
@@ -1513,10 +1514,8 @@ the three axes above treated as clean:
1513
1514
 
1514
1515
  Full round-5 acceptance evidence (these sentences and more, run through
1515
1516
  `--fix` twice and confirmed byte-identical) lives in
1516
- `src/config/__tests__/preset-detection-only-acceptance.test.ts`, plus the
1517
- per-preset regression suites in `preset-microsoft.test.ts` and
1518
- `preset-google-fix-wave-c.test.ts` (both rewritten by this change to assert
1519
- "unchanged" where they used to assert a real rewrite). The `consistency`
1517
+ `src/config/__tests__/presets.test.ts` (the "detection-only" contract), plus the
1518
+ per-preset suites in `preset-microsoft.test.ts` and `preset-google.test.ts`. The `consistency`
1520
1519
  engine bug this same change fixed — `it's`/`it is` collapsing into one
1521
1520
  meaning via first-seen-wins, live since Phase 1 and reproduced exactly by
1522
1521
  this preset's `microsoft/contraction-consistency` rule with
@@ -1528,9 +1527,9 @@ preset.
1528
1527
 
1529
1528
  #### The conclusion this decision rests on
1530
1529
 
1531
- A rule's *category* — spelling, hyphenation, casing, word-choice — does not
1532
- predict fix-safety at this scale. A style guide states *intent* ("use X to
1533
- mean Y"); a `swap`/`consistency`/`pattern` rule matches *tokens* (literal
1530
+ A rule's _category_ — spelling, hyphenation, casing, word-choice — does not
1531
+ predict fix-safety at this scale. A style guide states _intent_ ("use X to
1532
+ mean Y"); a `swap`/`consistency`/`pattern` rule matches _tokens_ (literal
1534
1533
  text, regardless of the grammatical role or referent that text has in a
1535
1534
  given sentence). That gap is not closable by inventing a fourth, fifth, or
1536
1535
  sixth axis: axis 1 (guidance-shape) closed the space of pairs where the