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,9 +1,9 @@
1
1
  id: heading-level-skip
2
2
  layer: L1
3
- status: experimental
3
+ status: stable
4
4
  how_to_find: heading-level-skip
5
5
  requires: [markdown]
6
- severity: warning
6
+ severity: info
7
7
 
8
8
  name:
9
9
  ja: 見出しの深さが飛んでいる
@@ -21,7 +21,7 @@ how_to_fix:
21
21
  ja: 一つ前の見出しより一段だけ深くしてください。文字の大きさを変えたいだけなら、深さではなく表示の設定で変えてください。
22
22
  en: Make the heading one level deeper than the one before it. If only the size on screen was the point, change the style instead of the level.
23
23
 
24
- levels: { strict: error, normal: warning, relaxed: info }
24
+ levels: { strict: warning, normal: info, relaxed: info }
25
25
 
26
26
  use_for: [business, technical, blog, legal, docs, academic, literature, speech]
27
27
 
@@ -1,9 +1,9 @@
1
1
  id: heading-numbering-mix
2
2
  layer: L1
3
- status: experimental
3
+ status: stable
4
4
  how_to_find: heading-numbering
5
5
  requires: [markdown]
6
- severity: warning
6
+ severity: info
7
7
 
8
8
  name:
9
9
  ja: 見出しの番号の付け方が揃っていない
@@ -42,7 +42,7 @@ placeholders:
42
42
  ja: 〇
43
43
  en: N
44
44
 
45
- levels: { strict: error, normal: warning, relaxed: info }
45
+ levels: { strict: warning, normal: info, relaxed: info }
46
46
 
47
47
  use_for: [business, technical, blog, legal, docs, academic, literature, speech]
48
48
 
@@ -114,6 +114,7 @@ not_flagged:
114
114
  ja: 兄弟が三つ未満の所、少ないほうと多いほうが同じ数の所、深さや親の違う見出しどうし(「1.」の下の「1.1」)は比べません。前後の見出し(目次、参考文献、付録)は兄弟に数えません。見出しの頭の数でも、区切りの記号の無い数(「2026年の計画」「3つの理由」)は番号と読みません。
115
115
  en: Fewer than three siblings, a tie between the two sides, and headings at different depths or under different parents ("1." and "1.1") are not compared. Front and back matter (Contents, References, Appendix) is not counted among the siblings. A number at the head of a heading without a separator ("2026 roadmap", "3 reasons") is not read as a heading number.
116
116
  rewrite:
117
+ depth: light
117
118
  ja:
118
119
  direction: 兄弟の見出しで、多いほうの番号の付け方に揃えてください。番号の無い見出しに番号を足すか、番号の書き方(1. と 1))を一つにします。見出しの言葉は変えません。
119
120
  pairs:
@@ -1,6 +1,6 @@
1
1
  id: hiragana-fukushi
2
2
  layer: L3
3
- status: experimental
3
+ status: stable
4
4
  how_to_find: phrase-match
5
5
  word_list: hiragana-fukushi
6
6
  uses: [pos]
@@ -26,6 +26,9 @@ how_to_fix:
26
26
  levels: { strict: 1, normal: 1, relaxed: 3 }
27
27
 
28
28
  use_for: [blog, business, technical, legal, docs, academic, literature, speech]
29
+ off_for:
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
+ speech/transcript: "A transcript records what was said: its sentences, repeats and register are the speaker's, not the writer's to fix."
29
32
 
30
33
  group: readability
31
34
  summary:
@@ -1,6 +1,6 @@
1
1
  id: homophone-slip
2
2
  layer: L2
3
- status: experimental
3
+ status: stable
4
4
  how_to_find: phrase-match
5
5
  word_list: homophone-slip
6
6
  requires: [pos]
@@ -26,6 +26,9 @@ how_to_fix:
26
26
  levels: { strict: 1, normal: 1, relaxed: 2 }
27
27
 
28
28
  use_for: [business, technical, blog, legal, docs, academic, literature, speech]
29
+ off_for:
30
+ literature: 'A narrator and a character speak as they speak: dialect ("would of"), "So," and hearsay are the voice.'
31
+ speech: "A transcript keeps the speaker's words: hedges and ら dropped as spoken."
29
32
 
