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
@@ -1,6 +1,6 @@
1
1
  id: sentence-initial-so
2
2
  layer: L2
3
- status: experimental
3
+ status: stable
4
4
  how_to_find: opener-pile
5
5
  word_list: so-opener
6
6
  requires: [pos]
@@ -26,6 +26,10 @@ how_to_fix:
26
26
  levels: { strict: 1, normal: 1, relaxed: 3 }
27
27
 
28
28
  use_for: [business, technical, blog, 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: 'A narrator and a character speak as they speak: dialect ("would of"), "So," and hearsay are the voice.'
32
+ speech: "A transcript keeps the speaker's words: hedges and ら dropped as spoken."
29
33
 
30
34
  group: wording
31
35
  summary:
@@ -45,6 +49,7 @@ level_meaning:
45
49
  ja: 「So,」で始まる文が {limit} 個あれば指摘
46
50
  en: reported once {limit} sentences open with "So,"
47
51
  rewrite:
52
+ depth: light
48
53
  en:
49
54
  direction: Delete the "So," at the head of the sentence. If the link to the last sentence is needed, use a word that says what it is.
50
55
  pairs:
@@ -1,6 +1,6 @@
1
1
  id: sentence-rhythm
2
2
  # 「AI 生成は文の長さが揃う」は未検証の仮説。corpus 評価まで既定では動かさない。spec §26-4。
3
- status: experimental
3
+ status: stable
4
4
  layer: L1
5
5
  how_to_find: sentence-rhythm
6
6
  severity: warning
@@ -28,6 +28,12 @@ levels:
28
28
  relaxed: 20
29
29
 
30
30
  use_for: [technical/readme, blog, legal, docs, academic, literature, speech]
31
+ off_for:
32
+ 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."
33
+ docs: "A help page repeats its heading in its first line (To upload a file, ...) and states no claims to back up."
34
+ academic: "Science writes in the passive, hedges its claims on purpose (may, suggest) and cites numbers as its evidence."
35
+ 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."
36
+ speech: "A speech opens with greetings and closes with thanks: that is its form, not padding."
31
37
  sources: [iwamoto-2026]
32
38
 
33
39
  group: readability
@@ -55,6 +61,7 @@ level_meaning:
55
61
  ja: 文の長さのばらつきが {limit}% 未満なら指摘
56
62
  en: reported when sentence length varies by less than {limit}%
57
63
  rewrite:
64
+ depth: light
58
65
  ja:
59
66
  direction: 長めの文のいくつかを、意味の切れ目で二つに割ってください。結論の文は短くします。言葉は足しません。
60
67
  pairs:
@@ -0,0 +1,63 @@
1
+ id: sentence-spacing-consistency
2
+ layer: L1
3
+ status: stable
4
+ how_to_find: sentence-spacing
5
+ languages: [en]
6
+ severity: info
7
+
8
+ name:
9
+ ja: 文と文のあいだの空白の数の混在
10
+ en: One and two spaces between sentences mixed
11
+
12
+ why:
13
+ ja: 英語で、文と文のあいだを一つの空白で空ける所と二つで空ける所が混ざっていると、別々の所から貼り合わせた文書に見えます。どちらが正しいかは決めません。同じ行の中の文の切れ目だけを数え、文書の中で少ないほうを指します。
14
+ en: Sentences separated by one space in some places and two in others make a document look pasted together. chaff does not pick a side; it counts only breaks between sentences on one line and points at the less common way.
15
+
16
+ message:
17
+ ja: 文のあいだに空白が {spaces} 個あります(この文書はふつう {usual} 個。{of} 箇所のうち {count} 箇所が違う)
18
+ en: "{spaces} {spaces|space|spaces} after this sentence, where the document usually leaves {usual} ({count} of {of})"
19
+
20
+ # 少ないほうが 5 箇所以上で、全体の 2 割を超えるとき。書き損じではなく書き方が二通りあるので、1 件にまとめて両方の数を言う。
21
+ messages:
22
+ mixed:
23
+ ja: "文のあいだを、空白二つで {spaced} 箇所、一つで {touching} 箇所空けています。この文書には空け方が二通りあります"
24
+ en: "Sentences are spaced two ways in this document ({spaced} with two spaces, {touching} with one)"
25
+
26
+ how_to_fix:
27
+ ja: 文書の多いほうの数に合わせてください。
28
+ en: Match the spacing the rest of the document uses.
29
+
30
+ levels: { strict: 1, normal: 1, relaxed: 3 }
31
+
32
+ use_for: [business, technical, blog, legal, docs, academic, literature, speech]
33
+
34
+ group: consistency
35
+ summary:
36
+ ja: 英語で、文と文のあいだの空白が一つの所と二つの所が混ざっている所
37
+ en: One space between sentences in some places and two in others
38
+ example:
39
+ en:
40
+ before: |
41
+ We met. We talked. We agreed. We left.
42
+ after: |
43
+ We met. We talked. We agreed. We left.
44
+
45
+ not_flagged:
46
+ ja: ピリオド・疑問符・感嘆符で終わる文と、同じ行で続く次の文のあいだだけを見ます。行末の空白(Markdown の改行)は見ません。
47
+ en: Only the space after a sentence ending in a period, question or exclamation mark, before the next sentence on the same line. Spaces at the end of a line (a Markdown line break) are not counted.
48
+ level_meaning:
49
+ ja: 少ないほうの空け方が {limit} 箇所あれば指摘
50
+ en: reported once the less common spacing appears {limit} times
51
+ rewrite:
52
+ depth: light
53
+ en:
54
+ direction: Change the marked gap between sentences to the number of spaces the rest of the document uses.
55
+ pairs:
56
+ - before: We agreed. We left.
57
+ after: We agreed. We left.
58
+ - before: The plan holds. The date moves.
59
+ after: The plan holds. The date moves.
60
+ keep:
61
+ - every word and mark
62
+ avoid:
63
+ - changing spaces inside sentences
@@ -0,0 +1,128 @@
1
+ id: shell-prompt-mix
2
+ layer: L1
3
+ status: stable
4
+ how_to_find: shell-prompt
5
+ requires: [markdown]
6
+ severity: info
7
+
8
+ name:
9
+ ja: シェルのコマンドにプロンプトを付けたり付けなかったりしている
10
+ en: Shell commands with and without a prompt
11
+
12
+ why:
13
+ ja: 「$ npm install」と「npm install」が一つの文書に混ざっていると、読み手は「$」まで打つのか迷い、コピーしたコマンドが動かないこともあります。シェルのブロック(```bash、```console)のうち、全部の行にプロンプト($)を付けたブロックと、一つも付けないブロックを比べ、少ないほうを指します。出力と一緒に書いたブロック(プロンプトのある行と無い行が混ざる)は見ません。どちらに揃えるかは決めません。
14
+ en: 'When "$ npm install" and "npm install" both appear in one document, the reader wonders whether to type the "$", and a copied command may fail. chaff compares shell blocks (```bash, ```console) whose every line has a prompt ($) with those where no line has one, and points at the fewer. A block that shows a command with its output (some lines prompted, some not) is not read. Which way is right is not decided.'
15
+
16
+ message:
17
+ ja: このブロックだけ、コマンドへのプロンプト($)の付け方がほかと違います(ほかの {majority} ブロック)
18
+ en: This block writes its commands with a prompt ($) differently from the other {majority} blocks
19
+
20
+ how_to_fix:
21
+ ja: 多いほうに揃えてください。コピーして使うコマンドなら、プロンプトを付けないほうが打ち間違えません。
22
+ en: Match the majority. For commands meant to be copied, leaving the prompt out avoids pasting it.
23
+
24
+ levels: { strict: 3, normal: 2, relaxed: 1 }
25
+
26
+ use_for: [technical, docs, blog, legal, academic, literature, speech]
27
+ off_for:
28
+ legal: "Code blocks, shell prompts, command headings and numbered steps belong to technical writing."
29
+ academic: "Code blocks, shell prompts, command headings and numbered steps belong to technical writing."
30
+ literature: "Code blocks, shell prompts, command headings and numbered steps belong to technical writing."
31
+ speech: "Code blocks, shell prompts, command headings and numbered steps belong to technical writing."
32
+
33
+ group: consistency
34
+ summary:
35
+ ja: シェルのブロックで、「$」のプロンプトを付けたコマンドと付けないコマンドが混ざっている所
36
+ en: Shell blocks that write commands with a "$" prompt in some places and without it in others
37
+ example:
38
+ ja:
39
+ config: { genre: docs/manual }
40
+ before: |
41
+ # 使い方
42
+
43
+ ```bash
44
+ npm install chaffjs
45
+ ```
46
+
47
+ ```bash
48
+ npx chaffjs init
49
+ ```
50
+
51
+ ```bash
52
+ $ npx chaffjs README.md
53
+ ```
54
+ after: |
55
+ # 使い方
56
+
57
+ ```bash
58
+ npm install chaffjs
59
+ ```
60
+
61
+ ```bash
62
+ npx chaffjs init
63
+ ```
64
+
65
+ ```bash
66
+ npx chaffjs README.md
67
+ ```
68
+ en:
69
+ config: { genre: docs/manual }
70
+ before: |
71
+ # Usage
72
+
73
+ ```bash
74
+ npm install chaffjs
75
+ ```
76
+
77
+ ```bash
78
+ npx chaffjs init
79
+ ```
80
+
81
+ ```bash
82
+ $ npx chaffjs README.md
83
+ ```
84
+ after: |
85
+ # Usage
86
+
87
+ ```bash
88
+ npm install chaffjs
89
+ ```
90
+
91
+ ```bash
92
+ npx chaffjs init
93
+ ```
94
+
95
+ ```bash
96
+ npx chaffjs README.md
97
+ ```
98
+
99
+ not_flagged:
100
+ ja: シェル以外の言語のブロック、言語名の無いブロック、コマンドと出力を一緒に書いたブロック、コメント(#)の行は見ません。少ないほうが {limit} ブロックを超えるときは使い分けとみなします。
101
+ en: Blocks in other languages or without a language, blocks that show a command with its output, and comment lines (#) are not read. When the fewer kind is more than {limit} blocks, it is taken as a choice.
102
+ level_meaning:
103
+ ja: 少ないほうの書き方が {limit} ブロック以下のとき指摘
104
+ en: reported when the fewer style appears in {limit} blocks or fewer
105
+ rewrite:
106
+ depth: light
107
+ ja:
108
+ direction: 指されたブロックのプロンプトを、文書の多いほうに揃えてください。付けない側に揃えるなら行の頭の「$ 」を消し、付ける側なら足します。コマンドそのものは変えません。
109
+ pairs:
110
+ - before: "$ npx chaffjs README.md"
111
+ after: "npx chaffjs README.md"
112
+ - before: "npm test"
113
+ after: "$ npm test"
114
+ keep:
115
+ - コマンドと引数
116
+ avoid:
117
+ - 出力の行にプロンプトを付ける
118
+ en:
119
+ direction: Bring the block's prompts in line with the document's majority. Toward no prompt, remove the "$ " at the start of each line; toward a prompt, add it. Leave the commands themselves unchanged.
120
+ pairs:
121
+ - before: "$ npx chaffjs README.md"
122
+ after: "npx chaffjs README.md"
123
+ - before: "npm test"
124
+ after: "$ npm test"
125
+ keep:
126
+ - the commands and their arguments
127
+ avoid:
128
+ - putting a prompt before an output line
@@ -1,6 +1,6 @@
1
1
  id: space-before-punctuation
2
2
  layer: L1
3
- status: experimental
3
+ status: stable
4
4
  how_to_find: space-before-punctuation
5
5
  languages: [en]
6
6
  severity: warning
@@ -1,6 +1,6 @@
1
1
  id: spelling-consistency
2
2
  layer: L3
3
- status: experimental
3
+ status: stable
4
4
  how_to_find: spelling-variety
5
5
  word_list: spelling-variant
6
6
  extra_word_lists: [spelling-ize]
@@ -27,6 +27,8 @@ how_to_fix:
27
27
  levels: { strict: 49, normal: 34, relaxed: 20 }
28
28
 
29
29
  use_for: [business, technical, blog, legal, docs, academic, literature, speech]
30
+ off_for:
31
+ literature: "A narrator may hedge, speak with ら dropped, and spell as the work's time and place did."
30
32
 
31
33
  group: consistency
32
34
  summary:
@@ -0,0 +1,76 @@
1
+ id: step-statement-mix
2
+ layer: L3
3
+ status: stable
4
+ how_to_find: step-statement
5
+ languages: [en]
6
+ requires: [pos]
7
+ severity: info
8
+
9
+ name:
10
+ ja: 手順の中に、指示でなく説明の文の手順がある
11
+ en: A step written as a statement among instructions
12
+
13
+ why:
14
+ ja: 番号を振った手順は、読み手がそのとおりに手を動かす指示です。「Open the app.」「Run the installer.」の中に「The installer asks for a password.」のような説明の文が混ざると、読み手はそれも自分のすることかと迷います。英語の番号付きの箇条書きで、主語と動詞で始まる項目(The installer asks、You click)が、動詞で始まる指示の項目より少ないとき、少ないほうを指します。日本語の手順の文末(〜します/〜してください と それ以外)は no-mixed-desumasu と list-item-form-mix が見るので、この rule は英語だけです。
15
+ en: 'A numbered procedure is a list of things for the reader to do. When "The installer asks for a password." sits among "Open the app." and "Run the installer.", the reader wonders whether that is a step to take too. In an English numbered list, chaff points at the few items that open with a subject and a verb (The installer asks, You click) among items that open with the verb. Japanese step endings (〜します / 〜してください against the rest) are checked by no-mixed-desumasu and list-item-form-mix, so this rule is for English only.'
16
+
17
+ message:
18
+ ja: この手順は、ほかの {count} 個の指示と違い、主語で始まる説明の文です
19
+ en: This step is a statement that opens with its subject, unlike the other {count} instructions
20
+
21
+ how_to_fix:
22
+ ja: 読み手のすることを命令の形で書いてください。結果の説明なら、前の手順の後ろの文にするか、手順の外に出します。
23
+ en: Write what the reader does, as an instruction. If it describes a result, make it a second sentence of the step before, or move it out of the list.
24
+
25
+ levels: { strict: 3, normal: 2, relaxed: 1 }
26
+
27
+ use_for: [technical, docs, blog, legal, academic, literature, speech]
28
+ off_for:
29
+ legal: "Code blocks, shell prompts, command headings and numbered steps belong to technical writing."
30
+ academic: "Code blocks, shell prompts, command headings and numbered steps belong to technical writing."
31
+ literature: "Code blocks, shell prompts, command headings and numbered steps belong to technical writing."
32
+ speech: "Code blocks, shell prompts, command headings and numbered steps belong to technical writing."
33
+
34
+ group: consistency
35
+ summary:
36
+ ja: 英語の番号付きの手順で、命令の形の項目の中に、主語で始まる説明の項目が混ざっている所
37
+ en: A numbered procedure that mixes a statement (The installer asks) into instructions (Run the installer)
38
+ example:
39
+ en:
40
+ config: { genre: docs/manual }
41
+ before: |
42
+ # Install
43
+
44
+ 1. Open the terminal on your computer.
45
+ 2. Run the installer from the downloads folder.
46
+ 3. The installer asks for your password.
47
+ 4. Restart the computer when it finishes.
48
+ after: |
49
+ # Install
50
+
51
+ 1. Open the terminal on your computer.
52
+ 2. Run the installer from the downloads folder.
53
+ 3. Type your password when the installer asks for it.
54
+ 4. Restart the computer when it finishes.
55
+
56
+ not_flagged:
57
+ ja: "番号の無い箇条書き、三つに満たない手順、指示が半分に満たない番号付きの箇条書き(用語と説明の一覧など)、短い項目(「Setup」)、動詞の前に札や前置きのある項目(「Guests: …」「On the left bar, select …」)、主語で始まる項目が {limit} 個を超えるか指示より多い手順は見ません。項目の最初の行の最初の文だけを見ます。"
58
+ en: 'Bulleted lists, procedures of fewer than three steps, numbered lists where instructions are half or fewer (a list of terms, say), short items ("Setup"), items with a label or an opening phrase before the verb ("Guests: …", "On the left bar, select …"), and procedures where statements are more than {limit} or not fewer than the instructions are not reported. Only the first sentence on each item''s own line is read.'
59
+ level_meaning:
60
+ ja: 説明の項目が {limit} 個以下で、指示の項目より少ないとき指摘
61
+ en: reported when {limit} or fewer steps are statements and they are fewer than the instructions
62
+ rewrite:
63
+ depth: light
64
+ en:
65
+ direction: Turn the statement into an instruction for the reader, with the verb first, or fold it into the step before as a second sentence. Keep what the step says happens; do not add steps.
66
+ pairs:
67
+ - before: 3. The installer asks for your password.
68
+ after: 3. Type your password when the installer asks for it.
69
+ - before: 2. You click Save to keep the file.
70
+ after: 2. Click Save to keep the file.
71
+ keep:
72
+ - the order of the steps
73
+ - the names of buttons, files and commands
74
+ avoid:
75
+ - adding a step the text does not have
76
+ - merging two steps the reader does separately
@@ -1,6 +1,6 @@
1
1
  id: stock-transition
2
2
  layer: L2
3
- status: experimental
3
+ status: stable
4
4
  how_to_find: stock-transition
5
5
  word_list: stock-transition
6
6
  uses: [pos]
@@ -28,6 +28,12 @@ levels:
28
28
  en: { strict: 4, normal: 6, relaxed: 10 }
29
29
 
30
30
  use_for: [technical/readme, blog, business, legal, docs, academic, literature, speech]
31
+ off_for:
32
+ 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."
33
+ docs: "A help page repeats its heading in its first line (To upload a file, ...) and states no claims to back up."
34
+ academic: "Science writes in the passive, hedges its claims on purpose (may, suggest) and cites numbers as its evidence."
35
+ 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."
36
+ speech: "A speech opens with greetings and closes with thanks: that is its form, not padding."
31
37
 
32
38
  group: ai-tells
33
39
  summary:
@@ -54,6 +60,7 @@ level_meaning:
54
60
  ja: 決まった接ぎで始まる文が 1000 字あたり {limit} 個まで
55
61
  en: up to {limit} sentences per 1000 words opening with a stock transition
56
62
  rewrite:
63
+ depth: light
57
64
  ja:
58
65
  direction: 文頭の接ぎの語を消して読み返してください。繋がりが分からなくなる所だけ、前の文との関係(理由、例外、順番)を言葉で書きます。
59
66
  pairs:
@@ -1,11 +1,11 @@
1
1
  id: stray-space
2
2
  layer: L3
3
- status: experimental
3
+ status: stable
4
4
  how_to_find: stray-space
5
5
  # どの境目が一続きの語句の中かは、語の品詞で決める。品詞が無ければ動かない。
6
6
  requires: [pos]
7
7
  languages: [ja]
8
- severity: warning
8
+ severity: info
9
9
 
10
10
  name:
11
11
  ja: 語句の途中に空白がある
@@ -1,6 +1,6 @@
1
1
  id: summary-fact-mismatch
2
2
  layer: L3
3
- status: experimental
3
+ status: stable
4
4
  how_to_find: summary-fact-mismatch
5
5
  requires: [quantities]
6
6
  uses: [pos]
@@ -25,6 +25,8 @@ how_to_fix:
25
25
  levels: { normal: warning, relaxed: info }
26
26
 
27
27
  use_for: [business, technical, blog, 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."
28
30
 
29
31
  group: facts
30
32
  summary:
@@ -70,6 +72,7 @@ not_flagged:
70
72
  ja: 本文に同じ項目の値が二通り以上あるとき(回ごと、対象ごとの値)は、要約がどれと合うべきか決まらないので言いません。単位の違う値、条件の付いた値(「3,000円から」)も比べません。
71
73
  en: When the body gives the item more than one value (per session, per group), which one the summary should match is not settled, so nothing is said. Values in different units and values with a condition ("from $300") are not compared.
72
74
  rewrite:
75
+ depth: light
73
76
  ja:
74
77
  direction: 要約と本文のどちらの値が正しいかを書き手に確かめ、もう一方を直してください。要約の値を本文から写すときは、単位と条件も一緒に写します。
75
78
  pairs:
@@ -1,6 +1,6 @@
1
1
  id: table-header-variant
2
2
  layer: L2
3
- status: experimental
3
+ status: stable
4
4
  how_to_find: table-header-variant
5
5
  requires: [markdown]
6
6
  severity: info
@@ -76,6 +76,7 @@ level_meaning:
76
76
  ja: 少ないほうの書き方が、その見出しの {limit}% 以下のとき指摘
77
77
  en: reported when the less common spelling is {limit}% of the header's uses or less
78
78
  rewrite:
79
+ depth: light
79
80
  ja:
80
81
  direction: 同じ欄の見出しを、文書の中で多いほうの書き方にそろえてください。表の中身と並びは変えません。
81
82
  pairs:
@@ -25,6 +25,11 @@ how_to_fix:
25
25
  levels: { strict: 2, normal: 4, relaxed: 8 }
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:
@@ -45,6 +50,7 @@ level_meaning:
45
50
  ja: 本文の体言止め {limit} 文まで
46
51
  en: up to {limit} noun-ending sentences in the body
47
52
  rewrite:
53
+ depth: light
48
54
  ja:
49
55
  direction: 本文で名詞で止めた文に、文書の文体に合わせた述語(です・ます、または、だ・である)を足してください。見出し、箇条書き、表はそのままにします。
50
56
  pairs:
@@ -0,0 +1,58 @@
1
+ id: tari-unpaired
2
+ layer: L3
3
+ status: stable
4
+ how_to_find: unpaired-parallel
5
+ word_list: paired-parallel
6
+ requires: [pos]
7
+ languages: [ja]
8
+ severity: info
9
+
10
+ name:
11
+ ja: 対にならない「〜たり」
12
+ en: A single 〜たり with no partner
13
+
14
+ why:
15
+ ja: 「〜たり」は「〜たり〜たりする」と対で並べる言い方です。「本を読んだり、映画を見ます」のように一つで止めて次の述語へ続けると、並べたはずのもう一つが抜け、何と何を並べたのかが読み手に分かりません。一つだけで例を挙げる「遅れたりする」「遅れたりもする」は正しいので指しません。
16
+ en: In Japanese, 〜たり lists actions in pairs (〜たり〜たりする). Used once and followed by another clause ("本を読んだり、映画を見ます"), the second half of the pair is missing. A single 〜たり closed by する (遅れたりする), which gives one example, is correct and not reported.
17
+
18
+ message:
19
+ ja: 「{word}」が一つだけで、対になる「〜たり」がありません
20
+ en: '"{word}" is used once, with no second 〜たり to pair with'
21
+
22
+ how_to_fix:
23
+ ja: 後ろの述語にも「〜たり」を付けて「する」で閉じてください(読んだり、映画を見ます → 読んだり、映画を見たりします)。
24
+ en: Add 〜たり to the second verb as well and close with する.
25
+
26
+ levels: { strict: warning, normal: info, relaxed: info }
27
+
28
+ use_for: [blog, business, technical, legal, docs, academic, literature, speech]
29
+ off_for:
30
+ literature: "Spoken 全然大丈夫, なので and より in a character's voice; classical verse has a たり that does not list."
31
+
32
+ group: wording
33
+ summary:
34
+ ja: 「本を読んだり、映画を見ます」のように、「〜たり」が一つで止まって対になっていない所
35
+ en: A Japanese 〜たり used once and followed by another clause, so its pair is missing
36
+ example:
37
+ ja:
38
+ before: |
39
+ 休日は本を読んだり、映画を見ます。
40
+ after: |
41
+ 休日は本を読んだり、映画を見たりします。
42
+
43
+ not_flagged:
44
+ ja: 一文に「〜たり」が二つ以上ある文と、一つでも「する」「もする」で閉じた文(遅れたりする)は指しません。「一日たりとも」の「たり」は並べる「たり」ではないので見ません。鉤括弧で引いた中は見ません。
45
+ en: Sentences with two or more 〜たり, and a single 〜たり closed by する (遅れたりする), are not reported. Nor is the たり of 一日たりとも, which does not list, nor anything quoted in 「」.
46
+ rewrite:
47
+ depth: light
48
+ ja:
49
+ direction: 抜けたもう一つの動作にも「〜たり」を付け、最後を「する」で閉じてください。並べるつもりが無ければ「〜たり」を外して「〜し、」でつなぎます。
50
+ pairs:
51
+ - before: 休日は本を読んだり、映画を見ます。
52
+ after: 休日は本を読んだり、映画を見たりします。
53
+ - before: 会議では資料を配ったり、意見を聞きました。
54
+ after: 会議では資料を配り、意見を聞きました。
55
+ keep:
56
+ - 並べた動作と、その順
57
+ avoid:
58
+ - 並べる動作を本文に無いもので足す
@@ -1,6 +1,6 @@
1
1
  id: teki-overuse
2
2
  layer: L3
3
- status: experimental
3
+ status: stable
4
4
  how_to_find: sentence-word-count
5
5
  word_list: teki-suffix
6
6
  requires: [pos]
@@ -45,6 +45,7 @@ level_meaning:
45
45
  ja: 一文の「〜的」{limit} 個まで
46
46
  en: up to {limit} 〜的 words in a sentence
47
47
  rewrite:
48
+ depth: light
48
49
  ja:
49
50
  direction: 「〜的」を、本文にある具体的な事柄(数、期間、対象、やり方)に置き換えてください。本文に無ければ作らず、「〜的」を一つ残すか、書き手に聞きます。
50
51
  pairs:
@@ -1,6 +1,6 @@
1
1
  id: title-case-consistency
2
2
  layer: L3
3
- status: experimental
3
+ status: stable
4
4
  how_to_find: title-case-mix
5
5
  languages: [en]
6
6
  severity: info
@@ -1,6 +1,6 @@
1
1
  id: title-length
2
2
  layer: L1
3
- status: experimental
3
+ status: stable
4
4
  how_to_find: title-length
5
5
  requires: [markdown]
6
6
  severity: info
@@ -50,6 +50,11 @@ by_genre:
50
50
  en: { strict: 14, normal: 18, relaxed: 22 }
51
51
 
52
52
  use_for: [blog, business, technical, docs, academic, legal, literature, speech]
53
+ off_for:
54
+ legal: "A statute or contract opens with its first article, and its titles are formal names."
55
+ literature: "A story or poem chooses its own opening and its own title."
56
+ speech: "An address or a transcript is titled by occasion (第221回国会における…演説) and opens as spoken."
57
+ docs/faq: "A question is the heading: its length is the reader's question, not a name to shorten."
53
58
 
54
59
  group: readability
55
60
  summary:
@@ -80,6 +85,7 @@ level_meaning:
80
85
  ja: 題や見出しが {limit} 文字を超えたら指摘
81
86
  en: reported when a title or heading runs past {limit} words
82
87
  rewrite:
88
+ depth: light
83
89
  ja:
84
90
  direction: 見出しを、その節が何かを言う名前だけに縮めてください。理由・条件・対象・日付は、見出しのすぐ下の最初の文に移します。
85
91
  pairs:
@@ -1,6 +1,6 @@
1
1
  id: topic-predicate-distance
2
2
  layer: L3
3
- status: experimental
3
+ status: stable
4
4
  how_to_find: topic-predicate-distance
5
5
  requires: [pos]
6
6
  languages: [ja]
@@ -24,6 +24,10 @@ how_to_fix:
24
24
 
25
25
  levels: { strict: 60, normal: 80, relaxed: 100 }
26
26
 
27
+ # 法令と契約は、主題の後に要件と例外を挟んでから述語を置く。既定の上限では group の文書の大半に出たので、測って上げた(spec §21.1)。
28
+ by_genre:
29
+ legal: { strict: 160, normal: 200, relaxed: 260 }
30
+
27
31
  use_for: [business, technical, blog, legal, docs, academic, literature, speech]
28
32
 
29
33
  group: readability
@@ -44,6 +48,7 @@ level_meaning:
44
48
  ja: 主題から述語まで {limit} 字まで
45
49
  en: up to {limit} characters between the topic and the predicate
46
50
  rewrite:
51
+ depth: light
47
52
  ja:
48
53
  direction: 主題(〜は)を述語の近くに動かすか、主題と述語の間に挟んだ説明を前の文に出してください。
49
54
  pairs:
@@ -1,6 +1,6 @@
1
1
  id: total-mismatch
2
2
  layer: L3
3
- status: experimental
3
+ status: stable
4
4
  how_to_find: total-mismatch
5
5
  requires: [quantities]
6
6
  severity: error
@@ -24,6 +24,8 @@ how_to_fix:
24
24
  levels: { normal: error, relaxed: warning }
25
25
 
26
26
  use_for: [business, technical, blog, legal, docs, academic, literature, speech]
27
+ off_for:
28
+ 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."
27
29
  sources: [de-marneffe-2008]
28
30
 
29
31
  group: facts
@@ -1,6 +1,6 @@
1
1
  id: translationese-density
2
2
  layer: L2
3
- status: experimental
3
+ status: stable
4
4
  how_to_find: phrase-density
5
5
  word_list: translationese
6
6
  uses: [pos]
@@ -27,6 +27,8 @@ how_to_fix:
27
27
  levels: { strict: 0, normal: 1, relaxed: 2 }
28
28
 
29
29
  use_for: [business, technical, blog, legal, docs, academic, literature, speech]
30
+ off_for:
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."
30
32
 
31
33
  group: ai-tells
32
34
  summary:
@@ -47,6 +49,7 @@ level_meaning:
47
49
  ja: 1000 字あたり翻訳調の言い回し {limit} 個まで
48
50
  en: up to {limit} translated phrasings per 1000 characters
49
51
  rewrite:
52
+ depth: light
50
53
  ja:
51
54
  direction: 英語の構文を写した言い回しを、日本語として素直な言い方に直してください。語彙表の語ごとの書き換え(〜を可能にする → 〜ができる)に従い、主語の「あなたは」「彼女は」は省くか名前で呼びます。書いてある事実は変えません。
52
55
  pairs:
@@ -1,8 +1,8 @@
1
1
  id: unbalanced-bracket
2
2
  layer: L1
3
- status: experimental
3
+ status: stable
4
4
  how_to_find: unbalanced-bracket
5
- severity: warning
5
+ severity: info
6
6
 
7
7
  name:
8
8
  ja: 括弧が組になっていない
@@ -31,7 +31,7 @@ how_to_fix:
31
31
  ja: 足りない括弧を足すか、余分な括弧を消してください。全角と半角は、開きと閉じをそろえてください。
32
32
  en: Add the missing bracket or remove the extra one. Make the opening and closing marks the same width.
33
33
 
34
- levels: { strict: error, normal: warning, relaxed: info }
34
+ levels: { strict: warning, normal: info, relaxed: info }
35
35
 
36
36
  use_for: [business, technical, blog, legal, docs, academic, literature, speech]
37
37