chaffjs 0.20.0 → 0.21.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 (567) hide show
  1. package/README.md +5 -4
  2. package/dist/api.d.ts +16 -1
  3. package/dist/api.d.ts.map +1 -1
  4. package/dist/api.js.map +1 -1
  5. package/dist/cli-text.d.ts +2 -0
  6. package/dist/cli-text.d.ts.map +1 -1
  7. package/dist/cli-text.js +14 -5
  8. package/dist/cli-text.js.map +1 -1
  9. package/dist/cli.d.ts.map +1 -1
  10. package/dist/cli.js +4 -0
  11. package/dist/cli.js.map +1 -1
  12. package/dist/command-help.d.ts +7 -0
  13. package/dist/command-help.d.ts.map +1 -0
  14. package/dist/command-help.js +18 -0
  15. package/dist/command-help.js.map +1 -0
  16. package/dist/commands/eval.js +2 -2
  17. package/dist/commands/eval.js.map +1 -1
  18. package/dist/commands/fix-plan.d.ts.map +1 -1
  19. package/dist/commands/fix-plan.js +11 -1
  20. package/dist/commands/fix-plan.js.map +1 -1
  21. package/dist/commands/help.d.ts +4 -0
  22. package/dist/commands/help.d.ts.map +1 -0
  23. package/dist/commands/help.js +7 -0
  24. package/dist/commands/help.js.map +1 -0
  25. package/dist/config/load.d.ts +2 -0
  26. package/dist/config/load.d.ts.map +1 -1
  27. package/dist/config/load.js +1 -0
  28. package/dist/config/load.js.map +1 -1
  29. package/dist/config/option-problems.js +2 -2
  30. package/dist/config/option-problems.js.map +1 -1
  31. package/dist/config/rule-problems.js +2 -2
  32. package/dist/config/rule-problems.js.map +1 -1
  33. package/dist/custom/checked.d.ts +9 -0
  34. package/dist/custom/checked.d.ts.map +1 -0
  35. package/dist/custom/checked.js +3 -0
  36. package/dist/custom/checked.js.map +1 -0
  37. package/dist/custom/dsl-fields.d.ts +27 -0
  38. package/dist/custom/dsl-fields.d.ts.map +1 -0
  39. package/dist/custom/dsl-fields.js +86 -0
  40. package/dist/custom/dsl-fields.js.map +1 -0
  41. package/dist/custom/load.d.ts.map +1 -1
  42. package/dist/custom/load.js +2 -0
  43. package/dist/custom/load.js.map +1 -1
  44. package/dist/custom/parse.d.ts +14 -3
  45. package/dist/custom/parse.d.ts.map +1 -1
  46. package/dist/custom/parse.js +44 -40
  47. package/dist/custom/parse.js.map +1 -1
  48. package/dist/custom/problems.d.ts.map +1 -1
  49. package/dist/custom/problems.js +11 -1
  50. package/dist/custom/problems.js.map +1 -1
  51. package/dist/detectors/blank-structure.d.ts.map +1 -1
  52. package/dist/detectors/blank-structure.js +6 -4
  53. package/dist/detectors/blank-structure.js.map +1 -1
  54. package/dist/detectors/clause-shape.d.ts +22 -0
  55. package/dist/detectors/clause-shape.d.ts.map +1 -0
  56. package/dist/detectors/clause-shape.js +149 -0
  57. package/dist/detectors/clause-shape.js.map +1 -0
  58. package/dist/detectors/code-fences.d.ts +34 -0
  59. package/dist/detectors/code-fences.d.ts.map +1 -0
  60. package/dist/detectors/code-fences.js +100 -0
  61. package/dist/detectors/code-fences.js.map +1 -0
  62. package/dist/detectors/cross-definitions.d.ts +4 -0
  63. package/dist/detectors/cross-definitions.d.ts.map +1 -0
  64. package/dist/detectors/cross-definitions.js +43 -0
  65. package/dist/detectors/cross-definitions.js.map +1 -0
  66. package/dist/detectors/cross-facts.d.ts +4 -0
  67. package/dist/detectors/cross-facts.d.ts.map +1 -0
  68. package/dist/detectors/cross-facts.js +53 -0
  69. package/dist/detectors/cross-facts.js.map +1 -0
  70. package/dist/detectors/cross-registry/cross-doc-duplicate-definition.d.ts +3 -0
  71. package/dist/detectors/cross-registry/cross-doc-duplicate-definition.d.ts.map +1 -0
  72. package/dist/detectors/cross-registry/cross-doc-duplicate-definition.js +3 -0
  73. package/dist/detectors/cross-registry/cross-doc-duplicate-definition.js.map +1 -0
  74. package/dist/detectors/cross-registry/cross-doc-fact-conflict.d.ts +3 -0
  75. package/dist/detectors/cross-registry/cross-doc-fact-conflict.d.ts.map +1 -0
  76. package/dist/detectors/cross-registry/cross-doc-fact-conflict.js +3 -0
  77. package/dist/detectors/cross-registry/cross-doc-fact-conflict.js.map +1 -0
  78. package/dist/detectors/custom.d.ts.map +1 -1
  79. package/dist/detectors/custom.js +4 -1
  80. package/dist/detectors/custom.js.map +1 -1
  81. package/dist/detectors/defined-term-form.d.ts +25 -0
  82. package/dist/detectors/defined-term-form.d.ts.map +1 -0
  83. package/dist/detectors/defined-term-form.js +170 -0
  84. package/dist/detectors/defined-term-form.js.map +1 -0
  85. package/dist/detectors/email-letter.d.ts +46 -0
  86. package/dist/detectors/email-letter.d.ts.map +1 -0
  87. package/dist/detectors/email-letter.js +234 -0
  88. package/dist/detectors/email-letter.js.map +1 -0
  89. package/dist/detectors/impossible-date.d.ts +20 -0
  90. package/dist/detectors/impossible-date.d.ts.map +1 -0
  91. package/dist/detectors/impossible-date.js +105 -0
  92. package/dist/detectors/impossible-date.js.map +1 -0
  93. package/dist/detectors/impossible-time.d.ts +18 -0
  94. package/dist/detectors/impossible-time.d.ts.map +1 -0
  95. package/dist/detectors/impossible-time.js +116 -0
  96. package/dist/detectors/impossible-time.js.map +1 -0
  97. package/dist/detectors/link-shape.d.ts +11 -0
  98. package/dist/detectors/link-shape.d.ts.map +1 -0
  99. package/dist/detectors/link-shape.js +56 -0
  100. package/dist/detectors/link-shape.js.map +1 -0
  101. package/dist/detectors/mark-shape.d.ts +53 -0
  102. package/dist/detectors/mark-shape.d.ts.map +1 -0
  103. package/dist/detectors/mark-shape.js +160 -0
  104. package/dist/detectors/mark-shape.js.map +1 -0
  105. package/dist/detectors/registry/adverb-polarity.d.ts +3 -0
  106. package/dist/detectors/registry/adverb-polarity.d.ts.map +1 -0
  107. package/dist/detectors/registry/adverb-polarity.js +3 -0
  108. package/dist/detectors/registry/adverb-polarity.js.map +1 -0
  109. package/dist/detectors/registry/attachment-missing.d.ts +3 -0
  110. package/dist/detectors/registry/attachment-missing.d.ts.map +1 -0
  111. package/dist/detectors/registry/attachment-missing.js +3 -0
  112. package/dist/detectors/registry/attachment-missing.js.map +1 -0
  113. package/dist/detectors/registry/bare-url-mix.d.ts +3 -0
  114. package/dist/detectors/registry/bare-url-mix.d.ts.map +1 -0
  115. package/dist/detectors/registry/bare-url-mix.js +3 -0
  116. package/dist/detectors/registry/bare-url-mix.js.map +1 -0
  117. package/dist/detectors/registry/caps-shouting.d.ts +3 -0
  118. package/dist/detectors/registry/caps-shouting.d.ts.map +1 -0
  119. package/dist/detectors/registry/caps-shouting.js +3 -0
  120. package/dist/detectors/registry/caps-shouting.js.map +1 -0
  121. package/dist/detectors/registry/code-fence-language.d.ts +3 -0
  122. package/dist/detectors/registry/code-fence-language.d.ts.map +1 -0
  123. package/dist/detectors/registry/code-fence-language.js +3 -0
  124. package/dist/detectors/registry/code-fence-language.js.map +1 -0
  125. package/dist/detectors/registry/defined-name-repeated.d.ts +3 -0
  126. package/dist/detectors/registry/defined-name-repeated.d.ts.map +1 -0
  127. package/dist/detectors/registry/defined-name-repeated.js +3 -0
  128. package/dist/detectors/registry/defined-name-repeated.js.map +1 -0
  129. package/dist/detectors/registry/defined-term-form.d.ts +3 -0
  130. package/dist/detectors/registry/defined-term-form.d.ts.map +1 -0
  131. package/dist/detectors/registry/defined-term-form.js +3 -0
  132. package/dist/detectors/registry/defined-term-form.js.map +1 -0
  133. package/dist/detectors/registry/email-frame.d.ts +3 -0
  134. package/dist/detectors/registry/email-frame.d.ts.map +1 -0
  135. package/dist/detectors/registry/email-frame.js +3 -0
  136. package/dist/detectors/registry/email-frame.js.map +1 -0
  137. package/dist/detectors/registry/email-subject.d.ts +3 -0
  138. package/dist/detectors/registry/email-subject.d.ts.map +1 -0
  139. package/dist/detectors/registry/email-subject.js +3 -0
  140. package/dist/detectors/registry/email-subject.js.map +1 -0
  141. package/dist/detectors/registry/ending-run.d.ts +3 -0
  142. package/dist/detectors/registry/ending-run.d.ts.map +1 -0
  143. package/dist/detectors/registry/ending-run.js +3 -0
  144. package/dist/detectors/registry/ending-run.js.map +1 -0
  145. package/dist/detectors/registry/heading-command.d.ts +3 -0
  146. package/dist/detectors/registry/heading-command.d.ts.map +1 -0
  147. package/dist/detectors/registry/heading-command.js +3 -0
  148. package/dist/detectors/registry/heading-command.js.map +1 -0
  149. package/dist/detectors/registry/hyphen-dash.d.ts +3 -0
  150. package/dist/detectors/registry/hyphen-dash.d.ts.map +1 -0
  151. package/dist/detectors/registry/hyphen-dash.js +3 -0
  152. package/dist/detectors/registry/hyphen-dash.js.map +1 -0
  153. package/dist/detectors/registry/image-file-name-alt.d.ts +3 -0
  154. package/dist/detectors/registry/image-file-name-alt.d.ts.map +1 -0
  155. package/dist/detectors/registry/image-file-name-alt.js +3 -0
  156. package/dist/detectors/registry/image-file-name-alt.js.map +1 -0
  157. package/dist/detectors/registry/impossible-date.d.ts +3 -0
  158. package/dist/detectors/registry/impossible-date.d.ts.map +1 -0
  159. package/dist/detectors/registry/impossible-date.js +3 -0
  160. package/dist/detectors/registry/impossible-date.js.map +1 -0
  161. package/dist/detectors/registry/impossible-time.d.ts +3 -0
  162. package/dist/detectors/registry/impossible-time.d.ts.map +1 -0
  163. package/dist/detectors/registry/impossible-time.js +3 -0
  164. package/dist/detectors/registry/impossible-time.js.map +1 -0
  165. package/dist/detectors/registry/latin-abbreviation.d.ts +3 -0
  166. package/dist/detectors/registry/latin-abbreviation.d.ts.map +1 -0
  167. package/dist/detectors/registry/latin-abbreviation.js +3 -0
  168. package/dist/detectors/registry/latin-abbreviation.js.map +1 -0
  169. package/dist/detectors/registry/link-text-url-mismatch.d.ts +3 -0
  170. package/dist/detectors/registry/link-text-url-mismatch.d.ts.map +1 -0
  171. package/dist/detectors/registry/link-text-url-mismatch.js +3 -0
  172. package/dist/detectors/registry/link-text-url-mismatch.js.map +1 -0
  173. package/dist/detectors/registry/mark-consistency.d.ts +3 -0
  174. package/dist/detectors/registry/mark-consistency.d.ts.map +1 -0
  175. package/dist/detectors/registry/mark-consistency.js +3 -0
  176. package/dist/detectors/registry/mark-consistency.js.map +1 -0
  177. package/dist/detectors/registry/origin-particle.d.ts +3 -0
  178. package/dist/detectors/registry/origin-particle.d.ts.map +1 -0
  179. package/dist/detectors/registry/origin-particle.js +3 -0
  180. package/dist/detectors/registry/origin-particle.js.map +1 -0
  181. package/dist/detectors/registry/request-without-deadline.d.ts +3 -0
  182. package/dist/detectors/registry/request-without-deadline.d.ts.map +1 -0
  183. package/dist/detectors/registry/request-without-deadline.js +3 -0
  184. package/dist/detectors/registry/request-without-deadline.js.map +1 -0
  185. package/dist/detectors/registry/sentence-spacing.d.ts +3 -0
  186. package/dist/detectors/registry/sentence-spacing.d.ts.map +1 -0
  187. package/dist/detectors/registry/sentence-spacing.js +3 -0
  188. package/dist/detectors/registry/sentence-spacing.js.map +1 -0
  189. package/dist/detectors/registry/shell-prompt.d.ts +3 -0
  190. package/dist/detectors/registry/shell-prompt.d.ts.map +1 -0
  191. package/dist/detectors/registry/shell-prompt.js +3 -0
  192. package/dist/detectors/registry/shell-prompt.js.map +1 -0
  193. package/dist/detectors/registry/step-statement.d.ts +3 -0
  194. package/dist/detectors/registry/step-statement.d.ts.map +1 -0
  195. package/dist/detectors/registry/step-statement.js +3 -0
  196. package/dist/detectors/registry/step-statement.js.map +1 -0
  197. package/dist/detectors/registry/unpaired-parallel.d.ts +3 -0
  198. package/dist/detectors/registry/unpaired-parallel.d.ts.map +1 -0
  199. package/dist/detectors/registry/unpaired-parallel.js +3 -0
  200. package/dist/detectors/registry/unpaired-parallel.js.map +1 -0
  201. package/dist/detectors/request-owner.d.ts +23 -0
  202. package/dist/detectors/request-owner.d.ts.map +1 -0
  203. package/dist/detectors/request-owner.js +110 -0
  204. package/dist/detectors/request-owner.js.map +1 -0
  205. package/dist/detectors/technical-docs.d.ts +32 -0
  206. package/dist/detectors/technical-docs.d.ts.map +1 -0
  207. package/dist/detectors/technical-docs.js +199 -0
  208. package/dist/detectors/technical-docs.js.map +1 -0
  209. package/dist/extension/pack-read.d.ts +21 -0
  210. package/dist/extension/pack-read.d.ts.map +1 -0
  211. package/dist/extension/pack-read.js +117 -0
  212. package/dist/extension/pack-read.js.map +1 -0
  213. package/dist/extension/plugin-load.d.ts.map +1 -1
  214. package/dist/extension/plugin-load.js +44 -10
  215. package/dist/extension/plugin-load.js.map +1 -1
  216. package/dist/extension/plugin-parse.d.ts.map +1 -1
  217. package/dist/extension/plugin-parse.js +10 -3
  218. package/dist/extension/plugin-parse.js.map +1 -1
  219. package/dist/facts/address-values.d.ts +5 -0
  220. package/dist/facts/address-values.d.ts.map +1 -0
  221. package/dist/facts/address-values.js +64 -0
  222. package/dist/facts/address-values.js.map +1 -0
  223. package/dist/facts/cross-facts.d.ts +20 -0
  224. package/dist/facts/cross-facts.d.ts.map +1 -0
  225. package/dist/facts/cross-facts.js +41 -0
  226. package/dist/facts/cross-facts.js.map +1 -0
  227. package/dist/fix-plan/chosen-depth.d.ts +10 -0
  228. package/dist/fix-plan/chosen-depth.d.ts.map +1 -0
  229. package/dist/fix-plan/chosen-depth.js +24 -0
  230. package/dist/fix-plan/chosen-depth.js.map +1 -0
  231. package/dist/fix-plan/mode.d.ts +13 -4
  232. package/dist/fix-plan/mode.d.ts.map +1 -1
  233. package/dist/fix-plan/mode.js +38 -7
  234. package/dist/fix-plan/mode.js.map +1 -1
  235. package/dist/fix-plan/plan.d.ts +20 -0
  236. package/dist/fix-plan/plan.d.ts.map +1 -1
  237. package/dist/fix-plan/plan.js +23 -5
  238. package/dist/fix-plan/plan.js.map +1 -1
  239. package/dist/fix-plan/render.d.ts.map +1 -1
  240. package/dist/fix-plan/render.js +24 -0
  241. package/dist/fix-plan/render.js.map +1 -1
  242. package/dist/fix-plan/text.d.ts +8 -0
  243. package/dist/fix-plan/text.d.ts.map +1 -1
  244. package/dist/fix-plan/text.js +36 -10
  245. package/dist/fix-plan/text.js.map +1 -1
  246. package/dist/genre-load.d.ts +1 -1
  247. package/dist/genre-load.d.ts.map +1 -1
  248. package/dist/genre-load.js +7 -4
  249. package/dist/genre-load.js.map +1 -1
  250. package/dist/genre-parse.d.ts +6 -0
  251. package/dist/genre-parse.d.ts.map +1 -1
  252. package/dist/genre-parse.js +18 -0
  253. package/dist/genre-parse.js.map +1 -1
  254. package/dist/init.js +10 -10
  255. package/dist/init.js.map +1 -1
  256. package/dist/known-genres.d.ts +8 -0
  257. package/dist/known-genres.d.ts.map +1 -0
  258. package/dist/known-genres.js +17 -0
  259. package/dist/known-genres.js.map +1 -0
  260. package/dist/link-shape.d.ts +20 -0
  261. package/dist/link-shape.d.ts.map +1 -0
  262. package/dist/link-shape.js +58 -0
  263. package/dist/link-shape.js.map +1 -0
  264. package/dist/reasons.d.ts.map +1 -1
  265. package/dist/reasons.js +15 -4
  266. package/dist/reasons.js.map +1 -1
  267. package/dist/render/explain.d.ts.map +1 -1
  268. package/dist/render/explain.js +11 -2
  269. package/dist/render/explain.js.map +1 -1
  270. package/dist/render/friendly.js +1 -1
  271. package/dist/render/friendly.js.map +1 -1
  272. package/dist/render/rules-json.d.ts.map +1 -1
  273. package/dist/render/rules-json.js +12 -3
  274. package/dist/render/rules-json.js.map +1 -1
  275. package/dist/render/rules-table.js +6 -6
  276. package/dist/render/rules-table.js.map +1 -1
  277. package/dist/render/semantic.js +2 -2
  278. package/dist/render/semantic.js.map +1 -1
  279. package/dist/render/suppressions.js +2 -2
  280. package/dist/render/suppressions.js.map +1 -1
  281. package/dist/rewrite-depth.d.ts +22 -0
  282. package/dist/rewrite-depth.d.ts.map +1 -0
  283. package/dist/rewrite-depth.js +42 -0
  284. package/dist/rewrite-depth.js.map +1 -0
  285. package/dist/rule-fields.d.ts +23 -0
  286. package/dist/rule-fields.d.ts.map +1 -0
  287. package/dist/rule-fields.js +64 -0
  288. package/dist/rule-fields.js.map +1 -0
  289. package/dist/rule-guide.d.ts +3 -0
  290. package/dist/rule-guide.d.ts.map +1 -1
  291. package/dist/rule-guide.js +6 -0
  292. package/dist/rule-guide.js.map +1 -1
  293. package/dist/rule-load.d.ts.map +1 -1
  294. package/dist/rule-load.js +13 -5
  295. package/dist/rule-load.js.map +1 -1
  296. package/dist/rule-offs.d.ts +14 -0
  297. package/dist/rule-offs.d.ts.map +1 -0
  298. package/dist/rule-offs.js +45 -0
  299. package/dist/rule-offs.js.map +1 -0
  300. package/dist/structure/build.d.ts.map +1 -1
  301. package/dist/structure/build.js +14 -1
  302. package/dist/structure/build.js.map +1 -1
  303. package/dist/structure/cross-definitions.d.ts +23 -0
  304. package/dist/structure/cross-definitions.d.ts.map +1 -0
  305. package/dist/structure/cross-definitions.js +34 -0
  306. package/dist/structure/cross-definitions.js.map +1 -0
  307. package/genres.yaml +14 -313
  308. package/package.json +3 -3
  309. package/rules/absolute-exception.yaml +3 -1
  310. package/rules/abstract-length.yaml +7 -1
  311. package/rules/acronym-expansion-conflict.yaml +2 -1
  312. package/rules/adverb-overuse.yaml +7 -1
  313. package/rules/adverb-without-negation.yaml +60 -0
  314. package/rules/adversative-ga-repeat.yaml +2 -1
  315. package/rules/agentless-passive.yaml +10 -1
  316. package/rules/agreement-slip.yaml +4 -1
  317. package/rules/ai-generated-composite.yaml +6 -1
  318. package/rules/ai-structure.yaml +8 -2
  319. package/rules/ai-tell.yaml +7 -1
  320. package/rules/all-caps-shouting.yaml +61 -0
  321. package/rules/announced-count-mismatch.yaml +3 -1
  322. package/rules/announcing-opener.yaml +7 -1
  323. package/rules/article-sound.yaml +6 -2
  324. package/rules/assistant-residue.yaml +4 -1
  325. package/rules/attachment-not-attached.yaml +112 -0
  326. package/rules/baito-keigo.yaml +64 -0
  327. package/rules/bare-url-mix.yaml +86 -0
  328. package/rules/bold-density.yaml +1 -0
  329. package/rules/bold-label-list.yaml +9 -1
  330. package/rules/bracket-nesting.yaml +2 -1
  331. package/rules/bracket-width-consistency.yaml +64 -0
  332. package/rules/broken-link.yaml +1 -1
  333. package/rules/chat-citation-residue.yaml +2 -1
  334. package/rules/citation-reference-mismatch.yaml +7 -1
  335. package/rules/citation-style-mix.yaml +7 -1
  336. package/rules/clause-chain.yaml +6 -1
  337. package/rules/closing-cliche.yaml +7 -0
  338. package/rules/code-fence-language-mix.yaml +176 -0
  339. package/rules/colloquial-opener.yaml +62 -0
  340. package/rules/colon-lead-in.yaml +7 -1
  341. package/rules/concrete-evidence-density.yaml +6 -0
  342. package/rules/contraction-consistency.yaml +4 -1
  343. package/rules/contrast-framing.yaml +7 -1
  344. package/rules/cross-doc-duplicate-definition.yaml +70 -0
  345. package/rules/cross-doc-fact-conflict.yaml +64 -0
  346. package/rules/cushion-phrase-density.yaml +8 -1
  347. package/rules/dangling-figure-reference.yaml +3 -1
  348. package/rules/dangling-reference.yaml +3 -1
  349. package/rules/date-format-consistency.yaml +3 -2
  350. package/rules/date-order.yaml +3 -1
  351. package/rules/date-range-reversed.yaml +3 -1
  352. package/rules/date-weekday-mismatch.yaml +3 -1
  353. package/rules/date-without-year.yaml +4 -3
  354. package/rules/defined-name-repeated.yaml +97 -0
  355. package/rules/defined-term-form.yaml +113 -0
  356. package/rules/demonstrative-opener-run.yaml +2 -1
  357. package/rules/double-keigo.yaml +6 -1
  358. package/rules/double-negative.yaml +5 -1
  359. package/rules/doubled-nado.yaml +2 -1
  360. package/rules/doubled-punctuation.yaml +1 -1
  361. package/rules/doubled-word.yaml +4 -1
  362. package/rules/duplicate-definition.yaml +3 -1
  363. package/rules/duplicate-heading.yaml +1 -1
  364. package/rules/duration-mismatch.yaml +2 -1
  365. package/rules/elapsed-years-mismatch.yaml +4 -1
  366. package/rules/email-greeting-closing.yaml +122 -0
  367. package/rules/email-subject-length.yaml +112 -0
  368. package/rules/emoji-density.yaml +3 -1
  369. package/rules/emoji-heading.yaml +7 -1
  370. package/rules/empty-intensifier.yaml +4 -0
  371. package/rules/empty-list-item.yaml +2 -1
  372. package/rules/empty-section.yaml +1 -1
  373. package/rules/empty-table-cell.yaml +2 -1
  374. package/rules/excessive-hedging.yaml +7 -1
  375. package/rules/exclamation-width-consistency.yaml +64 -0
  376. package/rules/expletive-construction.yaml +7 -1
  377. package/rules/fact-conflict.yaml +4 -1
  378. package/rules/figure-reference-order.yaml +7 -1
  379. package/rules/fullwidth-alnum-consistency.yaml +2 -2
  380. package/rules/hankaku-kana.yaml +1 -1
  381. package/rules/heading-command-missing.yaml +109 -0
  382. package/rules/heading-echo.yaml +6 -1
  383. package/rules/heading-level-skip.yaml +3 -3
  384. package/rules/heading-numbering-mix.yaml +4 -3
  385. package/rules/hiragana-fukushi.yaml +4 -1
  386. package/rules/homophone-slip.yaml +5 -1
  387. package/rules/humble-for-others.yaml +63 -0
  388. package/rules/hyphen-as-dash.yaml +59 -0
  389. package/rules/idiom-misuse.yaml +4 -1
  390. package/rules/image-file-name-alt.yaml +83 -0
  391. package/rules/impossible-date.yaml +79 -0
  392. package/rules/impossible-time.yaml +76 -0
  393. package/rules/internal-jargon.yaml +1 -1
  394. package/rules/invisible-character.yaml +1 -1
  395. package/rules/katakana-density.yaml +2 -1
  396. package/rules/katakana-long-vowel.yaml +1 -1
  397. package/rules/known-misspelling.yaml +2 -1
  398. package/rules/kutoten-consistency.yaml +1 -1
  399. package/rules/latin-abbreviation-form.yaml +58 -0
  400. package/rules/latin-spacing.yaml +6 -2
  401. package/rules/link-text-url-mismatch.yaml +72 -0
  402. package/rules/list-item-form-mix.yaml +7 -1
  403. package/rules/max-kanji-continuous.yaml +10 -2
  404. package/rules/max-paragraph-length.yaml +4 -1
  405. package/rules/max-sentence-length.yaml +29 -21
  406. package/rules/max-ten.yaml +4 -1
  407. package/rules/misconversion.yaml +2 -1
  408. package/rules/modal-conflict.yaml +2 -1
  409. package/rules/name-variant.yaml +4 -3
  410. package/rules/ngram-repetition.yaml +5 -0
  411. package/rules/no-doubled-joshi.yaml +5 -1
  412. package/rules/no-em-dash.yaml +4 -1
  413. package/rules/no-lead.yaml +6 -1
  414. package/rules/no-mixed-desumasu.yaml +5 -2
  415. package/rules/no-nakaguro-parallel.yaml +3 -0
  416. package/rules/nominalization.yaml +5 -1
  417. package/rules/number-style-consistency.yaml +6 -1
  418. package/rules/number-without-unit.yaml +2 -1
  419. package/rules/numbering-gap.yaml +1 -1
  420. package/rules/one-sentence-paragraph-run.yaml +5 -1
  421. package/rules/orthographic-variant.yaml +4 -1
  422. package/rules/outside-announced-list.yaml +2 -1
  423. package/rules/oxford-comma-consistency.yaml +3 -1
  424. package/rules/padded-intro.yaml +7 -0
  425. package/rules/paragraph-length-variance.yaml +7 -1
  426. package/rules/paragraph-restatement.yaml +6 -1
  427. package/rules/percent-sum-mismatch.yaml +3 -1
  428. package/rules/person-consistency.yaml +4 -1
  429. package/rules/preamble-length.yaml +6 -0
  430. package/rules/preferred-term.yaml +1 -1
  431. package/rules/proper-noun-density.yaml +8 -1
  432. package/rules/quote-style-consistency.yaml +66 -0
  433. package/rules/ra-nuki.yaml +4 -1
  434. package/rules/redundant-expression.yaml +4 -1
  435. package/rules/reference-title-mismatch.yaml +4 -3
  436. package/rules/reference-topic-missing.yaml +2 -1
  437. package/rules/relative-date-mismatch.yaml +2 -1
  438. package/rules/repeated-conjunction.yaml +4 -1
  439. package/rules/repeated-sentence-ending.yaml +62 -0
  440. package/rules/repeated-sentence-head.yaml +4 -0
  441. package/rules/request-without-deadline.yaml +92 -0
  442. package/rules/required-sections.yaml +1 -1
  443. package/rules/requirement-modal.yaml +1 -1
  444. package/rules/requirement-smell.yaml +12 -4
  445. package/rules/rule-of-three.yaml +8 -1
  446. package/rules/sasete-itadaku.yaml +7 -1
  447. package/rules/section-length-uniformity.yaml +7 -1
  448. package/rules/sentence-initial-conjunction-run.yaml +5 -1
  449. package/rules/sentence-initial-so.yaml +6 -1
  450. package/rules/sentence-rhythm.yaml +8 -1
  451. package/rules/sentence-spacing-consistency.yaml +63 -0
  452. package/rules/shell-prompt-mix.yaml +128 -0
  453. package/rules/space-before-punctuation.yaml +1 -1
  454. package/rules/spelling-consistency.yaml +3 -1
  455. package/rules/step-statement-mix.yaml +76 -0
  456. package/rules/stock-transition.yaml +8 -1
  457. package/rules/stray-space.yaml +2 -2
  458. package/rules/summary-fact-mismatch.yaml +4 -1
  459. package/rules/table-header-variant.yaml +2 -1
  460. package/rules/taigen-dome-in-prose.yaml +6 -0
  461. package/rules/tari-unpaired.yaml +58 -0
  462. package/rules/teki-overuse.yaml +2 -1
  463. package/rules/title-case-consistency.yaml +1 -1
  464. package/rules/title-length.yaml +7 -1
  465. package/rules/topic-predicate-distance.yaml +6 -1
  466. package/rules/total-mismatch.yaml +3 -1
  467. package/rules/translationese-density.yaml +4 -1
  468. package/rules/unbalanced-bracket.yaml +3 -3
  469. package/rules/undefined-acronym.yaml +8 -1
  470. package/rules/unfilled-placeholder.yaml +1 -1
  471. package/rules/unit-mismatch.yaml +2 -1
  472. package/rules/unknown-word.yaml +4 -1
  473. package/rules/unqualified-superlative.yaml +6 -1
  474. package/rules/unused-definition.yaml +4 -3
  475. package/rules/url-run-on.yaml +1 -1
  476. package/rules/use-before-definition.yaml +4 -3
  477. package/rules/vague-figure-reference.yaml +3 -1
  478. package/rules/vague-link-text.yaml +2 -1
  479. package/rules/vague-word-density.yaml +2 -1
  480. package/rules/very-adjective.yaml +5 -1
  481. package/rules/weasel-word.yaml +6 -1
  482. package/rules/wordy-phrase.yaml +6 -1
  483. package/rules/yori-as-from.yaml +61 -0
  484. package/src/api.ts +13 -1
  485. package/src/cli-text.ts +18 -7
  486. package/src/cli.ts +3 -0
  487. package/src/command-help.ts +26 -0
  488. package/src/commands/eval.ts +2 -2
  489. package/src/commands/fix-plan.ts +13 -1
  490. package/src/commands/help.ts +8 -0
  491. package/src/config/load.ts +3 -0
  492. package/src/config/option-problems.ts +2 -2
  493. package/src/config/rule-problems.ts +2 -2
  494. package/src/custom/checked.ts +8 -0
  495. package/src/custom/dsl-fields.ts +102 -0
  496. package/src/custom/load.ts +2 -0
  497. package/src/custom/parse.ts +72 -50
  498. package/src/custom/problems.ts +18 -2
  499. package/src/detectors/blank-structure.ts +12 -4
  500. package/src/detectors/clause-shape.ts +199 -0
  501. package/src/detectors/code-fences.ts +113 -0
  502. package/src/detectors/cross-definitions.ts +49 -0
  503. package/src/detectors/cross-facts.ts +60 -0
  504. package/src/detectors/cross-registry/cross-doc-duplicate-definition.ts +4 -0
  505. package/src/detectors/cross-registry/cross-doc-fact-conflict.ts +4 -0
  506. package/src/detectors/custom.ts +10 -2
  507. package/src/detectors/defined-term-form.ts +200 -0
  508. package/src/detectors/email-letter.ts +262 -0
  509. package/src/detectors/impossible-date.ts +141 -0
  510. package/src/detectors/impossible-time.ts +151 -0
  511. package/src/detectors/link-shape.ts +70 -0
  512. package/src/detectors/mark-shape.ts +202 -0
  513. package/src/detectors/registry/adverb-polarity.ts +4 -0
  514. package/src/detectors/registry/attachment-missing.ts +4 -0
  515. package/src/detectors/registry/bare-url-mix.ts +4 -0
  516. package/src/detectors/registry/caps-shouting.ts +4 -0
  517. package/src/detectors/registry/code-fence-language.ts +4 -0
  518. package/src/detectors/registry/defined-name-repeated.ts +4 -0
  519. package/src/detectors/registry/defined-term-form.ts +4 -0
  520. package/src/detectors/registry/email-frame.ts +4 -0
  521. package/src/detectors/registry/email-subject.ts +4 -0
  522. package/src/detectors/registry/ending-run.ts +4 -0
  523. package/src/detectors/registry/heading-command.ts +4 -0
  524. package/src/detectors/registry/hyphen-dash.ts +4 -0
  525. package/src/detectors/registry/image-file-name-alt.ts +4 -0
  526. package/src/detectors/registry/impossible-date.ts +4 -0
  527. package/src/detectors/registry/impossible-time.ts +4 -0
  528. package/src/detectors/registry/latin-abbreviation.ts +4 -0
  529. package/src/detectors/registry/link-text-url-mismatch.ts +4 -0
  530. package/src/detectors/registry/mark-consistency.ts +4 -0
  531. package/src/detectors/registry/origin-particle.ts +4 -0
  532. package/src/detectors/registry/request-without-deadline.ts +4 -0
  533. package/src/detectors/registry/sentence-spacing.ts +4 -0
  534. package/src/detectors/registry/shell-prompt.ts +4 -0
  535. package/src/detectors/registry/step-statement.ts +4 -0
  536. package/src/detectors/registry/unpaired-parallel.ts +4 -0
  537. package/src/detectors/request-owner.ts +141 -0
  538. package/src/detectors/technical-docs.ts +230 -0
  539. package/src/extension/pack-read.ts +128 -0
  540. package/src/extension/plugin-load.ts +49 -9
  541. package/src/extension/plugin-parse.ts +10 -3
  542. package/src/facts/address-values.ts +74 -0
  543. package/src/facts/cross-facts.ts +54 -0
  544. package/src/fix-plan/chosen-depth.ts +28 -0
  545. package/src/fix-plan/mode.ts +57 -11
  546. package/src/fix-plan/plan.ts +37 -5
  547. package/src/fix-plan/render.ts +24 -0
  548. package/src/fix-plan/text.ts +47 -10
  549. package/src/genre-load.ts +7 -4
  550. package/src/genre-parse.ts +19 -0
  551. package/src/init.ts +10 -10
  552. package/src/known-genres.ts +19 -0
  553. package/src/link-shape.ts +62 -0
  554. package/src/reasons.ts +16 -4
  555. package/src/render/explain.ts +14 -2
  556. package/src/render/friendly.ts +1 -1
  557. package/src/render/rules-json.ts +14 -3
  558. package/src/render/rules-table.ts +6 -6
  559. package/src/render/semantic.ts +2 -2
  560. package/src/render/suppressions.ts +2 -2
  561. package/src/rewrite-depth.ts +60 -0
  562. package/src/rule-fields.ts +95 -0
  563. package/src/rule-guide.ts +9 -0
  564. package/src/rule-load.ts +10 -4
  565. package/src/rule-offs.ts +50 -0
  566. package/src/structure/build.ts +21 -1
  567. package/src/structure/cross-definitions.ts +60 -0