30
33
  group: slips
31
34
  summary:
@@ -45,6 +48,7 @@ level_meaning:
45
48
  ja: 取り違えが {limit} 箇所あれば指摘
46
49
  en: reported once there are {limit}
47
50
  rewrite:
51
+ depth: light
48
52
  en:
49
53
  direction: Correct only the confused word, to the form the lexicon gives.
50
54
  pairs:
@@ -0,0 +1,63 @@
1
+ id: humble-for-others
2
+ layer: L3
3
+ status: stable
4
+ how_to_find: phrase-match
5
+ word_list: humble-for-others
6
+ uses: [pos]
7
+ languages: [ja]
8
+ severity: warning
9
+
10
+ name:
11
+ ja: 謙譲語を相手の動作に使っている
12
+ en: Humble form used for someone else's action
13
+
14
+ why:
15
+ ja: 謙譲語(伺う・拝見する・申す・参る)は、自分の側の動作を低めて相手を立てる語です。「伺ってください」「拝見してください」のように読み手の動作に使ったり、「申される」のように尊敬の「れる」を付けたりすると、読み手を低めることになり、失礼に読まれます。
16
+ en: Japanese humble verbs (伺う, 拝見する, 申す) lower the speaker's own side. Used for the reader's action (伺ってください) or dressed with an honorific (申される), they lower the reader instead.
17
+
18
+ message:
19
+ ja: 「{matched}」は謙譲語を相手の動作に使っています
20
+ en: '"{matched}" uses a humble verb for someone else''s action'
21
+
22
+ how_to_fix:
23
+ ja: 尊敬語に直してください。「伺ってください」は「お越しください」、「拝見してください」は「ご覧ください」、「申されました」は「おっしゃいました」です。
24
+ en: Use the honorific form instead (お越しください, ご覧ください, おっしゃいました).
25
+
26
+ levels: { strict: 1, normal: 1, relaxed: 2 }
27
+
28
+ use_for: [blog, business, legal, docs, academic, literature, speech]
29
+ off_for:
30
+ literature: "Dialogue keeps a character's keigo, mistakes and all."
31
+
32
+ group: wording
33
+ summary:
34
+ ja: 「伺ってください」「拝見してください」「申される」のように、謙譲語を読み手や第三者の動作に使った所
35
+ en: A Japanese humble verb used for the reader's or a third party's action (伺ってください, 申される)
36
+ example:
37
+ ja:
38
+ before: 資料は受付で拝見してください。
39
+ after: 資料は受付でご覧ください。
40
+
41
+ not_flagged:
42
+ ja: 一覧にある形だけを見ます。「伺われる」は「窺われる(うかがえる)」と同じ字になるので見ません。「お伺いください」「ご持参ください」のように認める手引きがある形も見ません。小説の台詞にはわざと崩した敬語があるので、文学のジャンルでは見ません。
43
+ en: Only the forms on chaff's list are checked. 伺われる is not, as it is also 窺われる ("can be seen"). Forms some guides accept (お伺いください) are not listed. Literature does not run this rule.
44
+ level_meaning:
45
+ ja: 当てはまる形が {limit} 箇所あれば指摘
46
+ en: reported once there are {limit}
47
+ rewrite:
48
+ depth: light
49
+ ja:
50
+ direction: 読み手や第三者の動作に使った謙譲語を、尊敬語に置き換えてください。頼む形は「お〜ください」「ご〜ください」にします。
51
+ pairs:
52
+ - before: 資料は受付で拝見してください。
53
+ after: 資料は受付でご覧ください。
54
+ - before: 部長が申されたとおりです。
55
+ after: 部長がおっしゃったとおりです。
56
+ - before: 内容をご確認してください。
57
+ after: 内容をご確認ください。
58
+ keep:
59
+ - 誰の動作か(主語)と、頼んでいる中身
60
+ - 自分の側の動作に使った謙譲語(「私が伺います」)
61
+ avoid:
62
+ - 自分の側の動作まで尊敬語にする
63
+ - 「ご覧になられる」のように、尊敬語を二重にする
@@ -0,0 +1,59 @@
1
+ id: hyphen-as-dash
2
+ layer: L1
3
+ status: stable
4
+ how_to_find: hyphen-dash
5
+ languages: [en]
6
+ severity: info
7
+
8
+ name:
9
+ ja: ダッシュの代わりのハイフン
10
+ en: Hyphen used as a dash
11
+
12
+ why:
13
+ ja: 英語で、空白で挟んだハイフン(late - very late)や二つ重ねたハイフン(late--very late)は、ダッシュ(— や –)の代わりです。ハイフンは語をつなぐ印なので、読み手は一瞬、語の一部かと迷います。
14
+ en: A spaced hyphen ("late - very late") or a double hyphen ("late--very late") stands in for a dash (— or –). A hyphen joins words, so the reader stops for a moment to see whether it is part of one.
15
+
16
+ message:
17
+ ja: 「{matched}」をダッシュの代わりに使っています
18
+ en: '"{matched}" stands in for a dash'
19
+
20
+ how_to_fix:
21
+ ja: ダッシュ(— か –)にするか、読点やコロンで書き直してください。
22
+ en: Use a dash (— or –), or rewrite with a comma or a colon.
23
+
24
+ levels: { strict: 1, normal: 1, relaxed: 3 }
25
+
26
+ use_for: [business, technical, blog, legal, docs, academic, literature, speech]
27
+ off_for:
28
+ literature: 'Older printed texts set the dash as "--" and titles in capitals.'
29
+
30
+ group: slips
31
+ summary:
32
+ ja: 英語で、ダッシュの代わりに、空白で挟んだハイフンや二重のハイフンを使った所
33
+ en: A spaced hyphen or a double hyphen standing in for a dash
34
+ example:
35
+ en:
36
+ before: |
37
+ The release is late - very late.
38
+ after: |
39
+ The release is late — very late.
40
+
41
+ not_flagged:
42
+ ja: 語と語のあいだのものだけを見ます。箇条書きの印の「- 」、数の範囲(1 - 2)、語の中のハイフン(well-known)、コードは見ません。文学の文書では既定で止めています(古い版がダッシュを「--」で組むため)。
43
+ en: Only between words. A list marker ("- "), a number range ("1 - 2"), a hyphen inside a word ("well-known") and code are not reported. The literature presets turn it off, since older printed texts set the dash as "--".
44
+ level_meaning:
45
+ ja: "{limit} 箇所あれば指摘"
46
+ en: reported once there are {limit}
47
+ rewrite:
48
+ depth: light
49
+ en:
50
+ direction: Replace the spaced or doubled hyphen with a dash, or rewrite the sentence with a comma or a colon. Use the dash the document already uses, if any.
51
+ pairs:
52
+ - before: The release is late - very late.
53
+ after: The release is late — very late.
54
+ - before: Two teams--sales and support--will attend.
55
+ after: Two teams (sales and support) will attend.
56
+ keep:
57
+ - the words on both sides
58
+ avoid:
59
+ - adding more dashes than the sentence had hyphens
@@ -1,6 +1,6 @@
1
1
  id: idiom-misuse
2
2
  layer: L3
3
- status: experimental
3
+ status: stable
4
4
  how_to_find: misuse-match
5
5
  word_list: idiom-misuse
6
6
  uses: [pos]
@@ -26,6 +26,8 @@ how_to_fix:
26
26
  levels: { strict: 1, normal: 1, relaxed: 2 }
27
27
 
28
28
  use_for: [blog, business, legal, docs, academic, literature, speech]
29
+ off_for:
30
+ literature: "Dialogue may misuse an idiom on purpose, to draw the speaker."
29
31
 
30
32
  group: wording
31
33
  summary:
@@ -43,6 +45,7 @@ level_meaning:
43
45
  ja: 当てはまる形が {limit} 箇所あれば指摘
44
46
  en: reported once there are {limit}
45
47
  rewrite:
48
+ depth: light
46
49
  ja:
47
50
  direction: 指摘された慣用句を、指摘が示す正しい形に置き換えてください。活用(得た→射た)と前後の語はそのまま残します。
48
51
  pairs:
@@ -0,0 +1,83 @@
1
+ id: image-file-name-alt
2
+ layer: L1
3
+ status: stable
4
+ how_to_find: image-file-name-alt
5
+ word_list: image-file-name
6
+ requires: [markdown]
7
+ severity: warning
8
+
9
+ name:
10
+ ja: 画像の代替テキストがファイル名
11
+ en: Image alt text is a file name
12
+
13
+ why:
14
+ ja: 「![IMG_1234.png](IMG_1234.png)」「![スクリーンショット 2026-04-01](a.png)」のように、代替テキストが画像のファイル名のままの所です。画像が読み込めないときと画面読み上げで読むときは代替テキストだけが画像の代わりに伝わりますが、ファイル名は何が写っているかを言いません。画像を貼った道具が名前を入れたまま残ったものがほとんどです。代替テキストが空の画像は image-alt-text が指します。
15
+ en: An image whose alt text is its file's name ("![IMG_1234.png](IMG_1234.png)", "![Screenshot 2026-04-01](a.png)"). When the image does not load, or a screen reader reads the page, the alt text is all that stands in for it, and a file name says nothing about what it shows. It is usually the name a tool put in when the image was pasted. An empty alt text is image-alt-text's.
16
+
17
+ message:
18
+ ja: 画像の代替テキスト「{alt}」はファイルの名前です
19
+ en: 'The image alt text "{alt}" is a file name'
20
+
21
+ how_to_fix:
22
+ ja: 画像が伝えることを一言で書いてください(![4月の売上の推移](IMG_1234.png))。
23
+ en: Write what the image shows in a few words ("![Sales by month, April](IMG_1234.png)").
24
+
25
+ levels: { strict: error, normal: warning, relaxed: info }
26
+
27
+ use_for: [business, technical, blog, legal, docs, academic, literature, speech]
28
+
29
+ group: structure
30
+ summary:
31
+ ja: 「![IMG_1234.png](…)」のように、代替テキストがファイル名のままの画像
32
+ en: An image whose alt text is a file name, as in "![IMG_1234.png](…)"
33
+ example:
34
+ ja:
35
+ before: |
36
+ 四月から六月の売上です。
37
+
38
+ ![IMG_2041.png](IMG_2041.png)
39
+ after: |
40
+ 四月から六月の売上です。
41
+
42
+ ![四月から六月の売上の推移](IMG_2041.png)
43
+ en:
44
+ before: |
45
+ Sales from April to June.
46
+
47
+ ![IMG_2041.png](IMG_2041.png)
48
+ after: |
49
+ Sales from April to June.
50
+
51
+ ![Sales from April to June](IMG_2041.png)
52
+
53
+ not_flagged:
54
+ ja: 画像の拡張子で終わらず、カメラや画面の撮影が付ける名前でもない代替テキスト(![構成図](diagram.png))は指しません。名前の始まりは言語の語彙表 image-file-name が言います。引用(>)とコードの中の画像も見ません。
55
+ en: Alt text that does not end in an image extension and does not start with a name a camera or screenshot tool gives ("![Architecture](diagram.png)") is not reported. The names are in the language's image-file-name lexicon. Images in quotations (>) and code are not read.
56
+ rewrite:
57
+ depth: light
58
+ ja:
59
+ direction: 代替テキストを、画像が伝えることを言う短い言葉に変えてください。画像のファイル名(パス)は変えません。何が写っているかが文から分からなければ、推し量らずに書き手に確かめます。
60
+ pairs:
61
+ - before: "![IMG_2041.png](sales-q2.png)"
62
+ after: "![四月から六月の売上の推移](sales-q2.png)"
63
+ - before: "![スクリーンショット 2026-04-01 10.12.03](settings.png)"
64
+ after: "![設定画面の通知の欄](settings.png)"
65
+ keep:
66
+ - 画像のパス
67
+ - 前後の文
68
+ avoid:
69
+ - 「画像」「図」「スクリーンショット」だけの言葉にする
70
+ - 写っていないものを推し量って書く
71
+ en:
72
+ direction: Replace the alt text with a few words that say what the image shows. Keep the image's path. If the text does not say what it shows, ask the writer rather than guess.
73
+ pairs:
74
+ - before: "![IMG_2041.png](sales-q2.png)"
75
+ after: "![Sales from April to June](sales-q2.png)"
76
+ - before: "![Screenshot 2026-04-01 at 10.12.03](settings.png)"
77
+ after: "![The notification options on the settings screen](settings.png)"
78
+ keep:
79
+ - the image's path
80
+ - the sentences around it
81
+ avoid:
82
+ - '"image", "picture" or "screenshot" as the whole alt text'
83
+ - describing what the image may not show
@@ -0,0 +1,79 @@
1
+ id: impossible-date
2
+ layer: L3
3
+ status: stable
4
+ how_to_find: impossible-date
5
+ severity: error
6
+
7
+ name:
8
+ ja: 暦に無い日付
9
+ en: A date the calendar does not have
10
+
11
+ why:
12
+ ja: 「2月30日」「4月31日」「2023年2月29日」のような日付は暦にありません。読み手は前の日か次の日か、月の書き違いかを確かめに行くことになり、予定や期限なら誰かが間違った日に動きます。月末を「31日」と決め打ちしたときや、うるう年の予定を使い回したときに起きます。月の長さとうるう年は暦で決まるので、機械で言えます。
13
+ en: A date such as "February 30", "April 31" or "2023-02-29" is not on the calendar. The reader has to find out whether the day before, the day after or another month was meant, and for a deadline someone acts on the wrong day. It happens when the end of a month is taken to be the 31st, or a leap-year schedule is reused. Month lengths and leap years are fixed by the calendar, so a machine can tell.
14
+
15
+ message:
16
+ ja: 「{written}」は暦にありません({month}月は{days}日まで)
17
+ en: '"{written}" is not on the calendar (that month has {days} days)'
18
+
19
+ messages:
20
+ day:
21
+ ja: 「{written}」は暦にありません({month}月は{days}日まで)
22
+ en: '"{written}" is not on the calendar (that month has {days} days)'
23
+ leap:
24
+ ja: 「{written}」は暦にありません(その年はうるう年でなく、2月は{days}日まで)
25
+ en: '"{written}" is not on the calendar (that year is not a leap year, so February has {days} days)'
26
+ month:
27
+ ja: 「{written}」は暦にありません(月は1から12まで)
28
+ en: '"{written}" is not on the calendar (months run from 1 to 12)'
29
+
30
+ how_to_fix:
31
+ ja: 正しい日付を確かめて直してください。月末のつもりなら、その月の最後の日(4月30日、2月28日)を書きます。
32
+ en: Check the date that was meant and correct it. For the end of a month, write that month's last day (30 April, 28 February).
33
+
34
+ levels: { normal: error, relaxed: warning }
35
+
36
+ use_for: [business, technical, blog, legal, docs, academic, literature, speech]
37
+
38
+ group: facts
39
+ summary:
40
+ ja: 「2月30日」「4月31日」「2023年2月29日」のように、暦に無い日付
41
+ en: A date the calendar does not have, such as "February 30", "April 31" or "2023-02-29"
42
+ example:
43
+ ja:
44
+ before: 申込みの締切は 4月31日 です。
45
+ after: 申込みの締切は 4月30日 です。
46
+ en:
47
+ before: Applications close on April 31.
48
+ after: Applications close on April 30.
49
+
50
+ not_flagged:
51
+ ja: 元号の年(令和5年)と年を書いていない日付は、うるう年を決められないので 2月29日を言いません。2026-13-45 や 2026/10/45 のような数字だけの並びは、番号や版のこともあるので、月が 1〜12、日が 31 までのときだけ月の長さと比べます。英語の月の名前の日付も、日が 31 までのときだけ見ます。コードの中は読みません。
52
+ en: For a year in a Japanese era, and for a date without a year, February 29 is not reported, since the leap year cannot be decided. A bare run of numbers such as 2026-13-45 may be an identifier or a version, so it is compared with the month's length only when the month is 1 to 12 and the day at most 31; a date with a month's name is likewise checked only up to the 31st. Code is not read.
53
+
54
+ rewrite:
55
+ depth: light
56
+ ja:
57
+ direction: 書き手が意図した日を確かめて、暦にある日付に直してください。月末のつもりなら、その月の最後の日を書きます。曜日を添えているなら、曜日も合わせて確かめます。
58
+ pairs:
59
+ - before: 締切は 4月31日 です。
60
+ after: 締切は 4月30日 です。
61
+ - before: 2023年2月29日に開催します。
62
+ after: 2023年2月28日に開催します。
63
+ keep:
64
+ - 意図した月と、前後の予定の順番
65
+ avoid:
66
+ - どの日が正しいか確かめずに、月末の日へ機械的に寄せる
67
+ - 曜日や「何日後」の数を直さずに残す
68
+ en:
69
+ direction: Find out which day was meant and write a date the calendar has. For the end of a month, write that month's last day. When a weekday is written beside it, check that too.
70
+ pairs:
71
+ - before: Applications close on April 31.
72
+ after: Applications close on April 30.
73
+ - before: The audit runs on 2023-02-29.
74
+ after: The audit runs on 2023-02-28.
75
+ keep:
76
+ - the month meant, and the order of the dates around it
77
+ avoid:
78
+ - moving the date to the month's last day without checking which day was meant
79
+ - leaving a weekday or a "three days later" that no longer matches
@@ -0,0 +1,76 @@
1
+ id: impossible-time
2
+ layer: L3
3
+ status: stable
4
+ how_to_find: impossible-time
5
+ severity: error
6
+
7
+ name:
8
+ ja: 時計に無い時刻
9
+ en: A time the clock does not have
10
+
11
+ why:
12
+ ja: 「午後13時」「13 PM」「10時75分」のような時刻は時計にありません。午後1時のつもりか13時のつもりか、分の書き違いか、読み手には分からず、集まる時刻を間違える人が出ます。24時間の書き方と午前・午後の書き方を混ぜたときや、打ち間違えたときに起きます。午前・午後を付けた時は12まで、分と秒は59までなので、機械で言えます。
13
+ en: A time such as "13 PM", "午後13時" or "10:75" is not on the clock. The reader cannot tell whether 1 PM or 13:00 was meant, or which minute, and someone turns up at the wrong time. It happens when the 24-hour clock and AM/PM are mixed, or a digit is mistyped. With AM or PM the hour runs to 12, and minutes and seconds to 59, so a machine can tell.
14
+
15
+ message:
16
+ ja: 「{written}」は時計にありません(午前・午後を付けた時は12まで)
17
+ en: '"{written}" is not a time (with AM or PM, the hour runs to 12)'
18
+
19
+ messages:
20
+ hour:
21
+ ja: 「{written}」は時計にありません(午前・午後を付けた時は12まで)
22
+ en: '"{written}" is not a time (with AM or PM, the hour runs to 12)'
23
+ minute:
24
+ ja: 「{written}」は時計にありません(分と秒は59まで)
25
+ en: '"{written}" is not a time (minutes and seconds run to 59)'
26
+
27
+ how_to_fix:
28
+ ja: 意図した時刻を確かめて直してください。午後1時なら「午後1時」か「13時」のどちらかで書き、二つを混ぜません。
29
+ en: Check the time that was meant and correct it. For one in the afternoon write "1 PM" or "13:00", not both at once.
30
+
31
+ levels: { normal: error, relaxed: warning }
32
+
33
+ use_for: [business, technical, blog, legal, docs, academic, literature, speech]
34
+
35
+ group: facts
36
+ summary:
37
+ ja: 「午後13時」「13 PM」「10時75分」のように、時計に無い時刻
38
+ en: A time the clock does not have, such as "13 PM", "午後13時" or "10:75"
39
+ example:
40
+ ja:
41
+ before: 説明会は午後13時から始めます。
42
+ after: 説明会は午後1時から始めます。
43
+ en:
44
+ before: The briefing starts at 13 PM.
45
+ after: The briefing starts at 1 PM.
46
+
47
+ not_flagged:
48
+ ja: 午前・午後を付けない「25:00」「26時」は、深夜の番組表のように24を超えて数える書き方があるので言いません。「Genesis 24:67」「Science, 12:75」のように頭が大文字の語や区切りの印の後ろの数、「1:75」のような縮尺や比、24を超える数に付いた pm(50 pm はピコメートル)は時刻と読みません。コードの中は読みません。
49
+ en: A time past 24 without AM or PM ("25:00") is not reported, since late-night schedules count on past midnight that way. Numbers right after a capitalised word or a punctuation mark ("Genesis 24:67", "Science, 12:75"), scales and ratios such as "1:75", and "pm" after a number above 24 (50 pm is picometres) are not read as times. Code is not read.
50
+
51
+ rewrite:
52
+ depth: light
53
+ ja:
54
+ direction: 書き手が意図した時刻を確かめて、時計にある時刻に直してください。午前・午後を付けるなら時は12までで、24時間で書くなら午前・午後を外します。
55
+ pairs:
56
+ - before: 説明会は午後13時から始めます。
57
+ after: 説明会は午後1時から始めます。
58
+ - before: 受付は9時75分までです。
59
+ after: 受付は9時45分までです。
60
+ keep:
61
+ - 意図した時刻と、前後の予定の順番
62
+ avoid:
63
+ - 午前・午後と24時間の書き方を一つの時刻に重ねる
64
+ - どの時刻が正しいか確かめずに数だけを変える
65
+ en:
66
+ direction: Find out which time was meant and write one the clock has. With AM or PM the hour runs to 12; on the 24-hour clock, drop AM and PM.
67
+ pairs:
68
+ - before: The briefing starts at 13 PM.
69
+ after: The briefing starts at 1 PM.
70
+ - before: Doors close at 10:75 sharp.
71
+ after: Doors close at 10:45 sharp.
72
+ keep:
73
+ - the time meant, and the order of the times around it
74
+ avoid:
75
+ - writing AM or PM on a 24-hour time
76
+ - changing the digits without checking which time was meant
@@ -1,6 +1,6 @@
1
1
  id: internal-jargon
2
2
  layer: L2
3
- status: experimental
3
+ status: stable
4
4
  how_to_find: internal-jargon
5
5
  word_list: internal-jargon
6
6
  severity: warning
@@ -1,6 +1,6 @@
1
1
  id: invisible-character
2
2
  layer: L1
3
- status: experimental
3
+ status: stable
4
4
  how_to_find: invisible-character
5
5
  severity: warning
6
6
 
@@ -1,6 +1,6 @@
1
1
  id: katakana-density
2
2
  layer: L3
3
- status: experimental
3
+ status: stable
4
4
  how_to_find: katakana-density
5
5
  # Katakana runs are read from the characters, so the rule needs no morphology. chaff.yaml の names に並べた名前は数えない。
6
6
  languages: [ja]
@@ -78,6 +78,7 @@ level_meaning:
78
78
  ja: カタカナ語が 1000 字あたり {limit} 語まで
79
79
  en: "katakana loanwords: up to {limit} per 1000 characters"
80
80
  rewrite:
81
+ depth: light
81
82
  ja:
82
83
  direction: 多いと示されたカタカナ語から、日本語で言えるものを言い換えてください。読み手が毎日使う用語と製品名は残します。
83
84
  pairs:
@@ -1,6 +1,6 @@
1
1
  id: katakana-long-vowel
2
2
  layer: L3
3
- status: experimental
3
+ status: stable
4
4
  how_to_find: katakana-long-vowel
5
5
  # 語は形態素解析で取る。複合語の中の「ユーザー」も一語として見る。品詞が無ければ動かない。
6
6
  requires: [pos]
@@ -1,6 +1,6 @@
1
1
  id: known-misspelling
2
2
  layer: L2
3
- status: experimental
3
+ status: stable
4
4
  how_to_find: known-correction
5
5
  word_list: known-misspelling
6
6
  uses: [pos]
@@ -50,6 +50,7 @@ not_flagged:
50
50
  ja: 語彙表にない誤りは指しません。どちらも使われる書き方(コンピュータ/コンピューター、エンターテイメント/エンターテインメント)は誤りとせず、表記ゆれの rule に任せます。語の途中の同じ字の並び(「ですすべて」)と、チームが names に並べた語は指しません。
51
51
  en: Misspellings not in the lexicon are not reported. Spellings that are both in use (British and American, judgement and judgment) are left to the consistency rules. A form inside a longer word ("teh" in "Tehran") and words listed under names in chaff.yaml are not reported.
52
52
  rewrite:
53
+ depth: light
53
54
  ja:
54
55
  direction: 指された語を語彙表の正しい形に直してください。直すのはその語だけで、文の言い回しは変えません。
55
56
  pairs:
@@ -1,6 +1,6 @@
1
1
  id: kutoten-consistency
2
2
  layer: L3
3
- status: experimental
3
+ status: stable
4
4
  how_to_find: kutoten-consistency
5
5
  languages: [ja]
6
6
  severity: warning
@@ -0,0 +1,58 @@
1
+ id: latin-abbreviation-form
2
+ layer: L1
3
+ status: stable
4
+ how_to_find: latin-abbreviation
5
+ word_list: latin-abbreviation
6
+ languages: [en]
7
+ severity: info
8
+
9
+ name:
10
+ ja: e.g. と i.e. のピリオドの欠け
11
+ en: e.g. or i.e. missing a period
12
+
13
+ why:
14
+ ja: 英語の「e.g.」「i.e.」は、ピリオドを全部付けるか(e.g.)、全部落とすか(eg、イギリスの官公庁の書き方)のどちらかです。一部だけ付けた「e.g」「eg.」は書き損じに見えます。略語は言語ごとの語彙表にあります。
15
+ en: '"e.g." and "i.e." take all their periods ("e.g.") or none ("eg", as GOV.UK writes it). With only some ("e.g", "eg.") they read as a slip. The abbreviations are listed in the lexicon.'
16
+
17
+ message:
18
+ ja: 「{matched}」はピリオドが一部だけです
19
+ en: '"{matched}" has some of its periods but not all'
20
+
21
+ how_to_fix:
22
+ ja: ピリオドを全部付けるか(e.g.)、全部落としてください(eg)。文書の中でほかに使っている形に合わせます。
23
+ en: Write all the periods ("e.g.") or none ("eg"), as the rest of the document does.
24
+
25
+ levels: { strict: 1, normal: 1, relaxed: 2 }
26
+
27
+ use_for: [business, technical, blog, legal, docs, academic, literature, speech]
28
+
29
+ group: slips
30
+ summary:
31
+ ja: 英語で、「e.g」「eg.」のように、e.g. と i.e. のピリオドが一部だけの所
32
+ en: '"e.g" or "eg." for "e.g.", and the same for "i.e."'
33
+ example:
34
+ en:
35
+ before: |
36
+ Bring a document, e.g a passport.
37
+ after: |
38
+ Bring a document, e.g. a passport.
39
+
40
+ not_flagged:
41
+ ja: ピリオドを全部落とした「eg」「ie」は、一つの書き方なので指しません。
42
+ en: '"eg" and "ie" with no periods are a house style and are not reported.'
43
+ level_meaning:
44
+ ja: "{limit} 箇所あれば指摘"
45
+ en: reported once there are {limit}
46
+ rewrite:
47
+ depth: light
48
+ en:
49
+ direction: Write the abbreviation with all its periods, or with none if the rest of the document writes it that way.
50
+ pairs:
51
+ - before: Bring a document, e.g a passport.
52
+ after: Bring a document, e.g. a passport.
53
+ - before: Use the short form, ie. the one on the card.
54
+ after: Use the short form, i.e. the one on the card.
55
+ keep:
56
+ - the rest of the sentence
57
+ avoid:
58
+ - replacing the abbreviation with a phrase the sentence did not have
@@ -1,9 +1,9 @@
1
1
  id: latin-spacing
2
2
  layer: L3
3
- status: experimental
3
+ status: stable
4
4
  how_to_find: latin-spacing
5
5
  languages: [ja]
6
- severity: warning
6
+ severity: info
7
7
  # 番号・識別子として書かれた数を見分けるのに、数の後ろの語の品詞を使う。無ければ全部数える。
8
8
  uses: [pos]
9
9
  # 番地(千代田区紀尾井町1-3)を、都道府県までの地名の後ろの範囲(東京都2-3 営業日)と分ける。
@@ -36,6 +36,10 @@ how_to_fix:
36
36
  # 何箇所違えば指摘するか。1 は「1 箇所でも混ざっていれば」。
37
37
  levels: { strict: 1, normal: 1, relaxed: 3 }
38
38
 
39
+ # 技術文書は、識別子やコマンド名の前後で空け方が揺れやすい。一箇所でも指すと group の文書の過半に出たので、測って上げた(spec §21.1)。
40
+ by_genre:
41
+ technical: { strict: 1, normal: 2, relaxed: 4 }
42
+
39
43
  use_for: [business, blog, technical, legal, docs, academic, literature, speech]
40
44
  sources: [koyobun-2022, jtf-style-guide]
41
45