@@ -0,0 +1,72 @@
1
+ id: link-text-url-mismatch
2
+ layer: L1
3
+ status: stable
4
+ how_to_find: link-text-url-mismatch
5
+ requires: [markdown]
6
+ severity: warning
7
+
8
+ name:
9
+ ja: リンクの言葉の URL と行き先が違う
10
+ en: Link text shows one address, the link goes to another
11
+
12
+ why:
13
+ ja: 「[https://example.com/guide](https://other.example/page)」のように、リンクの言葉が URL で、その URL と実際の行き先のサイトが違うリンクです。読み手は見えている URL に行くつもりで押し、別のサイトに着きます。URL を書き換えたときに片方だけ直した跡であることが多く、なりすましの手口と同じ形でもあります。サイト(ホスト)が同じなら、短く見せた URL として指しません。
14
+ en: A link whose text is an address ("[https://example.com/guide](https://other.example/page)") that names a different site from where the link goes. The reader clicks expecting the address they see and lands somewhere else. It is usually what is left when a URL was changed in one place only, and it is also the shape phishing uses. When the site (host) is the same, a shortened display is not reported.
15
+
16
+ message:
17
+ ja: リンクの言葉は「{shown}」ですが、行き先は「{target}」です
18
+ en: 'The link text shows "{shown}" but the link goes to "{target}"'
19
+
20
+ how_to_fix:
21
+ ja: 言葉と行き先のどちらが正しいかを確かめ、もう一方を合わせてください。行き先の名前を言葉にすると、この食い違いは起きません([導入の手引き](https://…))。
22
+ en: Check which of the two is right and make the other match. Naming the target in words ("[the setup guide](https://…)") avoids the mismatch altogether.
23
+
24
+ levels: { strict: error, normal: warning, relaxed: info }
25
+
26
+ use_for: [business, technical, blog, legal, docs, academic, literature, speech]
27
+
28
+ group: slips
29
+ summary:
30
+ ja: 「[https://a.example](https://b.example)」のように、言葉に見える URL と行き先のサイトが違うリンク
31
+ en: A link whose text is a URL on one site and whose target is on another
32
+ example:
33
+ ja:
34
+ before: |
35
+ 新しい手引きは [https://docs.example.com/guide](https://old.example.net/guide) にあります。
36
+ after: |
37
+ 新しい手引きは [https://docs.example.com/guide](https://docs.example.com/guide) にあります。
38
+ en:
39
+ before: |
40
+ The new guide is at [https://docs.example.com/guide](https://old.example.net/guide) now.
41
+ after: |
42
+ The new guide is at [https://docs.example.com/guide](https://docs.example.com/guide) now.
43
+
44
+ not_flagged:
45
+ ja: 同じサイトの URL を短く見せたもの([github.com/a](https://github.com/a/b))、言葉が URL でないリンク、行き先が相対パスやページ内のリンク、参照の形のリンク([言葉][1])は指しません。www. の有無と大文字小文字は同じと読みます。
46
+ en: A shortened display of an address on the same site ("[github.com/a](https://github.com/a/b)"), link text that is not an address, relative or in-page targets, and reference-style links ("[text][1]") are not reported. "www." and letter case are ignored.
47
+ rewrite:
48
+ depth: light
49
+ ja:
50
+ direction: リンクの言葉と行き先のうち、正しいほうにもう一方を合わせてください。どちらが正しいか文から分からなければ、変えずに書き手に確かめます。
51
+ pairs:
52
+ - before: 手引きは [https://docs.example.com/guide](https://old.example.net/guide) にあります。
53
+ after: 手引きは [https://docs.example.com/guide](https://docs.example.com/guide) にあります。
54
+ - before: 申込は [www.example.jp/apply](https://example.org/apply) から。
55
+ after: 申込は [www.example.jp/apply](https://www.example.jp/apply) から。
56
+ keep:
57
+ - 文の言っていること
58
+ - 正しいほうの URL
59
+ avoid:
60
+ - どちらが正しいかを推し量って、両方を三つ目の URL に変える
61
+ en:
62
+ direction: Make the link text and the target agree, keeping whichever is right. If the text does not say which, leave it and ask the writer.
63
+ pairs:
64
+ - before: The guide is at [https://docs.example.com/guide](https://old.example.net/guide) now.
65
+ after: The guide is at [https://docs.example.com/guide](https://docs.example.com/guide) now.
66
+ - before: Apply at [www.example.com/apply](https://example.org/apply) today.
67
+ after: Apply at [www.example.com/apply](https://www.example.com/apply) today.
68
+ keep:
69
+ - what the sentence says
70
+ - the address that is right
71
+ avoid:
72
+ - guessing and changing both to a third address
@@ -1,6 +1,6 @@
1
1
  id: list-item-form-mix
2
2
  layer: L2
3
- status: experimental
3
+ status: stable
4
4
  how_to_find: list-item-form-mix
5
5
  requires: [pos]
6
6
  severity: info
@@ -39,6 +39,11 @@ how_to_fix:
39
39
  levels: { strict: 49, normal: 34, relaxed: 20 }
40
40
 
41
41
  use_for: [blog, business, technical, docs, academic, legal, literature, speech]
42
+ off_for:
43
+ legal: "An enumeration of conditions mixes 〜こと and 〜とき by what each condition is."
44
+ literature: "Length, rhythm, repetition and register are the author's choices in literature, and dialogue mixes styles. Only what one work can hold itself to runs: consistent spacing and commas, and numbering without gaps."
45
+ speech: "A speech opens with greetings and closes with thanks: that is its form, not padding."
46
+ business/meeting-notes: "Minutes jot points down as they come: a noun, a remark, a decision, side by side."
42
47
 
43
48
  group: consistency
44
49
  summary:
@@ -82,6 +87,7 @@ level_meaning:
82
87
  ja: 少ないほうの形が、箇条書きの項目の {limit}% 以下のとき指摘
83
88
  en: reported when the less common form is {limit}% of the list's items or less
84
89
  rewrite:
90
+ depth: light
85
91
  ja:
86
92
  direction: 少ないほうの項目を、同じ箇条書きのほかの項目の形にそろえてください。名詞で終わる並びなら名詞で、文で終わる並びなら文で終えます。項目の中身は変えません。
87
93
  pairs:
@@ -1,6 +1,6 @@
1
1
  id: max-kanji-continuous
2
2
  layer: L3
3
- status: experimental
3
+ status: stable
4
4
  how_to_find: kanji-run
5
5
  # 品詞があれば、住所(地名と数だけでできた連なり)と 1 つの名前(辞書の固有名詞 1 語、人の姓と名)を数えない。無くても文字だけで動く。
6
6
  uses: [pos]
@@ -8,7 +8,7 @@ uses: [pos]
8
8
  # 住所の先頭にしか来ない単位(都道府県)。地名の後ろに付けば、割られた町名ではなく地名の並び。
9
9
  extra_word_lists: [prefecture-unit]
10
10
  languages: [ja]
11
- severity: warning
11
+ severity: info
12
12
 
13
13
  name:
14
14
  ja: 漢字が続きすぎている
@@ -28,7 +28,15 @@ how_to_fix:
28
28
 
29
29
  levels: { strict: 6, normal: 8, relaxed: 12 }
30
30
 
31
+ # ビジネス文書、特にお知らせは、組織名や制度名を漢字のまま並べる。既定の上限では group の文書の過半に出たので、測って上げた(spec §21.1)。
32
+ by_genre:
33
+ business: { strict: 8, normal: 10, relaxed: 14 }
34
+
31
35
  use_for: [blog, business, technical, legal, docs, academic, literature, speech]
36
+ off_for:
37
+ legal: "Legal drafting repeats its terms and its sentence heads on purpose, puts the actor in the passive (shall be deemed), and joins long noun compounds (個人情報取扱事業者). This rule would only flag the form."
38
+ literature: "Length, rhythm, repetition and register are the author's choices in literature, and dialogue mixes styles. Only what one work can hold itself to runs: consistent spacing and commas, and numbering without gaps."
39
+ speech/transcript: "A transcript records what was said: its sentences, repeats and register are the speaker's, not the writer's to fix."
32
40
  sources: [shibasaki-tamaoka-2010, lee-2016]
33
41
 
34
42
  group: readability
@@ -2,7 +2,7 @@ id: max-paragraph-length
2
2
  layer: L1
3
3
  status: stable
4
4
  how_to_find: paragraph-length
5
- severity: warning
5
+ severity: info
6
6
 
7
7
  name:
8
8
  ja: 段落が長すぎる
@@ -37,6 +37,9 @@ by_genre:
37
37
  academic: { strict: 5, normal: 9, relaxed: 12 }
38
38
 
39
39
  use_for: [blog, business, technical, legal, docs, academic, literature, speech]
40
+ off_for:
41
+ literature: "Length, rhythm, repetition and register are the author's choices in literature, and dialogue mixes styles. Only what one work can hold itself to runs: consistent spacing and commas, and numbering without gaps."
42
+ speech/transcript: "A transcript records what was said: its sentences, repeats and register are the speaker's, not the writer's to fix."
40
43
  sources: [gov-uk-clear-language]
41
44
 
42
45
  group: readability
@@ -2,7 +2,7 @@ id: max-sentence-length
2
2
  layer: L1
3
3
  status: stable
4
4
  how_to_find: sentence-length
5
- severity: warning
5
+ severity: info
6
6
 
7
7
  name:
8
8
  ja: 一文が長すぎる
@@ -34,28 +34,31 @@ levels:
34
34
  ja: { strict: 70, normal: 100, relaxed: 140 }
35
35
  en: { strict: 18, normal: 25, relaxed: 35 }
36
36
 
37
- # ジャンルで読まれかたが違う。spec §9 の初期値。
38
- # 社内メールの 1 文と随筆の 1 文に同じ上限を課すと、どちらかが必ず間違う。
37
+ # ジャンルで読まれかたが違う。社内メールの 1 文と随筆の 1 文に同じ上限を課すと、どちらかが必ず間違う。
38
+ # 技術文書・ブログ・ビジネス文書・説明書の normal は、人の書いた文書で測って置いた(spec §21.1、yarn rules:measure)。
39
+ # 既定の上限では group の文書の大半に出て、group ごと止まっていた。いまは過半を十分下回るが、info で出る線は超える。
39
40
  by_genre:
41
+ technical:
42
+ ja: { strict: 100, normal: 140, relaxed: 180 }
43
+ en: { strict: 30, normal: 40, relaxed: 50 }
44
+ blog:
45
+ ja: { strict: 120, normal: 160, relaxed: 200 }
46
+ en: { strict: 30, normal: 40, relaxed: 50 }
47
+ blog/essay:
48
+ ja: { strict: 140, normal: 180, relaxed: 220 }
49
+ en: { strict: 35, normal: 45, relaxed: 55 }
50
+ business:
51
+ ja: { strict: 100, normal: 140, relaxed: 180 }
52
+ en: { strict: 35, normal: 45, relaxed: 55 }
53
+ # メールは短く書く。spec §9 の初期値のまま、他のビジネス文書より上限を低く置く。
40
54
  business/email:
41
55
  ja: { strict: 50, normal: 70, relaxed: 100 }
42
56
  en: { strict: 12, normal: 18, relaxed: 25 }
43
- business/meeting-notes:
44
- ja: { strict: 60, normal: 80, relaxed: 110 }
45
- en: { strict: 14, normal: 20, relaxed: 28 }
46
- business/proposal:
47
- ja: { strict: 65, normal: 90, relaxed: 125 }
48
- en: { strict: 16, normal: 22, relaxed: 30 }
49
- business/press-release:
50
- ja: { strict: 65, normal: 90, relaxed: 125 }
51
- en: { strict: 16, normal: 22, relaxed: 30 }
52
- blog/essay:
57
+ docs:
53
58
  ja: { strict: 100, normal: 140, relaxed: 180 }
54
- en: { strict: 25, normal: 35, relaxed: 45 }
55
- blog/owned-media:
56
- ja: { strict: 65, normal: 90, relaxed: 125 }
57
- en: { strict: 16, normal: 22, relaxed: 30 }
59
+ en: { strict: 30, normal: 40, relaxed: 50 }
58
60
  # 法令・契約・判決・論文は、長い一文がその種類の書き方。corpus のその種類の文書で、normal が最も長い一握りの文だけを指すように測って置いた。
61
+ # 法務は、この上限でも文書の過半に出るので既定では動かない(genres.yaml)。
59
62
  legal:
60
63
  ja: { strict: 120, normal: 200, relaxed: 300 }
61
64
  en: { strict: 40, normal: 60, relaxed: 80 }
@@ -65,14 +68,18 @@ by_genre:
65
68
  legal/judgment:
66
69
  ja: { strict: 250, normal: 350, relaxed: 450 }
67
70
  # 英語の定義は、限定を重ねた名詞句の一文になる。英語の用語集で測り、normal が列挙を詰めた定義や長い注記だけを指すように置いた。
68
- # 日本語は既定の上限のままで、すでに最も長い一握りだけを指していた。
71
+ # 日本語は説明書の上限のまま。
69
72
  docs/glossary:
70
- en: { strict: 30, normal: 40, relaxed: 50 }
73
+ en: { strict: 40, normal: 50, relaxed: 60 }
71
74
  academic:
72
75
  ja: { strict: 100, normal: 140, relaxed: 180 }
73
76
  en: { strict: 35, normal: 50, relaxed: 65 }
74
77
 
75
78
  use_for: [blog, business, technical, legal, docs, academic, literature, speech]
79
+ off_for:
80
+ literature: "Length, rhythm, repetition and register are the author's choices in literature, and dialogue mixes styles. Only what one work can hold itself to runs: consistent spacing and commas, and numbering without gaps."
81
+ speech/transcript: "A transcript records what was said: its sentences, repeats and register are the speaker's, not the writer's to fix."
82
+ legal: measured by yarn rules:measure
76
83
  sources: [shibasaki-tamaoka-2010, yasashii-nihongo-2020, koyobun-2022, gov-uk-clear-language]
77
84
 
78
85
  group: readability
@@ -82,9 +89,9 @@ summary:
82
89
  example:
83
90
  ja:
84
91
  before: |
85
- 新しい料金体系は先週の会議で営業部から提案があったもので来月から試験的に導入することになりましたが、既存の顧客への説明のしかたと請求システムを直す時期がまだ決まっていないため、担当者を決めたうえで今週中に進め方を相談したいと考えています。
92
+ 新しい料金体系は先週の会議で営業部から提案があったもので来月から試験的に導入することになりましたが、既存の顧客への説明のしかたと請求システムを直す時期がまだ決まっておらず、社内の手引きを書き直す人もまだ決まっていないため、担当者を決めたうえで今週中に進め方を相談したいと考えています。
86
93
  after: |
87
- 新しい料金体系を、来月から試験的に導入します。既存の顧客への説明のしかたと、請求システムを直す時期はまだ決まっていません。今週中に担当者を決め、進め方を相談します。
94
+ 新しい料金体系を、来月から試験的に導入します。既存の顧客への説明のしかたと、請求システムを直す時期はまだ決まっていません。社内の手引きを書き直す人も未定です。今週中に担当者を決め、進め方を相談します。
88
95
  en:
89
96
  before: |
90
97
  The new pricing, which the sales team proposed at last week's meeting, will be trialled from next month, but because we have not yet decided how to explain it to existing customers or when to change the billing system, we would like to agree on a plan this week.
@@ -98,6 +105,7 @@ level_meaning:
98
105
  ja: 一文 {limit} 字まで
99
106
  en: up to {limit} words in a sentence
100
107
  rewrite:
108
+ depth: light
101
109
  ja:
102
110
  direction: 接続助詞(〜が、〜ので、〜し)か「、そして」の所で二文に割り、二文目にも主語を書いてください。
103
111
  pairs:
@@ -1,6 +1,6 @@
1
1
  id: max-ten
2
2
  layer: L3
3
- status: experimental
3
+ status: stable
4
4
  how_to_find: sentence-comma-count
5
5
  word_list: ten-mark
6
6
  requires: [pos]
@@ -26,6 +26,8 @@ how_to_fix:
26
26
  levels: { strict: 4, normal: 6, relaxed: 8 }
27
27
 
28
28
  use_for: [business, technical, blog, legal, docs, academic, literature, speech]
29
+ off_for:
30
+ legal: measured by yarn rules:measure
29
31
 
30
32
  group: readability
31
33
  summary:
@@ -45,6 +47,7 @@ level_meaning:
45
47
  ja: 一文の読点 {limit} 個まで
46
48
  en: up to {limit} commas in a sentence
47
49
  rewrite:
50
+ depth: light
48
51
  ja:
49
52
  direction: 読点の多い文を、意味の切れ目で二つ以上の文に分けてください。読点を消すだけにはしません。
50
53
  pairs:
@@ -1,6 +1,6 @@
1
1
  id: misconversion
2
2
  layer: L2
3
- status: experimental
3
+ status: stable
4
4
  how_to_find: known-correction
5
5
  word_list: misconversion
6
6
  uses: [pos]
@@ -48,6 +48,7 @@ not_flagged:
48
48
  ja: 前後の語で決まらない取り違えは指しません(「以外と」だけでは「日本以外と比べて」と区別できないので、「以外と簡単」「以外と多い」のように後ろの語まで語彙表に書いたものだけを探します)。語の途中には当てません。
49
49
  en: A swap the surrounding words do not settle is not reported (以外と alone also appears in 日本以外と比べて, so only listed phrases such as 以外と簡単 are looked for). A form inside a longer word is not reported.
50
50
  rewrite:
51
+ depth: light
51
52
  ja:
52
53
  direction: 指された語を正しい字に直してください。直すのは取り違えた語だけで、文の言い回しは変えません。
53
54
  pairs:
@@ -1,6 +1,6 @@
1
1
  id: modal-conflict
2
2
  layer: L3
3
- status: experimental
3
+ status: stable
4
4
  how_to_find: modal-conflict
5
5
  requires: [structure, pos]
6
6
  severity: warning
@@ -80,6 +80,7 @@ not_flagged:
80
80
  ja: 中身の語(名詞・動詞・形容詞)がまったく同じ二つの文だけを比べます。様相の語を二つ以上持つ文と、中身の語が一つしか無い文は見ません。「しなければならない」と「することができる」は食い違いと見ません。
81
81
  en: Only two sentences with exactly the same content words (nouns, verbs, adjectives) are compared. A sentence with two or more modal markers, or with fewer than two content words, is not checked. "Must" and "may" are not counted as a conflict.
82
82
  rewrite:
83
+ depth: light
83
84
  ja:
84
85
  direction: どちらの文が正しいかを書き手に確かめてください。両方が正しいなら、それぞれの条件や例外を本文から書き足して範囲を分けます。本文に条件が無ければ作らず、書き手に聞きます。
85
86
  pairs:
@@ -1,9 +1,9 @@
1
1
  id: name-variant
2
2
  layer: L3
3
- status: experimental
3
+ status: stable
4
4
  how_to_find: name-variant
5
5
  requires: [pos]
6
- severity: warning
6
+ severity: info
7
7
 
8
8
  name:
9
9
  ja: 同じ名前の書き分け
@@ -40,7 +40,7 @@ placeholders:
40
40
  ja: 別の形
41
41
  en: another form
42
42
 
43
- levels: { strict: error, normal: warning, relaxed: info }
43
+ levels: { strict: warning, normal: info, relaxed: info }
44
44
 
45
45
  use_for: [business, technical, blog, legal, docs, academic, literature, speech]
46
46
 
@@ -64,6 +64,7 @@ not_flagged:
64
64
  ja: 品詞解析が固有名詞と読んだ語だけを見ます。大文字だけの名前(ACME INC、NASA)は見ません。一字違いの英字の名前は、6 字以上で、多いほうが二度以上、少ないほうが一度だけのときに限ります(Iran と Iraq は別の名前)。
65
65
  en: Only words the tagger reads as proper nouns are checked. Names in capitals only (ACME INC, NASA) are left out. Names one letter apart are reported only when six letters or longer, with the usual form used at least twice and the other once (Iran and Iraq are different names).
66
66
  rewrite:
67
+ depth: light
67
68
  ja:
68
69
  direction: 少ないほうの形を、多いほうの形に替えてください。どちらが正しいか本文から分からなければ、書き手に聞きます。別の人や会社なら替えません。
69
70
  pairs:
@@ -25,6 +25,11 @@ how_to_fix:
25
25
  levels: { strict: 3, normal: 5, relaxed: 9 }
26
26
 
27
27
  use_for: [blog, business, technical, legal, docs, academic, literature, speech]
28
+ off_for:
29
+ legal: "Legal drafting repeats its terms and its sentence heads on purpose, puts the actor in the passive (shall be deemed), and joins long noun compounds (個人情報取扱事業者). This rule would only flag the form."
30
+ literature: "Length, rhythm, repetition and register are the author's choices in literature, and dialogue mixes styles. Only what one work can hold itself to runs: consistent spacing and commas, and numbering without gaps."
31
+ docs/glossary: "A reader looks up one entry and reads only that. A definition is a noun phrase (風の吹いてくる方向。), and sibling entries share one wording on purpose (Portion of labor productivity change attributed to …), which no reader sees twice."
32
+ speech/transcript: "A transcript records what was said: its sentences, repeats and register are the speaker's, not the writer's to fix."
28
33
 
29
34
  group: readability
30
35
  summary:
@@ -5,7 +5,7 @@ how_to_find: doubled-particle
5
5
  word_list: nesting-particle
6
6
  requires: [pos]
7
7
  languages: [ja]
8
- severity: warning
8
+ severity: info
9
9
 
10
10
  name:
11
11
  ja: 同じ助詞が入れ子で続いている
@@ -26,6 +26,10 @@ how_to_fix:
26
26
  levels: { strict: 1, normal: 2, relaxed: 3 }
27
27
 
28
28
  use_for: [blog, business, technical, legal, docs, academic, literature, speech]
29
+ off_for:
30
+ legal: "Legal drafting repeats its terms and its sentence heads on purpose, puts the actor in the passive (shall be deemed), and joins long noun compounds (個人情報取扱事業者). This rule would only flag the form."
31
+ literature: "Length, rhythm, repetition and register are the author's choices in literature, and dialogue mixes styles. Only what one work can hold itself to runs: consistent spacing and commas, and numbering without gaps."
32
+ speech/transcript: "A transcript records what was said: its sentences, repeats and register are the speaker's, not the writer's to fix."
29
33
  sources: [yamamoto-cheng-2015]
30
34
 
31
35
  group: readability
@@ -1,6 +1,6 @@
1
1
  id: no-em-dash
2
2
  layer: L1
3
- status: experimental
3
+ status: stable
4
4
  how_to_find: dash-density
5
5
 
6
6
  # 記号の許容度は言語で違う。英語では正当な用法が多く、日本語の組版では扱いが難しい。spec §12.4。
@@ -30,6 +30,8 @@ levels:
30
30
  en: { strict: 3, normal: 8, relaxed: 20 }
31
31
 
32
32
  use_for: [blog, business, technical, legal, docs, academic, literature, speech]
33
+ off_for:
34
+ literature: "Length, rhythm, repetition and register are the author's choices in literature, and dialogue mixes styles. Only what one work can hold itself to runs: consistent spacing and commas, and numbering without gaps."
33
35
  sources: [freeburg-2026]
34
36
 
35
37
  group: ai-tells
@@ -57,6 +59,7 @@ level_meaning:
57
59
  ja: 1000 字あたりダッシュ {limit} 個まで
58
60
  en: up to {limit} dashes per 1000 words
59
61
  rewrite:
62
+ depth: light
60
63
  ja:
61
64
  direction: 挟み込みのダッシュは括弧に、言い換えや補足のダッシュは読点に替えるか、二文に分けてください。
62
65
  pairs:
@@ -1,6 +1,6 @@
1
1
  id: no-lead
2
2
  layer: L1
3
- status: experimental
3
+ status: stable
4
4
  how_to_find: no-lead
5
5
  requires: [pos]
6
6
  severity: info
@@ -25,6 +25,10 @@ how_to_fix:
25
25
  levels: { strict: 6, normal: 5, relaxed: 3 }
26
26
 
27
27
  use_for: [blog, business, technical, docs, academic, legal, literature, speech]
28
+ off_for:
29
+ legal: "A statute or contract opens with its first article, and its titles are formal names."
30
+ literature: "A story or poem chooses its own opening and its own title."
31
+ speech: "An address or a transcript is titled by occasion (第221回国会における…演説) and opens as spoken."
28
32
 
29
33
  group: structure
30
34
  summary:
@@ -59,6 +63,7 @@ level_meaning:
59
63
  ja: 題に無い内容語が {limit} 個より少ないとき指摘
60
64
  en: reported when the lead adds fewer than {limit} content words the title does not have
61
65
  rewrite:
66
+ depth: structure
62
67
  ja:
63
68
  direction: リードを、題だけでは分からないことから書き直してください。結論・数字・対象・時期のうち、本文にあるものを一つか二つ前に出します。題の語を繰り返して「〜について説明します」と予告する文は消します。
64
69
  pairs:
@@ -1,12 +1,12 @@
1
1
  id: no-mixed-desumasu
2
2
  layer: L3
3
- status: experimental
3
+ status: stable
4
4
  how_to_find: sentence-ending
5
5
  word_list: polite-ending
6
6
  extra_word_lists: [neutral-ending]
7
7
  requires: [pos]
8
8
  languages: [ja]
9
- severity: warning
9
+ severity: info
10
10
 
11
11
  name:
12
12
  ja: 文末の調子が混ざっている
@@ -34,6 +34,9 @@ how_to_fix:
34
34
  levels: { strict: 5, normal: 3, relaxed: 1 }
35
35
 
36
36
  use_for: [blog, business, technical, legal, docs, academic, literature, speech]
37
+ off_for:
38
+ literature: "Length, rhythm, repetition and register are the author's choices in literature, and dialogue mixes styles. Only what one work can hold itself to runs: consistent spacing and commas, and numbering without gaps."
39
+ speech/transcript: "A transcript records what was said: its sentences, repeats and register are the speaker's, not the writer's to fix."
37
40
  sources: [yasashii-nihongo-2020, koyobun-2022, jtf-style-guide]
38
41
 
39
42
  group: consistency
@@ -25,6 +25,9 @@ how_to_fix:
25
25
  levels: { strict: 3, normal: 5, relaxed: 8 }
26
26
 
27
27
  use_for: [blog, business, technical, legal, docs, academic, literature, speech]
28
+ off_for:
29
+ literature: "Length, rhythm, repetition and register are the author's choices in literature, and dialogue mixes styles. Only what one work can hold itself to runs: consistent spacing and commas, and numbering without gaps."
30
+ speech/transcript: "A transcript records what was said: its sentences, repeats and register are the speaker's, not the writer's to fix."
28
31
 
29
32
  group: readability
30
33
  summary:
@@ -1,6 +1,6 @@
1
1
  id: nominalization
2
2
  layer: L3
3
- status: experimental
3
+ status: stable
4
4
  how_to_find: nominalization
5
5
  # 動詞を名詞にして別の動詞に運ばせる言い方。英語は語の並び(nominalization-phrase)、日本語はサ変名詞(品詞の VerbForm=Vnoun)と、
6
6
  # その後ろの「を実施する」(nominalization-light-verb)で見る。片方しか持たない言語があるので word_list には書かない(書くと、無い言語で動かなくなる)。
@@ -34,6 +34,9 @@ placeholders:
34
34
  levels: { strict: 1, normal: 2, relaxed: 4 }
35
35
 
36
36
  use_for: [business, technical, blog, legal, docs, academic, literature, speech]
37
+ off_for:
38
+ legal: 'Legal drafting writes 「…を行う」 and "make a payment" as its register; the corpus statutes are full of them.'
39
+ literature: "Length, rhythm, repetition and register are the author's choices in literature, and dialogue mixes styles. Only what one work can hold itself to runs: consistent spacing and commas, and numbering without gaps."
37
40
  sources: [yasashii-nihongo-2020, plain-2011, gov-uk-clear-language, reinhart-2025]
38
41
 
39
42
  group: wording
@@ -61,6 +64,7 @@ level_meaning:
61
64
  ja: 1000 字あたり「〜を実施する」のような名詞化した動詞 {limit} 個まで
62
65
  en: up to {limit} nominalized verbs ("make a decision") per 1000 words
63
66
  rewrite:
67
+ depth: light
64
68
  ja:
65
69
  direction: 「〜を実施する」「〜を行う」の名詞を動詞に戻し、運び役の動詞を消してください。誰がしたのかが書かれていれば、その人を主語に残します。
66
70
  pairs:
@@ -1,6 +1,6 @@
1
1
  id: number-style-consistency
2
2
  layer: L2
3
- status: experimental
3
+ status: stable
4
4
  how_to_find: number-style-consistency
5
5
  uses: [pos]
6
6
  severity: info
@@ -42,6 +42,10 @@ how_to_fix:
42
42
  levels: { strict: 49, normal: 34, relaxed: 20 }
43
43
 
44
44
  use_for: [blog, business, technical, docs, academic, legal, literature, speech]
45
+ off_for:
46
+ legal: "Drafting writes a number twice on purpose: thirty (30) days."
47
+ literature: "A narrator spells out numbers in dialogue and writes figures in a date."
48
+ speech: "Spoken numbers are transcribed as heard."
45
49
 
46
50
  group: consistency
47
51
  summary:
@@ -69,6 +73,7 @@ level_meaning:
69
73
  ja: 少ないほうの書き方が、その種類の数の {limit}% 以下のとき指摘
70
74
  en: reported when the less common style is {limit}% of its kind or less
71
75
  rewrite:
76
+ depth: light
72
77
  ja:
73
78
  direction: 少ないほうの書き方の数を、文書の多いほうの書き方に直してください。数そのものと単位は変えません。
74
79
  pairs:
@@ -1,6 +1,6 @@
1
1
  id: number-without-unit
2
2
  layer: L1
3
- status: experimental
3
+ status: stable
4
4
  how_to_find: number-without-unit
5
5
  severity: warning
6
6
 
@@ -68,6 +68,7 @@ not_flagged:
68
68
  ja: ほかの値に二つ以上、同じ一つの単位が付いているときだけ指します。単位の無い値のほうが多い列、単位が混ざる列(分と時間)、数でない値(未定)は見ません。表の見出しの単位(「金額(円)」)は読みません。
69
69
  en: Reported only when at least two other values carry one and the same unit. A column where bare numbers are the majority, one that mixes units (minutes and hours), and values that are not numbers (TBD) are not checked. A unit written in the header ("Amount ($)") is not read.
70
70
  rewrite:
71
+ depth: light
71
72
  ja:
72
73
  direction: 指摘された数に、同じ列や同じ見出しの語のほかの値と同じ単位を付けてください。単位が違うはずなら、作らずに書き手に聞きます。
73
74
  pairs:
@@ -1,6 +1,6 @@
1
1
  id: numbering-gap
2
2
  layer: L3
3
- status: experimental
3
+ status: stable
4
4
  how_to_find: numbering-gap
5
5
  requires: [structure]
6
6
  severity: error
@@ -1,6 +1,6 @@
1
1
  id: one-sentence-paragraph-run
2
2
  layer: L3
3
- status: experimental
3
+ status: stable
4
4
  how_to_find: one-sentence-paragraph-run
5
5
  severity: info
6
6
 
@@ -23,6 +23,9 @@ how_to_fix:
23
23
  levels: { strict: 3, normal: 4, relaxed: 6 }
24
24
 
25
25
  use_for: [business, technical, blog, legal, docs, academic, literature, speech]
26
+ off_for:
27
+ legal: "A clause, a definition or a claim is a paragraph of one sentence by form."
28
+ literature: "Dialogue and verse set each line apart."
26
29
 
27
30
  group: readability
28
31
  summary:
@@ -67,6 +70,7 @@ level_meaning:
67
70
  ja: 一文だけの段落の連続 {limit} 個まで
68
71
  en: up to {limit} one-sentence paragraphs in a row
69
72
  rewrite:
73
+ depth: structure
70
74
  ja:
71
75
  direction: 同じ話の文を一つの段落にまとめてください。並べた項目なら箇条書きにします。文の中身と順序は変えません。
72
76
  pairs:
@@ -1,6 +1,6 @@
1
1
  id: orthographic-variant
2
2
  layer: L3
3
- status: experimental
3
+ status: stable
4
4
  how_to_find: orthographic-variant
5
5
  # 語の一覧は持たない。文書の中の語を、日本語は辞書の形の読み(出来る・できる はどちらもデキル)で、カタカナ語は小さい字と「ー」を
6
6
  # ならした形で、英字は大文字小文字とハイフンを外した形で束ね、同じ語の書き方が二つあれば少ないほうを指す。
@@ -36,6 +36,8 @@ placeholders:
36
36
  levels: { strict: 49, normal: 34, relaxed: 20 }
37
37
 
38
38
  use_for: [business, technical, blog, legal, docs, academic, literature, speech]
39
+ off_for:
40
+ literature: "A narrator may hedge, speak with ら dropped, and spell as the work's time and place did."
39
41
 
40
42
  group: consistency
41
43
  summary:
@@ -60,6 +62,7 @@ level_meaning:
60
62
  ja: 少ないほうが語の {limit}% 以下のとき指摘
61
63
  en: reported when the minority spelling is {limit}% of the word's uses or less
62
64
  rewrite:
65
+ depth: light
63
66
  ja:
64
67
  direction: 同じ語の書き方を、文書でいちばん多い書き方にそろえてください。意味の違う語に書き分けているなら、そのままにします。
65
68
  pairs:
@@ -1,6 +1,6 @@
1
1
  id: outside-announced-list
2
2
  layer: L3
3
- status: experimental
3
+ status: stable
4
4
  how_to_find: outside-announced-list
5
5
  requires: [pos]
6
6
  severity: warning
@@ -56,6 +56,7 @@ not_flagged:
56
56
  ja: 一覧を言う語(対応OSは、に対応、版)のすぐ隣に並べた固有名詞だけを読みます。最初に二つ以上の名前を挙げた文を一覧とし、それより前の文は見ません。組の違う語(対応する OS と、対応する言語)は比べません。
57
57
  en: Only proper nouns right next to a listing word (supported on, available in, version) are read. The first sentence naming two or more is the list, and earlier sentences are not checked. Words of different groups (platforms and languages) are not compared.
58
58
  rewrite:
59
+ depth: light
59
60
  ja:
60
61
  direction: 一覧と後の文のどちらが正しいかを書き手に確かめてください。後の文が正しければ一覧に名前を足し、一覧が正しければ後の文を直すか消します。
61
62
  pairs:
@@ -1,8 +1,10 @@
1
1
  id: oxford-comma-consistency
2
2
  layer: L3
3
- status: experimental
3
+ status: stable
4
4
  how_to_find: oxford-comma
5
5
  languages: [en]
6
+ # The list, its items and its conjunction are read on tokens; without them there is nothing to judge.
7
+ requires: [pos]
6
8
  extra_word_lists: [participle-word, example-marker, pair-opener]
7
9
  severity: info
8
10
 
@@ -30,6 +30,12 @@ levels:
30
30
 
31
31
  # プレスリリース・メール・議事録の冒頭は理由や用件を言う所で、つかみではない。
32
32
  use_for: [blog, business/report, business/proposal, legal, docs, academic, literature, speech]
33
+ off_for:
34
+ legal: "Legal drafting repeats its terms and its sentence heads on purpose, puts the actor in the passive (shall be deemed), and joins long noun compounds (個人情報取扱事業者). This rule would only flag the form."
35
+ docs: "A help page repeats its heading in its first line (To upload a file, ...) and states no claims to back up."
36
+ academic: "Science writes in the passive, hedges its claims on purpose (may, suggest) and cites numbers as its evidence."
37
+ literature: "Length, rhythm, repetition and register are the author's choices in literature, and dialogue mixes styles. Only what one work can hold itself to runs: consistent spacing and commas, and numbering without gaps."
38
+ speech: "A speech opens with greetings and closes with thanks: that is its form, not padding."
33
39
 
34
40
  group: wording
35
41
  summary:
@@ -50,6 +56,7 @@ level_meaning:
50
56
  ja: 当てはまる書き出しが {limit} 箇所あれば指摘
51
57
  en: reported once there are {limit}
52
58
  rewrite:
59
+ depth: light
53
60
  ja:
54
61
  direction: どの文書にも当てはまる書き出し(「近年、〜が注目されています」)を消し、この文書だけが扱う状況か主張から始めてください。それが本文に無ければ書き手に聞きます。
55
62
  pairs: